我很难调试为什么对hive外部表(支持dynamodb的简单查询)通过spark-submit花费10分钟以上,而在hive shell中仅花费4秒。
引用了Dynamodb表的Hive外部表,例如Employee [id,name,ssn,dept]。 id是分区键,ssn是范围键。
使用AWS Emr 5.29,Spark,Hive,Tez和hadoop。 1个主服务器,4个内核,m5.l
在配置单元外壳中:select name, dept, ssn from employee here id='123/ABC/X12I'
在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
上述提交火花需要花费14+分钟的长时间。我不确定需要调整或设置哪个参数以获得更好的响应时间。
在蜂巢壳中,我做了一个SET
;查看蜂巢壳正在使用的参数,并且有大量的信息。
我还尝试了boto3 dynamodb搜索方式,它比我简单的py sql进行火花提交的方式要快。
我缺少基本原理...任何想法或方向都值得赞赏。
我尝试通过执行collect()进行打印时正在进行聚合。我读了一下,但是没有意识到那是那么糟糕(明智的选择)。我也确实做了更多的实验,例如take(n) limit 1。