0
点赞
收藏
分享

微信扫一扫

Sqoop导入数据到HIVE

胡桑_b06e 2022-02-12 阅读 85

第一步导入HDFS中,如果输出目录存在需要将输出目录从HDFS中删除。

第二步把数据迁移到hive中

案例一

默认输出到/user/root/下面,如果之前已经导入到HDFS,在导入前删除输出目录。

hadoop fs -rm -r /user/root/vehicle_name

执行以下命令:

sqoop import \
--connect jdbc:mysql://10.7.86.173:3306/duanjc \
--username duanjc \
--password 123456 \
--table vehicle_name \
--hive-import --m 1

其本质:先将数据导入到 HDFS上的​/user/root/vehicle_name​这个目录下面,然后将这个目录下的数据通过load的形式导人到hive表中,这里还没有指明对应的hive上的表名,那么它就会用mysql库中的表名。HDFS中对应的目录也会被删除

执行命令可能会出现:ERROR tool.ImportTool: Import failed: java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf

这个报错,解决方法是将Hive安装路径lib目录中的hive-common-*.jar包拷贝到sqoop的lib目录下即可。参考连接​​https://blog.51cto.com/u_15508216/5003320​​

[root@master bin]# hadoop fs -ls /user/root
[root@master bin]#

HDFS并没有/user/root/vehicle_name这个目录。

查看Hive

hive> show tables;
OK
records
vehicle_name
Time taken: 0.133 seconds, Fetched: 2 row(s)
hive> select * from vehicle_name;
OK
1 2 3
22 4 3
3 4 3
50d6394-e9qd-112eb-9c7a-030c2213e292 ca9er1102 c102
50d6394-e9qd-11fb-9c7a-030c2213e292 ca9er1102 c102
50d6394-e9qd-1beb-9c7a-030c2213e292 ca9er1102 c102
50d6394-e9qd-1deb-9c7a-030c2213e292 ca9er1102 c102
50d6394-e9qd-1f2eb-9c7a-030c2213e292 ca9er1102 c102
50dd394-e9qd-112eb-9c7a-030c2213e292 ca9er1102 c102
50f62f0e-e9fd-11eb-9c7a-000c2918e062 camera100 c100
50f63607-e9fd-11eb-9c7a-000c2918e062 camera101 c101
50f6394-e92d-112eb-9c7a-030c2218e062 camera102 c102
50f6394-e9fd-112eb-9c7a-030c2218e062 camera102 c102
50f6394-e9qd-112eb-9c7a-030c2213e292 ca9er1102 c102
50f6394-e9qd-112eb-9c7a-030c2218e062 camer1102 c102
50f6394-e9qd-112eb-9c7a-030c2218e262 camer1102 c102
50f6394-e9qd-112eb-9c7a-030c2218e292 camer1102 c102
50f6394d-e9fd-11eb-9c7a-000c2218e062 camera102 c102
50f6394d-e9fd-11eb-9c7a-000c2918e062 camera102 c102
50f6394d-e9fd-11eb-9c7a-030c2218e062 camera102 c102
50f63b40-e9fd-11eb-9c7a-000c2918e062 camera103 c103
Time taken: 0.446 seconds, Fetched: 21 row(s)

案例二

sqoop import \
--connect jdbc:mysql://master:3306/duanjc \
--username root \
--password 123456 \
--table vehicle_name \
--target-dir /tmp/vehicle_name \
--hive-table vehicle_name_test \
--hive-import --m 1

如果加​​--fields-terminated-by "\t"​​表示字段分割符

其本质:先将数据导入到HDFS上的​​/tmp/vehicle_name​​​这个目录下面,然后将这个目录下的数据通过​​load data inpath '/tmp/vehicle_name' into table vehicle_name_test​​ 导入到hive表中,此时对应的数据目录被删除!

查看hive

hive> show tables;
OK
records
vehicle_name
vehicle_name_test
Time taken: 0.056 seconds, Fetched: 3 row(s)
hive> select * from vehicle_name_test
> ;
OK
1 2 3
22 4 3
3 4 3
50d6394-e9qd-112eb-9c7a-030c2213e292 ca9er1102 c102
50d6394-e9qd-11fb-9c7a-030c2213e292 ca9er1102 c102
50d6394-e9qd-1beb-9c7a-030c2213e292 ca9er1102 c102
50d6394-e9qd-1deb-9c7a-030c2213e292 ca9er1102 c102
50d6394-e9qd-1f2eb-9c7a-030c2213e292 ca9er1102 c102
50dd394-e9qd-112eb-9c7a-030c2213e292 ca9er1102 c102
50f62f0e-e9fd-11eb-9c7a-000c2918e062 camera100 c100
50f63607-e9fd-11eb-9c7a-000c2918e062 camera101 c101
50f6394-e92d-112eb-9c7a-030c2218e062 camera102 c102
50f6394-e9fd-112eb-9c7a-030c2218e062 camera102 c102
50f6394-e9qd-112eb-9c7a-030c2213e292 ca9er1102 c102
50f6394-e9qd-112eb-9c7a-030c2218e062 camer1102 c102
50f6394-e9qd-112eb-9c7a-030c2218e262 camer1102 c102
50f6394-e9qd-112eb-9c7a-030c2218e292 camer1102 c102
50f6394d-e9fd-11eb-9c7a-000c2218e062 camera102 c102
50f6394d-e9fd-11eb-9c7a-000c2918e062 camera102 c102
50f6394d-e9fd-11eb-9c7a-030c2218e062 camera102 c102
50f63b40-e9fd-11eb-9c7a-000c2918e062 camera103 c103
Time taken: 0.518 seconds, Fetched: 21 row(s)


举报

相关推荐

0 条评论