3

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

  • ORC 将与 Spark 中的 parquet 执行相同的操作
  • Tez 引擎将提供更好的性能,如 Spark 引擎
  • Hive 中的连接比 Spark 更好/更快

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

示例链接:

链接1

链接2

链接3

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

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

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

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

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

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

方法一:

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

方法二:

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

1 回答 1

0

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

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

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

Hive 支持三种执行引擎

  • 火花
  • 泰兹
  • 映射减少

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

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

简而言之,使用 spark 处理数据以进行日常处理,并将它们注册到 hive。

在 hive 中创建业务用户。

于 2017-08-13T05:42:22.600 回答