hbase -MR将输出输出到hbase里面示例

1、主要是设置Reduce端输出的value类型

直接上代码吧:注释就免了吧,大家应该很熟悉了。

package hbase;

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;

public class WordCountHBase {

	/**
	 * @param args
	 * @throws IOException
	 * @throws ClassNotFoundException
	 * @throws InterruptedException
	 */
	public static void main(String[] args) throws IOException,
			InterruptedException, ClassNotFoundException {
		// TODO Auto-generated method stub
		String tablename = "wordcount";
		Configuration conf = new Configuration();
		conf.set(TableOutputFormat.OUTPUT_TABLE, tablename);
		createHBaseTable(tablename);

		Job job = new Job(conf, "WordCount table");
		job.setJarByClass(WordCountHBase.class);
		job.setNumReduceTasks(3);
		job.setMapperClass(Map.class);
		job.setReducerClass(Reduce.class);
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);
		job.setInputFormatClass(TextInputFormat.class);
		job.setOutputFormatClass(TableOutputFormat.class);
		// ?????????¼
		FileInputFormat.addInputPath(job, new Path(
				"hdfs://hadoop:9000/input"));
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}

	public static class Map extends
			Mapper<LongWritable, Text, Text, IntWritable> {
		private final static IntWritable one = new IntWritable(1);
		private Text text = new Text();

		@Override
		public void map(LongWritable key, Text value, Context context)
				throws IOException, InterruptedException {
			String s = value.toString();
			StringTokenizer st = new StringTokenizer(s);
			while (st.hasMoreTokens()) {
				text.set(st.nextToken());
				context.write(text, one);
			}
		}
	}

	public static class Reduce extends
			TableReducer<Text, IntWritable, NullWritable> {

		@Override
		public void reduce(Text key, Iterable<IntWritable> values,
				Context context) throws IOException, InterruptedException {
			int sum = 0;
			for (IntWritable i : values) {
				sum += i.get();
			}
			Put put = new Put(Bytes.toBytes(key.toString()));
			// row,columnFamily:column,value = word,content:count,sum
			put.add(Bytes.toBytes("content"), Bytes.toBytes("count"),
					Bytes.toBytes(String.valueOf(sum)));
			context.write(NullWritable.get(), put);
		}
	}

	/**
	 * create a table
	 *
	 * @param tablename
	 * @throws IOException
	 */
	public static void createHBaseTable(String tablename) throws IOException {
		HTableDescriptor htd = new HTableDescriptor(tablename);
		HColumnDescriptor col = new HColumnDescriptor("content");
		htd.addFamily(col);
		Configuration cfg = HBaseConfiguration.create();
		HBaseAdmin admin = new HBaseAdmin(cfg);
		if (admin.tableExists(tablename)) {
			System.out.println("table exists,trying recreate table!");
			admin.disableTable(tablename);
			admin.deleteTable(tablename);
			admin.createTable(htd);
		} else {
			System.out.println("create new table:" + tablename);
			admin.createTable(htd);
		}
	}
}

2、hbase shell

>list

>scan ‘wordcount‘

>............................

hbase -MR将输出输出到hbase里面示例,布布扣,bubuko.com

时间: 2024-12-15 22:40:27

hbase -MR将输出输出到hbase里面示例的相关文章

hadoop生态系统学习之路(九)MR将结果输出到数据库(DB)

最开始讲MapReduce的时候,我们是指定输出目录,然后把结果直接输出到hdfs上.然后,在介绍hive的简单使用时,我们直接将结果输出到了hive表中.另外,MR还可以将结果输出到数据库以及hbase. 今天,笔者就给大家介绍MR将结果输出到db. 首先,笔者要提及一下之前MR将结果输出到hive表,这里需要注意,只能向某张表中入一次数据,再次执行MR报错: org.apache.hive.hcatalog.common.HCatException : 2003 : Non-partitio

hbase mr

package cn.itcast_01_hbase; import java.io.IOException;import java.util.ArrayList;import java.util.List; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;im

HBase二次开发之搭建HBase调试环境,如何远程debug HBase源代码

版本 HDP:3.0.1.0 HBase:2.0.0 一.前言 之前的文章也提到过,最近工作中需要对HBase进行二次开发(参照HBase的AES加密方法,为HBase增加SMS4数据加密类型).研究了两天,终于将开发流程想清楚并搭建好了debug环境,所以就迫不及待地想写篇文章分享给大家. 二.思路 首先看到这个需求,肯定是需要先实现HBase配置AES加密<HBase配置AES加密>,或者还可以再继续了解实现SMS4加密算法<Java版SMS4加密解密算法>.等到这些都完成之后

treemap反序输出 逆序输出 输出倒数几个值

treemap是按键的ASCII码从小到大排序的,比如要对若干个带有时间属性的对象排序时,可以用时间作键,放到Treemap中,即是有序集合了.先不管性能,省了很多自己写排序的实现了. 默认是按key的ASCII码顺序由小到大排序的,如果要实现自定义的排序,则要重写treemap的比较器. 最简单的方法就是使用集合对象自带的方法,Collections.reverseOrder() 具体代码如下 package com.example.commonwtf2.test; import java.u

hbase无法启动,The node /hbase is not in ZooKeeper

问题详细描述如下: 2016-12-09 15:10:39,160 ERROR [org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation] - The node /hbase is not in ZooKeeper. It should have been written by the master. Check the value configured in 'zookeeper.znode.pare

【HBase基础教程】1、HBase之单机模式与伪分布式模式安装

在这篇blog中,我们将介绍Hbase的单机模式安装与伪分布式的安装方式,以及通过浏览器查看Hbase的用户界面.搭建hbase伪分布式环境的前提是我们已经搭建好了hadoop完全分布式环境,搭建hadoop环境请参考:[Hadoop基础教程]4.Hadoop之完全分布式环境搭建 开发环境 硬件环境:Centos 6.5 服务器4台(一台为Master节点,三台为Slave节点) 软件环境:Java 1.7.0_45.Eclipse Juno Service Release 2.hadoop-1

【HBase基础教程】2、HBase之完全分布式模式安装

上一篇blog我们介绍了Hbase的单机模式安装与伪分布式的安装方式,本篇blog我们将详细介绍如何搭建hbase完全分布式环境,搭建hbase完全分布式环境的前提是我们已经搭建好了hadoop完全分布式环境,搭建hadoop完全分布式环境请参考:[Hadoop基础教程]4.Hadoop之完全分布式环境搭建 开发环境 硬件环境:Centos 6.5 服务器4台(一台为Master节点,三台为Slave节点) 软件环境:Java 1.7.0_45.Eclipse Juno Service Rele

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

Hadoop HA + HBase环境搭建(二)————HBase环境搭建

HBase配置(只需要做一处修改) 修改HBase的 hbase-site.xml 配置文件种的一项 <property> <name>hbase.rootdir</name> <value>hdfs://nn/hbase</value> </property> 解释:以前value值的设置的是Hadoop中主节点的名字加上端口号,如 hdfs://RDFMaster:8020/hbase ,需要改写成在Hadoop的配置文件 hdf