一般情况下,我们的数据来源是:RDBMS或日志文件。数据迁移常用方式:使用HBase Put方式、HBase自带MR方式、bulk load工具方式。
Java API操作HBase Put、自定义HBase MR两种方式,我们在前面已经使用过了,重点看一下importtsv、bulk load方式。
1.HBase使用importtsv导入数据
实际上类似与我们自己写的mapreduce程序迁移数据
# 1. 设置环境变量
export HBASE_HOME=/usr/hdp/2.5.3.0-37/hbase
export HADOOP_HOME=/usr/hdp/2.5.3.0-37/hadoop
export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath`
# 不使用mapredcp而使用classpath的原因是classpath中带有zookeeper需要加载的lib包
# export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`
# 2. 使用hbase自带的importtsv工具
# 第一行:执行jar包 第二行:被导入数据的hbase表列(默认文件格式制表符隔开)
# 第三行:hbase表 第四行:存放加载数据文件的hdfs目录
yarn jar /usr/hdp/2.5.3.0-37/hbase/lib/hbase-server-1.1.2.2.5.3.0-37.jar importtsv \
-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:address \
emp \
/user/hbase/importtsv
2.HBase使用bulk load导入数据
利用HBase数据信息以特定数据格式存放在HDFS上,直接在HDFS中生成HFile持久化数据文件,然后上传到合适位置,即:完成巨量数据快速入库。配合mapreduce完成,高效便捷,不占用region资源,在大数据量写入时能极大的提高写入效率,降低HBase节点写入的压力。
# 1. 设置HADOOP_CLASSPATH环境变量
export HBASE_HOME=/usr/hdp/2.5.3.0-37/hbase
export HADOOP_HOME=/usr/hdp/2.5.3.0-37/hadoop
export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath`
# 不使用mapredcp而使用classpath的原因是classpath中带有zookeeper需要加载的lib包
# export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`
# 2. 使用importtsv工具生成HFile文件
# 第一行:执行jar包 第二行:指定
yarn jar /usr/hdp/2.5.3.0-37/hbase/lib/hbase-server-1.1.2.2.5.3.0-37.jar importtsv \
-Dimporttsv.separator=, \
-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:address \
-Dimporttsv.bulk.output=/user/hbase/hfileoutput \
emp \
/user/hbase/importtsv
# 3. 使用hbase的MR工具completebulkload
# 将生成的hfile文件移动到hbase regions对应的hdfs路径,以完成hbase数据的加载
yarn jar /usr/hdp/2.5.3.0-37/hbase/lib/hbase-server-1.1.2.2.5.3.0-37.jar completebulkload \
/user/hbase/hfileoutput \
emp