数据导入

mysql

本地准备一张表

image-20200808142622403

弄点数据

image-20200808143045573

kettle

通过kettle导入数据到集群,先转换导入mysql数据

image-20200808143328090

双击这个表输入

image-20200808143543038

出现了一个界面,点击新建创建mysql连接

image-20200808143625585

点击下面的查询sql语句,然后如果你的mysql配置正确,就会出现数据库中表的选择

image-20200808143755228

选择是的,就会写出你的mysql中的具体字段,否就默认是 *

image-20200808143838000

不放心的可以点击下面的预览,直接查询出mysql的数据

image-20200808143937745

然后去核心对象的输出中,找到表输出

image-20200808144124386

把配置填好了,随便选一个你的hive数据库,然后准备在这里建表了,可以参考我的配置,下面依然有测试可以让你安心

image-20200808144835236

目标表你自己直接写一个名字,然后选择下面的sql,可以让kettle帮我们创建表

image-20200808145107472

我这里是添加了一个 名为dt的分区字段,注意分隔符的设置,要与你的数据库文件中的分割方式一致才行

image-20200808151049766

执行完毕后,会有日志信息,提示你成功后者失败

image-20200808151318270

之后,这个表输出就没有用了,我们可以选择删除它,然后选择直接输入到hdfs中

image-20200808152413663

设置你的集群继承kettle,这里不介绍了,然后设置输入到hdfs的具体位置image-20200808151938322

分隔符,编码格式,注意,下面的那个头部钩子要去掉,我这里贴图错误

image-20200808152455162

设置新增的字段,不要默认,可以按照我的配置

image-20200808152540339

生成在hdfs中的数据格式

image-20200808152858374

hive

刚刚是通过kettle创建了hive表,而且还将mysql数据导入了hdfs中,下面将hdfs中的数据导入hive

方法一:

生成的数据通过hive命令行直接导入,因为我用beeline链接的hive,所以是这样的格式

1
load data inpath '/lalian_test/ls01.txt' into table ls01 partition(dt='2020-01-01')

image-20200808155516910

方法二:

kettle输出可以直接输出到集群环境中的hive储存目录下,但是注意你要自己指定好分区,而且你创建的表必须是分区表

image-20200808165817603

数据写入到表中之后,表中查询没有数据,这是因为你的hdfs目录中有分区信息,但是hive的元数据中还没有,所以可以通过两种方式解决:

1
alter table  add if not exists partition(dt='2020-01-01') location '2020-01-01';
1
msck repair table 表名;