Hbase实践将所有info列簇下的name列导入到另一张表中

简介: Hbase实践将所有info列簇下的name列导入到另一张表中

将所有info列簇下的name列导入到另一张表中

建表:

读取的表:create 'stu_info','info','degree','work'

写入的表:create 't5',{NAME => 'info'}

put 'stu_info','20170820_10001','degree:xueli','benke'
put 'stu_info','20170820_10001','info:age','18'
put 'stu_info','20170820_10001','info:sex','male'
put 'stu_info','20170820_10001','info:name','tom'
put 'stu_info','20170820_10001','work:job','bigdata'
put 'stu_info','20170820_10002','degree:xueli','gaozhong'
put 'stu_info','20170820_10002','info:age','22'
put 'stu_info','20170820_10002','info:sex','female'
put 'stu_info','20170820_10002','info:name','jack'
put 'stu_info','20170820_10003','info:age','22'
put 'stu_info','20170820_10003','info:name','leo'
put 'stu_info','20170820_10004','info:age','18'
put 'stu_info','20170820_10004','info:name','peter'
put 'stu_info','20170820_10005','info:age','19'
put 'stu_info','20170820_10005','info:name','jim'
put 'stu_info','20170820_10006','info:age','20'
put 'stu_info','20170820_10006','info:name','zhangsan'

 

引入依赖

<properties>
     <hbase.version>0.98.6-hadoop2</hbase.version>
</properties>
<!-- hbase Dependency -->
<dependency>
     <groupId>org.apache.hbase</groupId>
     <artifactId>hbase-client</artifactId>
     <version>${hbase.version}</version>
</dependency>
<dependency>
     <groupId>org.apache.hbase</groupId>
     <artifactId>hbase-server</artifactId>
     <version>${hbase.version}</version>
</dependency>

 

编写TestHBasemapper类和TestHBaseDriver类

打jar包,同时选中两个类,右击export 打包

package com.lzhsite.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class TestHBaseDriver extends Configured implements Tool{
  @Override
  public int run(String[] args) throws Exception {
    Configuration conf = this.getConf();
    //job
    Job job = Job.getInstance(conf, "mr-hbase");
    job.setJarByClass(TestHBaseDriver.class);
    Scan scan = new Scan();
    scan.addFamily(Bytes.toBytes("info")); 
    TableMapReduceUtil.initTableMapperJob(
          "stu_info",        // input table
          scan,               // Scan instance to control CF and attribute selection
          TestHBaseMapper.class,     // mapper class
          ImmutableBytesWritable.class,         // mapper output key
          Put.class,  // mapper output value
          //job,false);  //最后一个参数表示是否打包运行
        job);   
    TableMapReduceUtil.initTableReducerJob(
          "t5",        // output table
          null,    // reducer class
         // job,null,null,null,null,false); //最后一个参数表示是否打包运行
           job);
        job.setNumReduceTasks(1);   // at least one, adjust as required
    return job.waitForCompletion(true) ? 0:1;
  }
  public static void main(String[] args) {
    Configuration conf = HBaseConfiguration.create();
    try {
      int status = ToolRunner.run(conf, new TestHBaseDriver(), args);
      System.exit(status);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
package com.lzhsite.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class TestHBaseDriver extends Configured implements Tool{
  @Override
  public int run(String[] args) throws Exception {
    Configuration conf = this.getConf();
    //job
    Job job = Job.getInstance(conf, "mr-hbase");
    job.setJarByClass(TestHBaseDriver.class);
    Scan scan = new Scan();
    scan.addFamily(Bytes.toBytes("info")); 
    TableMapReduceUtil.initTableMapperJob(
          "stu_info",        // input table
          scan,               // Scan instance to control CF and attribute selection
          TestHBaseMapper.class,     // mapper class
          ImmutableBytesWritable.class,         // mapper output key
          Put.class,  // mapper output value
          //job,false);  //最后一个参数表示是否打包运行
        job);   
    TableMapReduceUtil.initTableReducerJob(
          "t5",        // output table
          null,    // reducer class
         // job,null,null,null,null,false); //最后一个参数表示是否打包运行
           job);
        job.setNumReduceTasks(1);   // at least one, adjust as required
    return job.waitForCompletion(true) ? 0:1;
  }
  public static void main(String[] args) {
    Configuration conf = HBaseConfiguration.create();
    try {
      int status = ToolRunner.run(conf, new TestHBaseDriver(), args);
      System.exit(status);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

 

-->运行jar包

/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/datas/Test_HBase_mr.jar

 

-->查看数据

scan 'default:stu_info'

scan 'default:t5'

遇到的问题:

eclipse本地执行代码是报:Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.mapred.ReduceTask.setLocalMapFiles

放在linux里运行却可以,感觉是hbase 0.98.6-hadoop2的一个bug,如果把mavne依赖里的hbase版本升级到1.2.6由于服务器安装的是hbase-0.98.6-cdh5.3.6,在本地运行又会造成HRegionServer节点挂掉

 

相关实践学习
云数据库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
相关文章
|
9月前
|
存储 分布式数据库 Hbase
分布式数据库HBase的基本概念和架构之概念面向列(簇)的分布式数据库
在分布式数据库 HBase 中,数据的存储和管理是基于列的分布式存储。
48 0
|
分布式计算 Hadoop 分布式数据库
通过Datax将CSV文件导入Hbase,导入之前的CSV文件大小和导入之后的Hadoop分布式文件大小对比引入的思考
由于项目需要做系统之间的离线数据同步,因为实时性要求不高,因此考虑采用了阿里的datax来进行同步。在同步之前,将数据导出未csv文件,因为需要估算将来的hbase运行的hadoop的分布式文件系统需要占用多少磁盘空间,因此想到了需要做几组测试。
2177 0
|
分布式数据库 索引 Hbase
使用elasticsearch提高hbase基于列的查询效率
使用elasticsearch提高hbase基于列的查询效率 网上能查到的hbase提高基于列的查询效率基本上是建立二级索引的方法,介绍另外一种方法,使用分布式索引技术elasticsearch来提高效率, 基本思路和二级索引差不多,都是通过对要查询的列建立索引,先根据建立的列索引查询到rowkey,再根据rowkey查询到需要的数据,步骤如下: 1.
4326 0
|
分布式计算 分布式数据库 Apache
|
分布式计算 分布式数据库 Hbase
hbase 学习(十二)非mapreduce生成Hfile,然后导入hbase当中
最近一个群友的boss让研究hbase,让hbase的入库速度达到5w+/s,这可愁死了,4台个人电脑组成的集群,多线程入库调了好久,速度也才1w左右,于是想到“非mapreduce生成Hfile,然后导入hbase当中”。
1797 0
|
Java Maven Android开发
Hbase源码编译导入eclipse
首先去Apache的官网下载hbase1.0.1的源码包 由于源码包是用maven管理,需要安装maven 1.安装MAVEN 下载安装包 解压文件,Maven需要JDK的支持,配置JAVA_HOME和Path环境变量, 命令行输入 mvn -version,如下图所示表示安装成功 2.配置本地仓库路径 打开...\apache-maven-3.3.3\conf目录下的settin
3367 0
|
SQL Java 分布式数据库
csv导入HBase
csv文件导入HBase
7057 0

相关实验场景

更多