我在 Hive 方面经验不多,目前正在使用 Scala 学习 Spark。我很想知道 Tez 上的 Hive 是否真的比 SparkSQL 快。我搜索了很多有测试结果的论坛,但他们比较了旧版本的 Spark,其中大部分是 2015 年编写的。下面总结了要点
- ORC 将与 Spark 中的 parquet 做同样的事情
- Tez 引擎将像 Spark 引擎一样提供更好的性能
- Hive 中的连接比 Spark 更好/更快
我觉得 Hortonworks 对 Hive 的支持比对 Spark 和 Cloudera 的支持更多,反之亦然。
示例链接:
最初我认为 Spark 会比任何东西都快,因为它们在内存中执行。在阅读了一些文章之后,我发现现有的 Hive 不知何故也得到了即兴创作的新概念,如 Tez、ORC、LLAP 等。
目前正在使用 PL/SQL Oracle 运行并迁移到大数据,因为数据量正在增加。我的要求是一种 ETL 批处理,包括每周批处理运行中涉及的数据详细信息。数据很快就会大量增加。
输入/查找数据为 csv/文本格式并更新为表格
两张500万行30列的输入表
- 30 个查找表用于生成输出表的每一列,其中包含大约 1000 万行和 220 列。
- 由于使用了很多查找表,因此涉及多个连接,例如内部连接和左外部连接。
请告知我应该选择以下哪一种方法以获得更好的性能和可读性,并且易于在列上包含较小的更新以供将来的生产部署使用。
方法一:
- 在 Tez 上使用 ORC 表进行 Hive
- 通过 TRANSFORM 选项的 Python UDF
- 加入性能调优,例如 map join
方法二:
- SparkSQL 与 Parquet 格式,从文本/csv 转换
- UDF 的 Scala
- 希望我们可以在Spark中进行多次内连接和左外连接
最佳答案
以下是实现问题解决方案的最佳方法。
要将数据加载到表中,spark 对我来说是个不错的选择。您可以从配置单元元存储中读取表并使用某种窗口函数执行增量更新并将它们注册到配置单元中。当从各种查找表中填充数据时,您可以在 Scala 中以编程方式编写代码。
但归根结底,需要有一个非常易于使用的查询引擎。当您的 spark 程序向 hive 注册表时,您可以使用 hive。
Hive支持三种执行引擎
- Spark
- 泰兹
- map 精简
Tez 已经成熟,Spark 正在随着 Facebook 和社区的各种提交而发展。
业务可以很容易将hive理解为一个查询引擎,因为hive在业界已经成熟很多。
简而言之就是用spark将日常处理的数据进行处理,并注册到hive中。
在 hive 中创建业务用户。
关于scala - 对于 ETL,ORC 性能真的比 Spark SQL 更好的 Tez 上的 Hive 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585401/