【问题标题】:Store records on HDFS or in HBase将记录存储在 HDFS 或 HBase 中
【发布时间】:2015-11-04 22:48:57
【问题描述】:

我有以下场景:

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

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

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

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

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

【问题讨论】:

    标签: database hadoop


    【解决方案1】:

    我认为 HBase 非常适合你的需要。

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

    将小文件直接存储在 HDFS 中是一种不好的做法,可能会出现问题。

    来自HBase project site

    Apache HBase 是 Hadoop 数据库。当你需要随机时使用它, 对您的大数据的实时读/写访问。这个项目的目标是 托管非常大的表——数十亿行 X 数百万 列——在商品硬件集群之上。

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

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

    【讨论】:

    • 谢谢,这看起来很像我需要的。您能否提供更多有关您的体验的信息,您如何看待它的表现?你存储的数据有多大?我也听说过 Cassandra,你怎么看? HBase 存在这么久了,它是否仍然处于活动状态(未过时)?
    • 嗯,对于这个项目,我只需要存储小文件,不需要做其他操作。我还没有尝试过其他解决方案(如 Cassandra、Hive 等)。我正在存储和读取数十万个小文件,我对性能感到满意。它比直接将数据发送到 HDFS 更快。这是一个公司项目,所以我无法提供更多信息。 HBase 项目还活着,他们继续开发它(它是一个 apache 项目)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    相关资源
    最近更新 更多