用mapreduce读取hdfs数据到hbase上
hdfs数据到hbase过程
将HDFS上的文件中的数据导入到hbase中
实现上面的需求也有两种办法,一种是自定义mr,一种是使用hbase提供好的import工具
hbase先创建好表 create 'TB','info'
下面是实现代码:
- import org.apache.hadoop.hbase.client.Put;
- import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
- import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
- import org.apache.hadoop.hbase.mapreduce.TableReducer;
- import org.apache.hadoop.io.LongWritable;
- import org.apache.hadoop.io.NullWritable;
- 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 java.io.IOException;
- /**
- * 用于HDFS的数据读取,写入到hbase中,
- * hbase里预先创建好表:create 'NNTB','info'
- * */
- public class HdfsToHBase {
- public static void main(String[] args) throws Exception{
- System.setProperty("hadoop.home.dir", "D:\\hadoop-2.7.6");//这行我是本地运行所需指定的hadoop home
- Configuration conf = HBaseConfiguration.create();
- conf.set("hbase.zookeeper.quorum", "202.168.27.196:2181");//ip乱写的,端口默认2181
- conf.set(TableOutputFormat.OUTPUT_TABLE, "NNTB");
- Job job = Job.getInstance(conf, HdfsToHBase.class.getSimpleName());
- TableMapReduceUtil.addDependencyJars(job);
- job.setJarByClass(HdfsToHBase.class);
- job.setMapperClass(HdfsToHBaseMapper.class);
- job.setMapOutputKeyClass(Text.class);
- job.setMapOutputValueClass(Text.class);
- job.setReducerClass(HdfsToHBaseReducer.class);
- FileInputFormat.addInputPath(job, new Path("hdfs://202.168.27.196:9000/user/hadoop/gznt/gznt_bmda/*"));
- job.setOutputFormatClass(TableOutputFormat.class);
- job.waitForCompletion(true);
- }
- public static class HdfsToHBaseMapper extends Mapper<LongWritable, Text, Text, Text> {
- private Text outKey = new Text();
- private Text outValue = new Text();
- @Override
- protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
- String[] splits = value.toString().split("\t");
- outKey.set(splits[0]);
- outValue.set(splits[1]+"\t"+splits[2]+"\t"+splits[3]+"\t"+splits[4]);
- context.write(outKey, outValue);
- }
- }
- //::: create 'NNTB','info'
- public static class HdfsToHBaseReducer extends TableReducer<Text, Text, NullWritable> {
- @Override
- protected void reduce(Text k2, Iterable<Text> v2s, Context context) throws IOException, InterruptedException {
- Put put = new Put(k2.getBytes());
- for (Text v2 : v2s) {
- String[] splis = v2.toString().split("\t");
- //info,对应hbase列族名
- if(splis[0]!=null && !"NULL".equals(splis[0])){
- put.addColumn("info".getBytes(), "NodeCode".getBytes(),splis[0].getBytes());
- }
- if(splis[1]!=null && !"NULL".equals(splis[1])){
- put.addColumn("info".getBytes(), "NodeType".getBytes(),splis[1].getBytes());
- }
- if(splis[2]!=null && !"NULL".equals(splis[2])){
- put.addColumn("info".getBytes(), "NodeName".getBytes(),splis[2].getBytes());
- }
- if(splis[3]!=null && !"NULL".equals(splis[3])){
- put.addColumn("info".getBytes(), "IsWarehouse".getBytes(),splis[3].getBytes());
- }
- }
- context.write(NullWritable.get(),put);
- }
- }
- }
用mapreduce读取hdfs数据到hbase上的更多相关文章
- bulk-load 装载HDFS数据到HBase
bulk-load的作用是用mapreduce的方式将hdfs上的文件装载到hbase中,对于海量数据装载入hbase非常有用,参考http://hbase.apache.org/docs/r0.89 ...
- hdfs数据到hbase过程
需求:将HDFS上的文件中的数据导入到hbase中 实现上面的需求也有两种办法,一种是自定义mr,一种是使用hbase提供好的import工具 一.hdfs中的数据是这样的 hbase创建好表 cre ...
- 使用MapReduce将HDFS数据导入Mysql
使用MapReduce将Mysql数据导入HDFS代码链接 将HDFS数据导入Mysql,代码示例 package com.zhen.mysqlToHDFS; import java.io.DataI ...
- MapReduce读取hdfs上文件,建立词频的倒排索引到Hbase
Hdfs上的数据文件为T0,T1,T2(无后缀): T0: What has come into being in him was life, and the life was the light o ...
- 使用MapReduce将HDFS数据导入到HBase(二)
package com.bank.service; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.conf. ...
- 使用MapReduce将HDFS数据导入到HBase(一)
package com.bank.service; import java.io.IOException; import org.apache.hadoop.conf.Configuration;im ...
- 使用MapReduce将HDFS数据导入到HBase(三)
使用MapReduce生成HFile文件,通过BulkLoader方式(跳过WAL验证)批量加载到HBase表中 package com.mengyao.bigdata.hbase; import j ...
- spark读取hdfs数据本地性异常
在分布式计算中,为了提高计算速度,数据本地性是其中重要的一环. 不过有时候它同样也会带来一些问题. 一.问题描述 在分布式计算中,大多数情况下要做到移动计算而非移动数据,所以数据本地性尤其重要,因此我 ...
- spark读取hdfs数据本地性异常【转】
在分布式计算中,为了提高计算速度,数据本地性是其中重要的一环. 不过有时候它同样也会带来一些问题. 一.问题描述 在分布式计算中,大多数情况下要做到移动计算而非移动数据,所以数据本地性尤其重要,因此我 ...
随机推荐
- 细说new与malloc的10点区别(转载)
原地址https://www.cnblogs.com/QG-whz/p/5140930.html#_label1_0 new与malloc的10点区别 1. 申请的内存所在位置 new操作符从自由存储 ...
- js面向对象 继承
1.类的声明 2.生成实例 3.如何实现继承 4.继承的几种方式 1.类的声明有哪些方式 <script type="text/javascript"> //类的声明 ...
- 2017.9.5 Java知识点总结
1.*程序的数据操作往往都在内存中操作的,也就是说数据运算都在内存中完成. 2.*什么是变量? --变量就是内存中的一块用来存放数据的存储单元. --变量中的值可变 --我们通过变量名就可以找到内存中 ...
- 简单使用Idea创建三层架构项目和数据库连接(使用原生ajax进行访问+ajax)
Idea创建三层架构项目 首先创建一个Web项目model 创建Web完成后进行创建entity.dao.service 特别注意 根据上面的步骤进行创建即可得到 创建完成 我们首先创建数据库 cre ...
- JavaEE权限管理系统的搭建(六)--------使用拦截器实现菜单URL的跳转权限验证和页面的三级菜单权限按钮显示
本小结讲解,点击菜单进行页面跳转,看下图,点击管理员列表后会被认证拦截器首先拦截,验证用户是否登录,如果登录就放行,紧接着会被权限验证拦截器再次拦截,拦截的时候,会根据URL地址上找到对应的方法,然后 ...
- SpringMvc获取上下文
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.spri ...
- 你不知道的javaScript笔记(5)
原生函数 常用的原生函数 String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol( ...
- 自定义组件v-model的实质性理解
用了几个月Vue一直很纠结自定义组件的v-model实现,最近开始学习React时,React中受控组件与状态提升的理念与v-model不谋而合. 转载请注明地址: https://www.cnblo ...
- 【TOJ 1743】集合运算(set并、交、差集)
Description 给定两个集合A和B的所有元素,计算它们的交.并.差集. Input 输入数据有多组,第一行为数据的组数T,接下来有2T行,每组数据占2行,每行有若干个整数,第一行的所有整数构成 ...
- 单机安装hadoop+hive+presto
系统环境 在个人笔记本上使用virtualbox虚拟机 os:centos -7.x86-64.everything.1611 ,内核 3.10.0-514.el7.x86_64 注:同样可以使用r ...