我正在pyspark客户端模式下工作。系统配置为32 Gb ram和32核。我的驱动程序内存为2048,执行程序内存为2048。下面是我的pyspark配置。
spark = SparkSession.builder \
.appName(appName) \
.master(master) \
.config("hive.metastore.uris", "thrift://localhost:9083") \
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \
.config("spark.executor.cores", "4") \
.config("spark.executor.instances", "5") \
.config("spark.debug.maxToStringFields", "200") \
.config("spark.sql.execution.arrow.enabled", "true") \
.config("spark.sql.execution.arrow.fallback.enabled", "true") \
.config("spark.shuffle.service.index.cache.size", "2048") \
.config("spark.executor.extraJavaOptions", "-XX:ParallelGCThreads=4 -XX:+UseParallelGC") \
.config("spark.io.compression.codec", "org.apache.spark.io.LZ4CompressionCodec") \
.config("spark.cleaner.referenceTracking.blocking ", "false") \
.config("spark.shuffle.compress", "True") \
.config("spark.sql.shuffle.partitions", "20") \
.config("spark.default.parallelism", "20").config("spark.cleaner.ttl", "60") \
.enableHiveSupport() \
.getOrCreate()
当我从csv格式的配置单元中获取500,000行(8 gb)以上的行时,出现了 gc限制已超过的错误。 是否有任何命令可以检查使用了多少gc或未使用多少gc? 还有如何清除此错误?
答案 0 :(得分:2)
要了解GC的详细信息,可以使用以下命令。一些docs表示相同
{
"maxAge": "599.999999845s",
"debugString": "********************* ERRORS *********************\n* Error: deadline_exceeded: Timeout occurred while fetching Web statements from https://example.com./.well-known/assetlinks.json (which is equivalent to 'https://example.com/.well-known/assetlinks.json') using download from the web (ID 1).\n********************* INFO MESSAGES *********************\n* Info: No statements were found that match your query\n"
}
答案 1 :(得分:0)
在指定8GB
限制的同时拉动2GB
时,您需要增加驱动程序的内存。您也可以尝试配置offHeap
。
您可以以编程方式(通过API)管理这些Spark内存限制。
您可以在定义SparkSession
时进行设置:
spark = (
SparkSession.builder.master(master_url)
.config("spark.io.compression.codec", "snappy")
.config("spark.ui.enabled", "false")
.config("spark.executor.memory", "16g")
.config("spark.driver.memory", "16g")
.config("spark.memory.offHeap.enabled",true)
.config("spark.memory.offHeap.size","16g")
.getOrCreate()
)
如果所有分析的工作量都相同,那么按照上述方法编辑spark-defaults.conf
是可行的方法。