- 默认只读,包括 、
hdfs-default.xml
、yarn-default.xml
和mapred-default.xml
;
为了配置 Hadoop 集群,你需要配置 Hadoop 守护进程的执行环境和Hadoop 守护进程的配置参数。
HDFS 的守护进程有 NameNode、econdaryNameNode 和 DataNode。YARN 的守护进程有 ResourceManager、NodeManager 和 WebAppProxy。若 MapReduce 在使用,那么 MapReduce Job History Server 也是在运行的。在大型的集群中,这些一般都是在不同的主机上运行。
配置 Hadoop 守护进程的运行环境
管理员应该利用etc/hadoop/hadoop-env.sh
、etc/hadoop/mapred-env.sh
和 etc/hadoop/yarn-env.sh
脚本来对 Hadoop 守护进程的环境做一些自定义的配置。
至少你应该在每个远程节点上正确配置 JAVA_HOME。
例如,配置 Namenode 时,为了使其能够 parallelGC(并行回收垃圾), 要把下面的代码加入到 etc/hadoop/hadoop-env.sh
:
其它可定制的常用参数还包括:
- HADOOP_PID_DIR——守护进程的进程 id 存放目录;
- HADOOP_LOG_DIR——守护进程的日志文件存放目录。如果不存在会被自动创建;
- HADOOP_HEAPSIZE/YARN_HEAPSIZE——最大可用的堆大小,单位为MB。比如,1000MB。这个参数用于设置守护进程的堆大小。缺省大小是1000。可以为每个守护进程单独设置这个值。在大多数情况下,你应该指定 HADOOP_PID_DIR 和 HADOOP_LOG_DIR 目录,这样它们只能由要运行 hadoop 守护进程的用户写入。否则会受到符号链接攻击的可能。
这也是在 shell 环境配置里配置 HADOOP_PREFIX 的传统方式。例如,在中一个简单的脚本的配置如下:
export HADOOP_PREFIX
守护进程 | 环境变量 |
---|---|
ResourceManager | YARN_RESOURCEMANAGER_HEAPSIZE |
NodeManager | YARN_NODEMANAGER_HEAPSIZE |
WebAppProxy | YARN_PROXYSERVER_HEAPSIZE |
Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_HEAPSIZE |
配置 Hadoop 守护进程
这部分涉及 Hadoop 集群的重要参数的配置
-
参数 取值 备注 fs.defaultFS NameNode URI hdfs://host:port/ io.file.buffer.size 131072 SequenceFiles 中读写缓冲的大小 etc/hadoop/hdfs-site.xml
用于配置 NameNode:
用于配置 DataNode:
参数 | 取值 | 备注 |
---|---|---|
dfs.datanode.data.dir | DataNode存放块数据的本地文件系统路径,逗号分割的列表。 | 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。 |
参数 | 取值 | 备注 |
---|---|---|
yarn.acl.enable | true / false | 是否启用 ACLs。默认是 false |
yarn.admin.acl | Admin ACL | ACL 集群上设置管理员。 ACLs 是用逗号分隔的。默认为 * 意味着任何人。特殊值空格,意味着没有人可以进入。 |
yarn.log-aggregation-enable | false | 配置算法启用日志聚合 |
用于配置 ResourceManager :
用于配置 NodeManager :
参数 | 取值 | 备注 | |
---|---|---|---|
yarn.nodemanager.resource.memory-mb | NodeManager 可用的物理内存 | 定义在 NodeManager 上的全部资源,用来运行容器。 | |
yarn.nodemanager.vmem-pmem-ratio | task 使用虚拟内存的最大比例,可能超过物理内存 | 每个 task 使用的虚拟内存可能超过它的物理内存, 虚拟内存靠这个比率来进行限制。这个比率限制的在 NodeManager 上task 使用的虚拟内存总数,可能会超过它的物理内存。 | |
yarn.nodemanager.local-dirs | 在本地文件系统里,写入中间数据的地方的路径。多个路径就用逗号进行隔开。 | 多个路径有助于分散磁盘I/O | |
yarn.nodemanager.log-dirs | 在本地文件系统里,写入日志的地方的路径。多个路径就用逗号进行隔开。 | 多个路径有助于分散磁盘I/O | |
yarn.nodemanager.log.retain-seconds | 10800 | 日志文件在NodeManager 上保存的默认时间(单位为秒),仅仅适合在日志聚合关闭的时候使用。 | |
yarn.nodemanager.remote-app-log-dir | /logs | 在应用程序完成的时候,应用程序的日志将移到这个HDFS目录。需要设置适当的权限。 仅仅适合在日志聚合开启的时候使用。 | |
yarn.nodemanager.remote-app-log-dir-suffix | logs | 追加到远程日志目录 | 日志将被聚合到${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam} ,仅仅适合在 log-aggregation 开启的时候使用。 |
yarn.nodemanager.aux-services、 mapreduce.shuffle | 给 Map Reduce 应用程序设置 Shuffle 服务。 |
参数 | 取值 | 备注 |
---|---|---|
yarn.log-aggregation.retain-seconds | -1 | 保留聚合日志的时间, -1 表示不启用。需要注意的是,该值不能设置的太小 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 检查聚合日志保留的时间间隔,-1 表示不启用。需要注意的是,该值不能设置的太小 |
- 用于配置 MapReduce 应用:
用于配置 MapReduce JobHistory Server:
参数 | 取值 | 备注 |
---|---|---|
mapreduce.jobhistory.address | MapReduce JobHistory Server host:port | 默认端口是 10020. |
mapreduce.jobhistory.webapp.address | MapReduce JobHistory Server Web 界面 host:port | 默认端口是 19888. |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | MapReduce jobs 写入历史文件的目录 |
mapreduce.jobhistory.done-dir | /mr-history/done | MR JobHistory Server 管理的历史文件目录 |