HBase与MR、hive集成

本文详细介绍了HBase如何与MapReduce、Hive进行集成。包括使用MapReduce读取HBase数据并写入另一张表,从HDFS文件读取数据写入HBase,以及通过bulkload批量加载数据。此外,还对比了HBase与Hive的特性和应用场景,以及如何整合Hive与HBase,将Hive分析结果保存到HBase中。

文章目录

12、HBase与MapReduce的集成

HBase当中的数据最终都是存储在HDFS上面的,HBase天生的支持MR的操作,我们可以通过MR直接处理HBase当中的数据,并且MR可以将处理后的结果直接存储到HBase当中去
需求:读取HBase当中一张表的数据,然后将数据写入到HBase当中的另外一张表当中去。注意:我们可以使用TableMapper与TableReducer来实现从HBase当中读取与写入数据
http://hbase.apache.org/2.0/book.html#mapreduce

需求一:读取myuser这张表当中的数据写入到HBase的另外一张表当中去

这里我们将myuser这张表当中f1列族的name和age字段写入到myuser2这张表的f1列族当中去

第一步:创建myuser2这张表

注意:列族的名字要与myuser表的列族名字相同
hbase(main):010:0> create ‘myuser2’,‘f1’

第二步:创建maven工程,导入jar包

注意:在之前工程导入jar包的基础上,添加以下这些jar包即可

  <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-mapreduce -->
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-mapreduce</artifactId>
    <version>2.0.0</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.7.5</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version> 2.7.5</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.5</version>
</dependency>
第三步:开发MR的程序

定义mapper类

public class HBaseMapper extends TableMapper<Text,Put> {
   
   
    /**
     * @param key  rowkey
     * @param value  封装了我们一行数据
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void map(ImmutableBytesWritable key, Result value, Context context) 
    throws IOException, InterruptedException {
   
   
        //  f1  name   age    f2   xxx
        //获取到我们的rowkey
        byte[] bytes = key.get();
        Put put = new Put(bytes);
        //获取Result当中所有的列
        List<Cell> cells = value.listCells();
        for (Cell cell : cells) {
   
   
            //判断属于哪一个列族
            byte[] family = CellUtil.cloneFamily(cell);
            //获取cell属于哪一个列
            byte[] qualifier = CellUtil.cloneQualifier(cell);
            if(Bytes.toString(family).equals("f1")){
   
   
                if(Bytes.toString(qualifier).equals("name") || 
                Bytes.toString(qualifier).equals("age")){
   
   
                    put.add(cell);
                }
            }
        }
        if(!put.isEmpty()){
   
   
            context.write(new Text(Bytes.toString(bytes)),put);
        }
    }
}

定义reducer类

/**
 * Text  key2的类型
 * Put   value2类型
 * ImmutableBytesWritable   k3的类型
 * V3的类型???
 * put 'myuser2','rowkey','f1:name','zhangsan'
 * javaAPI来写通过put对象即可
 *
 */
public class HBaseReducer extends TableReducer<Text,Put,ImmutableBytesWritable> {
   
   
    /**
     *
     * @param key  就是我们的key2
     * @param values  就是我们的v2
     * @param context  将我们的数据往外写出去
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void reduce(Text key, Iterable<Put> values, Context context) 
    throws IOException, InterruptedException {
   
   
        for (Put put : values) {
   
   
            context.write(new ImmutableBytesWritable(key.toString().getBytes()),put);
        }
    }
}

定义程序运行main方法

public class HBaseMrMain extends Configured implements Tool {
   
   
    @Override
    public int run(String[] args) throws Exception {
   
   
        Job job = Job.getInstance(super.getConf()
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 MPU6050是由InvenSense公司研发的六轴惯性测量单元(IMU),该设备融合了三轴陀螺仪和三轴加速度计。它能够即时检测设备在三维空间中的运动参数,例如角速度和加速度等指标。DMP(Digital Motion Processing)是MPU6050内部集成的一种硬件加速技术,它能够对传感器数据进行处理并实现姿态计算,从而降低主控制器如STM32的计算压力。 STM32是一款基于ARM Cortex-M架构的微控制器,该器件在嵌入式系统领域得到了广泛部署,其特点是处理性能高且能耗低,非常适合用于处理复杂的传感器数据和控制任务。在MPU6050的姿态计算应用场景中,STM32通常负责MPU6050进行通信、获取传感器数据,并基于DMP提供的结果进行后续的数据处理和应用。 在"MPU6050姿态计算STM32源代码(DMP)"这一项目中,研究者已经完成了将MPU6050的六轴数据通过DMP进行加工,并利用STM32进行读取和解析这些数据的工作。源代码可能涵盖以下几个核心组成部分: 1. **配置初始化**:初始化STM32的GPIO、I2C接口,目的是为了MPU6050建立有效的通信连接。此外,还需要对MPU6050的寄存器进行设置,激活DMP功能,并设定采样频率和滤波器参数。 2. **数据交换**:利用STM32的I2C接口周期性地从MPU6050获取DMP的输出结果,这些数据通常涵盖设备的角速度、加速度以及姿态角(包括俯仰角、翻滚角和偏航角等)。 3. **姿态计算**:尽管DMP已经对原始数据进行了基础处理,但在STM32端可能还需要进行二次处理,例如采用卡尔...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值