在sqoop的常用功能使用中,遇到的一些问题的解决方法
使用sqoop,进行MySQL与HDFS数据互导,MySQL与Hive数据互导 ,MySQL与HBase数据互导。
在学习sqoop这个工具的时候,由于自己是第一次接触这个工具,有很大一部分操作是想当然的去实施,导致自己走了不少弯路,花了很多时间,仍然没解决问题,后面,多方面参考资料,得以解决,为了后面不重蹈覆辙,打算做一次小笔记,这是第一次在网络上做笔记,必有诸多不足,但是我会慢慢补充的。下面是我学习sqoop工具时参考的博客和自己总结的一些细节。
参考博客原址:https://blog.csdn.net/qq_42881421/article/details/84783600
1.准备mysql数据:EMP表和DEPT表 。此处使用的是代码创建表,不能使用navicat for mysql工具导入,因为,我就是这样导入的,引起了不少不必要的错误。或许,也可以导入,只是我的方法不对吧。待后续明白了,再来补充。
2.MySQL 导入到 HDFS的语句:
$sqoop import --connect jdbc:mysql://10.90.26.101:3306/ua1 --username root -P --table EMP -target-dir /user/ua02/zhangsan -m 1
注意:
1)10.90.26.101为登录的IP, 我使用的是虚拟机远程登录本机,故此处的IP应为MySQL所在的电脑的IP,在终端使用ipconfig即可查看自己电脑的IP地址。(无线局域网适配器WLAN:IPv4地址:IP)
2)/user/ua02/zhangsan 其中ua02为用户名,zhangsan为目录名,可自定义。
3.HDFS导出到 MySQL:
先在MySQL建立一张表:create table EMP_HDFS_zhangsan like EMP;
到处语句:
$sqoop export --connect jdbc:mysql://10.90.26.101:3306/ua1 --table EMP_HDFS_zhangsan --export-dir /user/ua02/zhangsan/part-m-00000 --username ua1 -P -m 1
4.MySQL导入到Hive:(先导入两个包:hive-common-2.3.6.jar和derby jar,参考博客链接:https://blog.csdn.net/qq_42881421/article/details/103318166)
$sqoop import --connect jdbc:mysql://10.90.26.101:3306/ua1 --username root --password 123456 --table EMP --fields-terminated-by '\t' --num-mappers 1 --hive-database default --hive-import --hive-table hive_zhangsan
注意:
1)ua1为mysql的数据库名
2)hive_zhangsan为导入到Hive的表名,Hive的表名对大小写不敏感。
3)必须先导入两个包:hive-common-2.3.6.jar和derby jar,再次执行sqoop import导入语句。否则会产生更多的错。
5.HDFS导出到 MySQL的语句:
首先,查看hive表存储路径
hive> show create table hive_zhangsan;
然后,复制出hive表存储路径:
'hdfs://xdata-m0:8020/apps/hive/warehouse/hive_zhangsan'中的/apps/hive/warehouse/hive_zhangsan。
接着,再执行到处语句:
sqoop export --connect jdbc:mysql://10.90.26.101:3306/ua1 --username ua1 -P --table EMP_from_hive001 --export-dir /apps/hive/warehouse/hive_zhangsan/part-m-00000 --input-fields-terminated-by '\t'
6.MySQL 导入到HBase的语句:
首先,启动hdfs和hbase,命令:start-all.sh start-hbase.sh
接着,进入 hbase shell环境: hbase shell
建表,
导入语句:
$sqoop import --connect jdbc:mysql://10.90.26.101:3306/ua1 --username ua1 --password ua1 --table EMP --hbase-table EMP_HBASE --column-family EMPINFO --hbase-row-key empno
7.HBase---导出到--> MySQL
没有命令可以直接将 hbase 中的数据导出到 mysql。解决思路hbase-->HDFS-->mysql或hbase-->hive-->mysql。由于其他原因,还没来得及实践,后面有时间,再来补充上hbase导出到MySQL的内容。
8总结一下本次实践的失误点:
MySQL与Hive互导遇到的问题,因为一开始,前面说到的两个包没导入(即hive-common-2.3.6.jar和derby jar),接着我就照着HDFS的去改,所以导出导入命令就有问题,后面问查资料,把包导入了,但是导出导入命令还是原来的HDFS命令,因为我的HDFS导入导出是成功的,所以我坚信,这条导出导入语句是正确的,但是却忽略了这是不同的数据库 。最后,包对了,也用了hive专属的导出导入命令,对口了,结果就出来了。