`
ganliang13
  • 浏览: 253118 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HBase 之HFileOutputFormat

阅读更多

 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=1314591150788value=value1                                          
  4.  r2                              column=f1:c2, timestamp=1314591150814value=value2                                          
  5.  r3                              column=f1:c3, timestamp=1314591150815value=value3                                          
  6. 3 row(s) in 0.0210 seconds 

数据已经导入!

 

出自:http://yaoyinjie.blog.51cto.com/3189782/652244

分享到:
评论

相关推荐

    HbaseTemplate 操作hbase

    HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data Hadoop是Spring框架的一部分,它提供了与Hadoop生态系统集成的工具,包括对HBase的操作支持。本篇文章...

    java操作Hbase之从Hbase中读取数据写入hdfs中源码

    在Java编程环境中,操作HBase并将其数据写入HDFS(Hadoop Distributed File System)是一项常见的任务,特别是在大数据处理和分析的场景下。本篇将详细介绍如何使用Java API实现这一功能,以及涉及到的关键技术和...

    java操作Hbase之Hbase专用过滤器PageFilter的使用源代码

    在Java中操作HBase数据库时,我们经常需要对大量数据进行高效的检索和处理。HBase提供了多种过滤器机制,其中PageFilter是一种非常实用的工具,它可以帮助我们在查询时限制返回的结果数量,从而优化性能和内存使用。...

    HBase(hbase-2.4.9-bin.tar.gz)

    就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非...

    Hbase权威指南(HBase: The Definitive Guide)

    - **背景层**(Backdrop):HBase运行于Hadoop之上,利用Hadoop提供的分布式文件系统(HDFS)来存储数据。 - **表格、行、列与单元格**(Tables, Rows, Columns, and Cells):HBase的基本存储单位是表,表由多个...

    HBase官方文档中文版-HBase手册中文版

    HBase设计目标是提供大规模数据的实时读写能力,它运行在Hadoop之上,利用HDFS作为其底层存储系统。HBase的数据模型基于稀疏、多维度、排序的映射表,其中行键、列族、列限定符和时间戳构成数据的唯一标识。 二、...

    pinpoint的hbase初始化脚本hbase-create.hbase

    搭建pinpoint需要的hbase初始化脚本hbase-create.hbase

    hbase配置内置的zookeeper

    ### HBase 配置内置 ZooKeeper 的详细步骤与解析 #### 一、配置背景与目的 在 HBase 的部署环境中,ZooKeeper 起着非常重要的作用,它主要用于协调集群中的各个节点,并且管理 HBase 的元数据。通常情况下,HBase ...

    hbase用于查询客户端工具

    HBase是一种分布式、基于列族的NoSQL数据库,它在大数据领域中扮演着重要的角色,尤其是在需要实时查询大规模数据集时。HBase以其高吞吐量、低延迟和水平扩展能力而闻名,常用于存储非结构化和半结构化数据。在HBase...

    HBase开启审计日志

    ### HBase开启审计日志详解 #### 一、概述 HBase是一款分布式列式存储系统,基于Google的Bigtable论文实现。它具有高可靠性、高性能、面向列、可伸缩的特点,非常适合处理海量数据。在大数据领域,HBase被广泛用于...

    HBase视频教程下载|基于微博数据应用的HBase实战开发

    课时19:搭建分布式HBase集群之HBase部署 课时20:sqoop2部署 课时21:使用sqoop2将mysql数据导入到HBase 课时22:集群管理之节点管理与数据任务 课时23:Rowkey设计与集群常见故障处理 课时24:集群调优经验...

    java操作Hbase之实现表的创建删除源码

    HBase是一个分布式的、基于列族的NoSQL数据库,它构建在Hadoop之上,提供了高性能、低延迟的数据存储和访问能力。本教程将详细介绍如何使用Java API来创建和删除HBase表,并针对不使用Maven的初学者提供必要的jar包...

    基于springboot集成hbase过程解析

    "基于SpringBoot集成HBase过程解析" SpringBoot集成HBase是当前大数据处理和存储解决方案中的一种常见组合。HBase是基于Hadoop的分布式、可扩展的NoSQL数据库,能够存储大量的结构化和非结构化数据。SpringBoot则...

    hbase-2.4.17-bin 安装包

    HBase是Apache Hadoop生态系统中的一个分布式、版本化、列族式存储系统,设计用于处理大规模数据集。这个“hbase-2.4.17-bin”安装包提供了HBase的最新稳定版本2.4.17,适用于大数据处理和分析场景。下面将详细介绍...

    在windows上安装Hbase

    在Windows上安装HBase 本文将指导您如何在Windows平台上安装HBase,包括配置详解。安装完成后,您将能够配置集群。 一、前提条件 在安装HBase前,需要安装Cygwin和Hadoop。这两个软件的安装不在本文的讨论范围内...

    hbase安装与使用

    HBase 是一款构建于 Hadoop 之上的分布式、可扩展的大规模数据存储系统。它提供了类似 Google BigTable 的功能特性,非常适合处理海量数据和高并发读写需求的应用场景。本文主要介绍如何在 Linux 环境下安装和配置 ...

    hbase安装包

    HBase,全称为Hadoop Distributed File System上的基础结构(HBase on Hadoop Distributed File System),是一种分布式的、面向列的开源数据库,它构建在Apache Hadoop文件系统(HDFS)之上,提供高可靠性、高性能...

    hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架

    统一了HBase1.x和HBase2.x的实现,并提供了读写HBase的ORM的支持,同时,sdk还对HBase thrift 的客户端API进行了池化封装,(类似JedisPool),消除了直接使用原生API的各种问题,使之可以在生产环境下稳定工作。

    hbase 资源合集 hbase 企业应用开发实战 权威指南 hbase 实战 hbase 应用架构

    《HBase资源合集》包含了四本重量级的书籍,分别是《HBase企业应用开发实战》、《HBase权威指南》、《HBase实战》以及《HBase应用架构》。这些书籍深入浅出地探讨了HBase在大数据环境中的应用与开发,是学习和掌握...

Global site tag (gtag.js) - Google Analytics