`
kirayuan
  • 浏览: 39760 次
文章分类
社区版块
存档分类
最新评论

MR操作hbase的一点心得(含hbase表拷贝样例代码)

 
阅读更多

最近在写基于hbase的MR程序。总结如下:

1、使用TableMapper来读取表

2、写入表的第一种方式是用TableMapReduceUtil.initTableReducerJob的方法,这里既可以在map阶段输出,也能在reduce阶段输出。区别是Reduce的class设置为null或者实际的reduce 以下是一个表copy的例子:

package com.run.test;

import java.io.IOException;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.hbase.KeyValue;
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.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;

public class TableCopy extends Configured implements Tool{
	
	static class CopyMapper extends TableMapper<ImmutableBytesWritable,Put>{

		@Override
		protected void map(ImmutableBytesWritable key, Result value,
				Context context) throws IOException, InterruptedException {
			// TODO Auto-generated method stub
			//将查询结果保存到list
			List<KeyValue> kvs =  value.list();
			Put p = new Put();
			//将结果装载到Put
			for(KeyValue kv : kvs)
				p.add(kv);
			//将结果写入到Reduce
			context.write(key, p);
		}
		
	}
	
	public static Job createSubmittableJob(Configuration conf, String[] args)throws IOException{
		String jobName = args[0];
		String srcTable = args[1];
		String dstTable = args[2];
		Scan sc = new Scan();
		sc.setCaching(10000);
		sc.setCacheBlocks(false);
		Job job = new Job(conf,jobName);
		job.setJarByClass(TableCopy.class);
		job.setNumReduceTasks(0);
		TableMapReduceUtil.initTableMapperJob(srcTable, sc, CopyMapper.class, ImmutableBytesWritable.class, Result.class, job);
		TableMapReduceUtil.initTableReducerJob(dstTable, null, job);
		return job;
		
	}
	
	@Override
	public int run(String[] args)throws Exception{
		Job job = createSubmittableJob(getConf(), args);
		return job.waitForCompletion(true)? 0 : 1;
	}
	
}
3、写入表的方式还有一种,就是调用hbase的原生api,即HTable.put的方式写入数据(这种方式适合写少量数据,或者统计后的结果)

  


  
分享到:
评论

相关推荐

    WordCount,HBase MR样例代码

    “HBase MR样例代码”则指的是使用Hadoop的MapReduce框架来操作HBase,HBase是一个基于Google的Bigtable论文设计的开源NoSQL数据库,运行在Hadoop之上。HBase提供高吞吐量的数据读写能力,适合存储非结构化和半结构...

    HbaseTemplate 操作hbase

    3. **获取(get)操作**:获取操作用于根据行键获取HBase表中的一行数据。HbaseTemplate的`get`方法接受RowKey作为参数,返回一个Result对象,其中包含了该行的所有列族和列的信息。 4. **执行(execute)操作**:`...

    Java操作Hbase进行建表、删表以及对数据进行增删改查

    Java 操作 Hbase 进行建表、删表以及对数据进行增删改查 一、Hbase 简介 Hbase 是一个开源的、分布式的、基于 column-family 的 NoSQL 数据库。它是基于 Hadoop 的,使用 HDFS 作为其存储层。Hbase 提供了高性能、...

    HBase基本操作 Java代码

    HBase基本操作 增删改查 java代码 要使用须导入对应的jar包

    java代码将mysql表数据导入HBase表

    本文将详细介绍如何使用Java代码实现这一过程,包括样例MySQL表和数据,以及HBase表的创建。 首先,我们需要了解MySQL和HBase的基本概念。MySQL是一种关系型数据库管理系统,它基于ACID(原子性、一致性、隔离性和...

    MR程序Bulkload数据到hbase

    标题中的“MR程序Bulkload数据到hbase”指的是使用MapReduce(MR)程序批量加载(Bulkload)数据到HBase数据库的过程。MapReduce是Apache Hadoop框架中的一个关键组件,用于处理和生成大规模数据集。而HBase是一个...

    java代码使用thrift2操作hbase示例

    在本文中,我们将深入探讨如何使用Java通过Thrift2接口操作HBase数据库。HBase是一个分布式、可扩展的大数据存储系统,它构建于Hadoop之上,支持实时读写。Thrift是一个轻量级的框架,用于跨语言服务开发,允许不同...

    scala API 操作hbase表

    在本文中,我们将深入探讨如何...理解HBase的表结构、行键设计、列族和时间戳等概念对于有效地使用Scala API操作HBase至关重要。同时,熟悉HBase的RegionServer和Master节点的工作原理也有助于优化你的应用程序性能。

    java操作Hbase之实现表的创建删除源码

    导入这些库后,你可以开始编写Java代码来操作HBase表。以下是一些关键步骤和API的使用: 1. **连接HBase**:首先,你需要创建一个`Configuration`对象,设置HBase的ZooKeeper连接信息,然后使用`ConnectionFactory`...

    java链接及操作hbase实例代码

    这个名为“Hbasetest”的压缩包文件很可能包含了上述操作的完整示例代码,你可以通过查看和运行代码来加深对Java操作HBase的理解。务必注意,根据你的HBase集群配置,可能需要调整代码中的连接参数,以确保正确连接...

    VC代码 hbase1.0 (实用代码源).rar

    VC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 ...

    Hbase笔记 —— 利用JavaAPI的方式操作Hbase数据库(往hbase的表中批量插入数据).pdf

    在本文档中,我们将深入探讨如何使用Java API与HBase数据库进行交互,特别是关于如何创建表、修改表结构以及批量插入数据。HBase是Apache的一个分布式、可扩展的大数据存储系统,它基于谷歌的Bigtable设计,适用于...

    实验三:熟悉常用的HBase操作

    继续深入,HBase的操作还包括创建表、插入数据、更新数据和删除数据等。在Shell中,创建表如`create 'table_name', 'column_family'`,插入数据则使用`put`命令,更新可通过`put`命令覆盖原有数据,删除数据可以是...

    java操作Hbase之从Hbase中读取数据写入hdfs中源码

    HBase的设计目标是对超大型表进行随机、实时读写操作。而HDFS则是Hadoop的核心组件,作为一个分布式文件系统,它能够跨多台服务器存储和处理大量数据。 在Java中操作HBase,我们需要使用HBase的Java客户端API。首先...

    Hbase MOB 样例

    综上所述,"Hbase MOB 样例" 提供了一个基于 CDH 平台的存档应用程序,利用 HBase 的 MOB 功能优化小文件的上传和检索,通过 REST API 提供服务。这个项目展示了如何在大数据环境中有效管理和处理小文件,同时利用 ...

    thrift操作Hbase数据库

    Thrift的IDL(Interface Description Language)文件定义了与Hbase交互的协议,包括表的操作、行键、列族、列限定符等概念。 2. **C#环境准备** 在C#环境中,我们需要安装Thrift的C#绑定库,并使用Thrift编译器将...

    Hbase的安装过程及基本操作

    在本文中,我们将详细讲解Hbase的安装过程以及基本操作,特别针对在Linux环境下使用清华大学镜像进行下载的情况。Hbase是一个分布式的、面向列的数据库,常用于大数据存储,是Apache Hadoop生态系统的一部分。以下是...

    Hbase应用开发实验报告及代码

    Hbase应用开发实验报告及代码;(1) 列出HBase所有的表的相关信息,例如表名、创建时间等;(2) 在终端打印出指定的表的所有记录数据;(3) 向已经创建好的表添加和删除指定的列族或列;(4) 清空指定的表的所有...

    HBase源代码 hbase-0.98.23

    在hbase-0.98.23的源代码中,可以看到`org.apache.hadoop.hbase.regionserver.HRegion`类是处理单个HBase表区域的主要类,其中包含了行键到列族数据的映射。 其次,HBase的数据模型是分布式存储的关键。`org.apache...

    Hbase 安装与基本使用

    1. **创建表**:使用HBase shell或Java API,通过`create '表名', '列族'`命令创建表,例如`create 'users', 'info'`创建名为users的表,列族为info。 2. **插入数据**:插入数据通过`put '表名', '行键', '列族:列...

Global site tag (gtag.js) - Google Analytics