2. 在 Non-Secure Mode(非安全模式)下的配置

Hadoop 配置有两种类型的重要配置文件:

  • 默认只读,包括 core-default.xmlhdfs-default.xmlyarn-default.xmlmapred-default.xml
  • 针对站点配置,包括 etc/hadoop/core-site.xmletc/hadoop/hdfs-site.xmletc/hadoop/yarn-site.xmletc/hadoop/mapred-site.xml。另外,你能够配置 bin 目录下的 etc/hadoop/hadoop-env.shetc/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.shetc/hadoop/mapred-env.shetc/hadoop/yarn-env.sh 脚本来对 Hadoop 守护进程的环境做一些自定义的配置。

至少你应该在每个远程节点上正确配置 JAVA_HOME。

管理员能够使用下面的表格当中的配置选项来配置独立的守护进程:

守护进程环境变量
NameNodeHADOOP_NAMENODE_OPTS
DataNodeHADOOP_DATANODE_OPTS
SecondaryNamenodeHADOOP_SECONDARYNAMENODE_OPTS
ResourceManagerYARN_RESOURCEMANAGER_OPTS
NodeManagerYARN_NODEMANAGER_OPTS
WebAppProxyYARN_PROXYSERVER_OPTS
Map Reduce Job History ServerHADOOP_JOB_HISTORYSERVER_OPTS

例如,配置 Namenode 时,为了使其能够 parallelGC(并行回收垃圾), 要把下面的代码加入到 etc/hadoop/hadoop-env.sh

  1. 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中一个简单的脚本的配置如下:

  1. HADOOP_PREFIX=/path/to/hadoop
  2. export HADOOP_PREFIX
守护进程环境变量
ResourceManagerYARN_RESOURCEMANAGER_HEAPSIZE
NodeManagerYARN_NODEMANAGER_HEAPSIZE
WebAppProxyYARN_PROXYSERVER_HEAPSIZE
Map Reduce Job History ServerHADOOP_JOB_HISTORYSERVER_HEAPSIZE

配置 Hadoop 守护进程

这部分涉及 Hadoop 集群的重要参数的配置

  • etc/hadoop/core-site.xml

    参数取值备注
    fs.defaultFSNameNode URIhdfs://host:port/
    io.file.buffer.size131072SequenceFiles 中读写缓冲的大小
  • etc/hadoop/hdfs-site.xml用于配置 NameNode:

参数取值备注
dfs.namenode.name.dirNameNode 持久存储命名空间及事务日志的本地文件系统路径。当这个值是一个逗号分割的目录列表时,name table 数据将会被复制到所有目录中做冗余备份。
dfs.hosts / dfs.hosts.exclude允许/排除的 DataNodes 列表。如果有必要,使用这些文件,以控制允许的 datanodes 的列表。
dfs.blocksize268435456在大型文件系统里面设置 HDFS 块大小为 256MB
dfs.namenode.handler.count100在大数量的 DataNodes 里面用更多的 NameNode 服务器线程来控制 RPC

用于配置 DataNode:

参数取值备注
dfs.datanode.data.dirDataNode存放块数据的本地文件系统路径,逗号分割的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
  • etc/hadoop/yarn-site.xml用于配置 ResourceManager 和 NodeManager:
参数取值备注
yarn.acl.enabletrue / false是否启用 ACLs。默认是 false
yarn.admin.aclAdmin ACLACL 集群上设置管理员。 ACLs 是用逗号分隔的。默认为 * 意味着任何人。特殊值空格,意味着没有人可以进入。
yarn.log-aggregation-enablefalse配置算法启用日志聚合

用于配置 ResourceManager :

参数取值备注
yarn.resourcemanager.addressResourceManager host:port ,用于给客户端提交 jobs若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname
yarn.resourcemanager.scheduler.addressResourceManager host:port,用于 ApplicationMasters (主节点)和 Scheduler(调度器)通信来取得资源若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname
yarn.resourcemanager.resource-tracker.addressResourceManager host:port ,用于 NodeManagers若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname
yarn.resourcemanager.admin.addressResourceManager host:port ,用于管理命令若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname
yarn.resourcemanager.webapp.addressResourceManager web-ui host:port,用于 web 管理若 host:port 设置,则覆盖 yarn.resourcemanager.hostname 中的 hostname
yarn.resourcemanager.scheduler.classResourceManager 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-mbNodeManager 可用的物理内存定义在 NodeManager 上的全部资源,用来运行容器。
yarn.nodemanager.vmem-pmem-ratiotask 使用虚拟内存的最大比例,可能超过物理内存每个 task 使用的虚拟内存可能超过它的物理内存, 虚拟内存靠这个比率来进行限制。这个比率限制的在 NodeManager 上task 使用的虚拟内存总数,可能会超过它的物理内存。
yarn.nodemanager.local-dirs在本地文件系统里,写入中间数据的地方的路径。多个路径就用逗号进行隔开。多个路径有助于分散磁盘I/O
yarn.nodemanager.log-dirs在本地文件系统里,写入日志的地方的路径。多个路径就用逗号进行隔开。多个路径有助于分散磁盘I/O
yarn.nodemanager.log.retain-seconds10800日志文件在NodeManager 上保存的默认时间(单位为秒),仅仅适合在日志聚合关闭的时候使用。
yarn.nodemanager.remote-app-log-dir/logs在应用程序完成的时候,应用程序的日志将移到这个HDFS目录。需要设置适当的权限。 仅仅适合在日志聚合开启的时候使用。
yarn.nodemanager.remote-app-log-dir-suffixlogs追加到远程日志目录日志将被聚合到${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.nameyarn运行框架设置为 Hadoop YARN.
mapreduce.map.memory.mb1536maps 的最大资源.
mapreduce.map.java.opts-Xmx1024Mmaps 子虚拟机的堆大小
mapreduce.reduce.memory.mb3072reduces 的最大资源.
mapreduce.reduce.java.opts-Xmx2560Mreduces 子虚拟机的堆大小
mapreduce.task.io.sort.mb512任务内部排序缓冲区大小
mapreduce.task.io.sort.factor100在整理文件时一次性合并的流数量
mapreduce.reduce.shuffle.parallelcopies50reduces 运行的最大并行复制的数量,用于获取大量的 maps 的输出

用于配置 MapReduce JobHistory Server:

参数取值备注
mapreduce.jobhistory.addressMapReduce JobHistory Server host:port默认端口是 10020.
mapreduce.jobhistory.webapp.addressMapReduce JobHistory Server Web 界面 host:port默认端口是 19888.
mapreduce.jobhistory.intermediate-done-dir/mr-history/tmpMapReduce jobs 写入历史文件的目录
mapreduce.jobhistory.done-dir/mr-history/doneMR JobHistory Server 管理的历史文件目录