本次主要是采用hbase自带的importtsv工具来导入。首先要把数据文件上传到hdfs上,然后导入hbase表格。该导入方式只支持.tsv数据文件的导入。
导入流程:
1.下载数据。我们在本文中将使用 “美国国家海洋和大气管理局 气候平均值”的公共数据集合。访问http://www1.ncdc.noaa.gov/pub/data/normals/1981-2010/下载。 我们使用在目录 products | hourly 下的小时温度数据(可以在上述链接页面中找到)。下载hly-temp-10pctl.txt文件。
2.用Python脚本将其处理,添加rowkey,并且处理成.tsv文件。Python脚本见:https://github.com/uprush/hac-book/blob/master/2-data-migration/script/to_tsv_hly.py,脚本内容有待进一步学习研究。
3.第三部就是创建用户hac,用于运行job;建议在生产环境如此实施。为了能够从客户端运行MapReduce Job,你需要将${hadoop.tmp.dir}目录的写权限开放给客户端的hac用户,我这里是/tmp下面的,具体的话还是见配置文件,最好是把目录建立在/usr/hadoop/tmp下面。
1
2
|
root@client1
# usermod -a -G hadoop hac
root@client1
# chmod -R 775 /tmp
|
这里如果还不行的话,就直接chmod a+w /tmp
在HDFS中为hac用户建立主文件夹:
1
2
|
hadoop@client1$ $HADOOP_HOME
/bin/hadoop
fs -
mkdir
/user/hac
hadoop@client1$ $HADOOP_HOME
/bin/hadoop
fs -
chown
hac
/user/hac
|
并且同时也确认hac用户在HDFS中的MapReduce的临时目录中也有写权限:$HADOOP_HOME
/bin/hadoop
fs -
chmod
-R 775
/usr/local/hadoop/var/mapred我这里这个目录是不存在的,我是建好了以后又修改的权限。
4.接下来就是将.tsv文件上传到hdfs了,hadoop
fs -
mkdir
/usr/hac/input 建立hdfs上文件的存放位置,
hadoop
fs -copyFromLocal /usr/hadoop/hly-temp-10pctl.tsv
/usr/hac/input 完了以后可以查看一下hadoop fs -ls /usr/hac/input,有的话上传成功。
5.接下来建表create
'hly_temp'
, {NAME =>
't'
, VERSIONS => 1}
6.使用hac用户运行importtsv工具,执行如下脚本:hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,t:v01,t:v02,t:v03,t:v04,t:v05,t:v06,t:v07,t:v08,t:v09,t:v10,t:v11,t:v12,t:v13,t:v14,t:v15,t:v16,t:v17,t:v18,t:v19,t:v20,t:v21,t:v22,t:v23,t:v24 hly_temp /usr/hac/input
过程中显示map **%,reduce 0%等等
7.验证:count
'hly_temp'
95630 row(s)
in
12.2020 seconds
scan
'hly_temp'
, {COLUMNS =>
't'
, LIMIT => 10}
AQW000617050110 column=t:v23,
timestamp=1322959962261, value=781S
AQW000617050110 column=t:v24,
timestamp=1322959962261, value=774C
10 row(s)
in
0.1850 seconds
本文详细过程见:http://www.importnew.com/3645.html
还有一本伟大的书:HBase Administration Cookbook