实验Hbase的test中的TestTableMapReduce类--修改成简单易懂点的

简介: 不积跬步,无以至千里!这几天狂看mapreduce对hbase进行操作的例子,消化吸收,熟能生巧,掌握mapreduce和hbase交互的各个细节,以及整体流程等,整体流程等年前写一篇总结下,这几天先狂看吧看,复制,修改,运行,遇到各种问题,解决,慢慢的就熟了。这个类是干啥的呢,其实就是对hbase的某表进行简单操作,不过用的是mapreduce,即效率高,当然,看这个,主要吸收其用mapreduce操作hbase的思路及如何编程。这个类功能是:将表中所有行 列族f1的某列q1的值倒序后放在另一列族f2的列q2,所谓倒序即 abc变成cba,456变成654,其中q1和q2是可

不积跬步,无以至千里!

这几天狂看mapreduce对hbase进行操作的例子,消化吸收,熟能生巧,掌握mapreduce和hbase交互的各个细节,以及整体流程等,整体流程等年前写一篇总结下,这几天先狂看吧

看,复制,修改,运行,遇到各种问题,解决,慢慢的就熟了。

这个类是干啥的呢,其实就是对hbase的某表进行简单操作,不过用的是mapreduce,即效率高,当然,看这个,主要吸收其用mapreduce操作hbase的思路及如何编程。

这个类功能是:将表中所有行 列族f1的某列q1的值倒序后放在另一列族f2的列q2,所谓倒序即 abc变成cba,456变成654,其中q1和q2是可以相同的,因为不同列族嘛。

上代码了:

[java] view plaincopyprint?
package mapreduce.hbase;

import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.NavigableMap;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.IdentityTableReducer;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class TestMRHBase {

private static final Log LOG = LogFactory.getLog(TestMRHBase.class);  
static final String MULTI_REGION_TABLE_NAME = "mr_test"; // 表名   
static final byte[] INPUT_FAMILY = Bytes.toBytes("contents");// 原列族名   
static final byte[] OUTPUT_FAMILY = Bytes.toBytes("text");// 写入的列族名   
static final byte[] QUALIFIER_NAME = Bytes.toBytes("data");// 列名   

  
public static class TestMap extends  
        TableMapper {  
      
    protected void map(ImmutableBytesWritable key, Result value,  
            Context context) throws IOException, InterruptedException {  
        if (value.size() != 1) {  
            throw new IOException("There should only be one column! ");  
        }  
        Map<byte[], NavigableMap<byte[], NavigableMapbyte[]>>> cf = value  
                .getMap();  
        if (!cf.containsKey(INPUT_FAMILY)) {  
            throw new IOException("Wrong input columns. Missing: '"  
                    + Bytes.toString(INPUT_FAMILY) + "'.");  
        }  
        // Get the original value and reverse it   
        String originalValue = new String(value.getValue(INPUT_FAMILY,  
                QUALIFIER_NAME), HConstants.UTF8_ENCODING);  
        StringBuilder newValue = new StringBuilder(originalValue);  
        newValue.reverse();  
        // Now set the value to be collected   
        Put outval = new Put(key.get());  
        outval.add(OUTPUT_FAMILY, QUALIFIER_NAME, Bytes.toBytes(newValue  
                .toString()));  
        context.write(key, outval);  
    }  

}  

  
public void testMultiRegionTable() throws IOException,  
        InterruptedException, ClassNotFoundException {  
    Configuration conf = HBaseConfiguration.create();  
    conf.set("hbase.zookeeper.quorum", "node2,node4,node3");  
    runTestOnTable(new HTable(new Configuration(conf),  
            MULTI_REGION_TABLE_NAME));  
}  

private void runTestOnTable(HTable table) throws IOException,  
        InterruptedException, ClassNotFoundException {  

    Job job = null;  
    try {  
        LOG.info("Before map/reduce startup");  
        job = new Job(table.getConfiguration(), "process column contents");  
        job.setNumReduceTasks(1);  
        job.setJarByClass(TestMRHBase.class);  
        Scan scan = new Scan();  
        scan.addFamily(INPUT_FAMILY);  
        TableMapReduceUtil.initTableMapperJob(Bytes.toString(table  
                .getTableName()), scan, TestMap.class,  
                ImmutableBytesWritable.class, Put.class, job);  
        TableMapReduceUtil.initTableReducerJob(Bytes.toString(table  
                .getTableName()), IdentityTableReducer.class, job);  
        FileOutputFormat.setOutputPath(job, new Path("test"));  
        LOG.info("Started " + Bytes.toString(table.getTableName()));  
        job.waitForCompletion(true);  
        LOG.info("After map/reduce completion");  

        // verify map-reduce results   
        // verify(Bytes.toString(table.getTableName()));   
    } finally {  
        // mrCluster.shutdown();   
        if (job != null) {  
            FileUtil.fullyDelete(new File(job.getConfiguration().get(  
                    "hadoop.tmp.dir")));  
        }  
    }  
}  

  
public static void main(String[] args) throws Exception {  
    TestMRHBase testMRHBase = new TestMRHBase();  
    testMRHBase.testMultiRegionTable();  

}  

}

过程中遇到一些异常,唉…… 一定要长记性啊,否则,大好青春不能总被同样的错误耗费掉啊

1.classnotfoundexception:又是这个,这次卖QQ号码平台的错误是因为没job.setJarByClass

2.java.lang.NoSuchMethodException: mapreduce.hbase.TestMRHBase$TestMap.()

这是为什么呢?

因为类中类TestMap没有设置成static类型,结果map任务时找不到此map的init,只要类中map类设成static即可

其他的一个小问题就不说了。

在拿来别人的东西时,如果想修改下,一定要读透了

取其精华,去其糟粕

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
存储 分布式计算 NoSQL
大数据编程技术基础实验七:HBase实验——部署HBase
大数据技术基础实验七,.掌握HBase集群安装部署及HBase Shell的一些常用命令的使用。
554 0
大数据编程技术基础实验七:HBase实验——部署HBase
|
存储 分布式计算 Java
云计算与大数据实验七 HBase的安装与基本操作
云计算与大数据实验七 HBase的安装与基本操作
670 0
|
Shell 测试技术 分布式数据库
HBase实验:部署HBase
HBase实验:部署HBase
HBase实验:部署HBase
|
缓存 JavaScript 分布式数据库
HBase API 详细例子(封装的DAO类)
HBase中没有库的概念 HBase lib目录下所有JAR包复制到项目中,Hbase 版本0.98.5 package com.zxing.imgQRCode; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.apache.hadoop.conf.Con
6051 0
|
2月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
85 4
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
67 4
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
31 3
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
55 3