【问题标题】:Spark Connect Hive to HDFS vs Spark connect HDFS directly and Hive on the top of it?Spark 将 Hive 连接到 HDFS 与 Spark 直接连接 HDFS 并在其顶部连接 Hive?
【发布时间】:2019-11-02 03:16:08
【问题描述】:

问题总结:

我有一个特殊的用例,每天通过 Spark 流向 HDFS 写入 >10gb 的数据。我们目前处于设计阶段。我们想使用火花流将数据写入 HDFS(约束)。数据是柱状的。 我们有 2 个选项(到目前为止):

当然,我想使用 hive 上下文将数据提供给 HDFS。定义了模式,数据分批或逐行提供。

还有另一种选择。借助 Spark Streaming API,我们可以直接将数据写入 HDFS。我们也在考虑这一点,因为我们可以在这个用例中通过 hive 从 HDFS 查询数据。这将为将来可能出现的新用例使用其他技术留有余地。

什么是最好的?

Spark Streaming -> Hive -> HDFS -> 由 Hive 使用。

VS

Spark Streaming -> HDFS -> 由 Hive 或其他技术使用。

谢谢。

到目前为止,我还没有找到关于该主题的讨论,我的研究可能很短。如果您有任何文章可以推荐,我将非常乐意阅读。

【问题讨论】:

    标签: apache-spark hadoop hive hdfs connector


    【解决方案1】:

    我有一个特定的用例,每天写入 >10gb 数据,并且数据是列式的

    这意味着您正在存储每日数据。如果是这种情况,hive 的分区列是日期,这样您就可以轻松地查询每一天的数据。您可以从 BI 工具(如 looker 或 presto 或任何其他 BI 工具)查询原始数据。如果您从 spark 查询,那么您可以使用配置单元功能/属性。此外,如果您将数据以列格式存储在 parquet impala 中,则可以使用 hive Metastore 查询数据。

    如果您的数据是柱状的,请考虑 parquet 或 orc。

    关于选项2: 如果您有配置单元选项,则无需将数据输入 HDFS 并从配置单元创建外部表并访问它。

    结论: 我觉得两者都是一样的。但是考虑到使用 BI 工具或 spark 直接查询原始数据,hive 是首选。从 HDFS 我们也可以使用 spark 查询数据。如果它以 json 或 parquet 或 xml 等格式存在,则选项 2 不会增加优势。

    【讨论】:

      【解决方案2】:

      这取决于您的最终用例。在做出决定时请考虑以下两种情况:

      如果您有 RT/NRT 案例并且您的所有数据都已完全刷新,那么我建议您使用第二种方法 Spark Streaming -> HDFS -> Consumed by Hive。这将比您的第一种方法Spark Streaming -> Hive -> HDFS -> Consumed by Hive 更快。因为里面少了一层。

      如果你的数据是增量的,并且还有多次更新、删除操作,那么 HDFS 或 Hive over HDFS 将很难与 spark 一起使用。由于 Spark 不允许从 HDFS 更新或删除数据。在这种情况下,您的两种方法都将难以实施。您可以使用 Hive 托管表 并使用 HQL 进行更新/删除(仅在 Hortonwork Hive 版本中支持),或者您可以使用 NOSQL 数据库,如 HBase 或 Cassandra 以便 spark 可以轻松进行 upsert 和删除。从程序的角度来看,与您的两种方法相比,它也很容易。 如果您在 NoSQL 中转储数据,那么您可以将 hive 用于普通 SQL 或报告目的。

      有很多可用的工具和方法,但请选择适合您所有情况的工具和方法。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 2017-04-30
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多