`

HBASE 导入数据(转)

 
阅读更多

 

转自:http://blog.csdn.net/dajuezhao/article/details/6365053

转自:http://blog.csdn.net/dajuezhao/article/details/6365053

 

一、MR生成HFile文件

 

[java] view plain copy

package insert.tools.hfile;  

  

import java.io.IOException;  

  

import org.apache.hadoop.conf.Configuration;  

import org.apache.hadoop.fs.Path;  

import org.apache.hadoop.hbase.HBaseConfiguration;  

import org.apache.hadoop.hbase.KeyValue;  

import org.apache.hadoop.hbase.io.ImmutableBytesWritable;  

import org.apache.hadoop.hbase.mapreduce.KeyValueSortReducer;  

import org.apache.hadoop.hbase.util.Bytes;  

import org.apache.hadoop.io.LongWritable;  

import org.apache.hadoop.io.Text;  

import org.apache.hadoop.mapreduce.Job;  

import org.apache.hadoop.mapreduce.Mapper;  

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  

  

public class TestHFileToHBase {  

  

    public static class TestHFileToHBaseMapper extends Mapper {  

  

        @Override  

        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {  

            String[] values = value.toString().split("/t", 2);  

            byte[] row = Bytes.toBytes(values[0]);  

            ImmutableBytesWritable k = new ImmutableBytesWritable(row);  

            KeyValue kvProtocol = new KeyValue(row, "PROTOCOLID".getBytes(), "PROTOCOLID".getBytes(), values[1]  

                    .getBytes());  

            context.write(k, kvProtocol);  

  

            // KeyValue kvSrcip = new KeyValue(row, "SRCIP".getBytes(),  

            // "SRCIP".getBytes(), values[1].getBytes());  

            // context.write(k, kvSrcip);  

//           HFileOutputFormat.getRecordWriter   

        }  

  

    }  

  

    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {  

        Configuration conf = HBaseConfiguration.create();  

        Job job = new Job(conf, "TestHFileToHBase");  

        job.setJarByClass(TestHFileToHBase.class);  

  

        job.setOutputKeyClass(ImmutableBytesWritable.class);  

        job.setOutputValueClass(KeyValue.class);  

  

        job.setMapperClass(TestHFileToHBaseMapper.class);  

        job.setReducerClass(KeyValueSortReducer.class);  

//      job.setOutputFormatClass(org.apache.hadoop.hbase.mapreduce.HFileOutputFormat.class);  

        job.setOutputFormatClass(HFileOutputFormat.class);  

        // job.setNumReduceTasks(4);  

        // job.setPartitionerClass(org.apache.hadoop.hbase.mapreduce.SimpleTotalOrderPartitioner.class);  

  

        // HBaseAdmin admin = new HBaseAdmin(conf);  

//      HTable table = new HTable(conf, "hua");  

  

         HFileOutputFormat.configureIncrementalLoad(job, table);  

  

        FileInputFormat.addInputPath(job, new Path(args[0]));  

        FileOutputFormat.setOutputPath(job, new Path(args[1]));  

  

        System.exit(job.waitForCompletion(true) ? 0 : 1);  

    }  

  

}  

 

 

 

 

三、MR生成HFile的注意事项

 

1. 无论是map还是reduce作为最终的输出结果,输出的key和value的类型应该是: 或者< ImmutableBytesWritable, Put>。

 

2. Map或者reduce的输出类型是KeyValue 或Put对应KeyValueSortReducer或PutSortReducer。

 

3. MR例子中job.setOutputFormatClass(HFileOutputFormat.class); HFileOutputFormat是改进后的mr,可适用于多列族同时生成HFile文件,源码中只适合一次对单列族组织成HFile文件。

 

4. MR例子中HFileOutputFormat.configureIncrementalLoad(job, table);自动对job进行配置,SimpleTotalOrderPartitioner是需要先对key进行整体排序,然后划分到每个reduce中,保证每一个reducer中的的key最小最大值区间范围,是不会有交集的。

 

因为入库到Hbase的时候,作为一个整体的Region,key是绝对有序的。

 

5. MR例子中最后生成HFile存储在HDFS上,输出路径下的子目录是各个列族。如果对HFile进行入库HBase,相当于move HFile到HBase的Region中,HFile子目录的列族内容没有了。

 

四、HFile入库到HBase

 

[java] view plain copy

import org.apache.hadoop.hbase.client.HTable;  

import org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles;  

import org.apache.hadoop.hbase.util.Bytes;  

  

public class TestLoadIncrementalHFileToHBase {  

  

    // private static final byte[] TABLE = Bytes.toBytes("hua");  

    // private static final byte[] QUALIFIER = Bytes.toBytes("PROTOCOLID");  

    // private static final byte[] FAMILY = Bytes.toBytes("PROTOCOLID");  

  

    public static void main(String[] args) throws IOException {  

        Configuration conf = HBaseConfiguration.create();  

//      byte[] TABLE = Bytes.toBytes("hua");  

        byte[] TABLE = Bytes.toBytes(args[0]);  

        HTable table = new HTable(TABLE);  

        LoadIncrementalHFiles loader = new LoadIncrementalHFiles(conf);  

        loader.doBulkLoad(new Path(args[1]), table);  

//      loader.doBulkLoad(new Path("/hua/testHFileResult/"), table);  

    }  

  

}  

 

 

五、HFile入库到HBase注意事项

 

1. 通过HBase中 LoadIncrementalHFiles的doBulkLoad方法,对生成的HFile文件入库,入库的第一个参数是表名,第二个参数是HFile的路径(以上MR生成HFile的输出路径),也可一个个列族录入到HBase中对应的表列族。

 

2. 如何入库的相关链接:

 

http://hbase.apache.org/docs/r0.89.20100726/bulk-loads.html

 

http://hbase.apache.org/docs/r0.20.6/api/org/apache/hadoop/hbase/mapreduce/package-summary.html#bulk

 

http://genius-bai.javaeye.com/blog/641927

 

3. 入库分为代码入库以及脚本入库。代码入库有两种,一种是

 

Hadoop jar hbase-VERSION.jar completebulkload /myoutput mytable;

 

另外一种是通过以上的TestLoadIncrementalHFileToHBase类。

 

脚本入库为:jruby  $HBASE_HOME/bin/loadtable.rb  hbase-mytable  hadoop-hbase-hfile-outputdir。

 

 

分享到:
评论

相关推荐

    hbase导入测试数据集

    博客文档链接中提到的内容可能包括使用HBase的命令行接口(HBase Shell)或编程API(如Java API)来导入数据。ORDER_INFO.txt文件很可能是我们需要导入的数据源,它可能包含了订单信息,如订单ID、用户ID、商品ID、...

    hbase海量数据的全量导入方法

    1. **预分区**:在导入数据前,根据预计的数据量创建足够的区域(region),避免数据导入过程中动态分区导致的性能损耗。 2. **使用HFileOutputFormat**:HBase提供了HFileOutputFormat类,可以将数据直接写入HFile...

    java解决hive快速导数据到Hbase代码

    总之,Java在Hive和HBase的数据交互中起到桥梁作用,通过精心设计的数据处理流程和合理的利用HBase的Bulk Load特性,可以高效地将Hive中的大量数据导入到HBase,满足实时查询的需求。在大数据场景下,这种方案具有很...

    hbase导入话单数据mapreduce函数实现执行过程实例(博客附件)

    标题中的“hbase导入话单数据mapreduce函数实现执行过程实例”揭示了本文将探讨如何使用MapReduce在HBase中导入大数据,特别是话单记录。HBase是一个分布式、版本化的NoSQL数据库,常用于处理大规模的数据。...

    kettle集群搭建以及使用kettle将mysql数据转换为Hbase数据

    在完成集群搭建后,接下来就是利用Kettle将MySQL中的数据转换并导入到HBase中。这一步骤主要包括以下几个方面: 1. **建立连接**:使用Kettle建立与MySQL数据库的连接,并确保连接正确无误。 2. **数据抽取**:设计...

    hbase数据可视化系统

    《HBase数据可视化系统构建详解》 在大数据领域,HBase作为一款分布式列式数据库,因其高并发、低...在实际应用中,可以根据需求进一步扩展功能,例如支持更复杂的查询条件、数据导出导入等,以满足不同场景的需求。

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

    总结,通过上述步骤,我们可以成功地将MySQL中的数据导入到HBase。在实际项目中,可能需要考虑更多因素,例如数据清洗、错误处理、性能优化等。此外,为了实现大规模数据迁移,可以考虑使用批处理或MapReduce等技术...

    HDFS 通过mapreduce 进行 HBase 导入导出

    标题 "HDFS 通过 mapreduce 进行 HBase 导入导出" 涉及的是大数据处理领域中的两个重要组件——Hadoop Distributed File System (HDFS) 和 HBase,以及它们之间的数据交互。HDFS 是 Hadoop 的分布式文件系统,而 ...

    Hive数据导入HBase的方法.docx

    Hive 数据导入 HBase 的方法 Hive 是一个基于 Hadoop 的数据仓库工具,而 HBase 是一个基于 Hadoop 的 NoSQL 数据库。它们都是大数据处理的重要组件。在数据处理过程中,经常需要将数据从 Hive 导入到 HBase 中。...

    hbase备份和数据恢复

    2. HBase到Hive:通过MapReduce任务,将HBase中的数据导入到Hive,创建Hive表并加载数据。也可以使用HBaseSerDe来解析HBase数据。 三、HBase和HDFS互导 1. HBase到HDFS:可以通过HBase的Export工具,将HBase表的...

    关系型数据库的数据导入Hbase

    本篇文章将详细介绍如何将关系型数据库的数据导入到Hbase中,包括离线和实时两种方式。 1. 离线数据导入: 离线数据导入通常在系统低峰期进行,适用于大量数据迁移。常见的工具包括Apache Nifi、Sqoop和Hadoop ...

    spark读取hbase数据,并使用spark sql保存到mysql

    在大数据处理领域,Spark 和 HBase 以及 MySQL 都扮演着重要的角色。Spark 提供了高效的数据处理能力,HBase 是一个分布式、面向列的NoSQL数据库,而 MySQL 是广泛使用的的关系型数据库。本示例将详细介绍如何使用 ...

    将hdfs上的文件导入hbase的源代码

    7. **监控和验证**:导入完成后,通过HBase的监控工具或自定义脚本检查导入结果,确保数据正确无误地导入到HBase。 在提供的"ImpDataToHbase"源代码中,我们可以看到这些步骤的具体实现。源代码可能包括了数据...

    sqoop把mysql数据导入hbase2.1.6

    然后使用以下命令导入数据到HBase: ```bash sqoop import --connect jdbc:mysql://master:3306/test --username root --password root --table Student --columns "Sno,Sname,Sex,Sage,Sdept" --split-by Sno --...

    mysql中数据经处理导入到hbase中

    导入数据到HBase通常通过HBase的客户端API实现,这些API提供了连接到HBase集群、创建表、插入数据等功能。例如,在Java中,我们可以使用HBase的Admin API创建表,然后使用Put对象添加数据。在导入过程中,需要将JSON...

    hbase导出csv,文本,html文件

    2. **数据导入Hive**:创建一个Hive外部表,该表与HBase表结构对应,然后使用`LOAD DATA`命令将HBase查询结果导入Hive。这一步需要配置HBase与Hive之间的连接,例如通过设置`hbase-site.xml`和`core-site.xml`的属性...

    mysql导入hbase所需要的jar

    当尝试使用Sqoop从MySQL导入数据到HBase时,可能需要特定的JAR文件来处理MySQL的数据格式和HBase的存储模型之间的差异。 描述中提到的"报错空指针,且提示json错误",这通常是由于JSON解析问题导致的。JSON...

    基于Apache HBase的CSV数据批量导入与操作工具.zip

    本项目是一个基于Apache HBase的工具,旨在从CSV文件中批量导入数据到HBase数据库,并提供基本的数据操作示例。HBase是一个分布式、可扩展的大数据存储系统,适用于处理海量数据。本项目利用HBase的强大功能,实现了...

    Hive、MySQL、HBase数据互导

    使用HBase Java API把数据从本地导入到HBase中**: - 创建Java项目,导入HBase相关依赖库。 - 使用HBase的Admin API创建HBase表。 - 编写代码,使用Table和Put对象将数据从本地文件读取并写入到HBase表中。 - ...

    mysql数据导入hbase

    MySQL通过sqoop工具用命令将数据导入到hbase的代码文件

Global site tag (gtag.js) - Google Analytics