hdfs数据到hbase过程

将HDFS上的文件中的数据导入到hbase中

实现上面的需求也有两种办法,一种是自定义mr,一种是使用hbase提供好的import工具

hbase先创建好表   create 'TB','info'

下面是实现代码:

  1. import org.apache.hadoop.hbase.client.Put;
  2. import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
  3. import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
  4. import org.apache.hadoop.hbase.mapreduce.TableReducer;
  5. import org.apache.hadoop.io.LongWritable;
  6. import org.apache.hadoop.io.NullWritable;
  7. import org.apache.hadoop.io.Text;
  8. import org.apache.hadoop.mapreduce.Job;
  9. import org.apache.hadoop.mapreduce.Mapper;
  10. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  11.  
  12. import java.io.IOException;
  13. /**
  14. * 用于HDFS的数据读取,写入到hbase中,
  15. * hbase里预先创建好表:create 'NNTB','info'
  16. * */
  17. public class HdfsToHBase {
  18. public static void main(String[] args) throws Exception{
  19. System.setProperty("hadoop.home.dir", "D:\\hadoop-2.7.6");//这行我是本地运行所需指定的hadoop home
  20. Configuration conf = HBaseConfiguration.create();
  21. conf.set("hbase.zookeeper.quorum", "202.168.27.196:2181");//ip乱写的,端口默认2181
  22. conf.set(TableOutputFormat.OUTPUT_TABLE, "NNTB");
  23. Job job = Job.getInstance(conf, HdfsToHBase.class.getSimpleName());
  24. TableMapReduceUtil.addDependencyJars(job);
  25. job.setJarByClass(HdfsToHBase.class);
  26.  
  27. job.setMapperClass(HdfsToHBaseMapper.class);
  28. job.setMapOutputKeyClass(Text.class);
  29. job.setMapOutputValueClass(Text.class);
  30.  
  31. job.setReducerClass(HdfsToHBaseReducer.class);
  32.  
  33. FileInputFormat.addInputPath(job, new Path("hdfs://202.168.27.196:9000/user/hadoop/gznt/gznt_bmda/*"));
  34. job.setOutputFormatClass(TableOutputFormat.class);
  35. job.waitForCompletion(true);
  36. }
  37.  
  38. public static class HdfsToHBaseMapper extends Mapper<LongWritable, Text, Text, Text> {
  39. private Text outKey = new Text();
  40. private Text outValue = new Text();
  41. @Override
  42. protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  43. String[] splits = value.toString().split("\t");
  44. outKey.set(splits[0]);
  45. outValue.set(splits[1]+"\t"+splits[2]+"\t"+splits[3]+"\t"+splits[4]);
  46. context.write(outKey, outValue);
  47. }
  48. }
  49. //::: create 'NNTB','info'
  50. public static class HdfsToHBaseReducer extends TableReducer<Text, Text, NullWritable> {
  51. @Override
  52. protected void reduce(Text k2, Iterable<Text> v2s, Context context) throws IOException, InterruptedException {
  53. Put put = new Put(k2.getBytes());
  54. for (Text v2 : v2s) {
  55. String[] splis = v2.toString().split("\t");
  56. //info,对应hbase列族名
  57. if(splis[0]!=null && !"NULL".equals(splis[0])){
  58. put.addColumn("info".getBytes(), "NodeCode".getBytes(),splis[0].getBytes());
  59. }
  60. if(splis[1]!=null && !"NULL".equals(splis[1])){
  61. put.addColumn("info".getBytes(), "NodeType".getBytes(),splis[1].getBytes());
  62. }
  63. if(splis[2]!=null && !"NULL".equals(splis[2])){
  64. put.addColumn("info".getBytes(), "NodeName".getBytes(),splis[2].getBytes());
  65. }
  66. if(splis[3]!=null && !"NULL".equals(splis[3])){
  67. put.addColumn("info".getBytes(), "IsWarehouse".getBytes(),splis[3].getBytes());
  68. }
  69. }
  70. context.write(NullWritable.get(),put);
  71. }
  72. }
  73. }

  

用mapreduce读取hdfs数据到hbase上的更多相关文章

  1. bulk-load 装载HDFS数据到HBase

    bulk-load的作用是用mapreduce的方式将hdfs上的文件装载到hbase中,对于海量数据装载入hbase非常有用,参考http://hbase.apache.org/docs/r0.89 ...

  2. hdfs数据到hbase过程

    需求:将HDFS上的文件中的数据导入到hbase中 实现上面的需求也有两种办法,一种是自定义mr,一种是使用hbase提供好的import工具 一.hdfs中的数据是这样的 hbase创建好表 cre ...

  3. 使用MapReduce将HDFS数据导入Mysql

    使用MapReduce将Mysql数据导入HDFS代码链接 将HDFS数据导入Mysql,代码示例 package com.zhen.mysqlToHDFS; import java.io.DataI ...

  4. MapReduce读取hdfs上文件,建立词频的倒排索引到Hbase

    Hdfs上的数据文件为T0,T1,T2(无后缀): T0: What has come into being in him was life, and the life was the light o ...

  5. 使用MapReduce将HDFS数据导入到HBase(二)

    package com.bank.service; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.conf. ...

  6. 使用MapReduce将HDFS数据导入到HBase(一)

    package com.bank.service; import java.io.IOException; import org.apache.hadoop.conf.Configuration;im ...

  7. 使用MapReduce将HDFS数据导入到HBase(三)

    使用MapReduce生成HFile文件,通过BulkLoader方式(跳过WAL验证)批量加载到HBase表中 package com.mengyao.bigdata.hbase; import j ...

  8. spark读取hdfs数据本地性异常

    在分布式计算中,为了提高计算速度,数据本地性是其中重要的一环. 不过有时候它同样也会带来一些问题. 一.问题描述 在分布式计算中,大多数情况下要做到移动计算而非移动数据,所以数据本地性尤其重要,因此我 ...

  9. spark读取hdfs数据本地性异常【转】

    在分布式计算中,为了提高计算速度,数据本地性是其中重要的一环. 不过有时候它同样也会带来一些问题. 一.问题描述 在分布式计算中,大多数情况下要做到移动计算而非移动数据,所以数据本地性尤其重要,因此我 ...

随机推荐

  1. 细说new与malloc的10点区别(转载)

    原地址https://www.cnblogs.com/QG-whz/p/5140930.html#_label1_0 new与malloc的10点区别 1. 申请的内存所在位置 new操作符从自由存储 ...

  2. js面向对象 继承

    1.类的声明 2.生成实例 3.如何实现继承 4.继承的几种方式 1.类的声明有哪些方式 <script type="text/javascript"> //类的声明 ...

  3. 2017.9.5 Java知识点总结

    1.*程序的数据操作往往都在内存中操作的,也就是说数据运算都在内存中完成. 2.*什么是变量? --变量就是内存中的一块用来存放数据的存储单元. --变量中的值可变 --我们通过变量名就可以找到内存中 ...

  4. 简单使用Idea创建三层架构项目和数据库连接(使用原生ajax进行访问+ajax)

    Idea创建三层架构项目 首先创建一个Web项目model 创建Web完成后进行创建entity.dao.service 特别注意 根据上面的步骤进行创建即可得到 创建完成 我们首先创建数据库 cre ...

  5. JavaEE权限管理系统的搭建(六)--------使用拦截器实现菜单URL的跳转权限验证和页面的三级菜单权限按钮显示

    本小结讲解,点击菜单进行页面跳转,看下图,点击管理员列表后会被认证拦截器首先拦截,验证用户是否登录,如果登录就放行,紧接着会被权限验证拦截器再次拦截,拦截的时候,会根据URL地址上找到对应的方法,然后 ...

  6. SpringMvc获取上下文

    import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.spri ...

  7. 你不知道的javaScript笔记(5)

    原生函数 常用的原生函数 String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol( ...

  8. 自定义组件v-model的实质性理解

    用了几个月Vue一直很纠结自定义组件的v-model实现,最近开始学习React时,React中受控组件与状态提升的理念与v-model不谋而合. 转载请注明地址: https://www.cnblo ...

  9. 【TOJ 1743】集合运算(set并、交、差集)

    Description 给定两个集合A和B的所有元素,计算它们的交.并.差集. Input 输入数据有多组,第一行为数据的组数T,接下来有2T行,每组数据占2行,每行有若干个整数,第一行的所有整数构成 ...

  10. 单机安装hadoop+hive+presto

    系统环境 在个人笔记本上使用virtualbox虚拟机 os:centos -7.x86-64.everything.1611  ,内核 3.10.0-514.el7.x86_64 注:同样可以使用r ...