6. HBase 与 MapReduce 集成

6.1 官方 HBase 与 MapReduce 集成

  1. 查看 HBase 的 MapReduce 任务的执行:bin/hbase mapredcp;
  2. 环境变量的导入
    1. 临时生效,在命令行执行操作:

      • export HBASE_HOME=/opt/module/hbase-1.3.4;
      • export HADOOP_HOME=/opt/module/hadoop-2.8.5;
      • export HADOOP_CLASSPATH=${HBASE_HOME}/bin/hbase mapredcp;
    2. 永久生效,在/etc/profile配置
      • export HBASE_HOME=/opt/module/hbase-1.3.4;
      • export HADOOP_HOME=/opt/module/hadoop-2.8.5;
      • 并在hadoop-env.sh配置:export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/module/hbase/lib/*
  3. 运行官方的 MapReduce 任务
// ===== 案例一:统计Student表中有多少行数据 (`opt/module/hbase-1.3.4/` 目录下)
/opt/module/hadoop-2.8.5/bin/yarn jar ./lib/hbase-server-1.3.4.jar rowcounter student // ===== 案例二:使用 MapReduce 将本地数据导入到 HBASE
// 1. 本地创建一个fruit.tsv文件
1001 Apple Red
1002 Pear Yellow
1003 Pineapple Yellow // 2. 创建 HBase 表
create 'fruit','info' // 3. 在 HDFS 中创建 input_fruit 文件夹并上传 fruit.tsv 文件
/opt/module/hadoop-2.8.5/bin/hdfs dfs -mkdir /input_fruit
/opt/module/hadoop-2.8.5/bin/hdfs dfs -put fruit.tsv /input_fruit/ // 4. 执行 MapReduce, 将 fruit.tsv 导入到 HBase 的 fruit 表中
/opt/module/hadoop-2.8.5/bin/yarn jar ./lib/hbase-server-1.3.4.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:color fruit hdfs://IP地址/input_fruit

6.2 自定义HBase-MapReduce

  • 需求:将 fruit 表中的部分数据,通过MR迁入到 fruit_mr 表中
// 1. 创建 FruitMapper 类,用于读取 fruit 表中的数据
public class FruitMapper extends TableMapper<ImmutableBytesWritable, Put>{ @Override
protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException {
// 创建put对象
Put put = new Put(key.get()); Cell[] cells = value.rawCells(); for(Cell cell : cells) {
if("name".equals(Bytes.toString(CellUtil.cloneQualifier(cell)))) {
put.add(cell);
}
} context.write(key, put);
}
} // 2. 创建 FruitReducer 类,用于写入
public class FruitReducer extends TableReducer<ImmutableBytesWritable, Put, NullWritable>{ @Override
protected void reduce(ImmutableBytesWritable key, Iterable<Put> values, Context context) throws IOException, InterruptedException {
for (Put value : values) {
context.write(NullWritable.get(), value);
}
}
} // 3. 创建 FruitDriver 类,用于执行 mapper 和 reducer
public class FruitDriver extends Configuration implements Tool{ private Configuration configuration = null; @Override
public void setConf(Configuration conf) {
this.configuration = conf;
} @Override
public Configuration getConf() {
return configuration;
} @Override
public int run(String[] args) throws Exception {
// 获取任务对象
Job job = Job.getInstance(configuration); // 指定 Driver类
job.setJarByClass(FruitDriver.class); // 指定 Mapper
TableMapReduceUtil.initTableMapperJob("fruit", new Scan(), FruitMapper.class, ImmutableBytesWritable.class, Put.class, job); // 指定 Reducer
TableMapReduceUtil.initTableReducerJob("fruit_mr", FruitReducer.class, job); // 提交
boolean result = job.waitForCompletion(true); return result ? 0 : 1;
} public static void main(String[] args) throws Exception { Configuration configuration = HBaseConfiguration.create();
ToolRunner.run(configuration, new FruitDriver(), args);
}
} // 4. 打成 fruit.jar包
// 5. HBase 中创建 fruit_mr 表
create 'fruit_mr','info' // 6. 在 /opt/module/hbase 中执行:
/opt/module/hadoop-2.8.5/bin/yarn jar ./fruit.jar com.noodles.mr1.FruitDriver(Driver的类名)

6.3 自定义 HBase-MapReduce2

  • 需求:实现将 HDFS 中的数据写入到 HBase 表中
// 1. 创建 Mapper, 用于读取 HDFS 上的文件
public class HDFSMapper extends Mapper<LongWritable, Text, NullWritable, Put>{ @Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, NullWritable, Put>.Context context)
throws IOException, InterruptedException {
// 获取一行数据
String line = value.toString(); // 切割
String[] split = line.split("\t"); // 封装 Put 对象
Put put = new Put(Bytes.toBytes(split[0]));
put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes(split[1]));
put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("color"), Bytes.toBytes(split[2])); // 写出去
context.write(NullWritable.get(), put);
}
} // 2. 创建 Reducer, 用于写入
public class HDFSReducer extends TableReducer<NullWritable, Put, NullWritable>{ @Override
protected void reduce(NullWritable key, Iterable<Put> values,
Reducer<NullWritable, Put, NullWritable, Mutation>.Context context) throws IOException, InterruptedException { // 写出数据
for(Put value : values) {
context.write(NullWritable.get(), value);
}
}
} // 3. 创建Driver
public class HDFSDriver extends Configuration implements Tool{ private Configuration configuration = null; @Override
public void setConf(Configuration conf) {
this.configuration = conf;
} @Override
public Configuration getConf() {
return configuration;
} @Override
public int run(String[] args) throws Exception { // 获取 Job 对象
Job job = Job.getInstance(configuration); // 设置主类
job.setJarByClass(HDFSDriver.class); // 设置 Mapper
job.setMapperClass(HDFSMapper.class);
job.setMapOutputKeyClass(NullWritable.class);
job.setMapOutputValueClass(Put.class); // 设置 Reducer
TableMapReduceUtil.initTableReducerJob("fruit2", HDFSReducer.class, job); // 设置输入路径
// import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
FileInputFormat.setInputPaths(job, args[0]); // 提交
boolean result = job.waitForCompletion(true); return result ? 0 : 1;
} public static void main(String[] args) throws Exception { Configuration configuration = HBaseConfiguration.create();
ToolRunner.run(configuration, new HDFSDriver(), args); }
} // 4. 打成 fruit.jar包
// 5. HBase 中创建 fruit2 表
create 'fruit2','info' // 6. 在 /opt/module/hbase 中执行:
/opt/module/hadoop-2.8.5/bin/yarn jar ./fruit.jar com.noodles.mr2.HDFSDriver(Driver的类名) /input_fruit/fruit.tsv(文件路径)

HBase 与 MapReduce 集成的更多相关文章

  1. HBase概念学习(七)HBase与Mapreduce集成

    这篇文章是看了HBase权威指南之后,依据上面的解说搬下来的样例,可是略微有些不一样. HBase与mapreduce的集成无非就是mapreduce作业以HBase表作为输入,或者作为输出,也或者作 ...

  2. hbase与mapreduce集成

    一:运行给定的案例 1.获取jar包里的方法 2.运行hbase自带的mapreduce程序 lib/hbase-server-0.98.6-hadoop2.jar 3.具体运行 4.运行一个小方法 ...

  3. 074 hbase与mapreduce集成

    一:运行给定的案例 1.获取jar包里的方法 2.运行hbase自带的mapreduce程序 lib/hbase-server-0.98.6-hadoop2.jar 3.具体运行 注意命令:mapre ...

  4. 【HBase】HBase与MapReduce集成——从HDFS的文件读取数据到HBase

    目录 需求 步骤 一.创建maven工程,导入jar包 二.开发MapReduce程序 三.结果 需求 将HDFS路径 /hbase/input/user.txt 文件的内容读取并写入到HBase 表 ...

  5. hbase运行mapreduce设置及基本数据加载方法

    hbase与mapreduce集成后,运行mapreduce程序,同时需要mapreduce jar和hbase jar文件的支持,这时我们需要通过特殊设置使任务可以同时读取到hadoop jar和h ...

  6. 【HBase】HBase与MapReduce的集成案例

    目录 需求 步骤 一.创建maven工程,导入jar包 二.开发MapReduce程序 三.运行结果 HBase与MapReducer集成官方帮助文档:http://archive.cloudera. ...

  7. 大数据技术之_11_HBase学习_02_HBase API 操作 + HBase 与 Hive 集成 + HBase 优化

    第6章 HBase API 操作6.1 环境准备6.2 HBase API6.2.1 判断表是否存在6.2.2 抽取获取 Configuration.Connection.Admin 对象的方法以及关 ...

  8. Hbase与hive集成与对比

    HBase与Hive的对比 1.Hive (1) 数据仓库 Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询. (2) 用于数据分析.清洗 ...

  9. 《OD大数据实战》HBase整合MapReduce和Hive

    一.HBase整合MapReduce环境搭建 1. 搭建步骤1)在etc/hadoop目录中创建hbase-site.xml的软连接.在真正的集群环境中的时候,hadoop运行mapreduce会通过 ...

随机推荐

  1. MATLAB曲线拟合函数

    一.多项式拟合 ployfit(x,y,n) :找到次数为 n 的多项式系数,对于数据集合 {(x_i,y_i)},满足差的平方和最小 [P,E] = ployfit(x,y,n) :返回同上的多项式 ...

  2. UOJ#121. 【NOI2013】向量内积 随机化算法,矩阵

    原文链接www.cnblogs.com/zhouzhendong/UOJ121.html 前言 完蛋了我越来越菜了贺题都不会了. 题解 $O(n ^ 2 d) $ 暴力送 60 分. Bitset 优 ...

  3. 线程池(3)-参数-实现ThreadFactory

    1.介绍 ThreadFactory用来创建线程,需要实现newThread方法. 2.常用场景 线程重命名 设置守护进程 设置优先级 3.示例(线程重命名) public class ThreadF ...

  4. 小程序弹框wx.showModal的使用

    if (!logined) { wx.showModal({ title: '提示', content: '您还没登录登录车掌柜, 是否前往登录', confirmText: '前往登录', conf ...

  5. 基于Redis的分布式锁到底安全吗(上)?

    基于Redis的分布式锁到底安全吗(上)?  2017-02-11 网上有关Redis分布式锁的文章可谓多如牛毛了,不信的话你可以拿关键词“Redis 分布式锁”随便到哪个搜索引擎上去搜索一下就知道了 ...

  6. macbook ios recovery and mount hfs+ journal and revert

    sudo fsck.hfsplus -fryd /dev/sdc2 /sbin/fsck_hfs -yprd /dev/partitionName---can not fix b-tree node ...

  7. 第06组 Alpha冲刺(2/6)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 主要完成了上传照片模块的信息采集 具体完成了采集用户上传的照片信息.分析图像数据.比对数 ...

  8. 卷积和池化的区别、图像的上采样(upsampling)与下采样(subsampled)

    1.卷积 当从一个大尺寸图像中随机选取一小块,比如说 8x8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8x8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去. ...

  9. CEF3设置cookie

    #include "CEF3Helper.h" #include "../include/cef_app.h" #include "../includ ...

  10. 【django学习】request.POST与request.POST.get两者主要区别

    本文链接:https://blog.csdn.net/xun527/article/details/87777576request.POST是用来接收前端传过来的数据 一.request.POST.g ...