##磁盘空间占用
防止hdfs文件占用全部磁盘空间,在hdfs-site.xml中配置dfs.datanode.du.reserved:预留磁盘空间,详情请参考hadoop预留空间配置方法
<property>
<name>dfs.datanode.du.reserved</name>
<value>10737418240</value>
</property>
##yarn vcore和memory错误
修改yarn-site.xml
yarn.nodemanager.resource.cpu-vcores: 表示该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
修改capacity-scheduler.xml
DominantResourceCalculator按照所有的节点计算内存
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
###hadoop工作模式
hadoop三种任务执行方式
FIFO (默认) 先进先出,一次只执行一个任务。
FAIR 公平调度,多个任务平分资源
capacity 容量调度,同一队列下任务为FIFO模式
####公平模式配置
具体配置项含义参考yarn中资源调度fair schedule详解
修改队列方式yarn-site.xml
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<!-- 是否运行资源抢占,默认false -->
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
<!-- 是否允许应用提交时创建新队列,默认true。当flase时,应用提交时指定队列不存在,则将该应用放到默认队列中执行 -->
<property>
<name>yarn.scheduler.fair.allow-undeclared-pools</name>
<value>true</value>
</property>
新建fair-scheduler.xml文件,具体配置项参考Fair Scheduler相关参数yarn fair-scheduler 公平调度的一个实例
fair-scheduler.xml修改后执行命令生效,可以不用重启yarn集群
yarn rmadmin -refreshQueues
或
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh start resourcemanager
####容量模式配置
修改队列方式yarn-site.xml
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<!-- root目录下的队列 -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,sparksql</value>
</property>
<!-- 弹性设置,最大时占用多少比例资源,同一层级下相加最好为100,防止资源占用过多 -->
<!-- default占用70% -->
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>70</value>
</property>
<!-- sparksql占用30% -->
<property>
<name>yarn.scheduler.capacity.root.sparksql.capacity</name>
<value>30</value>
</property>
<!-- queue capacity最大占比 -->
<property>
<name>yarn.scheduler.capacity.root.sparksql.maximum-capacity</name>
<value>100</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.user-limit-factor</name>
<value>1</value>
</property>
<!-- 队列状态,可以是RUNNING或STOPPED -->
<property>
<name>yarn.scheduler.capacity.root.sparksql.state</name>
<value>RUNNING</value>
</property>
<!--限定哪些Linux用户/用户组可向给定队列中提交应用程序-->
<property>
<name>yarn.scheduler.capacity.root.sparksql.acl_submit_applications</name>
<value>*</value>
</property>
<!--为队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等。-->
<property>
<name>yarn.scheduler.capacity.root.sparksql.acl_administer_queue</name>
<value>*</value>
</property>
capacity-scheduler.xml修改后执行命令
yarn rmadmin -refreshQueues
或
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh start resourcemanager