一、实现功能
Kettle (三):mysql导入hive
使用kettle将mysql中的数据导入hive,从而实现数据迁移。
二、环境
1.Centos7.4
2.CDH5.7.0
3.Kettle 8.0
4.JDK1.8
三、Kettle中建立数据库连接
1. 建立mysql数据库连接
(1) 新建mysql_local的数据库连接
(2) 输入mysql对应的信息
(3) 点击“测试”,连接成功后,点击“确认”
2. 建立hadoop连接
(1) 新建hadoop连接
(2) 配置hdfs连接信息,因为暂时没有zookeeper和oozie等,所以不用配置
(3) 点击“测试”,会依据(2)中填写信息,回复连接结果
结果连接成功
3. 创建连接hive的连接
(1) 服务器开启hiveserver2,从而客户端连接hive
(2) 在hive根目录下
bin/hive --service hiveserver2
(3) 配置与kettle相关jar包
参考:https://blog.csdn.net/u010886217/article/details/89509323
(4) 新建hiveserver2的数据库连接
(5) 配置hiveserver2的相关信息
(6) 点击“测试”连接hive,成功后,点击“确定”保存连接
四、转换
1. 实现功能
(1) 在hive中创建mysql表对应的表结构
(2) 将mysql中表导出为txt格式,保存到hdfs临时目录
2. 创建mysql表输入
选择mysql数据库连接,并且选择需要转移的student表
3. 创建hive表输出步骤,完成建立对应表
(1)选择hive表连接和转移到hive中表的名称,点击SQL
(3) 修改自动生成的SQL语句
CREATE TABLE student_mysql
(
id INT, name STRING, age INT)
row format delimited fields terminated by ';'
;
(4) 单击“确定”,此时hive中建表成功。
(5) 使mysql-》hive的连接失效,从而不影响后续操作。
点击连线,使之变为灰色
4. mysql表导出为txt文档保存在hdfs
(1)引入“Hadoop file output”步骤
(2)输入hdfs相应信息,修改“文件”框
(3) 修改“内容”框
(4) 修改“字段”框
先点击“获取字段”,然后点击“最小宽度”,否则按照默认宽度,输出txt文件的文字宽度太大。
(5) 运行转换,使mysql表转换到hdfs上
结果:
五、创建job实现将txt文档转移hive的目录下
1. 创建job,拖入start、转换、Hadoop copy files组件
2. 修改“转换”,将四中的转换填写入
3. 修改“Hadoop copy files”组件
设置源文件路径和目标路径
4. 执行job
六、验证
1.启动hive
bin/hive
2.查询
hive (test)> select * from student_mysql;
OK
student_mysql.id student_mysql.name student_mysql.age
1 zhangsan 4
2 lisi 5
Time taken: 0.286 seconds, Fetched: 2 row(s)
hive (test)> select student_mysql.age from student_mysql;
OK
student_mysql.age
4
5
Time taken: 0.074 seconds, Fetched: 2 row(s)