将记录存储在HDFS或HBase中

时间:2015-11-04 14:32:55

标签: database hadoop

我有以下情况:

  • 通过文件形式的网络服务上传测量结果
  • 这些文件稍后会复制到HDFS
  • 每个测量包含一个或多个参数的许多功能(值)
  • 测量可能具有不同数量的值
  • 使用Hadoop上的机器学习算法
  • 处理测量
  • 并非所有测量都是针对特定用户进行的,而是针对特定时间段(例如,对在Y-Z期间上传的用户X上的文件执行处理)
  • 中间结果存储在HDFS上,以及最终结果

我的问题与第二点有关 - 这些文件后来被复制到HDFS - 我担心这可能是一个存在大量小文件(例如1MB)的问题。

我的想法是将这些文件存储在数据库中,这样我就可以避免小文件的问题,也可以查询数据(为用户选择期间的数据)。这是一种更好的方法吗?

如果答案是肯定的,我可以使用哪些数据库?所以我需要数据库:

  • 与Hadoop(大数据)兼容
  • 行可能包含不同数量的值(如时间序列的情况)
  • 在特定时间段内检索特定用户的测量值
  • 记录输入到MapReduce作业

1 个答案:

答案 0 :(得分:2)

我认为HBase非常适合您。

我还有“small file problem”,我用HBase解决了它。

直接在HDFS中存储小文件这是一个不好的做法,可能是个问题。

来自HBase project site

  

Apache HBase是Hadoop数据库。需要随机使用时,   对大数据的实时读/写访问权限。该项目的目标是   托管非常大的表 - 数十亿行数百万   列 - 商品硬件集群。

  • HBase适用于Hadoop
  • 行可以在列族中存储不同的列,更新的值具有时间戳,因此您可以返回单元格的历史记录
  • HBase和Hadoop用于MaReduce作业(可以为作业输入/输出行)

在我的情况下,我有很多小文件(200 Kb / 1 Mb),现在我将这些文件存储在一个表中,其中一些列为Header / Information,另一列为文件的二进制内容和文件名作为键(文件名是UUID)