博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase :利用SQL BulkLoad快速导入海量数据
阅读量:4218 次
发布时间:2019-05-26

本文共 1781 字,大约阅读时间需要 5 分钟。

HBase BulkLoad概述

直接用put命令将海量数据导入至HBase会耗费大量时间(HFile合并、Region分割等),而且用原生的put命令导入海量数据,会占用HRegionServer很多资源,HBase集群会变得压力山大,集群基本对外丧失写的能力。

其实HBase中数据以HFile文件的形式存储于HDFS,所以我们可以绕过HBase put API,直接将数据加工成HFile文件,再将其加载到Hyperbase中,从而完成大规模数据的快速入库

BulkLoad实现路线(技术选型)

原生BulkLoad需要编写mapreduce代码,对数据文件进行处理,通过HBase提供的api转为HFile。但这里我们选用HyperBase+Inceptor的方式实现BulkLoad,它底层其实是将SQL命令转为mapreduce任务。整体流程:

对数据集预分Region,获取SplitKey  - > 根据SplitKey创建HyperDrive表,预分Region -> 将数据转为HFile文件并加载至HBase -> 为Index数据划分Region,Rebuild Index。

rebuild索引的操作大家参考此篇博文:

准备数据

将数据文件上传至HDFS。

hadoop fs -mkdir -p /tmp/jbw/bulkLoadDatahadoop fs -put data.csv /tmp/jbw/bulkLoadData

根据SplitKey预分Region 

观察数据,发现id编号从10000000到19999999,一共10000000条数据,故在预分Region环节,建表DDL如下。

此过程即预先定义最终HBase表实际分布式存储的结构(划分多少个Region)

drop table if exists hyper_table; -- 此表在后续会从外表中查询并导入数据create table hyper_table(rowkey string  , num int  , country int  , rd string)stored as hyperdrivetblproperties('hyperdrive.table.splitkey' = '"110000000",              "120000000",              "130000000",              "140000000",              "150000000",              "160000000",              "170000000",              "180000000",              "190000000"');

导入HDFS上数据至外表

创建外表,从HDFS中导入数据至外表。

drop table if exists hyper_external_table;create external table hyper_external_table(rowkey string  , num int  , country int  , rd string)row format delimited fields terminated by ','location '/tmp/jbw/bulkLoadData';

导入过程挺快的,千万条数据,秒级导入。 

使用BulkLoad方式从数据外表中导入至最终HBase表

-- 用bulkload方式导入预先分好region的hyper_table表中insert overwrite table hyper_tableselect    /*+ USE_BULKLOAD */    rowkey     , num     , country     , rdfrom    hyper_external_tableorder by     rowkey;

利用SQL BulkLoad方式,我们仅用了32秒即完成了千万条数据的导入。

查询可见,数据均以成功导入。

好了,可以发现用BulkLoad黑科技导入数据至HBase,既方便又快捷,生产环境海量数据入库,基本都是使用此方式。

你可能感兴趣的文章
Web前端学习笔记——JavaScript之事件、创建元素、节点操作
查看>>
Web前端学习笔记——JavaScript之正则表达式、伪数组、垃圾回收
查看>>
Web前端学习笔记——JavaScript 之继承、函数进阶
查看>>
Web前端学习笔记——JavaScript之面向对象游戏案例:贪吃蛇
查看>>
不做单元测试?小心得不偿失!嵌入式系统单元测试工具,自动生成测试用例
查看>>
一种实用的联网汽车无线攻击方法及车载安全协议
查看>>
光靠欺骗检测是不够的:对抗多目标跟踪的攻击
查看>>
基于微区块链的V2X地理动态入侵检测
查看>>
面向V2C场景的ADAS数字孪生模型构建方法
查看>>
Comma2k19数据集使用
查看>>
面向自动驾驶车辆验证的抽象仿真场景生成
查看>>
一种应用于GPS反欺骗的基于MLE的RAIM改进方法
查看>>
筑牢网络安全基座,安全护航经济数字化转型大会成功举办
查看>>
单元测试工具:单元测试的测试前置驱动条件
查看>>
汽车智不智能?“智能座舱”有话说
查看>>
自动驾驶汽车CAN总线数字孪生建模(一)
查看>>
自动驾驶汽车CAN总线数字孪生建模(二)
查看>>
自动驾驶汽车GPS系统数字孪生建模(一)
查看>>
自动驾驶汽车GPS系统数字孪生建模(二)
查看>>
上海控安入选首批工控安全防护能力贯标咨询机构名单
查看>>