HBase with MapReduce (Read and Write)

上面一篇文章仅仅是介绍如何通过mapReduce来对HBase进行读的过程,下面将要介绍的是利用mapreduce进行读写的过程,前面我们已经知道map实际上是读过程,reduce是写的过程,然而map也可以实现写入的过程,因此可以通过map实现读写的过程。具体实现如下所示:

(1)map的实现

package com.datacenter.HbaseMapReduce.ReadWrite;

import java.io.IOException;

import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapper;

public class ReadWriteHbaseMap extends TableMapper<ImmutableBytesWritable, Put> {

	@Override
	protected void map(ImmutableBytesWritable row, Result value, Context context)
			throws IOException, InterruptedException {
		// TODO Auto-generated method stub
		context.write(row, resultToPut(row, value));
	}

	private static Put resultToPut(ImmutableBytesWritable key, Result result)
			throws IOException {
		Put put = new Put(key.get());
		for (KeyValue kv : result.raw()) {
			put.add(kv);
		}
		return put;
	}
}

(2)主类的main的实现

package com.datacenter.HbaseMapReduce.ReadWrite;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.mapreduce.Job;

public class ReadWriteHbase {
	static String rootdir = "hdfs://hadoop3:8020/hbase";
	static String zkServer = "hadoop3";
	static String port = "2181";

	private static Configuration conf;
	private static HConnection hConn = null;

	public static void HbaseUtil(String rootDir, String zkServer, String port) {

		conf = HBaseConfiguration.create();// 获取默认配置信息
		conf.set("hbase.rootdir", rootDir);
		conf.set("hbase.zookeeper.quorum", zkServer);
		conf.set("hbase.zookeeper.property.clientPort", port);

		try {
			hConn = HConnectionManager.createConnection(conf);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		HbaseUtil(rootdir, zkServer, port);

		// Configuration config = HBaseConfiguration.create();

		Job job = new Job(conf, "ExampleReadWrite");
		job.setJarByClass(ReadWriteHbase.class); // class that contains mapper

		Scan scan = new Scan();
		scan.setCaching(500); // 1 is the default in Scan, which will be bad for
								// MapReduce jobs
		scan.setCacheBlocks(false); // don‘t set to true for MR jobs
		// set other scan attrs

		TableMapReduceUtil.initTableMapperJob("score", // input table
				scan, // Scan instance to control CF and attribute selection
				ReadWriteHbaseMap.class, // mapper class
				null, // mapper output key
				null, // mapper output value
				job);
		TableMapReduceUtil.initTableReducerJob("liujiyu", // output table
				null, // reducer class
				job);
		job.setNumReduceTasks(0);

		boolean b = job.waitForCompletion(true);
		if (!b) {
			throw new IOException("error with job!");
		}
	}

}

注意:上面虽然利用TableMapReduceUtil来初始化输出的表,但是我们的reduce个数是0,job.setNumReduceTasks(0)。

时间: 2024-12-28 01:39:04

HBase with MapReduce (Read and Write)的相关文章

hbase安装配置(整合到hadoop)

hbase安装配置(整合到hadoop) 如果想详细了解hbase的安装:http://abloz.com/hbase/book.html 和官网http://hbase.apache.org/ 1.  快速单击安装 在单机安装Hbase的方法.会引导你通过shell创建一个表,插入一行,然后删除它,最后停止Hbase.只要10分钟就可以完成以下的操作. 1.1下载解压最新版本 选择一个 Apache 下载镜像:http://www.apache.org/dyn/closer.cgi/hbase

FineBI学习系列之FineBI与HBase数据连接(图文详解)

不多说,直接上干货! 这是来自FineBI官网提供的帮助文档 http://help.finebi.com/http://help.finebi.com/doc-view-584.html 目录: 1.描述 2.操作 3.注意事项 1.描述 Hbase作为大数据平台的重要组成部分,在数据存储方面起到了至关重要的作用,因此BI连接Hbase也是必不可少的功能之一.FineBI提供的方法是通过phoenix连接hbase,下面我们将详细介绍如何进行连接. 2.操作 2.1 配置信息   驱动 URL

HBase with MapReduce (MultiTable Read)

hbase当中没有两表联查的操作,要实现两表联查或者在查询一个表的同时也需要访问另外一张表的时候,可以通过mapreduce的方式来实现,实现方式如下:由于查询是map过程,因此这个过程不需要设计reduce过程. (1)map的实现 package com.datacenter.HbaseMapReduce.MultiReadTable; import java.io.IOException; import java.util.NavigableMap; import java.util.Ma

HBase with MapReduce (Summary)

我们知道,hbase没有像关系型的数据库拥有强大的查询功能和统计功能,本文实现了如何利用mapreduce来统计hbase中单元值出现的个数,并将结果携带目标的表中, (1)mapper的实现 package com.datacenter.HbaseMapReduce.Summary; import java.io.IOException; import java.util.NavigableMap; import java.util.Map.Entry; import org.apache.h

HBase with MapReduce (SummaryToFile)

上一篇文章是实现统计hbase单元值出现的个数,并将结果存放到hbase的表中,本文是将结果存放到hdfs上.其中的map实现与前文一直,连接:http://www.cnblogs.com/ljy2013/p/4820056.html,下面主要介绍一下reduce的实现: (1)reduce的实现 package com.datacenter.HbaseMapReduce.SummaryToFile; import java.io.IOException; import org.apache.h

HBase with MapReduce (Only Read)

最近在学习HBase,在看到了如何使用Mapreduce来操作Hbase,下面将几种情况介绍一下,具体的都可以参照官网上的文档说明.官网文档连接:http://hbase.apache.org/book.html  .通过学习我个人的对MapReduce操作HBase的方式可以看作的是Map过程是负责读取过程,Reduce负责的是写入的过程,一读一写可以完成对HBase的读写过程. 利用MapReduce 读取(Read)HBase中的表数据,这一过程由于只涉及到读过程,因此仅仅只需要实现Map

Hadoop学习笔记—15.HBase框架学习(基础知识篇)

HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列的存储模型,它存储的是松散型数据. 一.HBase:BigTable的开源实现 1.1 HBase出现的背景 (1)随着数据规模越来越大,大量业务场景开始考虑数据存储水平扩展,使得存储服务可以增加/删除,而目前的关系型数据库更专注于一台机器. (2)海量数据量存储成为瓶颈,单台机器无法负载大量数据. (3)单台机器IO读

Hbase shell操作(完整版记录)

1.进入Hbase命令行 >hbase shell 退出命令行 >quit 2.创建表 >create 'users','user_id','address','info' 3.查看所有表 >list 4.查看表结构 >describe 'users' 5.删除表: >disable 'users' >drop 'users' 6.新增数据 >put 'users','xiaowang','info:age','26' >put 'users','xi

Hbase 技术细节笔记(上)

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张秀云 前言 最近在跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hbase的理解,对相关知识点做了笔记,并在组内进行了Hbase相关技术的分享,由于Hbase涵盖的内容比较多,因此计划分享2期,下面就是针对第一期Hbase技术分享整体而成,第一期的主要内容如下: 一.Hbase介绍二.Hbase的Region介绍三.Hbase的写逻辑介绍四.Hbase的故障恢复五.Hbas