在Tez上真的是Hive,ORC性能比用于ETL的Spark SQL更好吗?

时间:2017-08-09 08:27:06

标签: scala hadoop apache-spark hive tez

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

  • ORC将与Spark中的镶木地板相同。
  • Tez引擎将提供更好的性能,如Spark引擎
  • Hive中的联接比Spark更好/更快

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

示例链接:

link1

link2

link3

最初我认为Spark会比任何东西都快,因为它们在内存中执行。在阅读了一些文章之后,我得到了一些现有的Hive也可以通过Tez,ORC,LLAP等新概念进行即兴创作。

目前正在使用PL / SQL Oracle并且随着卷的增加而迁移到大数据。我的要求是ETL批处理,包括每周批次运行中涉及的数据详细信息。数据将很快增加。

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

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

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

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

方法1:

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

方法2:

  • SparkSQL,Parquet格式,从text / csv转换
  • Scala for UDF
  • 希望我们可以在Spark中执行多个内外连接

1 个答案:

答案 0 :(得分:0)

如下所示实施问题解决方案的最佳方式。

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

但是在一天结束时,需要一个非常容易使用的查询引擎。当您的spark程序使用配置单元注册表时,您可以使用配置单元。

Hive支持三个执行引擎

  • Spark
  • Tez
  • MapReduce的

Tez已经成熟,随着来自Facebook和社区的各种提交,火花正在发展。

业务可以非常轻松地将hive理解为查询引擎,因为它在业界更加成熟。

简而言之,使用spark来处理日常处理的数据并将其注册到配置单元。

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