Parquet上的Spark与Hive上的Spark(Parquet格式)

时间:2017-11-09 17:21:51

标签: hadoop apache-spark cloudera-cdh

我们的用例是一个窄表(15个字段),但对整个数据集(数十亿行)进行大量处理。我想知道哪种组合可以提供更好的性能:

环境:CDH5.8 / spark 2.0

  1. Hive桌上的Spark(作为镶木地板的格式)
  2. Spark on row files(实木复合地板)

2 个答案:

答案 0 :(得分:2)

如果没有特定产品和用例的附加背景,我会在Hive表上投票支持SparkSql,原因有两个:

  1. sparksql通常比核心spark更好,因为databricks在sparksql中编写了不同的优化,这是更高的抽象,并提供优化代码的能力(阅读关于Project Tungsten)。在某些情况下,手动编写的spark核心代码会更好,但它要求程序员深入了解内部。另外sparksql有时是有限的,并且不允许你控制低级机制,但你总是可以回退使用核心rdd。

  2. hive而不是文件 - 我假设有外部Metastore的蜂巢。 Metastore保存了"表"的分区定义(在文件中可能是某个目录)。这是良好性能最重要的部分之一。即当处理文件时,spark需要加载此信息(这可能很耗时 - 例如s3列表操作非常慢)。因此,Metastore允许火花以简单快捷的方式获取此信息

答案 1 :(得分:2)

这里只有两个选项。文件上的Spark,或Hive上的Spark。 SparkSQL适用于两者,您应该更喜欢使用数据集API而不是RDD

如果您可以自己定义数据集架构,那么阅读原始HDFS文件的Spark会更快,因为您绕过了Hive Metastore的额外跃点。

当我多年前(使用Spark 1.3)进行简单测试时,我发现将CSV文件提取100000行的速度比使用相同LIMIT

的SparkSQL Hive查询快几个数量级。