一直想利用kettle工具实现直接连接hive和mysql操作数据,在踩过很多坑后终于实现,故记录分享。
软件环境:
Hadoop-2.7.1(单机)、apache-hive-2.3.5-bin、MySQL-5.6.1、pdi-ce-7.1.0.0-12(kettle)
一、首先需要配置hiveserver2并开启hive2客户端,kettle才能连接到hive。
①、配置hive-site.xml文件,在hive-site.xml中添加一下内容
hive.cli.print.header true hive.server2.thrift.port 10000 hive.server2.thrift.bind.host 192.168.133.135
②、启动Hadoop,通过jps查看进程
③、开启hiveserver2,输入命令hiveserver2 或者 hive --service hiveserver2(开启hive的命令是:hive)
hiveserver2 或者 hive --service hiveserver2
如果出现以下xshell内容,别慌张,正常现象,因为启动了一个服务
jps查看进程,发现多了RunJar,即为hiveserver2服务
④、重开一个xshell窗口,输入:beeline(Hive新的命令行客户端工具, 替代HiveCLI
),记得手写输入beeline,拷贝进去可能出现-bash: Beeline: command not found的情况。beeline
⑤、连接10000端口,输入用户和密码进入hive客户端!connect jdbc:hive2://192.168.133.135:10000
⑥、测试使用show databases 和 其他命令查看数据库内容
⑦、浏览器输入:http://192.168.133.135:10002/ 查看hive使用情况
二、kettle连接hive和mysql
①、新建一个转换,表输入端选择连接hive,设置处填写参数
②、完毕后点击测试,如果各项参数都正确,那么连接成功,
③、编写SQL,点击预览,成功展示hive数据库中的数据
注、需要将hive的驱动包拷贝到C:\kettle\data-integration\lib下,否则报以下错误,mysql驱动包也是。
三、hive数据插入mysql
①、在mysql数据库中间一张表,字段类型自由指定
CREATE TABLE `coordinate` (
`code` varchar(50) DEFAULT NULL COMMENT '编码',
`name` varchar(50) DEFAULT NULL COMMENT '城市名称',
`longitude` double DEFAULT NULL COMMENT '经度',
`latitude` double DEFAULT NULL COMMENT '维度'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
②、kettle的插入更新端连接mysql数据库,选择目标表,并指定字段的映射关系(流里的字段代表hive库字段,更新的字段代表mysql库字段)
③、点击窗口运行和启动按钮
④、运行成功
⑤、查看mysql数据并与hive数据做对比,一致。
至此,步骤完成。