HBase的BulkLoad有两种方式:
thinrow的机制是flatmap把cell的信息进行flatmap;适合少于1万列的数据集;thinrow的涵义就是少行多列;
bulkload的机制则是flatmap的是行,把行在拆分为cell是在map里面做的。适合多余1万列的数据集。
Basic和ThinRows的机制其实类似,但是接收的数据格式不一样,前者接受的是一个二元组ListSeq((keyFamilyQualifier, value));其中KeyFamilyQualifier(包括rowKey, family, qualifier)以及value,后者是一个二元组List(new ByteArrayWrapper(Bytes.toBytes(rowKey)), familyQualifiersValues) familyQualifiersValues中包含family, qualifier, value。
Basic是一个平行结构,ThinRow其实是一个层级结构;
Basic和thin之间的差别在于入口的数据结构;basic入口的是(rowkey-famil-quantity,cellvalue),说白了就是一个cellvalue;thinrow的入口参数则是一行数据(rowkey,columnValues),注意,columnValues是一个数组;这种差别直接导致了两者处理的差异性,下面将会讲到;
bulkload在map一下row信息之后,将会进行一次repartitionAndSortWithinPartitions,这个repartion将会导致shuffle,最后是hbaseForeachPartition,这个是一个action;在这个action中将会遍历shuffle的数据,进行处理,好的,basic和thinrow的性能差别就在这里,因为basic的入口是cellvalue,那么在shuffle过程中(RPC),传输的粒度就是一个cellvalue;处理完毕一个相应了,再来一个;对于thinrow而言,一次是一行数据,RPC一次传输的粒度就是一行数据,明显吞吐量要高于basic;
basic的hbaseForeachPartition(it代表一个分区)
 it.foreach{ case (keyFamilyQualifier, cellValue:Array[Byte]) => ... 
thinrow的hbaseForeachPartition
 it.foreach{ case (rowKey:ByteArrayWrapper, familiesQualifiersValues:FamiliesQualifiersValues) => ... 
那么为什么对于多于1万列的场景要使用basic呢?就是因为可能会超过RPC的上限,即使没有超过,一次传输一个超大数据对于网络来讲压力也很大。
注意这里有一个Roll的动作,就是bulk/thinrow入口参数有一个max_size,代表多大小对HFile文件进行拆分,Basic默认是HConstants.DEFAULT_MAX_FILE_SIZE,ThinRow其实也是一样的,但是官网坑爹的写了个20,所以导致的每个记录都会单独成为一个HFile,结果爆了一个异常:HFileLoad的大小超过了32。
这个异常本质还是因为Roll Size设置的太小了,采用默认值即可。
   BulkLoad插入数据的速度将会比采用put方式要快很多:这是因为PUT方式需要些metadata,采用bulkload方式避免了写入metadata,直接通过HFile的添加来实现。但是bulkLoad需要对数据进行组合,这里又要耗费一些时间,所以优势更多的体现在大量数据,分布比较多的设备的场景下。
shuffle指的是各个节点在为reduce准备数据,比如检索,排序同时对数据进行打包;repartion这是对数据进行分区,正常情况下每个分区将会对应一个CPU核,repartition这是通过指定分区规则(指定分区数量或者指定按照某种规则分区)来对数据进行重新分区,重新分区应该只是针对可重用数据才有价值,否则数据重新分区本身就是一件比较耗费性能的事情。
备注:bulkload是在hbase-spark-2.0.0-alpha3.jar下面的\org\apache\hadoop\hbase\spark\HBaseContext.scala中定义的。
参考:
https://hbase.apache.org/book.html(Chapter 102. Bulk Load)
 

HBase的bulkLoad的更多相关文章

  1. [How to] HBase的bulkload使用方法

    1.简介 将数据插入HBase表中的方法很多,我们可以通过TableOutputFormat以Mapreduce on HBase的方式将数据插入,也可以单纯的使用客户端API将数据插入.但是以上方法 ...

  2. 大数据学习笔记——HBase使用bulkload导入数据

    HBase使用bulkload批量导入数据 HBase可使用put命令向一张已经建好了的表中插入数据,然而,当遇到数据量非常大的情况,一条一条的进行插入效率将会大大降低,因此本篇博客将会整理提高批量导 ...

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

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

  4. 通过BulkLoad快速将海量数据导入到Hbase

    在第一次建立Hbase表的时候,我们可能需要往里面一次性导入大量的初始化数据.我们很自然地想到将数据一条条插入到Hbase中,或者通过MR方式等. 但是这些方式不是慢就是在导入的过程的占用Region ...

  5. HBase 写优化之 BulkLoad 实现数据快速入库

    在第一次建立Hbase表的时候,我们可能需要往里面一次性导入大量的初始化数据.我们很自然地想到将数据一条条插入到Hbase中,或者通过MR方式等.但是这些方式不是慢就是在导入的过程的占用Region资 ...

  6. Spark、BulkLoad Hbase、单列、多列

    背景 之前的博客:Spark:DataFrame写HFile (Hbase)一个列族.一个列扩展一个列族.多个列 用spark 1.6.0 和 hbase 1.2.0 版本实现过spark BulkL ...

  7. sqoop将关系型的数据库得数据导入到hbase中

    1.sqoop将关系数据库导入到hbase的参数说明

  8. HBase 实战(1)--HBase的数据导入方式

    前言: 作为Hadoop生态系统中重要的一员, HBase作为分布式列式存储, 在线实时处理的特性, 备受瞩目, 将来能在很多应用场景, 取代传统关系型数据库的江湖地位. 本篇博文重点讲解HBase的 ...

  9. [原创]HBase学习笔记(4)- 数据导入

    需要分别从Oracle和文本文件往HBase中导入数据,这里介绍几种数据导入方案. 1.使用importTSV导入HBase importTSV支持增量导入.新数据插入,已存在数据则修改. 1.1.首 ...

随机推荐

  1. Hibernate 表连接hql语句

    现有两个表 user 表 和 VIPcard 表 UserVo  user VIPcardVo 中含有 UserVo user select v from VIPCardVo v left join ...

  2. MoQ(基于.net3.5,c#3.0的mock框架)简单介绍(转)

    https://www.cnblogs.com/nuaalfm/archive/2009/11/25/1610755.html

  3. js自动补全

    <!doctype html> <html> <style> body { margin-left: 0px; margin-top: 0px; margin-ri ...

  4. vue项目创建流程和使用

    vue项目的创建 npm run dev 让项目执行起来 #下载vuex npm install vuex --save#下载axiosnpm install axios --save 当我们生成项目 ...

  5. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)

    正如在<我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)>一文中看到的,在AbstractBoard的代码中,当程序需要创建N个Piec ...

  6. Android获取系统外置存储卡路径的方法

    android系统可通过Environment.getExternalStorageDirectory()获取存储卡的路径.可是如今有非常多手机内置有一个存储空间.同一时候还支持外置sd卡插入,这样通 ...

  7. 3.26课·········window.document对象

    1.Window.document对象 一.找到元素:    docunment.getElementById("id"):根据id找,最多找一个:    var a =docun ...

  8. 配置asp.net IIS服务器遇到的问题以及详细图例解决方案

    原来配置过IIS服务,但是没有将自己的程序放在IIS服务器上,今天突发奇想,看看自己写的程序怎么样啊,能否在服务器上运行一下,说干就干,但是遇到了很多困难,今天把陪孩子过程以及遇到的问题给大家说说,希 ...

  9. Data Structure Binary Tree: Lowest Common Ancestor in a Binary Tree

    http://www.geeksforgeeks.org/lowest-common-ancestor-binary-tree-set-1/ #include <iostream> #in ...

  10. Demo Nec

    /* 布局 */.g-va{width:1160px;margin:0 auto;} /* visual area */ /* 模块 */.m-nav{position:relative;height ...