实验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即可

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

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

取其精华,去其糟粕

目录
相关文章
|
存储 分布式计算 NoSQL
大数据编程技术基础实验七:HBase实验——部署HBase
大数据技术基础实验七,.掌握HBase集群安装部署及HBase Shell的一些常用命令的使用。
899 0
大数据编程技术基础实验七:HBase实验——部署HBase
|
存储 分布式计算 Java
云计算与大数据实验七 HBase的安装与基本操作
云计算与大数据实验七 HBase的安装与基本操作
922 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
6114 0
|
4月前
|
分布式计算 Ubuntu Hadoop
Ubuntu22.04下搭建Hadoop3.3.6+Hbase2.5.6+Phoenix5.1.3开发环境的指南
呈上,这些步骤如诗如画,但有效且动人。仿佛一个画家在画布上描绘出一幅完美的画面,这就是你的开发环境。接下来,尽情去创造吧,祝编程愉快!
182 19
|
12月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
242 4
|
11月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
213 4
|
11月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
106 3