我在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中。
在配置单元中创建业务用户。