首页 > 其他分享 >HBase 之HFileOutputFormat

HBase 之HFileOutputFormat

时间:2023-09-21 10:03:15浏览次数:52  
标签:hadoop HFileOutputFormat job import apache org HBase hbase


 hadoop mr 输出需要导入hbase的话最好先输出成HFile格式, 再导入到HBase,因为HFile是HBase的内部存储格式, 所以导入效率很高,下面是一个示例
1. 创建HBase表t1


1. hbase(main):157:0* create 't1','f1' 
2. 0 row(s) in 1.3280 seconds 
3.  
4. hbase(main):158:0>
5. ROW                   COLUMN+CELL                                                
6. 0 row(s) in 1.2770 seconds

2.写MR作业
HBaseHFileMapper.java


1. package com.test.hfile; 
2. import java.io.IOException; 
3. import org.apache.hadoop.hbase.io.ImmutableBytesWritable; 
4. import org.apache.hadoop.hbase.util.Bytes; 
5. import org.apache.hadoop.io.LongWritable; 
6. import org.apache.hadoop.io.Text; 
7. import org.apache.hadoop.mapreduce.Mapper; 
8.  
9. public class HBaseHFileMapper extends Mapper<LongWritable, Text, ImmutableBytesWritable, Text>
10. immutableBytesWritable = new
11.     @Override 
12.     protected void map(LongWritable key, Text value, 
13.             org.apache.hadoop.mapreduce.Mapper.Context context) 
14.             throws IOException, InterruptedException { 
15.         immutableBytesWritable.set(Bytes.toBytes(key.get())); 
16.         context.write(immutableBytesWritable, value); 
17.     } 
18. }

HBaseHFileReducer.java

1. package com.test.hfile; 
2. import java.io.IOException; 
3. import org.apache.hadoop.hbase.KeyValue; 
4. import org.apache.hadoop.hbase.io.ImmutableBytesWritable; 
5. import org.apache.hadoop.hbase.util.Bytes; 
6. import org.apache.hadoop.io.Text; 
7. import org.apache.hadoop.mapreduce.Reducer; 
8.  
9. public class HBaseHFileReducer extends Reducer<ImmutableBytesWritable, Text, ImmutableBytesWritable, KeyValue>
10. <Text>
11.             Context context) 
12.             throws IOException, InterruptedException { 
13. value=""; 
14.         while(values.iterator().hasNext()) 
15.         { 
16. value = values.iterator().next().toString(); 
17.             if(value != null && !"".equals(value)) 
18.             { 
19. kv = createKeyValue(value.toString()); 
20.                 if(kv!=null) 
21.                     context.write(key, kv); 
22.             } 
23.         } 
24. row:family:qualifier:value 简单模拟下
25.     private KeyValue createKeyValue(String str) 
26.     { 
27. strstrs
28. <4) 
29.             return null; 
30. row=strs[0]; 
31. family=strs[1]; 
32. qualifier=strs[2]; 
33. value=strs[3]; 
34.         return new KeyValue(Bytes.toBytes(row),Bytes.toBytes(family),Bytes.toBytes(qualifier),System.currentTimeMillis(), Bytes.toBytes(value)); 
35.     } 
36. }

HbaseHFileDriver.java

1. package com.test.hfile; 
2. import java.io.IOException; 
3. import org.apache.hadoop.conf.Configuration; 
4. import org.apache.hadoop.fs.Path; 
5. import org.apache.hadoop.hbase.HBaseConfiguration; 
6. import org.apache.hadoop.hbase.client.HTable; 
7. import org.apache.hadoop.hbase.io.ImmutableBytesWritable; 
8. import org.apache.hadoop.hbase.mapreduce.HFileOutputFormat; 
9. import org.apache.hadoop.io.Text; 
10. import org.apache.hadoop.mapreduce.Job; 
11. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
12. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
13. import org.apache.hadoop.util.GenericOptionsParser; 
14.  
15. public class HbaseHFileDriver { 
16.     public static void main(String[] args) throws IOException, 
17.             InterruptedException, ClassNotFoundException { 
18.          
19. conf = new
20. otherArgs = new
21.  
22. job = new
23.         job.setJarByClass(HbaseHFileDriver.class); 
24.  
25.         job.setMapperClass(com.test.hfile.HBaseHFileMapper.class); 
26.         job.setReducerClass(com.test.hfile.HBaseHFileReducer.class); 
27.  
28.         job.setMapOutputKeyClass(ImmutableBytesWritable.class); 
29.         job.setMapOutputValueClass(Text.class);  
30.   // 偷懒, 直接写死在程序里了,实际应用中不能这样, 应从命令行获取
31. /home/yinjie/input")); 
32. /home/yinjie/output")); 
33.  
34. HBASE_CONFIG = new
35.         HBASE_CONFIG.set("hbase.zookeeper.quorum", "localhost"); 
36.         HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181"); 
37. cfg = new
38. tableName = "t1"; 
39. htable = new
40.         HFileOutputFormat.configureIncrementalLoad(job, htable); 
41.  
42.         System.exit(job.waitForCompletion(true) ? 0 : 1); 
43.     } 
44. }

/home/yinjie/input目录下有一个hbasedata.txt文件,内容为


1. [root@localhost input]# cat hbasedata.txt  
2. r1:f1:c1:value1 
3. r2:f1:c2:value2 
4. r3:f1:c3:value3

将作业打包,我的到处路径为/home/yinjie/job/hbasetest.jar
提交作业到hadoop运行:


1. [root@localhost job]# hadoop jar /home/yinjie/job/hbasetest.jar com.test.hfile.HbaseHFileDriver -libjars /home/yinjie/hbase-0.90.3/hbase-0.90.3.jar

作业运行完毕后查看下输出目录:

1. [root@localhost input]# hadoop fs -ls /home/yinjie/output 
2. Found 2 items 
3. drwxr-xr-x   - root supergroup          0 2011-08-28 21:02 /home/yinjie/output/_logs 
4. drwxr-xr-x   - root supergroup          0 2011-08-28 21:03 /home/yinjie/output/f1

OK, 已经生成以列族f1命名的文件夹了。
接下去使用Bulk Load将数据导入到HBbase

1. [root@localhost job]# hadoop jar /home/yinjie/hbase-0.90.3/hbase-0.90.3.jar completebulkload /home/yinjie/output t1

导入完毕,查询hbase表t1进行验证

1. hbase(main):166:0>
2. ROW                              COLUMN+CELL                                                                                  
3. column=f1:c1, timestamp=1314591150788, value=value1
4. column=f1:c2, timestamp=1314591150814, value=value2
5. column=f1:c3, timestamp=1314591150815, value=value3
6. 3 row(s) in 0.0210 seconds

数据已经导入!
 

本文出自 “炽天使” 博客,请务必保留此出处http://3199782.blog.51cto.com/3189782/652244

标签:hadoop,HFileOutputFormat,job,import,apache,org,HBase,hbase
From: https://blog.51cto.com/u_16255870/7548713

相关文章

  • hadoop,hbase,hive安装全记录
    操作系统:CentOS5.5Hadoop:hadoop-0.20.203.0jdk1.7.0_01namenode主机名:master,namenode的IP:10.10.102.15datanode主机名:slave1,datanode的IP:10.10.106.8datanode主机名:slave2,datanode的IP:10.10.106.9一、hadoop安装1、建立用户useraddhadooppasswdhadoop2.安装JDK*先查......
  • 把xls的数据导到Hbase
    这属于Hbase的一个例子,不过Hbase的例子有点问题,需要更改下。其实我感觉Hbase属于一个BigTable,感觉和xls真的很像,闲话不说了,上code才是王道。Java代码importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;i......
  • Hbase--执行hbase shell命令时提示:ERROR: KeeperErrorCode = NoNode for /hbase/mast
    1、问题描述执行hbase shell命令时提示:ERROR:KeeperErrorCode=NoNodefor/hbase/master2、问题原因这是与因为服务器重启后Hadoop的运行和Hbase的运行异常。3、解决办法依次去停止和启动Hadoop(1)到hadoop的sbin目录下 ./stop-all.sh(2)再./start-all.sh(3)再到hbase的b......
  • Hbase Shell的常用命令
    总结的一些Hbaseshell的命令都很简单,可以help来查看帮助create'user_test','info'describe'user_test'disable'user_testinfo'drop'user_testinfo'put'user_test','test-1','info:username','test1......
  • HFile详解-基于HBase0.90.5
    1.HFile详解HFile文件分为以下六大部分 序号名称描述1数据块由多个block(块)组成,每个块的格式为:[块头]+[key长]+[value长]+[key]+[value]。2元数据块元数据是key-value类型的值,但元数据快只保存元数据的value值,元数据的key值保存在第五项(元数据索引块)中。该块由多个元数......
  • HBase HFile与Prefix Compression内部实现全解--KeyValue格式
    1.引子 HFile(HBaseFile)是HBase使用的一种文件存储格式的抽象, 目前存在两种版本的HFile:HFileV1和HFileV2 HBase0.92之前的版本仅支持HFileV1,HBase0.92/0.94同时支持HFileV1和HFileV2。 以下分别是HFileV1/V2的结构图: HFileV1HFileV2(注:这两个图片在hbase......
  • HBase_API_(HBaseDML,对数据的api)
    对表中数据进行以下操作:静态属性1.插入数据2.读取数据3.扫描数据4.5.HBaseConnection.java(提供connection连接)packagecom.atguigu;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.client.Connection;importorg.apache.hadoop.h......
  • HBase_API_(HBaseDDL,对表的api)
    对hbase数据表进行以下操作:1.创建命名空间2.判断表是否存在3.创建表格4.修改表格5.删除表格注意:对表格的操作要调用admin,对数据进行操作调用table(这篇博客没有涉及到)packagecom.atguigu;importorg.apache.hadoop.hbase.NamespaceDescriptor;importorg.apache.hadoop......
  • hbase truncate table后没有释放空间
    HBase中的truncatetable操作会清空表中的所有数据,但不会立即释放物理存储空间。这是因为HBase使用一种称为“MajorCompaction(主要合并)”的过程来清理和释放存储空间。MajorCompaction是HBase自动执行的周期性任务,通常在后台进行。MajorCompaction将删除表中已标记为删除的数......
  • HBase学习9(phoenix两种方式预分区)
    P351.phoenix预分区如要分4个分区建表命令如下:createtableifnotexistsORDER_DTL("id"varcharprimarykey,C1."status"varchar,C1."money"float,C1."pay_way"integer,C1."user_id"varchar,C1."operation_time&q......