这个篇文档可把我翻译惨了现在都还没翻译完,格式也还没整理,不过该文档应该还是讲述了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.shyarn-env.sh来配置特定的值,用于控制在bin/ directory目录下的hadoop脚本分布。

设置配置:

        为了配置一个hadoop集群,你需要配置hadoop后台进程的运行环境和hadoop后台进程运行的相关参数。

        hadoop的后台进程为NameNode/DataNode 和 ResourceManager/NodeManager

        配置hadoop后台进程运行环境:

        管理员需要用conf/hadoop-env.shconf/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和本地本地文件系统路径权限
  • 下面的列表列出了在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---

  • Kerberos 密钥表文件
    • HDFS
    • 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)


    • YARN
    • 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
    • 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
  • 参数


    说明

    hadoop.security.authentication

    kerberos

    simple is non-secure.

    hadoop.security.authorization

    true

    开启RPC service-level 授权.

  • conf/hdfs-site.xml
    • NameNode配置:
    • 参数


      说明

      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主体名称

    • Configurations for Secondary NameNode:
    • 参数


      说明

      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主体名称

    • Configurations for DataNode:
    • 参数


      说明

      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主体名称

  • conf/yarn-site.xml
    • Web应用代理
  • 这个web代理提供了一个被应用导出的web应用和最终用户之间的一个代理,如果安全模式是打开的,那么当用户进入一个可能不安全的web应用时将会给用户发出警告,授权和授权使用这个代理就像是其他已经授权的web应用一样进行操作。

参数


说明

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.

  • conf/mapred-site.xml
    • 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.