Mapreduce于HBase集成

2 篇文章 0 订阅
2 篇文章 0 订阅

Mapreduce于HBase集成

集成的模式

  • 从hbase中读取数据,Hbase的数据作为map的输入,输出可以任意指定.
  • 将数据写入Hbase,将hbase作为reduce的输出,输入可以任意指定.
  • 从hbase中读 最终在写入到hbase中,场景: 数据迁移.

在hbase中已经封装好了jar包:hbase-server-0.98.6-cdh5.3.6.jar

1、环境的配置

将hbase中环境的jar包放到hadoop中,所有hbasejar包都放进去会造成jar包的冲突。
Hadoop中需要hbase中的哪些jar包就导入哪些。
hbase mapredcp 通过该命令可以列出hadoop需要的jar包。

[hadoop@hh hbase-0.98.6-cdh5.3.6]$ bin/hbase mapredcp
//这样可以列出来hadoop需要的jar包
export HBASE_HOME=/opt/app/hbase-0.98.6-cdh5.3.6
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:`$HBASE_HOME/bin/hbase mapredcp`
//在hbase下运行这两句代码,可以临时修改环境变量,使hadoop暂时拥有这些包的路径.
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/app/hbase-0.98.6-cdh5.3.6/lib/*
//这个在hadoop中的etc/hadoop/hadoop-env.sh中配置的.

CellCounter: 统计多少个单元格
completebulkload: 加载Hfile的数据文件
copytable: 把一个表从一个集群拷贝到另一个集群
export: 将表导出到HDFS
import:
importtsv: 导入一个TSV的格式文件
rowcounter: 统计rowkey
verifyrep: 比较两个不同集群中表的数据

测试:统计rowKey

/opt/app/hadoop-2.5.0-cdh5.3.6/bin/yarn jar ../lib/hbase-server-0.98.6-cdh5.3.6.jar  rowcounter stu:stu_t 
//结果:
 org.apache.hadoop.hbase.mapreduce.RowCounter$RowCounterMapper$Counters
                ROWS=1

2、HBase上的MapReduce:

在HBase中创建一个表,读取的表:stu_info 写入的表 stu_info_copy

//建表:
create 'stu_info','info','degree','work'
//插入数据:6个rowkey 3个列簇
put 'stu_info','20170222_10001','degree:xueli','benke'
put 'stu_info','20170222_10001','info:age','18'
put 'stu_info','20170222_10001','info:sex','male'
put 'stu_info','20170222_10001','info:name','tom'
put 'stu_info','20170222_10001','work:job','bigdata'
put 'stu_info','20170222_10002','degree:xueli','gaozhong'
put 'stu_info','20170222_10002','info:age','22'
put 'stu_info','20170222_10002','info:sex','female'
put 'stu_info','20170222_10002','info:name','jack'
put 'stu_info','20170222_10003','info:age','22'
put 'stu_info','20170222_10003','info:name','leo'
put 'stu_info','20170222_10004','info:age','18'
put 'stu_info','20170222_10004','info:name','peter'
put 'stu_info','20170222_10005','info:age','19'
put 'stu_info','20170222_10005','info:name','jim'
put 'stu_info','20170222_10006','info:age','20'
put 'stu_info','20170222_10006','info:name','zhangsan'

MapReduce的实现:

package org.hbase.test;

import java.io.IOException;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
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;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.mapreduce.Mapper;

public class TestHBaseMapper extends TableMapper<ImmutableBytesWritable, Put>{
	@Override
	protected void map(ImmutableBytesWritable key, Result value,
			Mapper<ImmutableBytesWritable, Result, ImmutableBytesWritable, Put>.Context context)
			throws IOException, InterruptedException {
		// TODO Auto-generated method stub
		Put put=new Put(key.get());
		
		for(Cell cell:value.rawCells()) {
			
			if("info".equals(Bytes.toString(CellUtil.cloneFamily(cell)))) {
				
				if("name".equals(Bytes.toString(CellUtil.cloneQualifier(cell)))) {
					
					put.add(cell);
				}
			}			
		}		
		context.write(key, put);
	}
}

驱动类:

package org.hbase.test;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class TestDriver implements Tool{

	Configuration conf;
	
	@Override
	public void setConf(Configuration conf) {
		// TODO Auto-generated method stub
		this.conf=conf;
	}

	@Override
	public Configuration getConf() {
		// TODO Auto-generated method stub
		return this.conf;
	}

	@Override
	public int run(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Configuration conf=this.getConf();
		
		Job job=Job.getInstance(conf, "wmc");
		
		job.setJarByClass(TestDriver.class);
		
		Scan scan=new Scan();
		
		TableMapReduceUtil.initTableMapperJob("stu_info", scan,TestHBaseMapper.class,ImmutableBytesWritable.class, Put.class, job);
	
        TableMapReduceUtil.initTableReducerJob("stu_info_copy", null, job);
		
		job.setNumReduceTasks(1);
		

		return job.waitForCompletion(true)?0:1;
	}
	
	public static void main(String[] args) {
		
		Configuration conf=HBaseConfiguration.create();
		
		try {
			int status=ToolRunner.run(conf, new TestDriver(),args);
			System.exit(status);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
}

步骤: 将两个类导出成一个包,然后导入到本地。

**这个包的作用:**使用这个包可以将’stu_info’这张表的内容复制到’stu_info_copy’这张表中。


3、HBase importtsv工具的使用

importtsv -Dimporttsv.columns=a,b,c

1、将数据从HDFS上导入到一张HBase表中(分隔符为’\t’):

/opt/app/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/app/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:location stu_1 /impdemo.tsv

2、将数据从HDFS上导入到一张HBase表中(指定分隔符):

/opt/app/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/app/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv -Dimporttsv.separator=, -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:location stu_1 /importdemo.tsv

3、将数据从本地导入到HBase表中:

  • 将数据转换为HFile
/opt/app/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/app/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:location -Dimporttsv.bulk.output=/testHfile importtsv /impdemo.tsv
  • 将HFile中的数据导入到HBase表中:
/opt/app/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/app/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar completebulkload /testHfile stu_2 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值