hadoop执行hdfs文件到hbase表插入操作(xjl456852原创)
本例中需要将hdfs上的文本文件,解析后插入到hbase的表中.
create 'ns2:user', 'info'
1,xiejl,202,haha,303,liudehua,404,daoming,41
[hadoop@master ~]$ hdfs classpath
package com.xjl456852.mapreduce;import org.apache.hadoop.fs.Path;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.io.ImmutableBytesWritable;import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import java.io.IOException;/*** 将hdfs中的文本文件写入到hbase的表中* 程序的运行需要加入hadoop的配置文件和hbase的配置文件到jar包中* 对应的hbase的表* create 'ns2:user','info'** Created by xiejl on 2016/8/10.*/public class HBaseApp {public static void main(String [] args) {try {Job job = Job.getInstance();job.setJobName("text into hbase table");job.setJarByClass(HBaseApp.class);FileInputFormat.addInputPath(job, new Path(args[0]));//设置表名job.getConfiguration().set(TableOutputFormat.OUTPUT_TABLE, args[1]);//设置输出格式为tablejob.setOutputFormatClass(TableOutputFormat.class);//设置输出的key类型为ImmutableBytesWritablejob.setOutputKeyClass(ImmutableBytesWritable.class);//设置输出的value类型为Putjob.setOutputValueClass(Put.class);//因为map输出key和reduce输出的key类型不一致,所以需要再设置map的key输出类型为Textjob.setMapOutputKeyClass(Text.class);//因为map输出value和reduce输出的value类型不一致,所以需要再设置map的value输出类型为Textjob.setMapOutputValueClass(Text.class);//Mapperjob.setMapperClass(MyMapper.class);//Reducerjob.setReducerClass(MyReducer.class);System.exit(job.waitForCompletion(true) ? 0 : 1);} catch (InterruptedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}}
package com.xjl456852.mapreduce;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/*** Created by xiejl on 2016/8/10.*/public class MyMapper extends Mapper<LongWritable, Text, Text, Text> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();int index = line.indexOf(",");String rowKey = line.substring(0, index);//跳过逗号String valueLine = line.substring(index+1);context.write(new Text(rowKey), new Text(valueLine));}}
package com.xjl456852.mapreduce;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.io.ImmutableBytesWritable;import org.apache.hadoop.hbase.util.Bytes;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/*** Created by xiejl on 2016/8/11.*/public class MyReducer extends Reducer<Text, Text, ImmutableBytesWritable, Put> {@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {byte[] rowKey = Bytes.toBytes(key.toString());for(Text text : values) {//设置put对象的行键Put put = new Put(rowKey);String line = text.toString();int index = line.indexOf(",");String name = line.substring(0, index);String age = line.substring(index+1);//列族的是建表时固定的,列和值是插入时添加的.put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"),Bytes.toBytes(name));put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("age"),Bytes.toBytes(age));context.write(new ImmutableBytesWritable(Bytes.toBytes(key.toString())), put);}}}
将HBase的类jar包加到hadoop的classpath下, 修改${HADOOP_HOME}/etc/hadoop/hadoop-env.sh。配置好这个文件,分发到各个节点,改这个配置不用重启集群.
TEMP=`ls /opt/modules/hbase/lib/*.jar`HBASE_JARS=`echo $TEMP | sed 's/ /:/g'`HADOOP_CLASSPATH=$HBASE_JARS
<property><name>yarn.application.classpath</name><value>/opt/modules/hadoop/etc/*,/opt/modules/hadoop/etc/hadoop/*,/opt/modules/hadoop/lib/*,/opt/modules/hadoop/share/hadoop/common/*,/opt/modules/hadoop/share/hadoop/common/lib/*,/opt/modules/hadoop/share/hadoop/mapreduce/*,/opt/modules/hadoop/share/hadoop/mapreduce/lib/*,/opt/modules/hadoop/share/hadoop/hdfs/*,/opt/modules/hadoop/share/hadoop/hdfs/lib/*,/opt/modules/hadoop/share/hadoop/yarn/*,/opt/modules/hadoop/share/hadoop/yarn/lib/*,/opt/modules/hbase/lib/*</value></property>
hadoop jar hbase.jar com.xjl456852.mapreduce.HBaseApp data/hbase_input ns2:user
hbase(main):001:0> scan 'ns2:user'ROW COLUMN+CELL1 column=info:age, timestamp=1470966325326, value=201 column=info:name, timestamp=1470966325326, value=xiejl2 column=info:age, timestamp=1470966325326, value=302 column=info:name, timestamp=1470966325326, value=haha3 column=info:age, timestamp=1470966325326, value=403 column=info:name, timestamp=1470966325326, value=liudehua4 column=info:age, timestamp=1470966325326, value=414 column=info:name, timestamp=1470966325326, value=daoming4 row(s) in 0.3100 seconds
package com.xjl456852.mapreduce;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.io.ImmutableBytesWritable;import org.apache.hadoop.hbase.mapreduce.TableReducer;import org.apache.hadoop.hbase.util.Bytes;import org.apache.hadoop.io.Text;import java.io.IOException;/*** 如果继承TableReducer,从源码中可以看到,输出的value是Mutation类型,也就是输出的值可以是Put,Delete之类的类型* Created by xiejl on 2016/8/11.*/public class MyReducer2 extends TableReducer<Text, Text, ImmutableBytesWritable> {@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {byte[] rowKey = Bytes.toBytes(key.toString());for(Text text : values) {//设置put对象的行键Put put = new Put(rowKey);String line = text.toString();int index = line.indexOf(",");String name = line.substring(0, index);String age = line.substring(index+1);//列族的是建表时固定的,列和值是插入时添加的.put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"),Bytes.toBytes(name));put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("age"),Bytes.toBytes(age));context.write(new ImmutableBytesWritable(Bytes.toBytes(key.toString())), put);}context.getCounter("reduce", "over").increment(1);}}
hadoop执行hdfs文件到hbase表插入操作(xjl456852原创)的更多相关文章
- BulkLoad加载本地文件到HBase表
BulkLoad加载文件到HBase表 1.功能 将本地数据导入到HBase中 2.原理 BulkLoad会将tsv/csv格式的文件编程hfile文件,然后再进行数据的导入,这样可以避免大量数据导入 ...
- Hadoop之HDFS文件操作常有两种方式(转载)
摘要:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式.本文介绍如何利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件 命令行 Java API HD ...
- Hadoop之HDFS文件操作
摘要:Hadoop之HDFS文件操作常有两种方式.命令行方式和JavaAPI方式.本文介绍怎样利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件 命令行 Java API HD ...
- HDFS文件和HIVE表的一些操作
1. hadoop fs -ls 可以查看HDFS文件 后面不加目录参数的话,默认当前用户的目录./user/当前用户 $ hadoop fs -ls 16/05/19 10:40:10 WARN ...
- hadoop的hdfs文件操作实现上传文件到hdfs
这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...
- Hadoop 执行 hdfs 命令烦人的警告信息
问题描述: 安装完 hadoop,执行 hdfs dfs -ls 命令时,报警告如下: -- ::, WARN util.NativeCodeLoader: Unable to load native ...
- Java 向Hbase表插入数据报(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac)
org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac 代码: //1.create HTa ...
- Java 向Hbase表插入数据报(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac
org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac 代码: //1.create HTa ...
- Java 向Hbase表插入数据异常org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apache.client.HTable
出错代码如下: //1.create HTablePool HTablePool hp=new HTablePool(con, 1000); //2.get HTable from HTablepoo ...
随机推荐
- Thinking In Web [原创作品]
(转载请注明:http://zhutty.cnblogs.com, 交流请加群:164858883) 可能在大部分人来讲,前端就是可见的页面数据呈现正确就行.然而这样是不正确的,页面呈现是一部分,更多 ...
- ionic框架前端生产环境的简单部署
1. 效果对比 1.1 开发环境 css+js+lib文件大小为好多M :) 1.2 部署环境(生产环境) css+js+lib文件大小约为800K 文件大小:好多M–>800K(多少自己试下) ...
- 各种快递查询--Api接口
授权成功我的密钥 爱查快递API使用说明文档 API地址: 以前:http://api.ickd.cn/?com=[]&nu=[]&id=[]&type=[]&enco ...
- Zend Studio使用
也许你能够用Dreamweaver.Notepad++或者Editplus这种东西完毕你的系统,但所谓“工欲善其事,必先利其器”,偶觉得 一个给力的IDE对于新手还是非常必要的,而Zend作为PHPe ...
- java 多态,和方法覆盖分析(转)
多态 (Polymorphism) 大家应该都不陌生,它是我们开发面向对象系统的“老朋友”了 .但是老朋友也会有“烦心”的时候啊,呵呵.有时候 不注意,还真会被它难到.譬如下面这个例子(thank H ...
- Qt 格式化字符串
Qt字符串格式化性能比较 Qt字符串格式方法有三种, QString::arg(), QString::sprinft()和QStringList::join().今天我做了个简单的性能测试, 希望对 ...
- 怎么样学好C++
声明:这篇文章非本人所写,转自:http://coolshell.cn/articles/4119.html 昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写 ...
- Windows Bridge for iOS: Let’s open this up
(原文翻译过来的,原文链接http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this- ...
- .NET Core初体验 - 在Mac下运行第一个Web示例程序
要说最近两天程序猿之间最喜欢吹水的事是什么?那绝壁是甲骨文要放弃Java!简直做梦都要笑醒!由于公司的产品线全面转向Java,最近几个月也一直在苦学Java技术.已经默默决定了,如果消息证实是真的,我 ...
- 2015版Force Touch Mac Book激活三个手指拖动窗口
新买的2015版的Mac Book Pro,一切都好,就是原来一直很的很习惯的三个手指拖动窗口的手势,突然找不到地方设置了,很是让我失望了一把,在想苹果怎么会把这么有用的手势去掉了呢.还好有万能的Go ...