使用ImportTsv来进行批量数据导入

前期准备,hadoop需要开启MapReduce

第一种方法
一、操作步骤
1、创建tsv文件,文件格式如下
abc|siaogi
sss|gaiogo

2、将tsv文件put到hdfs中
./bin/hdfs dfs -put a.tsv /tmp/a.tsv

3、使用ImportTsv来进行导入

1
./bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator='|' -Dimporttsv.columns=HBASE_ROW_KEY,cf:a t /tmp/a.tsv

如果使用客户端,在hbase的conf下面建了一个yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>hostname:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hostname:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hostname:8031</value>
</property>
</configuration>

把这些拷进去就可以了

1
sudo -uhadoop ./bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,contact_info:pc user_tag1 /home/q/user_tag/user_test.tsv

二、线上导入的案例命令

表结构为create 'algo_router:user_tag',{NAME => 'contact_info'},{NAME => 'contact_tag'}
导入语句为

1
./bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,contact_info:rate,contact_info:price,contact_tag:tag 'algo_router:user_tag' /temp/user_tag.tsv

第二种方法(先生成HFILE文件再导入)
假设datatsv,数据如下
row1,a,c
row2,c,d

生成HFILE文件

1
./bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,cf:c1,cf:c2 -Dimporttsv.bulk.output=/output table_pucong hdfs://mycluster:8020/tmp/datatsv

执行完结果显示

1
2
3
4
./bin/hdfs dfs -ls /output
Found 2 items
rw-rr- 1 hadoop supergroup 0 2015-08-10 22:08 /output/_SUCCESS
drwxr-xr-x - hadoop supergroup 0 2015-08-10 22:08 /output/cf

将生成的FILE文件转移成hbase的table

1
./bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://mycluster:8020/output table_pucong