使用Sqoop发现hcatalog-does-not-exist和table-does-not-exist

前置背景

昨天天气挺好的,恰同学来京玩,我陪他去故宫溜达了一圈,话说每次同学来京,我都会陪他们去故宫游玩,多次有余。对于故宫,我早已没有最初的新鲜感,同学倒是不亦乐乎, 到处拍照留恋,吊古感今。不过有意思的是,今年的延禧攻略火了,然后我今天我也在故宫留意到了这个叫做延禧宫的宫殿,宫殿不大,有欧式建筑,我最后再附图。好了不多说了,干正事!

晚上我在家准备用Sqoop把mysql数据库中的一些数据导入到linux上,通过集群计算跑一个需求,但是命令报错了,伪命令如下:
sqoop import -connect jdbc:mysql://localhost:3306/sztest -username root -password 112358 -table tbl_demo -hive-import -hive-table tbl_demo1 -m 1

(ps:sqoop命令中-m参数是一个坑,大家可以看看我对应的文章,浅析sqoop底层和调优,欢迎踩坑!)

异常:
Warning: //opt/module/sqoop/…/hcatalog does not exist! HCatalog jobs will fail
ERROR manager.SqlManager: Error executing statement: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘test.tbl_demo’ doesn’t exist

开始找问题

其实这个ERROR明确指出了,我test数据库下面没有tbl_demo这张表,但是我发现我mysql数据库的test库下是存在这张表的,而且表中也是有数据的,这我就很奇怪了,然后我就考虑“hcatalog does not exist”是什么东西?

HCatalog是Hadoop的表存储管理工具。它将Hive Metastore的表格数据公开给其他Hadoop应用程序。使得具有不同数据处理工具(Pig,MapReduce)的用户能够轻松将数据写入网格。它确保用户不必担心数据存储在何处或以何种格式存储。从版本Hive-0.11.0开始,HCatalog随附Hive自动安装。
我在网上搜索了一些关于HCatalog的资料,一些说如果它警告的话,修改$SQOOP_HOME/bin 目录下的configure-sqoop文件,注释掉一些关于HCatalog的内容,这样他就不警告了,但是这种办法似乎没什么用,并没有解决我的问题。

原来如此

找了好多关于HCatalog的,也修改了/etc/profile环境变量,还是有问题,兜兜转转又回到了sqoop脚本上,原来,我之前用的mysql是window上面的mysql,IP地址的映射名并不是localhost,但是sqoop这里连接的是本地(linux系统)的mysql,所以我需要在本地环境下配置相应的数据库和相应的表,因为本地环境下没有,所以报错,table-does-not-exist异常,错误虽然很简单,但是确实也费了一些时间才找到根源,这里总结一下,以后遇到问题,还是多从ERROR出着手,不要直观的相信自己看到的假象,相信潜意识的东西!

后面我把window下面mysql中的数据迁移到了linux本地对应的mysql数据库,然后使用sqoop命令,就OK啦!

window下mysql数据迁移到linux本地,见我的文章~~~将mysql数据从window迁移到linux中

你可能感兴趣的:(sqoop)