spark提交jar包执行磁盘空间不足

方式1、
注意:仅限,开发测试环境
删除提交产生的缓存
1、先使用如下命令查看文件夹占用情况

du -h -x --max-depth=1 /文件夹名称

2、切换到如下文件夹

/usr/local/src/app/tmp/usercache/root/filecache

3、清空文件夹下内容

rm ./*

4、接着在执行如下命令关闭安全模式

hdfs dfsadmin -safemode leave

5、执行上传命令

spark-submit --class org.example.logshandler.LogsHandlerYarn \
    --master yarn \
    --driver-memory 1g \
    --executor-memory 1g \
    --executor-cores 1 \
    /usr/local/src/app/SparkTest-1.0-SNAPSHOT.jar \
    hdfs://hadoop0001:8020/part-00000-f777d89d-9747-4f38-9c0a-d9c58c0dde59-c000.snappy.parquet

方式二、根本原因是由于yarn在执行任务完成没有删除缓存导致的,我们在yarn-site.xml中设置参数。可用于生产环境

<property>
	<name>yarn.nodemanager.local-dirs</name>
	<value>/tmp/hadoop/nodemanager</value>
</property>
<property>
	<name>yarn.nodemanager.localizer.cache.target-size-mb</name>
	<value>1024</value>
</property>
<property>
	<name>yarn.nodemanager.localizer.cache.cleanup.interval-ms</name>
	<value>1800000</value>
</property>

2.1、yarn.nodemanager.local-dirs: 这个目录是nodemanager上的作业中间数据存放路径。推荐配置多个盘上的多个路径,从而分散作业执行中的磁盘IO压力。

2.2、yarn.nodemanager.localizer.cache.target-size-mb:配置nodemanager上的缓存目录的最大限度。nodemanager上有一个deletion server服务,会定期检测,如果yarn.nodemanager.local-dirs中配置的目录大小(如果配置了多个,则计算多个目录的总大小)是否超过了这里设置的最大限度值。如果超过了,就删除一些已经执行完的​​Container​​的缓存数据。

因为spark提交作业后遗留在nodemanager上的jar包就在yarn.nodemanager.local-dirs下面,所以只要这里配置合适的大小值。那么nodemanager上的deletion server是会自动检测并保证目录总大小的。

2.3、yarn.nodemanager.localizer.cache.cleanup.interval-ms: deletion server多长时间做一次检测,并且清除缓存目录直到目录大小低于target-size-mb的配置。

通过上面这三个量的配置,nodemanager会确保本地的缓存数据总量在target-size-mb之下,也就是超过了的话,之前的spark的jar包就会被删除。所以我们就不需要再担心nodemanager节点上的spark jar包缓存问题了。target-size-mb的默认值是10G,这个值当然可以根据你的实际情况进行调整。

一定注意
配置的yarn定时清除缓存一定是配置的
yarn.nodemanager.local-dirs配置参数中/tmp/hadoop/nodemanager的文件夹目录大小
内部的文件夹列表:
/tmp/hadoop/nodemanager/nmPrivate
/tmp/hadoop/nodemanager/filecache
/tmp/hadoop/nodemanager/usercache

以上这三个文件夹大小总和

你可能感兴趣的:(hadoop,spark)