Bulkload是向HBase批量加载数据的方式,它会直接将数据进行准备和并加载成HFile,并直接讲文件插入到RegionServer中,这比通过一个MapReduce/Spark作业来加载性能高得多。详细的流程如下:
1. 抽取数据并形成固定格式的文件,比如csv。
2. 将数据转换称为HFile。这需要一个MapReduce作业,可以自己来实现Map方法来,HBase来完成后面的Reducer操作。最后,每一个region的HFile将会在输出目录被创建出来。
3. 将生成的HFile加载到HBase中,并在所有的regionserver上注册它们,即完成Complete Bulkload阶段。
下面我们生成一个实验数据集:
1 2 3 4 |
Debugo,Beijing Le,Shanghai Sariel,Beijing Elvis,Beijing |
首先我们在HBase创建需要load进入的表:
1 2 3 |
> create 'user_info', 'city' 0 row(s) in 0.4310 seconds => Hbase::Table - user_info |
下面我们使用HBase中的importtsv类来处理。Importtsv作业接收下面几个参数:
-Dimporttsv.skip.bad.lines=false
– 若遇到无效行则失败
-Dimporttsv.separator=|
– 文件中代替tabs的分隔符
-Dimporttsv.columns=HBASE_ROW_KEY,city
输入行的格式
-Dimporttsv.timestamp=currentTimeAsLong
– 导入时使用指定的时间戳
-Dimporttsv.mapper.class=my.Mapper
– 使用用户指定的Mapper类来代替默认的
-Dimporttsv.bulk.output=/user/yarn/output
作业的输出目录
先创建出输出目录,并上传数据。
1 2 3 4 5 6 7 8 9 10 11 |
hdfs dfs -mkdir -p /user/yarn hdfs dfs -chown -R yarn:hadoop /user/yarn hdfs dfs -setfacl -R -m user:hbase:rwx /user/yarn hdfs dfs -put /var/lib/hadoop-yarn/user.txt /user/yarn # 下面执行importTsv,bulkload的相应的MapReduce作业会在后台启动。 hbase org.apache.hadoop.hbase.mapreduce.ImportTsv '-Dimporttsv.separator=,' -Dimporttsv.columns='HBASE_ROW_KEY,city' -Dimporttsv.bulk.output=/user/yarn/output user_info /user/yarn # 作业执行完成后,我们查看一下输出目录,相应列簇的HFile已经创建。 hdfs dfs -ls /user/yarn/output Found 2 items -rw-r--r-- 3 hbase hadoop 0 2015-03-10 18:46 /user/yarn/output/_SUCCESS drwxr-xr-x - hbase hadoop 0 2015-03-10 18:46 /user/yarn/output/city |
下面我们开始执行completeBulkload的操作,将生成的HFile注册到regionserver中。其中第一个参数是HFile的输出目录,第二个参数是加载进的表名。
1 |
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /user/yarn/output user_info |
进入HBase shell,检查bulkload的数据
1 2 3 4 5 6 7 8 |
> scan 'user_info' ROW COLUMN+CELL Debugo column=city:, timestamp=1425984345182, value=Beijing Elvis column=city:, timestamp=1425984345182, value=Beijing Le column=city:, timestamp=1425984345182, value=Shangha i Sariel column=city:, timestamp=1425984345182, value=Beijing 4 row(s) in 0.0390 seconds |
更多的信息请参见:
http://blog.cloudera.com/blog/2013/09/how-to-use-hbase-bulk-loading-and-why/
不错
是男L人L就L上的L网C战,A 片:htTP://uVU.Cc/ijW6
明明是无毛白虎馒头屄