【问题标题】:Best way to store relational data in hdfs在 hdfs 中存储关系数据的最佳方法
【发布时间】:2015-09-05 10:51:59
【问题描述】:

我最近阅读了很多关于 hadoop 的内容,我可以说我了解它的一般概念,但仍然(至少)有一部分是我无法理解的。在 hdfs 中存储关系数据的最佳方式是什么?

首先,我知道不存在 hadoop 来替代为我的应用程序服务的传统良好的旧 sql 数据库。我在这里面临的问题是我想使用 hadoop 将来自多个系统的数据聚合到 hdfs 中。然后我可以交叉引用来自多个系统的数据,然后生成我的报告工具等使用的新数据集。

好的,那么,我应该使用一个表将表数据导入一个文件,还是应该导入连接表的查询结果。

例如:

SQL 表:

人: 个人ID 姓名 生日 性

公司:

CompanyID
Name
Address

个人公司

PersonID
CompanyID

我应该按原样导入所有 3 个表,还是应该导入查询的结果返回为什么人为哪家公司工作。

请与我分享你的想法!

【问题讨论】:

    标签: sql hadoop hdfs


    【解决方案1】:

    通常要在 hadoop 中构建数据仓库,您必须摄取所有表。在您的示例中,您需要在 HDFS 中拥有所有 3 个表,然后进行 ETL/聚合,例如 Joiners_weekly 可以有一个具有

    的 etl

    select * from PersonCompany pc join Person p on pc.personid=p.personid join Company c on pc.companyid=c.companyid。

    这可以是可以从 hadoop 生成的报告。希望这可以帮助。

    【讨论】:

    • 感谢高拉夫的回答。关于表导入,您是否建议每天都导入它们并覆盖 hdfs 中的文件,在每次导入时创建一个新文件或创建一个仅包含新记录的新文件?
    • 此决定与数据类型有关。如果您的表中有更新,建议进行完全覆盖,但是如果每天要进行完全覆盖的数据量很大,则必须进行增量导入,然后根据主键对记录进行重复数据删除(必须这样做使用单独的猪/蜂巢作业)。如果表根本没有更新,您可以毫无问题地进行增量导入。
    【解决方案2】:

    我认为您应该考虑在 HDFS 之上使用 HBase 来获得一些数据库功能:

    http://hbase.apache.org/

    【讨论】:

    • 这已被考虑并将实施,但我的问题更针对要导入的数据结构。
    • 最好将所有表连接到一个“大表”中,因为这是 HBase 所要处理的。
    猜你喜欢
    • 2021-12-13
    • 2016-08-09
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2021-02-11
    • 2020-08-10
    相关资源
    最近更新 更多