先配置hbase和hadoop的环境变量,因为它是使用命令执行mapreduce程序,环境变量只是临时用一下,不用永久配置到/etc/profile里面,执行export命令就是在当前会话中可以使用这个环境变量.
执行环境变量导入
$ export HBASE_HOME=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6/
$ export HADOOP_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6
$ export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`
案例一:统计person表中有多少行数据,也就是有多少个rowkey


/opt/modules/hadoop-2.5.0-cdh5.3.6/bin/yarn jar lib/hbase-server-0.98.6-cdh5.3.6.jar rowcounter person
执行的时候查看yarn客户端就会发现执行了一个mapreduce程序

就会把结果打印在控制台上

案例二:使用MapReduce任务将数据从文件中导入到HBase
先说两种文件格式,tsv和csv,它们两个都可以使用excel打开
使用文本编辑这两个文件的时候,在tsc里面使用/t分隔符分开,在csv里使用逗号分隔开,然后就可以转换为excel格式





创建一个tsv文件

在HBase创建一个表,因为这个mapreduce程序不会自动创建表

然后把新创建的文件放到hdfs上面去,因为它是要从hdfs上读的


执行MapReduce到HBase的fruit表中
如果是csv文件就改为importcsv
下面这个是指定哪个字段为什么列名
-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:color

/opt/modules/hadoop-2.5.0-cdh5.3.6/bin/yarn jar lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:color fruit hdfs://hadoop-senior01.buba.com:8020/input/fruit

下面这图是它的一个执行流程,当大批量数据转换的时候造成的压力会很大,从tsv文件转换为HFile的这个过程很慢,HFile跟HBase表的映射快.

优化方案:BulkLoad加载文件到HBase表
原理
BulkLoad会将tsv/csv格式的文件编程hfile文件,然后再进行数据的导入,这样可以避免大量数据导入时造成的集群写入压力过大。
作用
* 减小HBase集群插入数据的压力
* 提高了Job运行的速度,降低了Job执行时间
操作过程

把tsv文件转换为HFile文件
-Dimporttsv.bulk.output 输出文件指定路径

/opt/modules/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/modules/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv -Dimporttsv.bulk.output=/output/furit -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:color fruit hdfs://hadoop-senior01.buba.com:8020/input/fruit/

把HFile导入到HBase表fruit_bulkload
执行下面这个mapreduce的时候明显感觉到速度提升很大,以后推荐使用这种方式,转换弄几台服务器干转换的工作.

/opt/modules/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/modules/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar completebulkload /output/furit fruit_bulkload
