Sqoop的使用(Mysql To HBase)
最近需要将mysql的数据整合到HBase中,原本使用MapReduce,自己制作job将mysql的数据导入,
查阅资料过程中,发现了开源工具sqoop(关系性数据库与HDFS,HBASE,HIVE等)互相导入的工具,
于是准备尝试使用,看是否能够满足目前数据转移的需求。
sqoop import --connect jdbc:mysql://192.168.100.**/database --username user -P --table information --hbase-table information --column-family info --hbase-row-key market,label --columns market,label,name,py --hbase-create-table -m 1
--hbase-row-key market,label这个命令可以产生market_label格式的rowkey
采用命令的方式
sqoop import --connect jdbc:mysql://192.168.100.**/database --username user -P --query 'select a.market, a.label, DATE_FORMAT(b.datetime,"%Y%m%d%H%i%s") as time, b.open, b.high, b.low, b.close, b.volume, b.amount, b.advance, b.decline, b.position, b.turnover, b.openvolume, b.openamount from stockdata_history_dayone as b join stock_information as a on a.stockid = b.stockid where $CONDITIONS limit 10' --hbase-table stockdata_history_dayone --column-family info --hbase-row-key market,label,time --hbase-create-table -m 1
问题1:
ERROR security.UserGroupInformation: PriviledgedActionException ...
导致这个问题,主要是权限问题,使用的user没有在目标路径下创建有权限的文件夹
sudo -u hdfs hadoop fs -mkdir /user/user
sudo -u hdfs hadoop fs -chown user:user /user/user
(/user文件夹是在sqoop没有指明文件路径情况下的默认路径)
问题2:
Could not insert row with null value for row-key column:
这个问题,可能是由于使用的问题,在columns中需要指明row-key用到的列