MapReduce操作Hbase --table2file

官方手册:http://hbase.apache.org/book.html#mapreduce.example

简单的操作,将hbase表中的数据写入到文件中。

RunJob 源码:

 1 import org.apache.hadoop.conf.Configuration;
 2 import org.apache.hadoop.fs.FileSystem;
 3 import org.apache.hadoop.fs.Path;
 4 import org.apache.hadoop.hbase.HBaseConfiguration;
 5 import org.apache.hadoop.hbase.client.Scan;
 6 import org.apache.hadoop.hbase.mapreduce.TableInputFormat;
 7 import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
 8 import org.apache.hadoop.io.Text;
 9 import org.apache.hadoop.mapreduce.Job;
10 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
11 import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
12 import org.apache.hadoop.util.Tool;
13 import org.apache.hadoop.util.ToolRunner;
14
15 /**
16  * Created by Edward on 2016/6/29.
17  */
18 public class RunJob implements Tool {
19
20     private Configuration conf = null;
21
22     @Override
23     public int run(String[] strings) throws Exception {
24
25         Configuration conf = this.getConf();
26
27         FileSystem fs = FileSystem.get(conf);
28
29         Job job = Job.getInstance(conf,"etl");
30         job.setJarByClass(RunJob.class);
31
32         job.setInputFormatClass(TableInputFormat.class);
33         job.setOutputFormatClass(TextOutputFormat.class);
34         job.setOutputKeyClass(TextOutputFormat.class);
35
36         Scan scan = new Scan();
37         scan.setCaching(1024);
38         scan.setCacheBlocks(false);
39
40         TableMapReduceUtil.initTableMapperJob("test1",
41                 scan,
42                 MyMapper.class,
43                 Text.class,
44                 Text.class,
45                 job);
46
47         Path path = new Path("/hbase_out");
48         if(fs.exists(path))
49         {
50             fs.delete(path,true);
51         }
52
53         FileOutputFormat.setOutputPath(job, new Path("/hbase_out"));
54
55         boolean b = job.waitForCompletion(true);
56         if(b)
57         {
58             System.out.println("执行成功");
59         }
60         return 0;
61     }
62
63     @Override
64     public void setConf(Configuration configuration) {
65
66         System.setProperty("HADOOP_USER_NAME","root");
67         configuration.set("hbase.zookeeper.quorum","node1,node2,node3");
68         configuration.set("mapred.jar","D:\\etl.jar");
69
70         this.conf = HBaseConfiguration.create(configuration);
71     }
72
73     @Override
74     public Configuration getConf() {
75         return this.conf;
76     }
77
78     public static void main(String[] args)
79     {
80         try {
81             ToolRunner.run(new Configuration(), new RunJob(), args);
82         } catch (Exception e) {
83             e.printStackTrace();
84         }
85     }
86 }

MyMapper代码:

 1 import org.apache.hadoop.hbase.client.Result;
 2 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 3 import org.apache.hadoop.hbase.mapreduce.TableMapper;
 4 import org.apache.hadoop.io.Text;
 5
 6 import java.io.IOException;
 7
 8 /**
 9  * Created by Edward on 2016/6/29.
10  */
11 public class MyMapper extends TableMapper<Text, Text>{
12     @Override
13     protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException {
14
15         String val = new String(value.getValue("info".getBytes(),"name".getBytes()));
16         String row = new String(value.getRow());
17         context.write(new Text(row), new Text(val));
18     }
19 }

MyReducer代码:

 1 import org.apache.hadoop.io.Text;
 2 import org.apache.hadoop.mapreduce.Reducer;
 3
 4 import java.io.IOException;
 5
 6 /**
 7  * Created by Edward on 2016/6/29.
 8  */
 9 public class MyReducer extends Reducer<Text,Text,Text,Text>{
10
11     @Override
12     protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
13         for(Text t:values) {
14             context.write(key, t);
15         }
16     }
17 }
时间: 2024-08-14 21:23:40

MapReduce操作Hbase --table2file的相关文章

Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结

转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbase调用MapReduce函数使用理解 第三部分:Hbase调用Java API使用理解 第四部分:Hbase Shell操作 第五部分:Hbase建表.读写操作方式性能优化总结 第一部分:Hbase框架原理理解 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google

MapReduce on HBase使用与集成

为什么需要MapReduce on HBase? hbase本身并没有提供很好地二级索引方式.如果直接使用hbase提供的scan直接扫描方式,在数据量很大的情况下就会非常慢. 可以使用Mapreduce的方法操作hbase数据库.Hadoop MapReduce提供相关API,可以与hbase数据库无缝连接. API链接: http://hbase.apache.org/devapidocs/index.html HBase与Hadoop的API对比 相关类 TableMapper packa

深入浅出Hadoop实战开发(HDFS实战图片、MapReduce、HBase实战微博、Hive应用)

Hadoop是什么,为什么要学习Hadoop?     Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上.而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据

hbase之python利用thrift操作hbase数据和shell操作

前沿: 以前都是用mongodb的,但是量大了,mongodb显得不那么靠谱,改成hbase撑起一个量级. HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列的存储模型.它存储的是松散型数据. HBase提供了丰富的访问接口. HBase Shell Java clietn API Jython.Groovy DSL.Scala REST Thrift(Ruby.Pyt

PHP通过Thrift操作Hbase

HBase是一个开源的NoSQL产品,它是实现了Google BigTable论文的一个开源产品,和Hadoop和HDFS一起,可用来存储和处理海量column family的数据.官方网址是:http://hbase.apache.org 一 .HBase访问接口 1.  Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据2.  HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用3. 

hbase0.96数据导入以及Kettle操作hbase问题

版本: cdh5.0.0+hadoop2.3.0+hbase0.96.1.1+Spoon5.0.1 一.HBase数据导入 HBase数据导入使用org.apache.hadoop.hbase.mapreduce.ImportTsv 的两种方式,一种是直接导入,一种是转换为HFile,然后再次导入. 1. HDFS数据为(部分): [[email protected] data]# hadoop fs -ls /input Found 1 items -rwxrwxrwx 1 hdfs supe

HDFS,MapReduce,Hive,Hbase 等之间的关系

HDFS: HDFS是GFS的一种实现,他的完整名字是分布式文件系统,类似于FAT32,NTFS,是一种文件格式,是底层的. Hive与Hbase的数据一般都存储在HDFS上.Hadoop HDFS为他们提供了高可靠性的底层存储支持. Hive: Hive不支持更改数据的操作,Hive基于数据仓库,提供静态数据的动态查询.其使用类SQL语言,底层经过编译转为MapReduce程序,在Hadoop上运行,数据存储在HDFS上. Hbase: Hbase是Hadoop database,即Hadoo

Spark操作Hbase

Spark 下操作 HBase(1.0.0 新 API) HBase经过七年发展,终于在今年2月底,发布了 1.0.0 版本.这个版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API.虽然 1.0.0 兼容旧版本的 API,不过还是应该尽早地来熟悉下新版API.并且了解下如何与当下正红的 Spark 结合,进行数据的写入与读取.鉴于国内外有关 HBase 1.0.0 新 API 的资料甚少,故作此文. 本文将分两部分介绍,第一部分讲解使用 HBase 新版 API 进行

java操作hbase例子

hbase安装方法请参考:hbase-0.94安装方法详解 hbase常用的shell命令请参考:hbase常用的shell命令例子 java操作hbase,在eclipse中创建一个java项目,将hbase安装文件根目录的jar包和lib目录下jar包导入项目,然后就可以编写java代码操作hbase了.下面代码给出来一个简单的示例 /** * @date 2015-07-23 21:28:10 * @author sgl */ package com.songguoliang.hbase;