用于 ETL 的 Impala shell 或 Spark?
Posted
技术标签:
【中文标题】用于 ETL 的 Impala shell 或 Spark?【英文标题】:Impala shell or Spark for ETL? 【发布时间】:2019-02-02 00:59:44 【问题描述】:我最近开始研究 Hadoop 环境。我需要做一些基本的 ETL 来填充几个表。目前我正在使用 sqoop 将数据导入 Hadoop,并使用 Impala shell 命令编写用于转换的 SQL 查询。
但是这些天我听到了很多关于 Spark 的消息。在我的情况下,我在 Spark 而不是 Impala shell 中编写 ETL 会有什么优势吗?
谢谢 S
【问题讨论】:
在我看来是错误的选择。使用 Impala。 SQL 除了选择之外还有插入、更新、删除。长久以来,人们一直在使用 SQL 编写 ETL。因此,Impala、ImpalaQL 也以类似的方式用于 ETL。另一个答案比我的更好的概念不太明显。顺便说一句,您不能选择 2 个答案。我很好奇解释。 @thebluephantom 你可以告诉我是***的新手。如果我在接受答案时做错了什么,请告诉我。我不太了解接受后会发生什么。 您只能接受 1 个答案。您可以对所有答案投赞成票/反对票。我认为我的回答比接受不接受我的人要好得多。但我可以忍受,但感觉你可能对这一切都不熟悉。 感谢您的解释和理解。 【参考方案1】:过去许多人要么使用 A) SQL 脚本(如 Impala)和 UNIX 脚本,要么使用 B) ETL 工具进行 ETL。
但是,问题是 1) 更大规模的 imo 和 2) 技术标准化。
既然使用了 Spark,那么为什么不在 Spark 上进行标准化呢?
我已经经历了这个周期,并且使用 Spark 可以很好地完成 Kimball DWH 处理。这意味着使用 Informatica 等付费 ETL 工具的成本更低。但也有社区版。
需要注意的几点:
使用 Data Frame Writer 等将文件保存为不同的 HDFS 格式更容易、更直接。 但是带有分支的类似 Informatica 的映射略有不同。 从外部来源获取数据后,Spark 的大规模性能会更好。 使用 UNIX 脚本进行文件控制比在 Spark imo 中更容易,但如果在 Spark 中完成则习惯了。 Sqoop 可以避免,你可以使用 Spark 的 JDBC DF Reader,但是没有理由放弃 sqoop,虽然我会使用 Confluent Kafka Connect 来代替,但延迟更高,但随后我们进入 Zen Questions,因为 Kafka 用于更多实时方面。 我不完全相信 ETL 工具的好处。由于 IT 需要降低成本,Spark 是一个不错的选择。但这不适合胆小的人,您需要成为一名优秀的程序员。这是我听到很多人说的。
【讨论】:
感谢 bluephantom 的回复。我们正在遵循您提到的相同方法。用于我们数据仓库 impala 的 ETL 工具和用于 Hadoop 中数据加载/转换的 shell 脚本 我们不想为 Hadoop 工作购买 ETL 工具。我们希望继续使用 Hadoop 生态系统中已有的工具。现在你提到了标准化的一点。使用 Spark 而不是 Imapala/shell 脚本只对标准化有利,还是会有真正的性能提升?从您的回复中我不明白这一点。 Impala 按定义比使用 Map Reduce 的 HiveQL 快。 Spark 确实适用于大容量,启动 Spark 作业会产生开销。但是标准方法具有吸引力,人们当然希望为他们的简历学习新的东西。后者就好。 Spark 并不适合所有的 kpi 处理。 通过点击打勾 我接受了。花了一段时间才明白如何接受它,因为这是第一次在 *** 上发布一些东西。再次感谢。【参考方案2】:我要补充一点,Impala 不是 ETL 工具,它是一个 SQL 查询引擎,允许您在通过 ETL 流程清理数据后对非常大的数据集执行 SQL 查询。
历史上 Pig 和 Hive 在 Spark 之前用于 ETL。如果您更喜欢类似 SQL 的语法,Hive 仍然是相关的,并且有许多变体可以提供更好的性能,例如 Tez 上的 Hive 和 Spark 上的 Hive,它们用 Spark 替换了 MapReduce。
参考文献
Hive on Spark Hive on Tez【讨论】:
您可以使用 +1 而不是标记接受(复选框),因为@thebluephantom 的答案更全面。我提供了一些额外的信息,这些信息涵盖了他的回答中没有提到的事情。 只是好奇,如果我们已经在使用 Spark 并且想要 SQL 功能,为什么不直接迁移到 SparkSQL(而不是 Hive/Pig)?以上是关于用于 ETL 的 Impala shell 或 Spark?的主要内容,如果未能解决你的问题,请参考以下文章
ETL 选择,构建一个直接处理 SQL 查询引擎(impala)或原生数据库的 ETL? [关闭]