hbase与mapreduce集成(代码片段)

chenshaowei chenshaowei     2023-04-12     346

关键词:

感觉效率不是很高,是否能用sqoop来解决HBase与其他文件系统的数据导入导出。

通过HBase的相关JavaApi,我们可以实现伴随HBase操作的MapReduce过程,比如使用MapReduce将数据从本地文件导入HBase的表中,或我们从HBase的表中读取一些原始数据用于MapReduce做数据分析。


案例

将fruit文件的一部分数据,通过MapReduce导入fruit_mr表中

//fruit.tsv文件
1001 Apple Red
1002 Pear  Yellow
1003 Pineapple Yellow
构建ReadFruitMapper类,用于读取fruit表中的数据
package com.atguigu;
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;
public class ReadFruitMapper extends
TableMapper<ImmutableBytesWritable, Put> 
@Override
    protected void map(ImmutableBytesWritable key, Result value,
Context context) throws IOException, InterruptedException 
        //将 fruit 的 name 和 color 提取出来,相当于将每一行数据读取出来放入到 Put对象中。
        Put put = new Put(key.get());
        //遍历添加 column 行
        for(Cell cell: value.rawCells())
        //添加/克隆列族:info
        if("info".equals(Bytes.toString(CellUtil.cloneFamily(cell))))
        //添加/克隆列: name
            if("name".equals(Bytes.toString(CellUtil.cloneQualifier(cell))))
                //将该列 cell 加入到 put 对象中
                put.add(cell);
                //添加/克隆列:color
            else if("color".equals(Bytes.toString(CellUtil.cloneQualifier(cell)))) 
                //向该列 cell 加入到 put 对象中
                put.add(cell);
            
        
    
    //将从 fruit 读取到的每行数据写入到 context 中作为 map 的输出
    context.write(key, put);
    
构建WriteFruitMRReducer类,用于将读取到的数据写入fruit_mr表中
package com.atguigu.Hbase_mr;
import java.io.IOException;
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;
public class WriteFruitMRReducer extends
TableReducer<ImmutableBytesWritable, Put, NullWritable> 
@Override
    protected void reduce(ImmutableBytesWritable key, Iterable<Put>
    values, Context context)
    throws IOException, InterruptedException 

        //读出来的每一行数据写入到 fruit_mr 表中
        for(Put put: values)
        context.write(NullWritable.get(),     put);
        
    
构建Fruit2FruitMRRunner extends Congfigured implements Tool用于组装运行job
//组装 Job
public int run(String[] args) throws Exception 
//得到 Configuration
Configuration conf = this.getConf();
//创建 Job 任务
Job job = Job.getInstance(conf,
this.getClass().getSimpleName());
job.setJarByClass(Fruit2FruitMRRunner.class);
//配置 Job
Scan scan = new Scan();
scan.setCacheBlocks(false);
scan.setCaching(500);
//设置 Mapper,注意导入的是 mapreduce 包下的,不是 mapred 包下的,后者
是老版本
TableMapReduceUtil.initTableMapperJob(
"fruit", //数据源的表名
scan, //scan 扫描控制器
ReadFruitMapper.class,//设置 Mapper 类
ImmutableBytesWritable.class,//设置 Mapper 输出 key 类型
Put.class,//设置 Mapper 输出 value 值类型
job//设置给哪个 JOB
);
//设置 Reducer
TableMapReduceUtil.initTableReducerJob("fruit_mr",
WriteFruitMRReducer.class, job);
//设置 Reduce 数量,最少 1 个
job.setNumReduceTasks(1);
boolean isSuccess = job.waitForCompletion(true);
if(!isSuccess)
throw new IOException("Job running with error");

return isSuccess ? 0 : 1;
主函数中调用运行该job任务
public static void main( String[] args ) throws Exception
Configuration conf = HbaseConfiguration.create();
int status = ToolRunner.run(conf, new Fruit2FruitMRRunner(), args);
System.exit(status);
打包运行任务
$ /opt/module/hadoop-2.7.2/bin/yarn jar ~/softwares/jars/Hbase-
0.0.1-SNAPSHOT.jar
com.z.Hbase.mr1.Fruit2FruitMRRunner

hbase(代码片段)

...MemStoreFlush3.4读流程3.5StoreFileCompaction3.6RegionSplit4.2HBaseAPI4.3MapReduce4.3.1官方HBase-MapReduce4.3.2使用MapReduce将本地数据导入到HBase4.3.3自定义HBase-MapReduce4.4与Hive的集成4.4.1HBase与Hive的对比4.4.2HBase与Hive集成使用5HBase优化5.1高可用5.2预分区5.... 查看详情

hbase数据库深入使用与相关数据的加载(代码片段)

...hbase数据库javaapi调用三:hbase各个服务的作用四:hbase与mapreduce集成五:hbase使用BulkLoad加载数据一:hbase数据检索流程1.1hbase数据检索流程图:1.2hbase读的流程:读流程:1、client请求zookeeper集群(root/meta)(meta)--有多少table,table有... 查看详情

hbase与hive的集成操作(代码片段)

1.介绍  Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询插入操作以及进行Join和Union等复杂查询,同时也可以将hive表中的数据映射到HBase中;2.模型概念  2.1将ETL操作的数据存入HBase      2.2HBase作为Hi... 查看详情

hbase与hive(代码片段)

...Hive适用于离线的数据分析和清洗,延迟较高。基于HDFS、MapReduce:Hive存储的数据依旧在DataNode上,编写的HQL语句终将是转换为MapReduce代码执行。2.HBase数据库:是一种面向列族存储的非关系型数据库。用于存储结构 查看详情

hbase(代码片段)

续接(三)3habse(1.2)集成hive(1.2.1)===》不兼容集成,需要自己编译!!!    hive1.x与hbase0.98版本兼容    hive2.x与hbase1.x版本以上兼容    hive0.x与hbase0.98以下兼容  Hive提供了与HBase的集成,使得能够在HBase表... 查看详情

自定义hbase-mapreduce(代码片段)

自定义HBase-MapReduce1hdfs->table2table->table3自定义协处理器1hdfs->table需求:从hdfs读取数据,插入到hbase的表中mapperpublicclassFruitMapperextendsMapper<LongWritable,Text,LongWritable,Text>@Overrideprotect 查看详情

自定义hbase-mapreduce(代码片段)

自定义HBase-MapReduce1hdfs->table2table->table3自定义协处理器1hdfs->table需求:从hdfs读取数据,插入到hbase的表中mapperpublicclassFruitMapperextendsMapper<LongWritable,Text,LongWritable,Text>@Overrideprotec 查看详情

hbase与hive集成(代码片段)

...据,不适合做关联查询,join延迟较低,高效的数据访问集成使用案例一建立Hive表,关联HBase表,插入数据到Hive表的同时能够影响HBase表在Hive中创建表同时关联HBaseCREATETABLEhive_hbase_emp_table(empnoint,enamestring,jobstring,mgrint,hiredatestring,s... 查看详情

自定义hbase-mapreduce1(代码片段)

自定义HBase-MapReduce1目标:将fruit表中的一部分数据(列为name的数据),通过MR迁入到fruit_mr表中。分步实现:1.构建FruitMapper类,用于读取fruit表中的数据packagecom.atlxl.mr1;importorg.apache.hadoop.hbase.Cell;importorg.apache.hadoop.hbase.CellUtil;imp 查看详情

hbase集成phoenix创建二级索引(代码片段)

一、Hbase集成Phoneix1、下载在官网http://www.apache.org/dyn/closer.lua/phoenix/中选择提供的镜像站点中下载与安装的HBase版本对应的版本。本地使用的1.2.5,故下载的apache-phoenix-4.11.0-HBase-1.2/的tar.gz包。2、上传并解压tar-zxvfapache-phoenix-4.13.1-H... 查看详情

hbase使用mapreduce操作4(实现将hdfs中的数据写入到hbase表中)(代码片段)

...che.hadoop.hbase.io.ImmutableBytesWritable;11importorg.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;12importorg.apache.hadoop.mapreduce.Job;13importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;14importor 查看详情

flink与hbase交互(代码片段)

...原始的高效操作方式,而第二、第三则分别是Spark、Flink集成HBase的方式,最后一种是第三方插件Phoenix集成的JDBC方式,Phoenix集成的JDBC操作方式也能在Spark、Flink中调用。注意:这里我们使用HBase2.1.2版本,flink1.7.2版本,scala-2.12版... 查看详情

熟悉常用的hbase操作,编写mapreduce作业(代码片段)

1.以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据: 学号(S_No)姓名(S_Name)性别(S_Sex)年龄(S_Age)课程(course)2015001Zhangsanmale23 2015003Maryfemale22 2015003Lisimale24数学(Math)85 &nb... 查看详情

熟悉常用的hbase操作,编写mapreduce作业(代码片段)

1***创建数据表studen其中info,course分别为表studen的两个列族,info存储学生个人信息——学号、姓名、性别、年龄course则存储课程信息***create‘studen‘,‘info‘,‘course‘接着添加学号为2015001的学生信息put‘studen‘,‘001‘,‘info:S_No... 查看详情

熟悉常用的hbase操作,编写mapreduce作业(代码片段)

1.以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:学生表(Student)(不包括最后一列)学号(S_No)姓名(S_Name)性别(S_Sex)年龄(S_Age)课程(course)2015001Zhangsanmale23 2015003Maryfemale22 2... 查看详情

熟悉常用的hbase操作,编写mapreduce作业(代码片段)

1.以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:学生表(Student)(不包括最后一列)学号(S_No)姓名(S_Name)性别(S_Sex)年龄(S_Age)课程(course)2015001Zhangsanmale23 2015003Maryfemale22 2... 查看详情

熟悉常用的hbase操作,编写mapreduce作业(代码片段)

1.以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:学生表(Student)(不包括最后一列)学号(S_No)姓名(S_Name)性别(S_Sex)年龄(S_Age)课程(course)2015001Wangwumale23 2015003Maryfemale22 201... 查看详情

熟悉常用的hbase操作,编写mapreduce作业(代码片段)

1.以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:学生表(Student)(不包括最后一列)学号(S_No)姓名(S_Name)性别(S_Sex)年龄(S_Age)课程(course)2015001Zhangsanmale23 2015003Maryfemale22 2... 查看详情