【问题标题】:Is really Hive on Tez with ORC performance better than Spark SQL for ETL?具有 ORC 性能的 Tez 上的 Hive 真的比 ETL 的 Spark SQL 更好吗?
【发布时间】:2017-08-09 08:27:06
【问题描述】:

我在 Hive 方面几乎没有经验,目前正在使用 Scala 学习 Spark。我很想知道 Tez 上的 Hive 是否真的比 SparkSQL 快。我搜索了许多论坛的测试结果,但他们比较了旧版本的 Spark,其中大多数是在 2015 年编写的。总结以下要点

  • ORC 将与 Spark 中的 parquet 执行相同的操作
  • Tez 引擎会像 Spark 引擎一样提供更好的性能
  • Hive 中的联接比 Spark 更好/更快

我觉得 Hortonworks 对 Hive 的支持比对 Spark 和 Cloudera 的支持更多,反之亦然。

示例链接:

link1

link2

link3

最初我认为 Spark 会比任何东西都快,因为它们在内存中执行。在阅读了一些文章后,我不知何故现有的 Hive 也被即兴创作了新概念,如 Tez、ORC、LLAP 等。

目前正在使用 PL/SQL Oracle 运行并迁移到大数据,因为数据量正在增加。我的要求是一种 ETL 批处理,包括每周批处理运行中涉及的数据详细信息。数据将很快大幅增加。

  • 输入/查找数据是 csv/文本格式并更新到表格中

  • 两个输入表,有 500 万行和 30 列

  • 30 个查找表用于生成输出表的每一列,其中包含大约 1000 万行和 220 列。
  • 由于使用了许多查找表,因此涉及多个连接,例如内部和左外部。

请告知我应该选择以下哪一种方法,以获得更好的性能和可读性,并且易于在列上包含小更新,以供将来的生产部署使用。

方法一:

  • 带有 ORC 表的 Tez 上的 Hive
  • Python UDF 通过 TRANSFORM 选项
  • 加入性能调整,如地图加入

方法二:

  • Parquet 格式的 SparkSQL 是从 text/csv 转换而来的
  • 用于 UDF 的 Scala
  • 希望我们可以在 Spark 中执行多个内连接和左外连接

【问题讨论】:

  • 很容易得出错误的结论。 1. Hive和tez有很多影响性能的配置。 2. 好的 SQL 比工具、文件格式和执行引擎更重要。

标签: scala hadoop apache-spark hive tez


【解决方案1】:

实施解决问题的最佳方法如下。

要将数据加载到表中,spark 对我来说是个不错的选择。您可以从 hive 元存储中读取表并使用某种窗口函数执行增量更新并将它们注册到 hive。当从各种查找表中填充数据时摄取数据时,您可以在 scala 中以编程方式编写代码。

但归根结底,需要一个非常易于使用的查询引擎。当您的 spark 程序使用 hive 注册表时,您可以使用 hive。

Hive 支持三种执行引擎

  • 火花
  • 特斯
  • 映射减少

Tez 已经成熟,Spark 正在随着 Facebook 和社区的各种提交而发展。

企业可以很容易地将 Hive 理解为一个查询引擎,因为它在行业中更加成熟。

简单来说就是使用spark来处理日常处理的数据,并注册到hive中。

在 hive 中创建业务用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-10
    • 2017-10-01
    • 1970-01-01
    • 2016-10-25
    • 2019-04-21
    • 2016-12-13
    • 1970-01-01
    • 2016-12-08
    相关资源
    最近更新 更多