- 2. 在 Non-Secure Mode(非安全模式)下的配置
- 配置 Hadoop 守护进程的运行环境
- 配置 Hadoop 守护进程
2. 在 Non-Secure Mode(非安全模式)下的配置
Hadoop 配置有两种类型的重要配置文件:
- 默认只读,包括
core-default.xml
、hdfs-default.xml
、yarn-default.xml
和mapred-default.xml
; - 针对站点配置,包括
etc/hadoop/core-site.xml
、etc/hadoop/hdfs-site.xml
、etc/hadoop/yarn-site.xml
和etc/hadoop/mapred-site.xml
。另外,你能够配置 bin 目录下的etc/hadoop/hadoop-env.sh
和etc/hadoop/yarn-env.sh
脚本文件的值来控制 Hadoop 的脚本。
为了配置 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 | HADOOP_NAMENODE_OPTS |
DataNode | HADOOP_DATANODE_OPTS |
SecondaryNamenode | HADOOP_SECONDARYNAMENODE_OPTS |
ResourceManager | YARN_RESOURCEMANAGER_OPTS |
NodeManager | YARN_NODEMANAGER_OPTS |
WebAppProxy | YARN_PROXYSERVER_OPTS |
Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_OPTS |
例如,配置 Namenode 时,为了使其能够 parallelGC(并行回收垃圾), 要把下面的代码加入到 etc/hadoop/hadoop-env.sh
:
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"
其它可定制的常用参数还包括:
- HADOOP_PID_DIR——守护进程的进程 id 存放目录;
- HADOOP_LOG_DIR——守护进程的日志文件存放目录。如果不存在会被自动创建;
- HADOOP_HEAPSIZE/YARN_HEAPSIZE——最大可用的堆大小,单位为MB。比如,1000MB。这个参数用于设置守护进程的堆大小。缺省大小是1000。可以为每个守护进程单独设置这个值。在大多数情况下,你应该指定 HADOOP_PID_DIR 和 HADOOP_LOG_DIR 目录,这样它们只能由要运行 hadoop 守护进程的用户写入。否则会受到符号链接攻击的可能。
这也是在 shell 环境配置里配置 HADOOP_PREFIX 的传统方式。例如,在/etc/profile.d
中一个简单的脚本的配置如下:
HADOOP_PREFIX=/path/to/hadoop
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 集群的重要参数的配置
etc/hadoop/core-site.xml
参数 取值 备注 fs.defaultFS NameNode URI hdfs://host:port/ io.file.buffer.size 131072 SequenceFiles 中读写缓冲的大小 etc/hadoop/hdfs-site.xml
用于配置 NameNode:
参数 | 取值 | 备注 |
---|---|---|
dfs.namenode.name.dir | NameNode 持久存储命名空间及事务日志的本地文件系统路径。 | 当这个值是一个逗号分割的目录列表时,name table 数据将会被复制到所有目录中做冗余备份。 |
dfs.hosts / dfs.hosts.exclude | 允许/排除的 DataNodes 列表。 | 如果有必要,使用这些文件,以控制允许的 datanodes 的列表。 |
dfs.blocksize | 268435456 | 在大型文件系统里面设置 HDFS 块大小为 256MB |
dfs.namenode.handler.count | 100 | 在大数量的 DataNodes 里面用更多的 NameNode 服务器线程来控制 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 | ACL 集群上设置管理员。 ACLs 是用逗号分隔的。默认为 * 意味着任何人。特殊值空格,意味着没有人可以进入。 |
yarn.log-aggregation-enable | false | 配置算法启用日志聚合 |
用于配置 ResourceManager :
参数 | 取值 | 备注 |
---|---|---|
yarn.resourcemanager.address | ResourceManager host:port ,用于给客户端提交 jobs | 若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname |
yarn.resourcemanager.scheduler.address | ResourceManager host:port,用于 ApplicationMasters (主节点)和 Scheduler(调度器)通信来取得资源 | 若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname |
yarn.resourcemanager.resource-tracker.address | ResourceManager host:port ,用于 NodeManagers | 若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname |
yarn.resourcemanager.admin.address | ResourceManager host:port ,用于管理命令 | 若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname |
yarn.resourcemanager.webapp.address | ResourceManager web-ui host:port,用于 web 管理 | 若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname |
yarn.resourcemanager.scheduler.class | ResourceManager Scheduler 类 | CapacityScheduler (推荐)、FairScheduler(也推荐)或 FifoScheduler |
yarn.scheduler.minimum-allocation-mb | 分配给每个容器请求Resource Manager 的最小内存 | 单位为 MB |
yarn.scheduler.maximum-allocation-mb | 分配给每个容器请求Resource Manager 的最大内存 | 单位为 MB |
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path | 允许/拒绝的NodeManager 的列表 | 如果有必要,用这些文件来控制列出的允许的 NodeManager |
用于配置 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 服务。 |
用于配置 History Server (需搬移到其它地方):
参数 | 取值 | 备注 |
---|---|---|
yarn.log-aggregation.retain-seconds | -1 | 保留聚合日志的时间, -1 表示不启用。需要注意的是,该值不能设置的太小 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 检查聚合日志保留的时间间隔,-1 表示不启用。需要注意的是,该值不能设置的太小 |
etc/hadoop/mapred-site.xml
用于配置 MapReduce 应用:
参数 | 取值 | 备注 |
---|---|---|
mapreduce.framework.name | yarn | 运行框架设置为 Hadoop YARN. |
mapreduce.map.memory.mb | 1536 | maps 的最大资源. |
mapreduce.map.java.opts | -Xmx1024M | maps 子虚拟机的堆大小 |
mapreduce.reduce.memory.mb | 3072 | reduces 的最大资源. |
mapreduce.reduce.java.opts | -Xmx2560M | reduces 子虚拟机的堆大小 |
mapreduce.task.io.sort.mb | 512 | 任务内部排序缓冲区大小 |
mapreduce.task.io.sort.factor | 100 | 在整理文件时一次性合并的流数量 |
mapreduce.reduce.shuffle.parallelcopies | 50 | reduces 运行的最大并行复制的数量,用于获取大量的 maps 的输出 |
用于配置 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 管理的历史文件目录 |