配置守护进程
参数
守护进程 | 环境参数 | 脚本文件 |
---|---|---|
NameNode | HADOOP_NAMENODE_OPTS | hadoop-env |
DataNode | HADOOP_DATANODE_OPTS | hadoop-env |
Secondary NameNode | HADOOP_SECONDARYNAMENODE_OPTS | hadoop-env |
ResourceManager | YARN_RESOURCEMANAGER_OPTS | yarn-env |
NodeManager | YARN_NODEMANAGER_OPTS | yarn-env |
WebAppProxy | YARN_PROXYSERVER_OPTS | yarn-env |
Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_OPTS | mapred-env |
例子
export HADOOP_NAMENODE_OPTS=”-XX:+UseParallelGC”
说明
以OPTS结尾的都是守护进程本身(默认1G内存)的的内存,这里关注两个地方:
1. NameNode内存
这里的NameNode内存默认是1G(且当其为1000MB),可以管理一百万个数据块,假如集群复本数是3,BLOCK大小是128MB的话。这里可以管理:1000000 x 128MB / 3的资源
根据我们在上一篇Blog环境中的,我们设计block size 为64MB 则30G * 1024MB/ 64MB ≈ 480 所以我们这里配置大约512的内存足以
export HADOOP_NAMENODE_OPTS=”-Xmx512MB”
**注意:**SecondaryNameNode要设置为和namenode相当
2. 其他进程内存
由于我们测试环境所以统一设置为128MB
其他配置
- HADOOP_PID_DIR - 守护进程ID文件存储路径
- HADOOP_LOG_DIR - 守护进程的日志文件存储路径。如果日志是自动创建的那这个参数无效
- HADOOP_HEAPSIZE / YARN_HEAPSIZE - 守护进程的堆大小。默认是1000MB
正常来说我们应该配置HADOOP_PID_DIR和HADOOP_LOG_DIR以防止符号链接攻击
HADOOP_PREFIX 代替了原来的HADOOP_HOME
_HEAPSIZE参数(以HEAPSIZE结尾参数只能设置内存,是被OPTS涵盖的)
进程 | 环境变量名称 | 所在配置文件 |
---|---|---|
ResourceManager | YARN_RESOURCEMANAGER_HEAPSIZE | yarn-env |
NodeManager | YARN_NODEMANAGER_HEAPSIZE | yarn-env |
WebAppProxy | YARN_PROXYSERVER_HEAPSIZE | yarn-env |
Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_HEAPSIZE | mapred-env |
Hadoop集群进程
#
参数 | 值(默认值) | 备注 |
---|---|---|
etc/hadoop/core-site.xml | ||
fs.defaultFS | NameNode URI | 示例:hdfs://host:port/ |
io.file.buffer.size | 131072 | 读/写缓冲区中序列化文件的大小 |
etc/hadoop/hdfs-site.xml | ||
NameNode配置 | ||
dfs.namenode.name.dir | 本地系统中namenode的namespace和事物日志的存储路径 | 如果使用逗号隔开的目录,表示需要将namespacehe事物日志复制到这多个路径中 |
dfs.hosts/dfs.hosts.exclude | 列表中允许/被排除掉的机器 | 如果有必要使用这些文件来控制允许的datanode列表 |
dfs.blocksize | 268435456 | HDFS Block的大小,默认是256MB |
dfs.namenode.handler.count | 100 | namenode允许DataNodes最大的RPC连接数量 |
DataNode配置 | ||
dfs.datanode.data.dir | 使用逗号分隔的列表路径,表示datanode本地磁盘上的存储路径 | |
etc/hadoop/yarn-site.xml | ||
ResourceManager 和 NodeManager公用参数 | ||
yarn.acl.enable | true / false | 是否启用ACLs?默认是false |
yarn.admin.acl | Admin ACL | 权限控制,默认是 * (允许所有人访问)。 |
yarn.log-aggregation-enable | false | 是否启用日志聚合功能 |
ResourceManager配置 | ||
yarn.resourcemanager.address | host:port | 客户端提交job的地址。如果hostname将覆盖yarn.resourcemanager.hostname |
yarn.resourcemanager.scheduler.address | host:port | ApplicationMasters获取Scheduler的资源 同上,如果设置了hostname将覆盖yarn.resourcemanagers.hostname参数 |
yarn.resourcemanager.resource-tracker.address | host:port | NodeManagers地址 |
yarn.resourcemanager.admin.address | host:port | 管理员地址 |
yarn.resourcemanager.webapp.address | host:port | web-ui |
yarn.resourcemanager.hostname | host | ResourceManager 的host |
yarn.resourcemanager.scheduler.class | 调度类 | CapacityScheduler (recommended), FairScheduler (also recommended), or FifoScheduler |
yarn.scheduler.minimum-allocation-mb | 每个容器请求ResourceManager分配到的最低内存 ,单位MB | |
yarn.scheduler.maximum-allocation-mb | 每个容器请求ResourceManager分配到的最大内存 ,单位MB | |
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path | 排除/允许的NodeManager列表 | 如果有必要,那么这些文件将来控制所允许的NodeManagers列表 |
NodeManager配置 | ||
yarn.nodemanager.resource.memory-mb | 资源可用的物理内存,单位MB | 定义了NodeManager一共可用于允许容器的资源 |
yarn.nodemanager.vmem-pmem-ratio | 虚拟内存和物理内存的比例(一般二倍与物理内存) | 如果这个值是高于1的,那么任务使用的虚拟内存总量可能超过实际的物理内存总数 |
yarn.nodemanager.local-dirs | 在本地文件上存储的中间数据路径,使用逗号分隔 | 多个路径有助于分散磁盘 I/0 |
yarn.nodemanager.log-dirs | 日志文件路径,逗号分隔 | 多个路径有助于帮助分散磁盘I/O |
yarn.nodemanager.log.retain-seconds | 10800 | 默认在NodeManager保留日志的时长(单位是秒),这个参数只有在log-aggregation参数是false状态才有用 |
yarn.nodemanager.remote-app-log-dir | /tmp/logs | 应用程序运行完后上传到HDFS的应用程序日志路径,需要配置权限,仅仅在log-aggregation是启用状态才有用 |
yarn.nodemanager.remote-app-log-dir-suffix | logs | 添加到的远程日志目录的路径。如果log-aggregation参数启用,那么它将会让应用日志添加到 yarn.nodemanager.remote−app−log−dir/ {user}/${该参数的路径}。 |
yarn.nodemanager.aux-services | mapreduce_shuffle | Shuffle服务,需要设置Map Reduce应用程序。 |
History Server配置 | ||
yarn.log-aggregation.retain-seconds | -1 | 设置保留聚合日志多久,请注意,如果这个值设置的太小将会污染你的namenode。-1表示不删除 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 设置多久检查一次聚合日志保留。如果设置为0或者-1那么它将默认将用yarn.log-aggregation.retain-seconds十分之一的时间去检查。这个值如果设置太小也将污染namenode. |
etc/hadoop/mapred-site.xml | ||
MapReduce Applications配置 | ||
mapreduce.framework.name | yarn | 允许框架,现在默认都是yarn了 |
mapreduce.map.memory.mb | 1536 | 限制map资源的大小 |
mapreduce.map.java.opts | -Xmx1024M | 设置在map中JVM的堆大小,一般是mapreduce.map.memory.mb的80% |
mapreduce.reduce.memory.mb | 3072 | reduce内存的大小 |
mapreduce.reduce.java.opts | -Xmx2560M | 设置reduce中JVM的堆大小,一般是mapreduce.reduce.memory.mb的80% |
mapreduce.task.io.sort.mb | 512 | 限制排序所能使用的内存 |
mapreduce.task.io.sort.factor | 100 | 排序文件的时候一次同时最多可并流的个数 |
mapreduce.reduce.shuffle.parallelcopies | 50 | reuduce shuffle阶段并行传输数据的数量。这里改为50 |
MapReduce JobHistory Server配置 | ||
mapreduce.jobhistory.address | MapReduce JobHistory Server host:port | 默认端口是10020 |
mapreduce.jobhistory.webapp.address | Web UI host:port | 默认是19888 |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | MapReduce jobs允许历史文件的写入目录 |
mapreduce.jobhistory.done-dir | /mr-history/done | 由MR JobHistory Server管理的历史文件 |