1 修改$SPARK_HOME/conf目錄下的spark-defaults.conf文件
添加以下配置項
spark.sql.hive.convertMetastoreParquet false
hive.exec.compress.output false
如果spark.sql.hive.convertMetastoreParquet不設置為false,前台清單預覽看到的內容為亂碼。
由於parquet格式的文件內置了壓縮,故輸出結果不需要進行壓縮,如果設置為壓縮,清單下載功能異常。
2 修改$SPARK_HOME/conf目錄下spark-env.sh文件,設置以下參數:
SPARK_EXECUTOR_INSTANCES=11
SPARK_EXECUTOR_CORES=2
SPARK_EXECUTOR_MEMORY=1G
SPARK_DRIVER_MEMORY=3G
根據需要配置,如果設置剛好滿足所有內存,則沒有多余的內存供其他task任務的執行
2.1 參數SPARK_EXECUTOR_INSTANCES
該參數決定了yarn集群中,最多能夠同時啟動的EXECUTOR的實例個數。Yarn中實際能夠啟動的最大Executors的數量會小於等於該值。如果不能確定最大能夠啟動的Executors數量,建議將該值先設置的足夠大。(就是設置盡量大)
2.2 SPARK_EXECUTOR_CORES 該參數為設置每個EXECUTOR能夠使用的CPU core的數量。
Yarn集群能夠最多並行的Task數據為SPARK_EXECUTOR_INSTANCES乘 以SPARK_EXECUTOR_CORES一般設置為2
也就是說如果spark_executor_instances=11 則最多並行的Task數為22
2.3 SPARK_EXECUTOR_MEMORY
該參數設置的是每個EXECUTOR分配的內存的數量。需要注意的是,該內存數量是SPARK_EXECUTOR_CORES中設置的內核數共用的內存數量。
例如上面示例中,就是2核cpu公用1G內存。
2.4 SPARK_DRIVER_MEMORY
該參數設置的是DRIVER分配的內存的大小。也就是執行start-thriftserver.sh機器上分配給thriftserver的內存大小。
3 yarn.nodemanager.resource.memory-mb
$HADOOP_HOME/etc/hadoop目錄下的yarn-site.xml文件中,參數yarn.nodemanager.resource.memory-mb配置了每台機器yarn能夠使用的物理內存大小,單位是MB。
如果發現集群內內存使用量明顯比屋里內存小,可以修改該參數
4 spark.yarn.executor.memoryOverhead
該參數指定了每個executor在分配的內存之外,能夠額外獲得的內存的大小,默認是7%