返回顶部
首页 > 资讯 > 数据库 >HBase 之HFileOutputFormat
  • 396
分享到

HBase 之HFileOutputFormat

2024-04-02 19:04:59 396人浏览 泡泡鱼
摘要

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

   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> scan 't1' 
  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.     private ImmutableBytesWritable immutableBytesWritable = new ImmutableBytesWritable(); 
  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.     } 

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.     protected void reduce(ImmutableBytesWritable key, Iterable<Text> values, 
  11.             Context context) 
  12.             throws IOException, InterruptedException { 
  13.         String value=""; 
  14.         while(values.iterator().hasNext()) 
  15.         { 
  16.             value = values.iterator().next().toString(); 
  17.             if(value != null && !"".equals(value)) 
  18.             { 
  19.                 KeyValue kv = createKeyValue(value.toString()); 
  20.                 if(kv!=null) 
  21.                     context.write(key, kv); 
  22.             } 
  23.         } 
  24.     } 
    // str格式为row:family:qualifier:value 简单模拟下
  25.     private KeyValue createKeyValue(String str) 
  26.     { 
  27.         String[] strstrs = str.split(":"); 
  28.         if(strs.length<4) 
  29.             return null; 
  30.         String row=strs[0]; 
  31.         String family=strs[1]; 
  32.         String qualifier=strs[2]; 
  33.         String value=strs[3]; 
  34.         return new KeyValue(Bytes.toBytes(row),Bytes.toBytes(family),Bytes.toBytes(qualifier),System.currentTimeMillis(), Bytes.toBytes(value)); 
  35.     } 

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.         Configuration conf = new Configuration(); 
  20.         String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); 
  21.  
  22.         Job job = new Job(conf, "testhbasehfile"); 
  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.         FileInputFormat.addInputPath(job, new Path("/home/yinjie/input")); 
  32.         FileOutputFormat.setOutputPath(job, new Path("/home/yinjie/output")); 
  33.  
  34.         Configuration HBASE_CONFIG = new Configuration(); 
  35.         HBASE_CONFIG.set("hbase.ZooKeeper.quorum", "localhost"); 
  36.         HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181"); 
  37.         HBaseConfiguration cfg = new HBaseConfiguration(HBASE_CONFIG); 
  38.         String tableName = "t1"; 
  39.         HTable htable = new HTable(cfg, tableName); 
  40.         HFileOutputFormat.configureIncrementalLoad(job, htable); 
  41.  
  42.         System.exit(job.waitForCompletion(true) ? 0 : 1); 
  43.     } 

/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> scan 't1' 
  2. ROW                              COLUMN+CELL                                                                                  
  3.  r1                              column=f1:c1, timestamp=1314591150788, value=value1                                          
  4.  r2                              column=f1:c2, timestamp=1314591150814, value=value2                                          
  5.  r3                              column=f1:c3, timestamp=1314591150815, value=value3                                          
  6. 3 row(s) in 0.0210 seconds 

数据已经导入!
 

您可能感兴趣的文档:

--结束END--

本文标题: HBase 之HFileOutputFormat

本文链接: https://lsjlt.com/news/36684.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • HBase 之HFileOutputFormat
       hadoop mr 输出需要导入hbase的话最好先输出成HFile格式, 再导入到HBase,因为HFile是HBase的内部存储格式, 所以导入效率很高,下面是一个示例 1. ...
    99+
    2024-04-02
  • hadoop之Hbase安装
    说明:hadoop安装:http://kexl908.blog.51cto.com/605006/812494Hbase接上面的hadoop安装环境之后继续安装,环境 IP 不变...
    99+
    2024-04-02
  • HBase之MemStore+Flush详解
    MemStore简介:          上图为HBase的读写过程的大概描述;    写请求过程:client-------...
    99+
    2024-04-02
  • Hbase之表设计原则
    1、列簇的设计列簇尽量少,最好不超过3个。因为每个列簇是存在一个独立的HFile里的,flush和compaction操作都是针对一个Region进行的,当一个列簇的数据很多需要flush的时候,其它列簇即...
    99+
    2024-04-02
  • HBase框架学习之路
    1 背景知识1.1 解决问题解决HDFS不支持单条记录的快速查找和更新的问题。1.2 适用情况存在亿万条记录的数据库,只有千万或者百万条记录使用RDBMS更加合适确保你的应用不需要使用RDBMS的高级特性(...
    99+
    2024-04-02
  • hbase之python利用thrift操作hbase数据和shell操作
    前沿:        以前都是用mongodb的,但是量大了,mongodb显得不那么靠谱,改成hbase撑起一个量级。HBase是Apache Hadoop的数据库...
    99+
    2024-04-02
  • hbase访问方式之java api
    Hbase的访问方式Native Java API:最常规和高效的访问方式;HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用;Thrift Gateway:利用Thrift序列化技术,支持C++,PHP,...
    99+
    2023-05-31
    hbase java api
  • HBase Filter 过滤器之 ValueFilter 详解
    前言:本文详细介绍了 HBase ValueFilter 过滤器 Java&Shell API 的使用,并贴出了相关示例代码以供参考。ValueFilter 基于列值进行过滤,在工作中涉及到需要通过HBase 列值进行数据过滤时可...
    99+
    2017-12-24
    HBase Filter 过滤器之 ValueFilter 详解
  • HBase Filter 过滤器之 DependentColumnFilter 详解
    前言:本文详细介绍了 HBase DependentColumnFilter 过滤器 Java&Shell API 的使用,并贴出了相关示例代码以供参考。DependentColumnFilter 也称参考列过滤器,是一种允许用户...
    99+
    2022-03-14
    HBase Filter 过滤器之 DependentColumnFilter 详解
  • HBase Filter 过滤器之FamilyFilter详解
    前言:本文详细介绍了 HBase FamilyFilter 过滤器 Java&Shell API 的使用,并贴出了相关示例代码以供参考。FamilyFilter 基于列族进行过滤,在工作中涉及到需要通过HBase 列族进行数据过滤...
    99+
    2017-01-24
    HBase Filter 过滤器之FamilyFilter详解
  • HBase Filter 过滤器之QualifierFilter详解
    前言:本文详细介绍了 HBase QualifierFilter 过滤器 Java&Shell API 的使用,并贴出了相关示例代码以供参考。QualifierFilter 基于列名进行过滤,在工作中涉及到需要通过HBase 列名...
    99+
    2014-11-14
    HBase Filter 过滤器之QualifierFilter详解
  • HBase Filter 过滤器之RowFilter详解
    前言:本文详细介绍了HBase RowFilter过滤器Java&Shell API的使用,并贴出了相关示例代码以供参考。RowFilter 基于行键进行过滤,在工作中涉及到需要通过HBase Rowkey进行数据过滤时可以考虑使...
    99+
    2017-12-16
    HBase Filter 过滤器之RowFilter详解
  • HBase和ApacheHadoop之间的关系是什么
    在HBase中,ZooKeeper扮演着重要的角色作为协调服务。具体来说,ZooKeeper在HBase中主要用于以下几个方面: ...
    99+
    2024-03-07
    HBase
  • 滴滴HBase大版本滚动升级之旅
    桔妹导读:滴滴HBase团队日前完成了0.98版本 -> 1.4.8版本滚动升级,用户无感知。新版本为我们带来了丰富的新特性,在性能、稳定性与易用性方便也均有很大提升。我们将整个升级过程中面临的挑战、进行的思考以及解决的问题总...
    99+
    2016-04-13
    滴滴HBase大版本滚动升级之旅
  • hbase之宽表与窄表对split的影响
         hbase的hbase.hregion.max.filesize属性值用来指定region分割的阀值, 该值默认为268435456(256MB)...
    99+
    2022-11-30
    职场 休闲 split
  • HBase 监控 | HBase Metrics 初探(一)
    前言:对于任意一个系统而言,做好监控都是非常重要的,HBase也不例外。经常,我们会从JMX中获取相关指标来做展示、对HBase进行监控,那这些指标是怎么生成的呢?如果你想自定义自己的监控指标又该怎么做呢?基于好奇之心和学习的目...
    99+
    2022-02-03
    HBase 监控 | HBase Metrics 初探(一)
  • Hbase 中 hbase-site.xml 参数含义
    hbase.client.scanner.caching定义在扫描器中调用next方法时取回的行数。数值越大,在扫描时客户端需要对RegionServer发出的远程调用次数越少。数值越大,客户端消耗内存越大...
    99+
    2024-04-02
  • Hbase Shell
    Hbase Shell   1.创建表 语法:create , {NAME => , VERSIONS => } 创建一个‘table’表,info是它的列簇         2.查看表list           3.查看表详情de...
    99+
    2019-09-17
    Hbase Shell
  • Hadoop HBase
    一、概述: 1、定义:HBase是Google Bigtable的开源山寨版本。是建立的HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时、随机读写的数据库系统。   &...
    99+
    2024-04-02
  • hbase 0.90.4 + zookeeper 3.3.3 hbase 启动失败
    报错:Couldnt start ZK at requested address of 2181, instead got: 2182. Aborting. Why Because clients (eg ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作