原文: http://debugo.com/importtsv-load-data/?utm_source=tuicool&utm_medium=referral
Bulkload是向HBase批量加载数据的方式,它会直接将数据进行准备和并加载成HFile,并直接讲文件插入到RegionServer中,这比通过一个MapReduce/Spark作业来加载性能高得多。详细的流程如下:
1. 抽取数据并形成固定格式的文件,比如csv。
2. 将数据转换称为HFile。这需要一个MapReduce作业,可以自己来实现Map方法来,HBase来完成后面的Reducer操作。最后,每一个region的HFile将会在输出目录被创建出来。
3. 将生成的HFile加载到HBase中,并在所有的regionserver上注册它们,即完成Complete Bulkload阶段。
下面我们生成一个实验数据集:
|
Debugo
,
Beijing
Le
,
Shanghai
Sariel
,
Beijing
Elvis
,
Beijing
|
首先我们在HBase创建需要load进入的表:
|
>
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
作业的输出目录
先创建出输出目录,并上传数据。
|
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的输出目录,第二个参数是加载进的表名。
|
hbase
org
.
apache
.
hadoop
.
hbase
.
mapreduce
.
LoadIncrementalHFiles
/
user
/
yarn
/
output
user_info
|
进入HBase shell,检查bulkload的数据
|
>
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/
http://www.cnblogs.com/mumuxinfei/p/3823367.html