一、需求1:对一张表的rowkey进行计数

官方HBase-Mapreduce
需求1:对一张表的rowkey进行计数
1)导入环境变量
export HBASE_HOME=/root/hd/hbase-1.3.0
export HADOOP_HOME=/root/hd/hadoop-2.8.4
export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`
可以添加到:hbase-env.sh 2)启动HBase-mr任务
cd /root/hd/hbase-1.3.0
/root/hd/hadoop-2.8.4/bin/yarn jar lib/hbase-server-1.3.0.jar rowcounter emp

二、需求2:本地数据导入到HBase中

需求2:本地数据导入到HBase中
思路?HBase底层存储是hdfs,把数据先导入到hdfs
HBase对应创建一张表
利用mr导入数据到表中 1)在hdfs中创建文件夹 导入本地数据
hdfs dfs -mkdir /lovein
hdfs dfs -put /root/love.tsv /lovein 2)创建表
create 'love','info' 3)导入操作
cd /root/hd/hbase-1.3.0
/root/hd/hadoop-2.8.4/bin/yarn jar lib/hbase-server-1.3.0.jar importtsv
   -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:description love hdfs://hd09-1:9000/lovein/

附:love.tsv

001    zhangsan    henshuai
002 Dilireba beautiful
003 Yangmi good
004 isme perfect

三、需求3:将HBase中love表进行指定列的筛选然后倒入到lovemr表

自定义HBase-mr
需求3:将HBase中love表进行指定列的筛选然后倒入到lovemr表
1)构建Mapper类,读取love表中数据
2)构建Reducer类,将love表中数据写入到lovemr表中
3)构建driver驱动类
4) 打包 放入集群中运行这个任务 5)创建表
create 'lovemr','info' 6)导入操作
进入到HbaseTest-1.0-SNAPSHOT.jar包所在目录
/root/hd/hadoop-2.8.4/bin/yarn jar HbaseTest-1.0-SNAPSHOT.jar com.hbase.mr.LoveDriver

1、ReadLoveMapper类

package com.hbase.mr;

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 java.io.IOException; public class ReadLoveMapper extends TableMapper<ImmutableBytesWritable, Put> {
@Override
protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException {
//1.读取数据 拿到一个rowkey的数据
Put put = new Put(key.get()); //2.遍历column
for (Cell c : value.rawCells()) {
//3.加入列族数据 当前列族是info要 不是info列族的不要 是info数据才导入lovemr表中
if ("info".equals(Bytes.toString(CellUtil.cloneFamily(c)))){
//4.拿到指定列的数据
if ("name".equals(Bytes.toString(CellUtil.cloneQualifier(c)))){
put.add(c);
}
}
}
context.write(key,put);
}
}

2、WriteLoveReducer类

package com.hbase.mr;

import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.io.NullWritable; import java.io.IOException; public class WriteLoveReducer extends TableReducer<ImmutableBytesWritable, Put, NullWritable> {
@Override
protected void reduce(ImmutableBytesWritable key, Iterable<Put> values, Context context) throws IOException, InterruptedException {
for (Put p : values) {
//遍历数据
context.write(NullWritable.get(),p);
}
}
}

3、LoveDriver类

package com.hbase.mr;

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 LoveDriver implements Tool { private Configuration conf; //业务逻辑
public int run(String[] strings) throws Exception {
//1.创建任务
Job job = Job.getInstance(conf);
//2.指定运行的主类
job.setJarByClass(LoveDriver.class);
//3.配置job 采用scan方式扫描表
Scan scan = new Scan(); //4.设置mapper类
TableMapReduceUtil.initTableMapperJob("love",
scan,
ReadLoveMapper.class,
ImmutableBytesWritable.class,
Put.class,
job); //5.设置reducer类
TableMapReduceUtil.initTableReducerJob("lovemr",
WriteLoveReducer.class,
job); //设置reducerTask个数
job.setNumReduceTasks(1); boolean rs = job.waitForCompletion(true);
return rs ? 0 : 1;
} //设置配置
public void setConf(Configuration configuration) {
this.conf = HBaseConfiguration.create(configuration);
} //拿到配置
public Configuration getConf() {
return this.conf;
} public static void main(String[] args) {
try {
int status = ToolRunner.run(new LoveDriver(), args);
System.exit(status);
} catch (Exception e) {
e.printStackTrace();
}
}
}

四、需求4:HDFS中的数据写入到HBase中

需求4:HDFS中的数据写入到HBase中
思路:
1)构建Mapper 来读取hdfs中的数据
2)构建Reducer
3)驱动类
4)打包运行
5)测试 6)在hdfs中创建文件夹 导入本地数据
hdfs dfs -mkdir /lovehbase
hdfs dfs -put /root/love.tsv /lovehbase 7)创建表
create 'lovehdfs','info' 8)写入操作
进入到HbaseTest-1.0-SNAPSHOT.jar包所在目录
/root/hd/hadoop-2.8.4/bin/yarn jar HbaseTest-1.0-SNAPSHOT.jar com.hbase.mr2.LoveDriver

1、ReadLoveFromHDFSMapper类

package com.hbase.mr2;

import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; public class ReadLoveFromHDFSMapper extends Mapper<LongWritable, Text, ImmutableBytesWritable, Put> {
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//1.读取数据
String line = value.toString(); //2.切分数据
String[] fields = line.split("\t"); //3.封装数据
byte[] rowkey = Bytes.toBytes(fields[0]);
byte[] name = Bytes.toBytes(fields[1]);
byte[] desc = Bytes.toBytes(fields[2]);
//封装put对象
Put put = new Put(rowkey);
put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"),name);
put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("desc"),desc); //4.输出到reducer端
context.write(new ImmutableBytesWritable(rowkey),put);
}
}

2、WriteLoveReducer类

package com.hbase.mr2;

import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.io.NullWritable; import java.io.IOException; public class WriteLoveReducer extends TableReducer<ImmutableBytesWritable, Put, NullWritable> {
@Override
protected void reduce(ImmutableBytesWritable key, Iterable<Put> values, Context context) throws IOException, InterruptedException {
for (Put p : values) {
context.write(NullWritable.get(),p);
}
}
}

3、LoveDriver类

package com.hbase.mr2;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner; public class LoveDriver implements Tool {
private Configuration conf = null; public void setConf(Configuration configuration) {
this.conf = HBaseConfiguration.create();
} public Configuration getConf() {
return this.conf;
} public int run(String[] strings) throws Exception {
//1.创建job
Job job = Job.getInstance(conf);
job.setJarByClass(LoveDriver.class); //2.配置mapper
job.setMapperClass(ReadLoveFromHDFSMapper.class);
job.setMapOutputKeyClass(ImmutableBytesWritable.class);
job.setMapOutputValueClass(Put.class); //3.配置reducer
TableMapReduceUtil.initTableReducerJob("lovehdfs",WriteLoveReducer.class,job); //4.配置输入inputformat
FileInputFormat.addInputPath(job,new Path("/lovehbase/")); //5.输出
return job.waitForCompletion(true) ? 0 : 1;
} public static void main(String[] args) {
try {
int status = ToolRunner.run(new LoveDriver(), args);
} catch (Exception e) {
e.printStackTrace();
}
}
}

HBase-MR的更多相关文章

  1. 十九、Hadoop学记笔记————Hbase和MapReduce

    概要: hadoop和hbase导入环境变量: 要运行Hbase中自带的MapReduce程序,需要运行如下指令,可在官网中找到: 如果遇到如下问题,则说明Hadoop的MapReduce没有权限访问 ...

  2. MapReduce生成HFile入库到HBase

    转自:http://www.cnblogs.com/shitouer/archive/2013/02/20/hbase-hfile-bulk-load.html 一.这种方式有很多的优点: 1. 如果 ...

  3. [How to] MapReduce on HBase ----- 简单二级索引的实现

    1.简介 MapReduce计算框架是二代hadoop的YARN一部分,能够提供大数据量的平行批处理.MR只提供了基本的计算方法,之所以能够使用在不用的数据格式上包括HBase表上是因为特定格式上的数 ...

  4. 使用CopyTable工具方法在线备份HBase表

    CopyTable is a simple Apache HBase utility that, unsurprisingly, can be used for copying individual ...

  5. Bulk Load-HBase数据导入最佳实践

    一.概述 HBase本身提供了非常多种数据导入的方式,通常有两种经常使用方式: 1.使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase 2 ...

  6. HBase 数据迁移

    最近两年负责 HBase,经常被问到一些问题, 本着吸引一些粉丝.普及一点HBase 知识.服务一点阅读人群的目的,就先从 HBase 日常使用写起,后续逐渐深入数据设计.集群规划.性能调优.内核源码 ...

  7. 【Hive学习之五】Hive 参数&动态分区&分桶

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...

  8. hive数据仓库入门到实战及面试

    第一章.hive入门 一.hive入门手册 1.什么是数据仓库 1.1数据仓库概念 对历史数据变化的统计,从而支撑企业的决策.比如:某个商品最近一个月的销量,预判下个月应该销售多少,从而补充多少货源. ...

  9. Mac 下用IDEA时maven,ant打包 (mr 入库hbase)

    现在非常喜欢IDEA,之前在mac 上用的eclipse 经常出现无缘无故的错误.所以转为IDEA.  不过新工具需要学习成本,手头上的项目就遇到了很多问题,现列举如下: 背景描述 在hadoop 开 ...

随机推荐

  1. spark源代码

    电子书: https://spark-internals.books.yourtion.com/

  2. 一款基于jQuery的图片左右滑动焦点图

    今天给大家分享一款基于jQuery的焦点图插件,这款jQuery焦点图插件的特点是可以多张图片左右滑动切换,可以点击切换按钮进行图片滑动,同时也支持图片自动切换.另外,这款jQuery焦点图是宽屏的, ...

  3. 改进cocos2dx中lua读ccb的方法

    cocos2dx自带的CCBProxy真弱,还好提供了一个CCBReaderLoader.lua,但是也不好用, 于是修改了一下CCBReaderLoader,下面直接贴代码了. function N ...

  4. love2d教程32--碎图打包器texturepacker

    texturepacker是一个碎图打包器,可以把小图合并成一张大图,并对大图做优化.我用的是特别版(只好用xx版了, 不然导出的图片会被变成红色),网盘下载,文件会提示有毒,我也是在网上找的,其实是 ...

  5. Android——Android studio项目中如何查看R.java文件(转)

    Android Studio 是Google推出的一个Android开发环境,它集成了Android 开发工具用于开发和调试,类似 Eclipse ADT.Google公司停止对eclipse的后续支 ...

  6. js获取textaera对象(object)的值

    for(i in pstrWord ){ alert(i); //获得属性 alert(pstrWord[i]); //获得属性值 } 1.js输出object对象方法如下: function wri ...

  7. jira集成fisheye代码深度查看工具安装绿色版

    软件介绍: Fisheye 是一个源代码库深度查看软件,它可以挖掘源代码库中的有用信息,呈现在Web浏览器界面上,Fisheye优点: 1) Fisheye是一个基于Web的代码管理系统,可以与SVN ...

  8. jQuery替换内容

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. Python之并行

    http://www.open-open.com/news/view/1c0179b/

  10. 经典SQL面试题(转)

    http://www.cnblogs.com/kcher90/archive/2013/03/13/2957932.html 有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录 ...