我很难调试为什么通过spark-submit对hive外部表(generandb-backed(进行简单查询需要10分钟以上的时间,而在hive-shell中只需要4秒。
Hive外部表引用Dynamodb表,比如Employee[id,name,ssn,dept]。id是分区键,ssn是范围键。
使用aws emr 5.29,spark,hive,tez,hadoop。1个主机,4个核心,m5.l
在hive shell中: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
;查看hive shell正在使用的参数,并且有大量的参数。
我还尝试了一种boto3动态数据库的搜索方式,它比我简单的py-sql更快地激发提交。
我错过了基本面。。。任何想法或方向都值得赞赏。
当我试图通过执行collect((打印时,我正在进行聚合。我读过它,但没有意识到它有那么糟糕(从时间上来说(。我最终也做了一些实验,比如take(n(极限1。