【发布时间】:2017-08-12 20:20:14
【问题描述】:
在这里激发新手。 我在 Hive 中有一个非常大的表(~130M 记录,180 列),我正在尝试使用 Spark 将其打包为镶木地板文件。 我使用默认的 EMR 集群配置,6 * r3.xlarge 实例来提交我用 Python 编写的 spark 应用程序。然后我在 YARN 上以集群模式运行它,通常将少量内存(几 GB)提供给驱动程序,将其余内存提供给执行程序。这是我的代码:
from pyspark import SparkContext
from pyspark.sql import HiveContext
sc = SparkContext(appName="ParquetTest")
hiveCtx = HiveContext(sc)
data = hiveCtx.sql("select * from my_table")
data.repartition(20).write.mode('overwrite').parquet("s3://path/to/myfile.parquet")
后来,我提交了类似这样的内容:
spark-submit --master yarn --deploy-mode cluster --num-executors 5 --driver-memory 4g --driver-cores 1 --executor-memory 24g --executor-cores 2 --py-files test_pyspark.py test_pyspark.py
但是,我的任务需要很长时间才能完成。在作业开始后,Spark 会很快关闭除一名工作人员之外的所有工作人员,因为其他工作人员没有被使用,并且需要几个小时才能从 Hive 获得所有数据。 Hive 表本身还没有分区或集群(我还需要一些建议)。
您能否帮助我了解我做错了什么,我应该从哪里开始以及如何从我拥有的资源中获得最大的性能?
谢谢!
【问题讨论】:
-
您可能想查看此问题/答案。它不是完全最新的,但它应该有助于stackoverflow.com/questions/36927918/…
标签: apache-spark hive pyspark hadoop-yarn parquet