- 浏览: 576803 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (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 1130Namenode主要维护两个文件,一个是fsimage,一个是 ... -
Hadoop HBase建表时预分区(region)的方法学习
2017-05-15 11:18 1158如果知道Hbase数据表的key的分布情况,就可以在建表的时候 ... -
Hadoop HBase行健(rowkey)设计原则学习
2017-05-15 10:34 1089Hbase是三维有序存储的,通过rowkey(行键),colu ... -
Hadoop HBase中split原理学习
2017-05-12 13:38 2218在Hbase中split是一个很重 ... -
Hadoop HBase中Compaction原理学习
2017-05-12 10:34 961HBase Compaction策略 RegionServer ... -
Hadoop HBase性能优化学习
2017-05-12 09:15 655一、调整参数 入门级的调优可以从调整参数开始。投入小,回报快 ... -
Hadoop 分布式文件系统学习
2017-05-10 15:34 472一. 分布式文件系统 分布式文件系统,在整个分布式系统体系中处 ... -
Hadoop MapReduce处理wordcount代码分析
2017-04-28 14:25 555package org.apache.hadoop.exa ... -
Hadoop YARN完全分布式配置学习
2017-04-26 10:27 543版本及配置简介 Java: J ... -
Hadoop YARN各个组件和流程的学习
2017-04-24 19:04 606一、基本组成结构 * 集 ... -
Hadoop YARN(Yet Another Resource Negotiator)详细解析
2017-04-24 18:30 1105带有 MapReduce 的 Apache Had ... -
Hive 注意事项与扩展特性
2017-04-06 19:31 7041. 使用HIVE注意点 字符集 Hadoop和Hive都 ... -
Hive 元数据和QL基本操作学习整理
2017-04-06 14:36 978Hive元数据库 Hive将元数据存储在RDBMS 中,一般常 ... -
Hive 文件压缩存储格式(STORED AS)
2017-04-06 09:35 2240Hive文件存储格式包括以下几类: 1.TEXTFILE ... -
Hive SQL自带函数总结
2017-04-05 19:25 1107字符串长度函数:length ... -
Hive 连接查询操作(不支持IN查询)
2017-04-05 19:16 672CREATE EXTERNAL TABLE IF NOT ... -
Hive优化学习(join ,group by,in)
2017-04-05 18:48 1768一、join优化 Join ... -
Hive 基础知识学习(语法)
2017-04-05 15:51 859一.Hive 简介 Hive是基于 Hadoop 分布式文件 ... -
Hive 架构与基本语法(OLAP)
2017-04-05 15:16 1211Hive 是什么 Hive是建立在Hadoop上的数据仓库基础 ... -
Hadoop MapReduce操作Hbase范例学习(TableMapReduceUtil)
2017-03-24 15:37 1143Hbase里的数据量一般都 ...
相关推荐
对Hadoop中的HDFS、MapReduce、Hbase系列知识的介绍。如果想初略了解Hadoop 可下载观看
通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。通过这一阶段的调研总结,从内部机理的...
利用hadoop的mapreduce把oracle/mysql中的数据导入到hbase和hdfs中的两个java程序
Hadoop-0.20.0-HDFS+MapReduce+Hive+HBase十分钟快速入门
google三大论文 gfs bigtable mapreduce hadoop hdfs hbase原型,学hadoop 必看
hadoop基础,hdfs,hive,mapreduce,hbase
NULL 博文链接:https://jsh0401.iteye.com/blog/2096103
How to install Hadoop MapReduce and HDFS to begin running examples How to configure and administer Hadoop and HDFS securely Understanding the internals of Hadoop and how Hadoop can be extended to suit...
大数据技术 Hadoop开发者第二期 Nutch MapReduce HDFS Hive Mahout HBase 共64页.r
8、短评:HDFS、MapReduce和HBase三者相辅相成、各有长处 ..... - 34 - 9、HDFS在web开发中的应用................................. - 35 - 10、Mapreduce中value集合的二次排序 ....................... - 38 - 11...
上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和...
Starting with installing Hadoop YARN, MapReduce, HDFS, and other Hadoop ecosystem components, with this book, you will soon learn about many exciting topics such as MapReduce patterns, using Hadoop to...
《hadoop-HDFS+MapReduce+Hive+Hbase快速入门》,一门入门hadoop的经典书籍,相信能够给学习云计算的大家带来帮助。
Starting with installing Hadoop YARN, MapReduce, HDFS, and other Hadoop ecosystem components, with this book, you will soon learn about many exciting topics such as MapReduce patterns, using Hadoop to...
HBase – Hadoop Database,是一...Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。
HDFS+MapReduce+Hive+HBase十分钟快速入门.pdf
优秀PPT课件:Hadoop:Google云计算的开源实现(Hadoop安装 HDFS使用 MapReduce编程 数据表HBase 分布式数据处理MapReduce ).ppt
大数据完整版视频。视频未加密,绝对可以看。