我在MySQL上有一個> 5GB的表。我想將這個表格作爲一個數據框加載到spark上,然後創建一個parquet文件。從Spark上的MySQL讀取數據時超出了GC開銷限制
這是我的Python函數來完成這項工作:
def import_table(tablename):
spark = SparkSession.builder.appName(tablename).getOrCreate()
df = spark.read.format('jdbc').options(
url="jdbc:mysql://mysql.host.name:3306/dbname?zeroDateTimeBehavior=convertToNull
",
driver="com.mysql.jdbc.Driver",
dbtable=tablename,
user="root",
password="password"
).load()
df.write.parquet("/mnt/s3/parquet-store/%s.parquet" % tablename)
我運行下面的腳本來運行我的火花的應用程序:當我在一個EC2實例與運行此腳本
./bin/spark-submit ~/mysql2parquet.py --conf "spark.executor.memory=29g" --conf "spark.storage.memoryFraction=0.9" --conf "spark.executor.extraJavaOptions=-XX:-UseGCOverheadLimit" --driver-memory 29G --executor-memory 29G
30 GB,它與java.lang.OutOfMemoryError: GC overhead limit exceeded
失敗同時,我只使用1.42 GB的可用內存。
這裏是堆棧跟蹤全控制檯輸出:https://gist.github.com/idlecool/5504c6e225fda146df269c4897790097
我不知道如果我做某些錯誤或火花不適用於此用例。我希望火花是。
您使用的紗線如果是這樣看一看[這](https://stackoverflow.com/a/33036908/1407161? )回答設置你的spark.yarn.executor.memoryOverhead屬性。另外,看看[THIS](https://stackoverflow.com/questions/1393486/error-java-lang-outofmemoryerror-gc-overhead-limit-超過/ 1393503#1393503)回答有關特定例外的更多信息。 – Jeremy