- 浏览: 596115 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
HBase本身提供了很多种数据导入的方式,通常有两种常用方式:
1.使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase
2.另一种方式就是使用HBase原生Client API
本文就是示范如何通过MapReduce作业从一个文件读取数据并写入到HBase中。
首先启动Hadoop与HBase,然后创建一个空表,用于后面导入数据:
一、示例程序
下面的示例程序通过 TableOutputFormat 将HDFS上具有一定格式的文本数据导入到HBase中。
首先创建MapReduce作业,目录结构如下:
Hdfs2HBaseMapper.java
Hdfs2HBaseReducer.java
Hdfs2HBase.java
编译
打包
运行
创建一个 data.txt 文件,内容如下(列族是建表时创建的列族 cf ):
将文件复制到hdfs上:
把HBase的jar包加到 hadoop-env.sh 中。
运行MapReduce作业:
查询HBase表,验证数据是否已导入:
可以看到,数据导入成功!
由于需要频繁的与存储数据的RegionServer通信,占用资源较大,一次性入库大量数据时,TableOutputFormat效率并不好。
二、拓展-TableReducer
我们可以将 Hdfs2HBaseReducer.java 代码改成下面这样,作用是一样的:
这里直接继承了 TableReducer , TableReducer是部分特例化的 Reducer ,它只有三个类型参数:输入Key/Value是对应Mapper的输出,输出Key可以是任意的类型,但是输出Value必须是一个 Put 或 Delete 实例。
转自:http://www.tuicool.com/articles/jInQ3y2
1.使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase
2.另一种方式就是使用HBase原生Client API
本文就是示范如何通过MapReduce作业从一个文件读取数据并写入到HBase中。
首先启动Hadoop与HBase,然后创建一个空表,用于后面导入数据:
hbase(main):006:0> create 'mytable','cf' 0 row(s) in 10.8310 seconds => Hbase::Table - mytable hbase(main):007:0> list TABLE mytable 1 row(s) in 0.1220 seconds => ["mytable"] hbase(main):008:0> scan 'mytable' ROW COLUMN+CELL 0 row(s) in 0.2130 seconds
一、示例程序
下面的示例程序通过 TableOutputFormat 将HDFS上具有一定格式的文本数据导入到HBase中。
首先创建MapReduce作业,目录结构如下:
Hdfs2HBase/ ├── classes └── src ├── Hdfs2HBase.java ├── Hdfs2HBaseMapper.java └── Hdfs2HBaseReducer.java
Hdfs2HBaseMapper.java
package com.lisong.hdfs2hbase; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class Hdfs2HBaseMapper extends Mapper<LongWritable, Text, Text, Text> { public void map(LongWritable key, Text line, Context context) throws IOException,InterruptedException { String lineStr = line.toString(); int index = lineStr.indexOf(":"); String rowkey = lineStr.substring(0, index); String left = lineStr.substring(index+1); context.write(new Text(rowkey), new Text(left)); } }
Hdfs2HBaseReducer.java
package com.lisong.hdfs2hbase; import java.io.IOException; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.util.Bytes; public class Hdfs2HBaseReducer extends Reducer<Text, Text, ImmutableBytesWritable, Put> { public void reduce(Text rowkey, Iterable<Text> value, Context context) throws IOException,InterruptedException { String k = rowkey.toString(); for(Text val : value) { // 设置行键值 Put put = new Put(k.getBytes()); String[] strs = val.toString().split(":"); String family = strs[0]; String qualifier = strs[1]; String v = strs[2]; // 设置列簇、列名和列值 put.add(family.getBytes(), qualifier.getBytes(), v.getBytes()); context.write(new ImmutableBytesWritable(k.getBytes()), put); } } }
Hdfs2HBase.java
package com.lisong.hdfs2hbase; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.mapreduce.TableOutputFormat; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class Hdfs2HBase { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if(otherArgs.length != 2) { System.err.println("Usage: wordcount <infile> <table>"); System.exit(2); } Job job = new Job(conf, "hdfs2hbase"); job.setJarByClass(Hdfs2HBase.class); job.setMapperClass(Hdfs2HBaseMapper.class); job.setReducerClass(Hdfs2HBaseReducer.class); job.setMapOutputKeyClass(Text.class); // + job.setMapOutputValueClass(Text.class); // + job.setOutputKeyClass(ImmutableBytesWritable.class); job.setOutputValueClass(Put.class); // 以表输出的格式 job.setOutputFormatClass(TableOutputFormat.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); job.getConfiguration().set(TableOutputFormat.OUTPUT_TABLE, otherArgs[1]); System.exit(job.waitForCompletion(true)?0:1); } }
编译
$ javac -d classes/ src/*.java
打包
$ jar -cvf hdfs2hbase.jar classes
运行
创建一个 data.txt 文件,内容如下(列族是建表时创建的列族 cf ):
r1:cf:c1:value1 r2:cf:c2:value2 r3:cf:c3:value3
将文件复制到hdfs上:
$ hadoop/bin/hadoop fs -put data.txt /hbase
把HBase的jar包加到 hadoop-env.sh 中。
TEMP=`ls /home/hadoop/hbase/lib/*.jar` HBASE_JARS=`echo $TEMP | sed 's/ /:/g'` HADOOP_CLASSPATH=$HBASE_JARS
运行MapReduce作业:
$ hadoop/bin/hadoop jar Hdfs2HBase/hdfs2hbase.jar com.lisong.hdfs2hbase.Hdfs2HBase /hbase/data.txt mytable
查询HBase表,验证数据是否已导入:
hbase(main):001:0> scan 'mytable' ROW COLUMN+CELL r1 column=cf:c1, timestamp=1439223857492, value=value1 r2 column=cf:c2, timestamp=1439223857492, value=value2 r3 column=cf:c3, timestamp=1439223857492, value=value3 3 row(s) in 1.3820 seconds
可以看到,数据导入成功!
由于需要频繁的与存储数据的RegionServer通信,占用资源较大,一次性入库大量数据时,TableOutputFormat效率并不好。
二、拓展-TableReducer
我们可以将 Hdfs2HBaseReducer.java 代码改成下面这样,作用是一样的:
package com.lisong.hdfs2hbase; import java.io.IOException; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.hbase.mapreduce.TableReducer; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.util.Bytes; public class Hdfs2HBaseReducer extends TableReducer<Text, Text, ImmutableBytesWritable> { public void reduce(Text rowkey, Iterable<Text> value, Context context) throws IOException,InterruptedException { String k = rowkey.toString(); for(Text val : value) { Put put = new Put(k.getBytes()); String[] strs = val.toString().split(":"); String family = strs[0]; String qualifier = strs[1]; String v = strs[2]; put.add(family.getBytes(), qualifier.getBytes(), v.getBytes()); context.write(new ImmutableBytesWritable(k.getBytes()), put); } } }
这里直接继承了 TableReducer , TableReducer是部分特例化的 Reducer ,它只有三个类型参数:输入Key/Value是对应Mapper的输出,输出Key可以是任意的类型,但是输出Value必须是一个 Put 或 Delete 实例。
转自:http://www.tuicool.com/articles/jInQ3y2
发表评论
文章已被作者锁定,不允许评论。
-
Hadoop namenode的fsimage与editlog详解
2017-05-19 10:04 1177Namenode主要维护两个文件,一个是fsimage,一个是 ... -
Hadoop HBase建表时预分区(region)的方法学习
2017-05-15 11:18 1189如果知道Hbase数据表的key的分布情况,就可以在建表的时候 ... -
Hadoop HBase行健(rowkey)设计原则学习
2017-05-15 10:34 1124Hbase是三维有序存储的,通过rowkey(行键),colu ... -
Hadoop HBase中split原理学习
2017-05-12 13:38 2270在Hbase中split是一个很重 ... -
Hadoop HBase中Compaction原理学习
2017-05-12 10:34 994HBase Compaction策略 RegionServer ... -
Hadoop HBase性能优化学习
2017-05-12 09:15 684一、调整参数 入门级的调优可以从调整参数开始。投入小,回报快 ... -
Hadoop 分布式文件系统学习
2017-05-10 15:34 498一. 分布式文件系统 分布式文件系统,在整个分布式系统体系中处 ... -
Hadoop MapReduce处理wordcount代码分析
2017-04-28 14:25 590package org.apache.hadoop.exa ... -
Hadoop YARN完全分布式配置学习
2017-04-26 10:27 571版本及配置简介 Java: J ... -
Hadoop YARN各个组件和流程的学习
2017-04-24 19:04 647一、基本组成结构 * 集 ... -
Hadoop YARN(Yet Another Resource Negotiator)详细解析
2017-04-24 18:30 1153带有 MapReduce 的 Apache Had ... -
Hive 注意事项与扩展特性
2017-04-06 19:31 7451. 使用HIVE注意点 字符集 Hadoop和Hive都 ... -
Hive 元数据和QL基本操作学习整理
2017-04-06 14:36 1017Hive元数据库 Hive将元数据存储在RDBMS 中,一般常 ... -
Hive 文件压缩存储格式(STORED AS)
2017-04-06 09:35 2299Hive文件存储格式包括以下几类: 1.TEXTFILE ... -
Hive SQL自带函数总结
2017-04-05 19:25 1139字符串长度函数:length ... -
Hive 连接查询操作(不支持IN查询)
2017-04-05 19:16 717CREATE EXTERNAL TABLE IF NOT ... -
Hive优化学习(join ,group by,in)
2017-04-05 18:48 1814一、join优化 Join ... -
Hive 基础知识学习(语法)
2017-04-05 15:51 896一.Hive 简介 Hive是基于 Hadoop 分布式文件 ... -
Hive 架构与基本语法(OLAP)
2017-04-05 15:16 1242Hive 是什么 Hive是建立在Hadoop上的数据仓库基础 ... -
Hadoop MapReduce操作Hbase范例学习(TableMapReduceUtil)
2017-03-24 15:37 1208Hbase里的数据量一般都 ...
相关推荐
对Hadoop中的HDFS、MapReduce、Hbase系列知识的介绍。如果想初略了解Hadoop 可下载观看
如果数据量非常大,可以使用HBase的批处理接口`TableOutputFormat`和`BulkLoad`功能,将数据先写入HDFS的临时目录,然后使用`HFile`格式进行批量导入,提高效率。 5. **错误处理和重试机制**:在导入过程中,可能会...
通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。通过这一阶段的调研总结,从内部机理的...
标题 "HDFS 通过 mapreduce 进行 HBase 导入导出" 涉及的是大数据处理领域中的两个重要组件——Hadoop Distributed File System (HDFS) 和 HBase,以及它们之间的数据交互。HDFS 是 Hadoop 的分布式文件系统,而 ...
标题中的“hadoop的mapreduce把oracle/mysq导入到hbase和hdfs中的程序”指的是一项数据处理任务,利用Hadoop的MapReduce框架,将关系型数据库(如Oracle和MySQL)中的数据高效地迁移至分布式存储系统HDFS(Hadoop ...
* hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir>:将 HBase 表内容输出成 HDFS 的 SequenceFiles 文件 * hbase org.apache.hadoop.hbase.mapreduce.Import <outputdir> <tablename>:将 ...
### Hadoop中的HDFS和MapReduce #### Hadoop核心组件:HDFS与MapReduce **Hadoop** 是一个能够处理海量数据的开源软件框架,它最初由Apache开发,旨在为大规模数据提供分布式处理能力。Hadoop的核心组件包括**HDFS...
HBase与Hadoop的HDFS(Hadoop Distributed File System)紧密集成,确保了数据的高可用性和容错性。HDFS为HBase提供了底层的分布式存储,而HBase则负责数据的组织和快速检索。 Hadoop的核心组件包括HDFS和MapReduce...
除了基础理论,该书可能还讨论了Hadoop生态系统的其他组件,如HDFS(Hadoop Distributed File System)和HBase等,这些都是MapReduce常用的存储系统。此外,可能会介绍与MapReduce相关的高级主题,如MapReduce与...
hadoop基础,hdfs,hive,mapreduce,hbase
在Java编程环境中,操作HBase并将其数据写入HDFS(Hadoop Distributed File System)是一项常见的任务,特别是在大数据处理和分析的场景下。本篇将详细介绍如何使用Java API实现这一功能,以及涉及到的关键技术和...
它通过将数据分成固定大小的块并在多台服务器之间复制这些块,来提高数据的可靠性和可用性。 - **特点**: - 数据块大小通常为64MB,比传统文件系统的块大得多,以减少元数据的数量。 - 采用中心化的主节点...
通过阅读这本书,你可以深入理解Hadoop的工作原理,包括HDFS的数据块管理、MapReduce的作业调度等,从而更好地进行二次开发和性能调优。 接下来,我们转向Hadoop生态中的其他重要组件。Hive是基于Hadoop的数据仓库...
通过 Sqoop导出到Hbase,需要先将数据导入HDFS,再用Hbase的Import命令将数据加载到Hbase表中。 - Hadoop MapReduce:可以编写自定义的MapReduce作业,将RDBMS数据读取、转换并写入Hbase。这种方法灵活性高,但开发...
这些JAR文件是开发、编译和运行HBase项目所必需的依赖库,涵盖了Hadoop MapReduce、HDFS、Zookeeper以及HBase自身的API等。 首先,了解Hadoop 2.7.3版本的特性至关重要。这个版本修复了一些已知的bug,并对性能进行...
### 大数据技术 Hadoop开发者第二期 MapReduce HDFS Hive Mahout HBase 相关知识点解析 #### 一、Hadoop 业界资讯 - **InfoWorld 授予 Apache Hadoop 年度技术创新奖章** - **背景**:2010年1月,InfoWorld 授予 ...
HBase的运行依赖于Hadoop的HDFS作为底层存储系统,MapReduce用于批量处理数据。"hadoop-2.7.2-hbase-jar"文件中的JAR包,包含HBase运行所需的类库和API,使得开发者可以在Hadoop集群上开发和运行HBase应用。 集成...
载入数据的操作本质上是将数据从HDFS移动到HBase表中。HBase表中的数据是按照行键(row key)、列族(column family)和列(column qualifier)来组织的。载入数据时,可以根据需要创建相应的HBase表结构,如表名、...