参考:
http://hbase.apache.org/book/mapreduce.html
http://genius-bai.iteye.com/blog/641927
HBase 自带例子
hbase-0.20.3\src\test
计算表的总行数(org.apache.hadoop.hbase.mapreduce.RowCounter)
bin/hadoop jar /home/iic/hbase-0.20.3/hbase-0.20.3.jar rowcounter scores grade
结果
10/04/12 17:08:05 INFO mapred.JobClient: ROWS=2
对HBase的列进行Lucene索引(examples.TestTableIndex)
对表mrtest的列contents进行索引,使用lucene-core-2.2.0.jar,需把它加入类路径。把lucene-core-2.2.0.jar加入到examples.zip/lib目录下,同时代码中必须指定job.setJarByClass(TestTableIndex.class);不然lucene不识别
bin/hadoop fs -rmr testindex
bin/hadoop jar examples.zip examples.TestTableIndex
先从文件中产生适合HBase的HFiles文件,再倒入到Hbase中,加快导入速度
examples.TestHFileOutputFormat
输入的数据,由例子自动生成,其中Key是前面补0的十位数“0000000001”。
输出数据目录:/user/iic/hbase-hfile-test
bin/hadoop fs -rmr hbase-hfile-test
bin/hadoop jar examples.zip examples.TestHFileOutputFormat
加载生成的数据到Hbae中(要先安装JRuby,才能执行)
export PATH=$PATH:/home/iic/jruby-1.4.0/bin/
echo $PATH
vi bin/loadtable.rb
require '/home/iic/hbase-0.20.3/hbase-0.20.3.jar'
require '/home/iic/hadoop-0.20.2/hadoop-0.20.2-core.jar'
require '/home/iic/hadoop-0.20.2/lib/log4j-1.2.15.jar'
require '/home/iic/hadoop-0.20.2/lib/commons-logging-1.0.4.jar'
require '/home/iic/hbase-0.20.3/lib/zookeeper-3.3.0.jar'
require '/home/iic/hbase-0.20.3/lib/commons-cli-2.0-SNAPSHOT.jar'
$CLASSPATH <<'/home/iic/hbase-0.20.3/conf';
delete table "hbase-test"
jruby bin/loadtable.rb hbase-test /user/iic/hbase-hfile-test
查看其使用方式
(bin/hbase org.jruby.Main bin/loadtable.rb
Usage: loadtable.rb TABLENAME HFILEOUTPUTFORMAT_OUTPUT_DIR
其使用JRuby
)
注意:此种方式,必须解决几个问题
1:your MapReduce job ensures a total ordering among all keys ,by default distributes keys among reducers using a Partitioner that hashes on the map task output key。(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks
默认MR在使用默认的default hash Partitioner 分配Key给Reducer的时候,如果Key是0~4,有2个Task,则
reducer 0 would have get keys 0, 2 and 4 whereas reducer 1 would get keys 1 and 3 (in order).
则生成的Block里面的Start key 和 End Key次序讲混乱,
System.out.println((new ImmutableBytesWritable("0".getBytes())
.hashCode() & Integer.MAX_VALUE)
所以需要实现自己的Hash Partitioner ,生成the keys need to be orderd so reducer 0 gets keys 0-2 and reducer 1 gets keys 3-4 (See TotalOrderPartitioner up in hadoop for more on what this means).
验证导入的行数
bin/hadoop jar /home/iic/hbase-0.20.3/hbase-0.20.3.jar rowcounter hbase-test info
HFile生成例子2:
此种例子,只适合第一次海量导入数据,因为bin/loadtable.rb每次都替换所有的文件。
对于后续的数据操作,可以使用Map文本文件+Hbase Table直接操作Insert的功能。
或者保证新增加的Key跟原来没有冲突,按照bin/loadtable.rb的逻辑,添加新的Block。
生成1KW数据的test_1kw.log:0,content0,1271222976817
/home/bmb/jdk1.6.0_16/bin/java -cp examples.zip examples.CreateLogFile test_1kw.log 10000000
bin/hadoop fs -put test_1kw.log hadoop-performance-test
只用1个Reduce Task,避免Total Order Key的问题
bin/hadoop jar examples.zip examples.TestCreateHFileMR hadoop-performance-test hadoop-hbase-hfile-test 1
生成Hbase Hfile文件才花了一点时间,比性能测试生成1KW的HBase数据快了N多。
10/04/15 14:22:59--10/04/15 14:25:22
导入Hbase
jruby bin/loadtable.rb hbase-test2 hadoop-hbase-hfile-test
验证导入的行数
bin/hadoop jar /home/iic/hbase-0.20.3/hbase-0.20.3.jar rowcounter hbase-test2 info
其他HBase MapReduce例子
http://www.hadoop.org.cn/mapreduce/hbase-mapreduce/
http://www.spicylogic.com/allenday/blog/2008/08/28/hbase-bulk-load-import-example/
相关推荐
hadoop1.1.2操作例子 包括hbase hive mapreduce相应的jar包
hbase的mapreduce, 是Hbase权威指南上面的例子, 例7.1: MapReduce作业从一个文件中读取数据并写入Hbase表
幸运的是 HBase 带有批量加载功能,这个例子演示了它们是如何工作的。 HBase 批量加载过程包括两个步骤: 1. 通过 MapReduce 作业准备 HFile,以及2. 使用 LoadIncrementalHFiles.doBulkLoad 将 HFile 导入 HBase ...
幸运的是 HBase 带有批量加载功能,这个例子演示了它们是如何工作的。 HBase 批量加载过程包括两个步骤: 1. 通过 MapReduce 作业准备 HFile,以及2. 使用 LoadIncrementalHFiles.doBulkLoad 将 HFile 导入 HBase ...
2.2.3 从数据库中拉数据技术点4 使用MapReduce 将数据导入数据库 技术点5 使用Sqoop 从MySQL 导入数据 2.2.4 HBase 技术点6 HBase 导入HDFS 技术点7 将HBase 作为MapReduce 的数据源2.3 将数据导出...
一个导入的例子 生成代码 其他序列化系统 深入了解数据库导入 导入控制 导入和一致性 直接模式导入 使用导入的数据 导入的数据与Hive 导入大对象 执行导出 深入了解导出 导出与事务 ...
一个导入的例子 生成代码 其他序列化系统 深入了解数据库导入 导入控制 导入和一致性 直接模式导入 使用导入的数据 导入的数据与Hive 导入大对象 执行导出 深入了解导出 导出与事务 导出和SequenceFile 第16章 实例...
11.2 MapReduce和HBase 192 11.3 MapReduce和Apache Mahout 196 11.4 小结 197 第12章 使用Hive分析大数据 199 12.1 Hive基础 199 12.2 回到电影评分 203 12.3 亲切的SQL 209 12.4 HiveQL连接 211 12.4.1 ...
用Pig编程10.1 像Pig 一样思考10.1.1 数据流语言10.1.2 数据类型10.1.3 用户定义函数10.2 安装Pig10.3 运行Pig10.4 通过Grunt 学习Pig Latin...10.7.3 多查询执行10.8 Pig 实战——计算相似专利的例子10.9 小结第11 章...
10.5.3 关系型运算符 10.5.4 执行优化 10.6 用户定义函数 10.6.1 使用UDF 10.6.2 编写UDF 10.7 脚本 10.7.1 注释 10.7.2 参数替换 10.7.3 多查询执行 10.8 Pig 实战——计算相似专利的例子 10.9 小结 第...
18910.5.4 执行优化 19610.6 用户定义函数 19610.6.1 使用UDF 19610.6.2 编写UDF 19710.7 脚本 19910.7.1 注释 19910.7.2 参数替换 20010.7.3 多查询执行 20110.8 Pig实战——计算相似专利的例子 20110.9 小结 206第...
18910.5.4 执行优化 19610.6 用户定义函数 19610.6.1 使用UDF 19610.6.2 编写UDF 19710.7 脚本 19910.7.1 注释 19910.7.2 参数替换 20010.7.3 多查询执行 20110.8 Pig实战——计算相似专利的例子 ...
5.1 Spark应用程序例子 ................................................................................................ 20 5.2 Spark-submit语法 ............................................................