最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

[Hbase] 利用SQL BulkLoad快速导入海量数据

[复制链接]
跳转到指定楼层
楼主
发表于 2018-12-21 10:16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 168主编 于 2018-12-21 10:25 编辑

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索引的操作大家参考此篇博文:HBase二级索引实践

废话不多说,开搞:

准备数据

将数据文件上传至HDFS。

[AppleScript] 纯文本查看 复制代码
hadoop fs -mkdir -p /tmp/jbw/bulkLoadData
hadoop fs -put data.csv /tmp/jbw/bulkLoadData

根据SplitKey预分Region

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

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

[AppleScript] 纯文本查看 复制代码
drop table if exists hyper_table;
 
-- 此表在后续会从外表中查询并导入数据
create table hyper_table
(rowkey string
  , num int
  , country int
  , rd string)
stored as hyperdrive
tblproperties('hyperdrive.table.splitkey' = '"110000000",
              "120000000",
              "130000000",
              "140000000",
              "150000000",
              "160000000",
              "170000000",
              "180000000",
              "190000000"'
);

导入HDFS上数据至外表

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

[AppleScript] 纯文本查看 复制代码
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表
[AppleScript] 纯文本查看 复制代码
-- 用bulkload方式导入预先分好region的hyper_table表中
insert overwrite table hyper_table
select
    /*+ USE_BULKLOAD */
    rowkey
     , num
     , country
     , rd
from
    hyper_external_table
order by
     rowkey;



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

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

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


---------------------
作者:bw_233
原文:https://blog.csdn.net/whdxjbw/article/details/81145672

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-7 12:12

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表