具有ORC性能的Hive on Tez真的比Spark SQL for ETL更好吗?



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

  • ORC将执行与Spark中的镶木地板相同的
  • 操作
  • 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 上的蜂巢
  • Python UDF 通过 TRANSFORM 选项
  • 使用性能调整(如映射联接(进行联接

方法2:

  • 带有Parquet格式的SparkSQL,正在从文本/csv转换
  • Scala for UDF
  • 希望我们可以在 Spark 中执行多个内外部和左外连接

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

将数据加载到表中,火花对我来说看起来不错。可以从 hive 元存储读取表,并使用某种窗口函数执行增量更新,并在 hive 中注册它们。在从各种查找表填充数据时引入时,您可以在 scala 中以编程方式编写代码。

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

Hive 支持三个执行引擎

  • 火花
  • 特兹
  • 马普雷迪

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

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

简而言之,使用火花来处理日常处理的数据,并将其注册到hive中。

在配置单元中创建业务用户。

最新更新