分享

每天有多个几十G的数据文件入库,使用哪种入库方式来提高效率?

uu_snow 发表于 2014-12-24 11:13:34 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 18 52568
每天从多个源系统中导出数据文件,每个数据文件大小从10G到300G不等

把这些数据装载HBASE中,客户希望用时越短越好,恨不能以秒作为单位

目前客户提供6~10台普通的PC服务器来建立HBASE集群。(一年内最多能申请到10台机器用)
每台机器配置:8G或16G内存,本地硬盘是7200转或1万转。

数据装载操作一般在晚上12点,期间整个集群可以不同提供任何其它对外服务,只处理数据装载。

软件环境由我们定,由于是先建的系统,可以使用最新版本的Hadoop和Hbase,或者是使用CDH5。

对于数据入库的方式,我们在网上翻了一些文章,好像是有3种:
1、预生成HFile入库
2、通过MapReduce入库
3、自己写Java程序,多线程读取本地磁盘上的文件,以HTable.put(put)的方式完成数据写入

请问:
为了能满足客户对数据装载的要求,该使用哪种入库方式?


已有(18)人评论

跳转到指定楼层
lixiaoliang7 发表于 2014-12-24 12:19:46
关注一下,我对这个也很感兴趣。
回复

使用道具 举报

qhy02he 发表于 2014-12-24 12:45:04
关注一下,学习学习!
回复

使用道具 举报

desehawk 发表于 2014-12-24 13:56:51


hbase bulkload的方式是最快的,

在对于大量的数据导入到HBase中, 如果一条一条进行插入, 则太耗时了, 所以可以先采用MapReduce生成HFile文件, 然后使用BulkLoad导入HBase中.
引用:
一、这种方式有很多的优点:
1. 如果我们一次性入库hbase巨量数据,处理速度慢不说,还特别占用Region资源, 一个比较高效便捷的方法就是使用 “Bulk Loading”方法,即HBase提供的HFileOutputFormat类。
2. 它是利用hbase的数据信息按照特定格式存储在hdfs内这一原理,直接生成这种hdfs内存储的数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。配合mapreduce完成,高效便捷,而且不占用region资源,增添负载。


二、这种方式也有很大的限制:
1. 仅适合初次数据导入,即表内数据为空,或者每次入库表内都无数据的情况。
2. HBase集群与Hadoop集群为同一集群,即HBase所基于的HDFS为生成HFile的MR的集群.


更多内容参考:
MapReduce生成HFile文件,再使用BulkLoad导入HBase中(完全分布式运行)

hbase数据快速导入方案--bulkload








回复

使用道具 举报

muyannian 发表于 2014-12-24 14:18:05
如果数据在关系数据库中,可以直接sqoop直接导入hbase中,专门导出来,在导到hbase中,显然多了一道程序。
回复

使用道具 举报

uu_snow 发表于 2014-12-25 11:01:12
不能用sqoop直接导入hbase
这些每天产生的数据,需要进行清洗转换(包括增量处理、按业务要求的数据合并、代码转换等)。清洗后的数据文件才能入库。

而且,用了sqoop就能提高数据入库的效率吗?
回复

使用道具 举报

uu_snow 发表于 2014-12-25 11:04:35
desehawk 发表于 2014-12-24 13:56
hbase bulkload的方式是最快的,

在对于大量的数据导入到HBase中, 如果一条一条进行插入, 则太耗时 ...

我们的数据是要每天入库,hbase中的表不是空的,你说的这种方式好像不适用吧?
回复

使用道具 举报

uu_snow 发表于 2014-12-25 11:09:52
muyannian 发表于 2014-12-24 14:05
每天都有可能不太适合bulkload,可以看看flume或则kafka。

详细参考下面:

Flume看上去是一个管理数据流转的平台,使用了它就可以提高数据入库的时间效率吗?
回复

使用道具 举报

desehawk 发表于 2014-12-25 11:31:51
uu_snow 发表于 2014-12-25 11:09
Flume看上去是一个管理数据流转的平台,使用了它就可以提高数据入库的时间效率吗?

效率方面可以不用考虑flume
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条