微信号:xqbedu

介绍:最专业的网络虚拟教室,为专家和名师提供课程定制和推广服务,为学员提供平等的学习环境.公司网站www.xqbedu.com

关于海量数据入hbase的一点总结(原创)

2016-07-31 11:57 学前班

现状:

     2个集群,分别为hadoop集群,hbase集群,需要入hbase集群的数据在hadoop集群上面。

    每天需要入Hbase集群的数据量在10T以上,hadoop集群规模上百台,hbase集群13台。


最初方案:

 hadoop集群数据无压缩,先通过distcp导入到hbase的hdfs上,然后再通过mr生成hfile,completebulkload再导入hbase。

 

问题:

   发现数据量很大的情况下光是distcp的过程就满足不了实际需要,而且hbase集群规模小生成hfile的效率也低,造成整个过程延时很大。


最新方案:

     hadoop集群通过MR程序先生成hfile存储在本hdfs上,然后distcp到hbase集群,然后completebulkload到hbase数据库。

如果两个集群处在同一机房,可以:

 hadoop集群MR生成hfile直接存储在hbase集群的hdfs上,然后可以直接completebulkload到hbase数据库。  (我们采用此方案,处在同一集群)


具体实现方法:

   总体描述:

    1):编写mapreduce任务,outputformat为HFileOutputFormat;

    2): 执行job生成hfile;

    3):然后completebulkload将生成的hfile导入hbase。


  上述最新方案需要调整的程序如下

  1:MR生成hfile的程序中指定连接Hbase集群(实际连接zookeeper,因为里面存储着meta表的位置,也就能顺应着找到regionserver,region,rowkey的对应信息,这里是不需要master参与的)

       Configuration conf = HBaseConfiguration.create();

        conf.set("hbase.zookeeper.quorum", "hadoop-slave124.cluster,hadoop-slave122.cluster,hadoop-slave126.cluster,hadoop-slave123.cluster,hadoop-slave125.cluster");    //这里是hbase集群上的zookeeper配置信息,把主机名换成具体IP

        conf.set("hbase.rootdir", "hdfs://nameservicehbase1/hbase"); //nameservicehbase1换成IP


  2: MR生成hfile的程序中指定setOutputPath的hfile的储存的绝对路径,也就是hbase上hdfs储存的路径

       Path path1 =  new Path("new URI("hdfs://10.204.210.9:9000/hfile/outpath")");

        FileOutputFormat.setOutputPath(job, path1);


 3:打jar,需要把hbase的jar打进来,hadoop集群不需要安装hbase服务,也可以生成hfile。


希望通过问答形式能把考虑点描述清楚

Q&A:

 Q1:hbase集群为什么单独一个分离一个集群?

    

A:regionserver对内存要求比较高,需要独立部署


 Q2:为什么采用MR生成hfile再completebulkload的方式?

   

A:对hbase集群没有任何压力,region没有任何负担,省去了flush、compact等过程,而且有预分区也省去了split过程。


Q3:为什么在hadoop环境先生成hfile?

 

   A:hadoop集群规模大,本hdfs上数据做mapreduce快很多,而且采用snappy等压缩机制数据量大致缩小到源数据的1/5,这样再做distcp会快很多,对于一天几十T的数据量效果很明显,如果是同一机房也可以直接把hfile生成在hbase集群的hdfs上。


Q4:为什么MR程序只需要连接zookeeper?

   

A: 里面存储着meta表的位置,也就能顺应着找到regionserver,region,rowkey的对应信息,这里是不需要master参与的


 Q5:hadoop集群中MR生成Hfile连接hbase集群做什么?

   

  A:确定splits,只需要一次RPC,这也是对hbase集群没有压力的原因之一。


Q6:hadoop集群中生成hfile需要安装hbase服务吗?

 

   A:不需要,只需要hbase的jar即可。


Q7:hbase集群put数据慢的原因?

 

   A:时间都浪费在了rpc上面了。


有错误或表达不清楚之处敬请指正!!望体谅!!

   

  扫描二维码关注更多技术文章,参与话题讨论。


 
学前班网络技术有限公司 更多文章 Spark的RDD原理以及2.0特性的介绍 一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了 【线上分享】关于Docker1.11架构的重大变革! 流式大数据处理的三种框架:Storm,Spark和Samza Spark2.0特性介绍,SparkSession的创建和使用API
猜您喜欢 从现在开始,丰富你的简历 PHP开发的发展现状和前景 阿里巴巴技术论坛邀你共享技术盛宴 要不要相信阴谋论?算一下,你就明白 今日推荐-开源图书 《PHP之道》