我在 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 列。
- 由于使用了许多查找表,因此涉及多个连接,例如内部和左外部。
请告知我应该选择以下哪一种方法,以获得更好的性能和可读性,并且易于在列上包含用于未来生产部署的小更新。
方法一:
- 带有 ORC 表的 Tez 上的 Hive
- Python UDF 通过 TRANSFORM 选项
- 加入性能调整,如地图加入
方法二:
- 从 text/csv 转换的 Parquet 格式的 SparkSQL
- 用于 UDF 的 Scala
- 希望我们可以在 Spark 中执行多个内连接和左外连接