hadoop配置说明

hadoop配置说明

ResourceManager相关配置参数

  • yarn.resourcemanager.address

参数解释:ResourceManager 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等。

默认值:${yarn.resourcemanager.hostname}:8032

  • yarn.resourcemanager.scheduler.address

参数解释:ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。

默认值:${yarn.resourcemanager.hostname}:8030

  • yarn.resourcemanager.resource-tracker.address

参数解释:ResourceManager 对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等。

默认值:${yarn.resourcemanager.hostname}:8031

  • yarn.resourcemanager.admin.address

参数解释:ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。

默认值:${yarn.resourcemanager.hostname}:8033

  • yarn.resourcemanager.webapp.address

参数解释:ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。

默认值:${yarn.resourcemanager.hostname}:8088

  • yarn.resourcemanager.scheduler.class

参数解释:启用的资源调度器主类。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler。

默认值:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

  • yarn.resourcemanager.resource-tracker.client.thread-count

参数解释:处理来自NodeManager的RPC请求的Handler数目。

默认值:50

  • yarn.resourcemanager.scheduler.client.thread-count

参数解释:处理来自ApplicationMaster的RPC请求的Handler数目。

默认值:50

  • yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb

参数解释:单个可申请的最小/最大内存资源量。比如设置为1024和3072,则运行MapRedce作业时,每个Task最少可申请1024MB内存,最多可申请3072MB内存。

默认值:1024/8192

  • yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores

参数解释:单个可申请的最小/最大虚拟CPU个数。比如设置为1和4,则运行MapRedce作业时,每个Task最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。什么是虚拟CPU,可阅读我的这篇文章:“YARN 资源调度器剖析”。

默认值:1/32

  • yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path

参数解释:NodeManager黑白名单。如果发现若干个NodeManager存在问题,比如故障率很高,任务运行失败率高,则可以将之加入黑名单中。注意,这两个配置参数可以动态生效。(调用一个refresh命令即可)

默认值:“”

  • yarn.resourcemanager.nodemanagers.heartbeat-interval-ms

参数解释:NodeManager心跳间隔

默认值:1000(毫秒)

NodeManager相关配置参数

  • yarn.nodemanager.resource.memory-mb

参数解释:NodeManager总的可用物理内存。注意,该参数是不可修改的,一旦设置,整个运行过程中不可动态修改。另外,该参数的默认值是8192MB,即使你的机器内存不够8192MB,YARN也会按照这些内存来使用(傻不傻?),因此,这个值通过一定要配置。不过,Apache已经正在尝试将该参数做成可动态修改的。

默认值:8192

  • yarn.nodemanager.vmem-pmem-ratio

参数解释:每使用1MB物理内存,最多可用的虚拟内存数。

默认值:2.1

  • yarn.nodemanager.resource.cpu-vcores

参数解释:NodeManager总的可用虚拟CPU个数。

默认值:8

  • yarn.nodemanager.local-dirs

参数解释:中间结果存放位置,类似于1.0中的mapred.local.dir。注意,这个参数通常会配置多个目录,已分摊磁盘IO负载。

默认值:${hadoop.tmp.dir}/nm-local-dir

  • yarn.nodemanager.log-dirs

参数解释:日志存放地址(可配置多个目录)。

默认值:${yarn.log.dir}/userlogs

  • yarn.nodemanager.log.retain-seconds

参数解释:NodeManager上日志最多存放时间(不启用日志聚集功能时有效)。

默认值:10800(3小时)

  • yarn.nodemanager.aux-services

参数解释:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序

默认值:“”

端口总结

端口 参数
9000 fs.defaultFS,如:hdfs://172.25.40.171:9000
9001 dfs.namenode.rpc-address,DataNode会连接这个端口
50070 dfs.namenode.http-address
50470 dfs.namenode.https-address
50100 dfs.namenode.backup.address
50105 dfs.namenode.backup.http-address
50090 dfs.namenode.secondary.http-address,如:172.25.39.166:50090
50091 dfs.namenode.secondary.https-address,如:172.25.39.166:50091
50020 dfs.datanode.ipc.address
50075 dfs.datanode.http.address
50475 dfs.datanode.https.address
50010 dfs.datanode.address,DataNode的数据传输端口
8480 dfs.journalnode.rpc-address
8481 dfs.journalnode.https-address
8032 yarn.resourcemanager.address
8088 yarn.resourcemanager.webapp.address,YARN的http端口
8090 yarn.resourcemanager.webapp.https.address
8030 yarn.resourcemanager.scheduler.address
8031 yarn.resourcemanager.resource-tracker.address
8033 yarn.resourcemanager.admin.address
8042 yarn.nodemanager.webapp.address
8040 yarn.nodemanager.localizer.address
8188 yarn.timeline-service.webapp.address
10020 mapreduce.jobhistory.address
19888 mapreduce.jobhistory.webapp.address
2888 ZooKeeper,如果是Leader,用来监听Follower的连接
3888 ZooKeeper,用于Leader选举
2181 ZooKeeper,用来监听客户端的连接
60010 hbase.master.info.port,HMaster的http端口
60000 hbase.master.port,HMaster的RPC端口
60030 hbase.regionserver.info.port,HRegionServer的http端口
60020 hbase.regionserver.port,HRegionServer的RPC端口
8080 hbase.rest.port,HBase REST server的端口
10000 hive.server2.thrift.port
9083 hive.metastore.uris

Hadoop配置文件的层级关系

在Hadoop源码Configuration类中,先后加载了core-default.xml 和 core-site.xml ;类HdfsConfiguration继承了Configuration类,因此,hdfs-site.xml中的配置如果在core-site.xml 中配置了,那么将覆盖掉这个配置。 同理,yarn-site.xml也是这样的。

yarn-site.xml 重点配置讲解

与 memery 相关的配置

  • yarn.nodemanager.resource.memery-mb : 重要

指定NodeManager(NM)可用的内存大小,NM是yarn中的一个组件,是一个Jave服务。这内存值是指NM管理的,用于AppMaster和Map Task 和 Reduce Task 可申请的内存数目。这里主要考虑和Linux系统的协调,避免设置过大被Linux的(Out of Memary Killer)OOMK 杀掉。例如2G的内存,设置为1200(1.2G)是可行的。
默认配置被设置为8G,Hadoop就任务NM上就有8G的内存,因此当运行内存过大时,就有可能被linux被OOMK终结。

  • yarn.scheduler.minimum-allocation-mb:

单个任务(每个Container)可申请最少内存,默认1024MB , 就是单个任务要申请的资源的话,ResourceManager(RM)会至少给你分配的内存数,即使你申请了1MB,也会派给你1024MB,因此这个地方需要根据机器配置和作业需求提前配置。

  • yarn.scheduler.increment-allocation-mb

当一个Container拿到的最小内存不足以运行时,他可以申请内存递增,这个配置是配的递增的幅度。

  • yarn.scheduler.maximum-allocation-mb

每个Container最多拿到的内存的数量,这里设置的是一个上限,Container申请资源时可递增直到满足运行需求,但是如果到了上限,就不能递增了。

例:若yarn.scheduler.minimum-allocation-mb是50,yarn.scheduler.increment-allocation-mb是40,当申请60mb的时候,实际申请是80(50 < 60 < 40 * 2 ),当申请30mb的时候,实际是50(30 < 50,就是小于min)。

与CPU相关的配置

与上节节相似,也可以配置CPU的相应信息:

  • yarn.scheduler.minimum-allocation-vcores
  • yarn.scheduler.increment-allocation-vcores
  • yarn.scheduler.maximum-allocation-vcores

mapred-site.xml 重点配置讲解

MR AppMaster 相关

  • yarn.app.mapreduce.am.resource.mb
  • yarn.app.mapreduce.am.resource.cpu-vcores

这里am指 Yarn中AppMaster,针对MapReduce计算框架就是MR AppMaster,通过配置这两个选项,可以设定MR AppMaster使用的内存和cpu数量。 默认情况下,yarn.app.mapreduce.am.resource.mb是2G,因此这里必须配置,需要少于yarn.scheduler.minimum-allocation-mb的配置,这样才能成功启动。

map、reduce task 相关

  • mapreduce.map.memory.mb、mapreduce.map.cpu.vcores、mapreduce.reduce.memory.mb、mapreduce.reduce.cpu.vcores

    配置每个map 和 reduce 最多可以申请的内存和cpu数量;如果是单机情况,这里的资源和MR AppMaster 时共存和竞争关系,且都应在yarn.scheduler.minimum-allocation-mb之下,MR AppMaster启动成功后,剩下的资源才用于map、reduce task。

JVM 启动时参数设置

  • mapreduce.map.java.opts、mapreduce.reduce.java.opts

    Java task启动时使用的参数;例如设置Java heap 的大小,会在启动map或者reduce进程时把这些参数附加在启动命令之后。
    这个地方需要仔细配置,配置不当会引起JVM 不能正常GC。

例如:

  • mapreduce.map.memory.mb 设置为了500MB
  • mapreduce.map.java.opts 设置为 -Xmx600m
  • 假设CG为JVM中内存占用达到90%时触发,也就是540MB时会触发
    这时,由于mapreduce.map.memory.mb的限制,map 进程会被提前Kill掉,因此GC永远得不到触发。

core-site.xml

  • fs.defaultFS(老版本是fs.default.name)

默认使用的文件系统类型(hdfs://host1:8020/、viewfs://nsX)

  • fs.trash.interval

垃圾箱文件保留多久(单位:分钟)

  • io.compression.codecs

Java codec

  • hadoop.security.authentication

Hadoop使用的认证方法(simple或kerberos)

hdfs-site.xml

• dfs.namenode.name.dir
– namenode存放fsimage的目录

• dfs.datanode.data.dir
– datanode存放数据块文件的目录

• dfs.namenode.checkpoint.dir
– Secondarynamenode启动时使用,放置sn做合并的fsimage及 editlog

• dfs.replication
– 数据副本数

• dfs.blocksize
– 文件Block大小

• dfs.datanode.handler.count
– Datanode IPC 请求处理线程数

yarn-site.xml其他配置

  • yarn.resourcemanager.hostname、yarn.resourcemanager.address、yarn.resourcemanager.admin.address
    、yarn.resourcemanager.scheduler.address、 yarn.resourcemanager.resource-tracker.address、
    yarn.resourcemanager.webapp.address等项目的基本,依据实际rm 的hostname配置

  • yarn.scheduler.minimum-allocation-mb

Yarn分配内存的最小单位

  • yarn.scheduler.increment -allocation-mb

内存分配递增最小单位

  • yarn.scheduler.maximum-allocation-mb

每个container最多申请的内存上限

  • yarn.scheduler.minimum-allocation-vcores、
    yarn.scheduler.increment -allocation-vcores、
    yarn.scheduler.maximum-allocation-vcores

跟以上内存相关的意义相同

  • yarn.resourcemanager.am.max-retries

AM失败重试次数

  • yarn.am.liveness-monitor.expiry-interval-ms

AM多久不上报心跳被视为过期

  • yarn.resourcemanager.nm.liveness-monitor.interval-ms

多久检查一次nm是否还存活

  • yarn.application.classpath

Yarn application使用的classpath

  • yarn.resourcemanager.scheduler.class

调度器定义,如 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

  • yarn.scheduler.fair.user -as-default -queue

对于fairscheduler使用,是否使用用户名作为任务进入的queue

  • yarn.scheduler.fair.preemption

Fairescheduler是否支持queue之间任务抢占

  • yarn.resourcemanager.max-completed-applications

RM中保留的最大的已完成的任务信息数量

  • yarn.nodemanager.resource.memory-mb

Nm的可用内存

  • yarn.nodemanager.local-dirs

Nm本地文件目录(主要是一些cache)

  • yarn.nodemanager.log-dirs

Nm log目录

  • yarn.nodemanager.remote-app-log-dir、yarn.logaggregation.retain-seconds、yarn.log-aggregationenable、yarn.nodemanager.logaggregation.compression-type

启动log aggregation的时候使用参数

  • yarn.app.mapreduce.am.staging-dir

Staging目录,hdfs

mapred-site.xml 其他配置讲解

  • mapreduce.map.speculative、mapreduce.reduce.speculative

是否开启预测执行

  • mapreduce.job.reduce.slowstart.completedmaps

Map完成多少之后开始启动reduce

  • mapreduce.jobhistory.address、mapreduce.jobhistory.webapp.address

Jobhistory地址

  • mapreduce.framework.name

local, classic or yarn

  • yarn.app.mapreduce.am.staging -dir、yarn.app.mapreduce.am.resource.mb
    、yarn.app.mapreduce.am.resource.cpu-vcores、 yarn.app.mapreduce.am.command-opts

Am相关配置

  • mapreduce.map.java.opts、mapreduce.reduce.java.opts

Java task启动时使用的参数

  • mapreduce.map.memory.mb、mapreduce.map.cpu.vcores、mapreduce.reduce.memory.mb、mapreduce.reduce.cpu.vcores

Map/reduce任务资源设置

  • mapreduce.application.classpath

Task使用的classpath

问答

  • yarn.scheduler.minimum-allocation-mb,为app分配内存时最小的配额。
  • yarn.scheduler.increment-allocation-mb,每次递加申请的内存资源数,比如,若yarn.scheduler.minimum-allocation-mb是50,yarn.scheduler.increment-allocation-mb是40,当申请60mb的时候,实际申请是80(50 < 60 < 40 * 2 ),当申请30mb的时候,实际是50(30 < 50,就是小于min)。
  • yarn.scheduler.maximum-allocation-mb,单个container可分配的内存总量上限。

  • yarn.app.mapreduce.am.resource.mb,执行appManager时需要分配的内存。

  • mapreduce.map.memory.mb,map任务执行时要申请的内存。
  • mapreduce.reduce.memory.mb,reduce任务执行时要申请的内存。
  • mapreduce.task.io.sort.mb,任务在做spill时,内存的缓存量,之所以提出来,因为当我们将mapreduce.map.memory.mb和apreduce.reduce.memory.mb减小时,需要将这个值也减小,否则会出现task任务资源不够跑不成功的问题