这个篇文档可把我翻译惨了现在都还没翻译完,格式也还没整理,不过该文档应该还是讲述了hadoop2的全部配置,感觉在网上所有hadoop2的配置文档里是介绍的最全的。
HADOOP新一代Mapreduce集群配置
目的:
这个文档描述了怎么样安装、配置和管理一个从几个节点到上千个节点的hadoop集群。
为了玩转hadoop,你也许首先想要安装一个单点的hadoop(可以看单点配置的翻译文档)。
准备:
到apache的网站上下载一个稳定版本的hadoop。
安装:
安装一个hadoop集群,需要把软件解压到集群的每一台机器上。
通常,在集群一台电脑作为namenode,用另一台电脑作为ResourseManager,他们最为masters。
其余的机器在这个集群里即作为datanode又作为nodemanager,他们为salves。
在非安全模式下运行hadoop
下面的章节将描述怎么样配置一个hadoop集群。
配置文件
hadoop主要配置下面两种重要的配置文件:
core-default.xml, hdfs-default.xml,yarn-default.xml andmapred-default.xml
特定的配置文件- conf/core-site.xml, conf/hdfs-site.xml,conf/yarn-site.xml andconf/mapred-site.xml
另外,你可以通过conf/hadoop-env.sh 和 yarn-env.sh来配置特定的值,用于控制在bin/ directory目录下的hadoop脚本分布。
设置配置:
为了配置一个hadoop集群,你需要配置hadoop后台进程的运行环境和hadoop后台进程运行的相关参数。
hadoop的后台进程为NameNode/DataNode 和 ResourceManager/NodeManager
配置hadoop后台进程运行环境:
管理员需要用conf/hadoop-env.sh 和 conf/yarn-env.sh脚本来制定专门的hadoop后台进程运行环境。
至少在每个远程节点需要真确的配置JAVA_HOME。
HADOOP_SECURE_DN_PID_DIR来指向一个目录,这个目录只能被那些运行hadoop后台进程的用户写入。否则这里可能会有连接攻击。
管理员可以通过配置下列的选项来配置特定的后台进程。
后台进程 | 环境变量 |
NameNode | HADOOP_NAMENODE_OPTS |
DataNode | HADOOP_DATANODE_OPTS |
Secondary NameNode | HADOOP_SECONDARYNAMENODE_OPTS |
ResourceManager | YARN_RESOURCEMANAGER_OPTS |
NodeManager | YARN_NODEMANAGER_OPTS |
WebAppProxy | YARN_PROXYSERVER_OPTS |
Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_OPTS |
例如:为了配置Namende来使用parallelGC(并行垃圾回收),下面的配置需要添加到hadoop-env.sh :
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"
其它你能够制定的配置参数包括:
- HADOOP_LOG_DIR / YARN_LOG_DIR
- HADOOP_HEAPSIZE / YARN_HEAPSIZE - 最大可使用的堆大小,单位为M。如果变量设置为1000,堆的大小将设置为1000M。这个配置用来配置后台进程的堆大小。这个变量的默认值为1000,如果你想分别为每个后台进程配置,你可以使用:
后台进程 | 环境变量 |
ResourceManager | YARN_RESOURCEMANAGER_HEAPSIZE |
NodeManager | YARN_NODEMANAGER_HEAPSIZE |
WebAppProxy | YARN_PROXYSERVER_HEAPSIZE |
Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_HEAPSIZE |
在非安全模式下配置hadoop后台进程
这个章节主要讲在下面的配置文件里配置重要的参数。
- conf/core-site.xml
参数 | 值 | 说明 |
fs.defaultFS | NameNode URI | hdfs://host:port/ |
io.file.buffer.size | 131072 | 序列文件里使用的读写缓存大小 |
- conf/hdfs-site.xml
- NameNode配置:
参数 | 值 | 说明 |
dfs.namenode.name.dir | namenode存储命名空间和事务日志的本地文件系统目录 | 如果是一个逗号隔开的目录列表,那么名字表在所有的目录里都是重复的,用于冗余。 |
dfs.namenode.hosts / dfs.namenode.hosts.exclude | 允许/拒绝的datanode列表 | 如果需要,就用这个文件来控制列表里允许的datanode |
dfs.blocksize | 268435456 | 256M的HDFS大文件系统块大小 |
dfs.namenode.handler.count | 100 | 更多数量的namenode服务线程来控制大数量的datanodes的RPCs |
- DataNode配置:
参数 | 值 | 说明 |
dfs.datanode.data.dir | 用逗号隔开的在本地文件系统上的路径,这些路径为datanode存储块的路径。 | 如果是一个逗号隔开的目录列表,那么数据将被存储在所有命名的目录里,典型的是在不同的设备里。 |
- conf/yarn-site.xml
- ResourceManager 和 NodeManager配置:
参数 | 值 | 说明 |
yarn.acl.enable | true /false | 打开ACLs。默认为false |
yarn.admin.acl | Admin ACL | ACL用来设置在集群上的管理员,ACLs are of for comma-separated-usersspacecomma-separated-groups(这句不知道怎么翻译才合适,可能大概是说用逗号来分开),默认的值为:*,表示任何人。如果是为空格就是任何人不允许访问。 |
yarn.log-aggregation-enable | false | 配置打开或关闭日志聚合 |
- ResourceManager配置:
参数 | 值 | 说明 |
yarn.resourcemanager.address | ResourceManager | host:port |
yarn.resourcemanager.scheduler.address | ResourceManager | host:port |
yarn.resourcemanager.resource-tracker.address | ResourceManager | host:port |
yarn.resourcemanager.admin.address | ResourceManager | host:port |
yarn.resourcemanager.webapp.address | ResourceManager | host:port |
yarn.resourcemanager.scheduler.class | ResourceManager | 计算能力调度 |
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 | tasks使用虚拟内存的最大比例,可能超过物理内存 | 每个task使用的虚拟内存可能超过它的物理内存, 虚拟内存靠这个比率来进行限制。这个比率限制的在nodemanager上tasks使用的虚拟内存总数,可能会超过它的物理内存。 |
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},仅仅适合在日志聚合开启的时候使用。 |
yarn.nodemanager.aux-services | mapreduce.shuffle | 给 Map Reduce应用程序设置Shuffle服务。 |
- History Server配置 (需搬移到其它地方):
参数 | 值 | 说明 |
yarn.log-aggregation.retain-seconds | -1 | 保留聚合日志的时间. -1 表示关闭. Be careful, 需要注意的是,如果设置的太小,you will spam the name node。 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 检查聚合日志保留的时间间隔,如果设置为0或者负数,那个这个值将被设置为日志聚合保留时间的十分之一。需要注意的是,如果设置的太小, you will spam the name node. |
- conf/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 Job历史服务 host:port | 默认端口是10020. |
mapreduce.jobhistory.webapp.address | MapReduce Job历史服务的web界面 host:port | 默认端口是19888. |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | MapReduce jobs写入历史文件的目录 |
mapreduce.jobhistory.done-dir | /mr-history/done | MR JobHistory Server管理的历史文件目录 |
HADOOP机架感知:
HDFS 和 YARN 主键使用了机架感知。
NameNode 和 ResourceManager通过调用一个API来获取集群里slaves的机架信息,在一个管理员配置模块进行解析。
这个API 把 DNS name (和 IP地址 )解析为一个机架id.
这个特定的模块可以用配置项topology.node.switch.mapping.impl进行配置。默认实现的一个配置为topology.script.file.name.,如果topology.script.file.name没有设置, 机架id/default-rack 将被返回通过的IP地址。
NODEMANAGER健康检测:
hadoop提供了这样一个机制:管理员能够配置nodemanager去周期性的运行一个管理员提供的脚本,来检测node是否健康。
管理员通过执行脚本的一些检查来判断node是否健康。.如果脚本发现节点在一个不健康的状态,脚本就会打印一行以ERROR开头的标准输出字符串。nodemanager周期性的运行这个脚本并且检查他的输出。如果脚本的输出包含了ERROR字符串,就像前面说的一样,这个节点将被报告正处于不健康的状态,并且会被ResourceManager列入黑名单,从而将不会有任务再分配到这个节点。 然而, NodeManager会继续运行这个检测脚本, 以至于在节点再次变为健康的时候ResourceManager将把他从黑名单里移除。节点的健康状态由脚本进行输出。不论节点健康与否,都将在ResourceManager的web管理页上展示出来。
下面的参数在conf/yarn-site.xml里配置,用来控制节点的健康检查脚本
参数 | 值 | 说明 |
yarn.nodemanager.health-checker.script.path | 节点健康脚本 | 检查节点健康状态的脚本 |
yarn.nodemanager.health-checker.script.opts | 节点健康脚本选项 | 检查节点健康状态的脚本的选项. |
yarn.nodemanager.health-checker.script.interval-ms | 节点健康脚本执行周期 | 脚本执行周期时间 |
yarn.nodemanager.health-checker.script.timeout-ms | 节点健康脚本超时时间 | 脚本执行超时时间 |
在本地磁盘坏掉的时候健康检查脚本将不会输出 ERROR 字符串。 NodeManager能够周期性的检查本地磁盘的健康(会特别去检查nodemanager-local-dirs 和 nodemanager-log-dirs) ,当坏目录到的数目达到给yarn配置的一个临界值的时候.nodemanager.disk-health-checker.min-healthy-disks(这里不知道怎么翻译),整个节点将会标记为非健康 并且 把这个信息发送给resource manager。这种情况下健康检查脚本既不会把这个定义为磁盘整列也不会定义未失败的磁盘。
slaves文件:
通常你会选择一个机器作为集群的namenode,并且选择一个机器作为resourceManager。剩下的机器即作为datanode又作为nodemanager,把这些机器叫做slaves。
将这些slave的hostname或者IP地址写在conf/slaves文件里,每条数据单独写一行。
日志:
HADOOP用apache log4j由apache commons 日志框架来记录日志。编辑conf/log4j.properties来制定hadoop后台进程的日志配置。可以配置日志格式和其它的一些东西。
操作HADOOP集群:
一旦所有必要的配置都已经配置完成,就将这些配置文件分发到集训所有机器的.HADOOP_CONF_DIR目录里。
启动hadoop:
为了启动hadoop集群,你需要启动HDFS和YARN集群。
格式化一个新的分布式文件系统:
$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>
在指定的namenode上运行下列命令来启动HDFS:
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode
在所有的slaves上运行一个脚本来启动datanode:
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start datanode
在指定的redourceManager上运行下列命令来启动YARN:
$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager
在所有slaves上运行一个脚本来启动nodemanager:
$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start nodemanager
启动一个独立的web代理服务,如果有多个服务器在使用负载均衡,就需要在每个服务器上运行下面的命令:
$ $HADOOP_YARN_HOME/bin/yarn start proxyserver --config $HADOOP_CONF_DIR
在指定的服务器上运行下列命令来启动MapReduce JobHistory Server:
$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh start historyserver --config $HADOOP_CONF_DIR
关闭hadoop:
在指定的NameNode上运行下列命令来关闭namenode:
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
在所有节点上运行一个脚本来关闭datanodes:
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode
在指定的ResourceManager上运行下列命令来关闭ResourceManager:
$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager
在所有的slaves上运行一个脚本来关闭NodeManagers:
$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager
关闭web代理服务,如果是多个服务器在运行负载均衡,就需要在每个服务器上运行下列脚本:
$ $HADOOP_YARN_HOME/bin/yarn stop proxyserver --config $HADOOP_CONF_DIR
在指定的服务器上运行下列下列脚本来关闭MapReduce JobHistory Server:
$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh stop historyserver --config $HADOOP_CONF_DIR
在安全模式运行hadoop:
这个章节讨论hadoop在安全模式下运行所指定的重要参数。基于Kerberos的身份认证。
- hadoop后台进程的用户账户 保证HDFS和YARN后台进程作为不同的UNIX用户运行,比如hads用户和yarn用户。同样,保证mapreduce jobHistory server作为user mapred运行。
建议这些不同的用户在同一个unix组里面,比如hadoop这个组。
用户:组 | 后台进程 |
hdfs:hadoop | NameNode, Secondary NameNode, Checkpoint Node, Backup Node, DataNode |
yarn:hadoop | ResourceManager, NodeManager |
mapred:hadoop | MapReduce JobHistory Server |
- HDFS和本地本地文件系统路径权限
- Kerberos 密钥表文件
- HDFS
- YARN
- MapReduce JobHistory Server
下面的列表列出了在HDFS和本地目录系统(所有节点上的),还有建议的权限:
文件系统 | 路径 | 用户:组 | 权限 |
local | dfs.namenode.name.dir | hdfs:hadoop | drwx------ |
local | dfs.datanode.data.dir | hdfs:hadoop | drwx------ |
local | $HADOOP_LOG_DIR | hdfs:hadoop | drwxrwxr-x |
local | $YARN_LOG_DIR | yarn:hadoop | drwxrwxr-x |
local | yarn.nodemanager.local-dirs | yarn:hadoop | drwxr-xr-x |
local | yarn.nodemanager.log-dirs | yarn:hadoop | drwxr-xr-x |
local | container-executor | root:hadoop | --Sr-s--- |
local | conf/container-executor.cfg | root:hadoop | r-------- |
hdfs | / | hdfs:hadoop | drwxr-xr-x |
hdfs | /tmp | hdfs:hadoop | drwxrwxrwxt |
hdfs | /user | hdfs:hadoop | drwxr-xr-x |
hdfs | yarn.nodemanager.remote-app-log-dir | yarn:hadoop | drwxrwxrwxt |
hdfs | mapreduce.jobhistory.intermediate-done-dir | mapred:hadoop | drwxrwxrwxt |
hdfs | mapreduce.jobhistory.done-dir | mapred:hadoop | drwxr-x--- |
NameNode密钥表文件,在NameNode主机上, 看下面:
$ /usr/kerberos/bin/klist -e -k -t /etc/security/keytab/nn.service.keytab Keytab name: FILE:/etc/security/keytab/nn.service.keytab KVNO Timestamp Principal 4 07/18/11 21:08:09 nn/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 nn/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 nn/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
Secondary NameNode 密钥表, 在他的主机上, 看下面:
$ /usr/kerberos/bin/klist -e -k -t /etc/security/keytab/sn.service.keytab Keytab name: FILE:/etc/security/keytab/sn.service.keytab KVNO Timestamp Principal 4 07/18/11 21:08:09 sn/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 sn/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 sn/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
DataNode密钥文件,在每个主机上,看下面:
$ /usr/kerberos/bin/klist -e -k -t /etc/security/keytab/dn.service.keytab Keytab name: FILE:/etc/security/keytab/dn.service.keytab KVNO Timestamp Principal 4 07/18/11 21:08:09 dn/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 dn/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 dn/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
ResourceManager密钥文件,在ResourceManager主机上,看下面:
$ /usr/kerberos/bin/klist -e -k -t /etc/security/keytab/rm.service.keytab Keytab name: FILE:/etc/security/keytab/rm.service.keytab KVNO Timestamp Principal 4 07/18/11 21:08:09 rm/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 rm/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 rm/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
NodeManager密匙文件,在每台主机上,看下面:
$ /usr/kerberos/bin/klist -e -k -t /etc/security/keytab/nm.service.keytab Keytab name: FILE:/etc/security/keytab/nm.service.keytab KVNO Timestamp Principal 4 07/18/11 21:08:09 nm/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 nm/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 nm/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
MapReduce JobHistory Server密匙文件,在他的主机上,看下面:
$ /usr/kerberos/bin/klist -e -k -t /etc/security/keytab/jhs.service.keytab Keytab name: FILE:/etc/security/keytab/jhs.service.keytab KVNO Timestamp Principal 4 07/18/11 21:08:09 jhs/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 jhs/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 jhs/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC) 4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
安全模式下的配置
- conf/core-site.xml
- conf/hdfs-site.xml
- NameNode配置:
- Configurations for Secondary NameNode:
- Configurations for DataNode:
- conf/yarn-site.xml
- Web应用代理
- 这个web代理提供了一个被应用导出的web应用和最终用户之间的一个代理,如果安全模式是打开的,那么当用户进入一个可能不安全的web应用时将会给用户发出警告,授权和授权使用这个代理就像是其他已经授权的web应用一样进行操作。
参数 | 值 | 说明 |
hadoop.security.authentication | kerberos | simple is non-secure. |
hadoop.security.authorization | true | 开启RPC service-level 授权. |
参数 | 值 | 说明 |
dfs.block.access.token.enable | true | 给安全操作开启HDFS块访问令牌 |
dfs.https.enable | true | |
dfs.namenode.https-address | nn_host_fqdn:50470 | |
dfs.https.port | 50470 | |
dfs.namenode.keytab.file | /etc/security/keytab/nn.service.keytab | NameNode的Kerberos密钥文件 |
dfs.namenode.kerberos.principal | nn/_HOST@REALM.TLD | NameNode的Kerberos主体名称 |
dfs.namenode.kerberos.https.principal | host/_HOST@REALM.TLD | NameNode的HTTPS Kerberos主体名称 |
参数 | 值 | 说明 |
dfs.namenode.secondary.http-address | c_nn_host_fqdn:50090 | |
dfs.namenode.secondary.https-port | 50470 | |
dfs.namenode.secondary.keytab.file | /etc/security/keytab/sn.service.keytab | NameNode的Kerberos密钥文件 |
dfs.namenode.secondary.kerberos.principal | sn/_HOST@REALM.TLD | Secondary NameNode的Kerberos主体名称 |
dfs.namenode.secondary.kerberos.https.principal | host/_HOST@REALM.TLD | Secondary NameNode的HTTPS Kerberos主体名称 |
参数 | 值 | 说明 |
dfs.datanode.data.dir.perm | 700 | |
dfs.datanode.address | 0.0.0.0:2003 | |
dfs.datanode.https.address | 0.0.0.0:2005 | |
dfs.datanode.keytab.file | /etc/security/keytab/dn.service.keytab | DataNode的Kerberos密钥文件 |
dfs.datanode.kerberos.principal | dn/_HOST@REALM.TLD | DataNode的Kerberos主体名称 |
dfs.datanode.kerberos.https.principal | host/_HOST@REALM.TLD | DataNode的HTTPS Kerberos主体名称 |
参数 | 值 | 说明 |
yarn.web-proxy.address | WebAppProxy | host:port 如果和 yarn.resourcemanager.webapp.address一样, 或者是未定义。那么ResourceManager |
yarn.web-proxy.keytab | /etc/security/keytab/web-app.service.keytab | WebAppProxy的Kerberos密钥文件 |
yarn.web-proxy.principal | wap/_HOST@REALM.TLD | WebAppProxy的Kerberos主体名称 |
- Linux容器执行者
容器执行者被YARN框架所使用, YARN框架定义了怎么样来执行和控制这些容器。
在Hadoop YARN中,可以像下面这样来使用:
容器执行者 | 描述 |
默认容器执行者 | 这个默认的执行者是YARN用来管理容器的执行,这个容器的进程和NodeManager是在同一个Unix用户下运行。 |
Linux容器执行者 | 仅仅在GNU/Linux下才支持,执行者就像用户提交应用一样执行这些容器。需要在所有启动这些容器的节点上创建账户,它使用在hadoop集群中的一个有用户标识的可执行文件,NodeManager使用这个可执行文件开启动和关闭这些容器。这个可执行文件切换到一个已经提交应用并且启动或关闭容器的用户。为了最大的安全,这个执行者将给容器使用的本地文件和目录设置受限制的权限和用户组权限,比如共享文件、jar包、中间文件、日志文件等等。特别需要注意的是,出了应用的的所有者和NodeManager,没有用户可以访问这些本地文件和目录,包括哪些在本地作为分布式缓存的部分。 |
建立Linux容器执行者的执行文件需运行下列命令:
$ mvn package -Dcontainer-executor.conf.dir=/etc/hadoop/
-Dcontainer-executor.conf.dir配置的路径需要是在集群节点的本地里的用户标识可执行文件的配置文件路径。这个可执行文件需要安装在$HADOOP_YARN_HOME/bin.
conf/container-executor.cfg里的yarn.nodemanager.linux-container-executor.group所配置的属性
举一个例子,运行NodeManager的用户yarn是属于hadoop这个组的。他们中任何一个都是主要的组,用户既是yarn有是其他用户(应用提交者)作为他的成员,这个“其他用户”不属于hadoop。经过上面的描述,这个有用户标识的/有分组标识的执行文件的权限应该被设置为6050 或者 --Sr-s---,并且用户是yarn,组为hadoop,用户是组的一个成员。
The LinuxTaskController requires that paths including and leading up to the directories specified inyarn.nodemanager.local-dirs andyarn.nodemanager.log-dirs
- conf/container-executor.cfg
The executable requires a configuration file called container-executor.cfg
The configuration file must be owned by the user running NodeManager (user yarn
The executable requires following configuration items to be present in the conf/container-executor.cfg
Parameter
Value
Notes
yarn.nodemanager.linux-container-executor.group
hadoop
Unix group of the NodeManager. The group owner of the container-executor binary should be this group. Should be same as the value with which the NodeManager is configured. This configuration is required for validating the secure access of the container-executor binary.
banned.users
hfds,yarn,mapred,bin
Banned users.
min.user.id
1000
Prevent other super-users.
To re-cap, here are the local file-sysytem permissions required for the various paths related to theLinuxContainerExecutor:
Filesystem
Path
User:Group
Permissions
local
container-executor
root:hadoop
--Sr-s---
local
conf/container-executor.cfg
root:hadoop
r--------
local
yarn.nodemanager.local-dirs
yarn:hadoop
drwxr-xr-x
local
yarn.nodemanager.log-dirs
yarn:hadoop
drwxr-xr-x
- Configurations for ResourceManager:
Parameter
Value
Notes
yarn.resourcemanager.keytab
/etc/security/keytab/rm.service.keytab
Kerberos keytab file for the ResourceManager.
yarn.resourcemanager.principal
rm/_HOST@REALM.TLD
Kerberos principal name for the ResourceManager.
- Configurations for NodeManager:
Parameter | Value | Notes |
yarn.nodemanager.keytab | /etc/security/keytab/nm.service.keytab | Kerberos keytab file for the NodeManager. |
yarn.nodemanager.principal | nm/_HOST@REALM.TLD | Kerberos principal name for the NodeManager. |
yarn.nodemanager.container-executor.class | org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor | Use LinuxContainerExecutor. |
yarn.nodemanager.linux-container-executor.group | hadoop | Unix group of the NodeManager. |
- Configurations for MapReduce JobHistory Server:
Parameter | Value | Notes |
mapreduce.jobhistory.address | MapReduce JobHistory Server host:port | Default port is 10020. |
mapreduce.jobhistory.keytab | /etc/security/keytab/jhs.service.keytab | Kerberos keytab file for the MapReduce JobHistory Server. |
mapreduce.jobhistory.principal | jhs/_HOST@REALM.TLD | Kerberos principal name for the MapReduce JobHistory Server. |
Operating the Hadoop Cluster
Once all the necessary configuration is complete, distribute the files to the HADOOP_CONF_DIR
This section also describes the various Unix users who should be starting the various components and uses the same Unix accounts and groups used previously:
Hadoop Startup
To start a Hadoop cluster you will need to start both the HDFS and YARN cluster.
Format a new distributed filesystem as hdfs:
[hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>
Start the HDFS with the following command, run on the designated NameNode as hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode
Run a script to start DataNodes on all slaves as root with a special environment variableHADOOP_SECURE_DN_USER set tohdfs:
[root]$ HADOOP_SECURE_DN_USER=hdfs $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start datanode
Start the YARN with the following command, run on the designated ResourceManager asyarn:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager
Run a script to start NodeManagers on all slaves as yarn:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start nodemanager
Start a standalone WebAppProxy server. Run on the WebAppProxy server as yarn. If multiple servers are used with load balancing it should be run on each of them:
[yarn]$ $HADOOP_YARN_HOME/bin/yarn start proxyserver --config $HADOOP_CONF_DIR
Start the MapReduce JobHistory Server with the following command, run on the designated server asmapred:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh start historyserver --config $HADOOP_CONF_DIR
Hadoop Shutdown
Stop the NameNode with the following command, run on the designated NameNode ashdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
Run a script to stop DataNodes on all slaves as root:
[root]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode
Stop the ResourceManager with the following command, run on the designated ResourceManager asyarn:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager
Run a script to stop NodeManagers on all slaves as yarn:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager
Stop the WebAppProxy server. Run on the WebAppProxy server as yarn. If multiple servers are used with load balancing it should be run on each of them:
[yarn]$ $HADOOP_YARN_HOME/bin/yarn stop proxyserver --config $HADOOP_CONF_DIR
Stop the MapReduce JobHistory Server with the following command, run on the designated server asmapred:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh stop historyserver --config $HADOOP_CONF_DIR
Web Interfaces
Once the Hadoop cluster is up and running check the web-ui of the components as described below:
Daemon | Web Interface | Notes |
NameNode | http://nn_host:port/ | Default HTTP port is 50070. |
ResourceManager | http://rm_host:port/ | Default HTTP port is 8088. |
MapReduce JobHistory Server | http://jhs_host:port/ | Default HTTP port is 19888. |