第一步导入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)