spark-submit 与 hive 的查询性能 shell

Query performance in spark-submit vs hive shell

我很难调试为什么针对 hive 外部 table(支持 dynamodb)的简单查询通过 spark-submit 花费了 10 分钟以上,而在 hive shell 中只需要 4 秒.

Hive External Table 引用 Dynamodb table 说 Employee[id, name, ssn, dept]。 id 是分区键,ssn 是范围键。

使用 aws emr 5.29、spark、hive、tez、hadoop。 1 主,4 核,m5.l

在配置单元 shell 中:select name, dept, ssn from employee here id='123/ABC/X12I' returns 在 4 秒内产生结果。

现在,假设我在 code.py 中有以下代码(忽略导入)

spark = SparkSession.builder.appName("test").enableHiveSupport().getOrCreate()
data=spark.sql("select name, dept, ssn from employee here id='123/ABC/X12I'")
# print data or get length

我在主节点上提交以上内容为:

spark-submit --jars /pathto/emr-ddb-hive.jar, /pathto/emr-ddb-hadoop.jar code.py

上面的spark提交耗时14+分钟。我不确定需要调整或设置哪个参数以获得更好的响应时间。

在配置单元shell中我做了一个SET;查看 hive shell 正在使用的参数,并且有大量的参数。

我还尝试了一种 boto3 dynamodb 搜索方式,它比我简单的 py sql 到 spark-submit 快得多。

我缺少基础知识...欢迎任何想法或方向。

当我尝试通过执行 collect() 进行打印时,我正在进行聚合。我读到了它,但没有意识到它有那么糟糕(时间明智)。我也确实做了一些更多的实验,比如 take(n) limit 1.