hadoop2官方文档中文翻译(3)---集群配置【还未翻译完】

来源:互联网 发布:stata面板数据ols回归 编辑:程序博客网 时间:2024/06/05 07:45

这个篇文档可把我翻译惨了现在都还没翻译完,格式也还没整理,不过该文档应该还是讲述了hadoop2的全部配置,感觉在网上所有hadoop2的配置文档里是介绍的最全的。

原文:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html

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_PID_DIR 和 HADOOP_SECURE_DN_PID_DIR来指向一个目录,这个目录只能被那些运行hadoop后台进程的用户写入。否则这里可能会有连接攻击。

        管理员可以通过配置下列的选项来配置特定的后台进程。

 

后台进程环境变量NameNodeHADOOP_NAMENODE_OPTSDataNodeHADOOP_DATANODE_OPTSSecondary NameNodeHADOOP_SECONDARYNAMENODE_OPTSResourceManagerYARN_RESOURCEMANAGER_OPTSNodeManagerYARN_NODEMANAGER_OPTSWebAppProxyYARN_PROXYSERVER_OPTSMap Reduce Job History ServerHADOOP_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,如果你想分别为每个后台进程配置,你可以使用:后台进程环境变量ResourceManagerYARN_RESOURCEMANAGER_HEAPSIZENodeManagerYARN_NODEMANAGER_HEAPSIZEWebAppProxyYARN_PROXYSERVER_HEAPSIZEMap Reduce Job History ServerHADOOP_JOB_HISTORYSERVER_HEAPSIZE

    在非安全模式下配置hadoop后台进程

           这个章节主要讲在下面的配置文件里配置重要的参数。

  • conf/core-site.xml参数值说明fs.defaultFSNameNode URIhdfs://host:port/io.file.buffer.size131072序列文件里使用的读写缓存大小

  • conf/hdfs-site.xml
    • NameNode配置:参数值说明dfs.namenode.name.dirnamenode存储命名空间和事务日志的本地文件系统目录如果是一个逗号隔开的目录列表,那么名字表在所有的目录里都是重复的,用于冗余。dfs.namenode.hosts / dfs.namenode.hosts.exclude允许/拒绝的datanode列表如果需要,就用这个文件来控制列表里允许的datanodedfs.blocksize268435456256M的HDFS大文件系统块大小dfs.namenode.handler.count100更多数量的namenode服务线程来控制大数量的datanodes的RPCs
    • DataNode配置:参数值说明dfs.datanode.data.dir用逗号隔开的在本地文件系统上的路径,这些路径为datanode存储块的路径。如果是一个逗号隔开的目录列表,那么数据将被存储在所有命名的目录里,典型的是在不同的设备里。
  • conf/yarn-site.xml
    • ResourceManager 和 NodeManager配置:参数值说明yarn.acl.enable              true /false打开ACLs。默认为falseyarn.admin.aclAdmin ACLACL用来设置在集群上的管理员,ACLs are of for comma-separated-usersspacecomma-separated-groups(这句不知道怎么翻译才合适,可能大概是说用逗号来分开),默认的值为:*,表示任何人。如果是为空格就是任何人不允许访问。yarn.log-aggregation-enablefalse配置打开或关闭日志聚合
    • ResourceManager配置:参数值说明yarn.resourcemanager.addressResourceManager host:port ,用于给客户端提交jobs.host:portyarn.resourcemanager.scheduler.addressResourceManager host:port,用于主节点和调度器通信来取得资源host:portyarn.resourcemanager.resource-tracker.addressResourceManager host:port ,用于NodeManagers.host:portyarn.resourcemanager.admin.addressResourceManager host:port ,用于管理命令.host:portyarn.resourcemanager.webapp.addressResourceManager web-ui host:port,用于web管理host:portyarn.resourcemanager.scheduler.classResourceManager Scheduler class.计算能力调度 (推荐) 或先进先出调度yarn.scheduler.minimum-allocation-mb分配给每个容器请求Resource Manager的最小内存单位为MByarn.scheduler.maximum-allocation-mb分配给每个容器请求Resource Manager的最大内存单位为MByarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path允许/拒绝的NodeManager清单如果有必要,用这些文件来控制列出的允许的NodeManager
    • NodeManager配置:参数值说明yarn.nodemanager.resource.memory-mbNodeManager可用的物理内存定义在NodeManager上的全部资源,用来运行容器。yarn.nodemanager.vmem-pmem-ratiotasks使用虚拟内存的最大比例,可能超过物理内存

      每个task使用的虚拟内存可能超过它的物理内存, 虚拟内存靠这个比率来进行限制。这个比率限制的在nodemanager上tasks使用的虚拟内存总数,可能会超过它的物理内存。

      yarn.nodemanager.local-dirs在本地文件系统里,写入中间数据的地方的路径。多个路径就用逗号进行隔开。多个路径有助于分散磁盘I/Oyarn.nodemanager.log-dirs在本地文件系统里,写入日志的地方的路径。多个路径就用逗号进行隔开。多个路径有助于分散磁盘I/Oyarn.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},仅仅适合在日志聚合开启的时候使用。yarn.nodemanager.aux-servicesmapreduce.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.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 Job历史服务  host:port默认端口是10020.mapreduce.jobhistory.webapp.addressMapReduce Job历史服务的web界面  host:port默认端口是19888.mapreduce.jobhistory.intermediate-done-dir/mr-history/tmpMapReduce jobs写入历史文件的目录mapreduce.jobhistory.done-dir/mr-history/doneMR 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:hadoopNameNode, Secondary NameNode, Checkpoint Node, Backup Node, DataNodeyarn:hadoopResourceManager, NodeManagermapred:hadoopMapReduce JobHistory Server

    • HDFS和本地本地文件系统路径权限

      下面的列表列出了在HDFS和本地目录系统(所有节点上的),还有建议的权限:

      文件系统路径用户:组权限localdfs.namenode.name.dirhdfs:hadoopdrwx------localdfs.datanode.data.dirhdfs:hadoopdrwx------local$HADOOP_LOG_DIRhdfs:hadoopdrwxrwxr-xlocal$YARN_LOG_DIRyarn:hadoopdrwxrwxr-xlocalyarn.nodemanager.local-dirsyarn:hadoopdrwxr-xr-xlocalyarn.nodemanager.log-dirsyarn:hadoopdrwxr-xr-xlocalcontainer-executorroot:hadoop--Sr-s---localconf/container-executor.cfgroot:hadoopr--------hdfs/hdfs:hadoopdrwxr-xr-xhdfs/tmphdfs:hadoopdrwxrwxrwxthdfs/userhdfs:hadoopdrwxr-xr-xhdfsyarn.nodemanager.remote-app-log-diryarn:hadoopdrwxrwxrwxthdfsmapreduce.jobhistory.intermediate-done-dirmapred:hadoopdrwxrwxrwxthdfsmapreduce.jobhistory.done-dirmapred:hadoopdrwxr-x---
    • Kerberos 密钥表文件
      • HDFS

        NameNode密钥表文件,在NameNode主机上, 看下面:

        $ /usr/kerberos/bin/klist -e -k -t /etc/security/keytab/nn.service.keytabKeytab name: FILE:/etc/security/keytab/nn.service.keytabKVNO 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.keytabKeytab name: FILE:/etc/security/keytab/sn.service.keytabKVNO 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.keytabKeytab name: FILE:/etc/security/keytab/dn.service.keytabKVNO 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.keytabKeytab name: FILE:/etc/security/keytab/rm.service.keytabKVNO 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.keytabKeytab name: FILE:/etc/security/keytab/nm.service.keytabKVNO 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.keytabKeytab name: FILE:/etc/security/keytab/jhs.service.keytabKVNO 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.authenticationkerberossimple is non-secure.hadoop.security.authorizationtrue开启RPC service-level 授权.
    • conf/hdfs-site.xml
      • NameNode配置:参数值说明dfs.block.access.token.enabletrue给安全操作开启HDFS块访问令牌dfs.https.enabletrue dfs.namenode.https-addressnn_host_fqdn:50470 dfs.https.port50470 dfs.namenode.keytab.file/etc/security/keytab/nn.service.keytabNameNode的Kerberos密钥文件dfs.namenode.kerberos.principalnn/_HOST@REALM.TLDNameNode的Kerberos主体名称dfs.namenode.kerberos.https.principalhost/_HOST@REALM.TLDNameNode的HTTPS Kerberos主体名称
      • Configurations for Secondary NameNode:参数值说明dfs.namenode.secondary.http-addressc_nn_host_fqdn:50090 dfs.namenode.secondary.https-port50470 dfs.namenode.secondary.keytab.file/etc/security/keytab/sn.service.keytabNameNode的Kerberos密钥文件dfs.namenode.secondary.kerberos.principalsn/_HOST@REALM.TLDSecondary NameNode的Kerberos主体名称dfs.namenode.secondary.kerberos.https.principalhost/_HOST@REALM.TLDSecondary NameNode的HTTPS Kerberos主体名称
      • Configurations for DataNode:参数值说明dfs.datanode.data.dir.perm700 dfs.datanode.address0.0.0.0:2003 dfs.datanode.https.address0.0.0.0:2005 dfs.datanode.keytab.file/etc/security/keytab/dn.service.keytabDataNode的Kerberos密钥文件dfs.datanode.kerberos.principaldn/_HOST@REALM.TLDDataNode的Kerberos主体名称dfs.datanode.kerberos.https.principalhost/_HOST@REALM.TLDDataNode的HTTPS Kerberos主体名称
    • conf/yarn-site.xml
      • Web应用代理
    这个web代理提供了一个被应用导出的web应用和最终用户之间的一个代理,如果安全模式是打开的,那么当用户进入一个可能不安全的web应用时将会给用户发出警告,授权和授权使用这个代理就像是其他已经授权的web应用一样进行操作。

    参数值说明yarn.web-proxy.address              WebAppProxy host:port for proxy to AM web apps.host:port 如果和 yarn.resourcemanager.webapp.address一样, 或者是未定义。那么ResourceManager 将会运行代理,否则一个独立的代理将会被启动yarn.web-proxy.keytab/etc/security/keytab/web-app.service.keytabWebAppProxy的Kerberos密钥文件yarn.web-proxy.principalwap/_HOST@REALM.TLDWebAppProxy的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.

          这个可执行文件必须指定权限:6050或者--Sr-s---权限,为root用户,要和hadoop一个组,这个组需要NodeManager的Unix用户在里面,并且不是普通的应用程序用户。如何其它的一些用户属于这个组,那么将导致一些不安全的因素,这个特别的组的名字应该被指定为在conf/yarn-site.xml 和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 to be set 755 permissions as described above in the table on permissions on directories.

      • conf/container-executor.cfg

      The executable requires a configuration file called container-executor.cfg to be present in the configuration directory passed to the mvn target mentioned above.

      The configuration file must be owned by the user running NodeManager (user yarn in the above example), group-owned by anyone and should have the permissions 0400 or r--------.

      The executable requires following configuration items to be present in the conf/container-executor.cfg file. The items should be mentioned as simple key=value pairs, one per-line:

      ParameterValueNotesyarn.nodemanager.linux-container-executor.grouphadoopUnix 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.usershfds,yarn,mapred,binBanned users.min.user.id1000Prevent other super-users.

      To re-cap, here are the local file-sysytem permissions required for the various paths related to theLinuxContainerExecutor:

      FilesystemPathUser:GroupPermissionslocalcontainer-executorroot:hadoop--Sr-s---localconf/container-executor.cfgroot:hadoopr--------localyarn.nodemanager.local-dirsyarn:hadoopdrwxr-xr-xlocalyarn.nodemanager.log-dirsyarn:hadoopdrwxr-xr-x
      • Configurations for ResourceManager:ParameterValueNotesyarn.resourcemanager.keytab/etc/security/keytab/rm.service.keytabKerberos keytab file for the ResourceManager.yarn.resourcemanager.principalrm/_HOST@REALM.TLDKerberos principal name for the ResourceManager.
      • Configurations for NodeManager:ParameterValueNotesyarn.nodemanager.keytab/etc/security/keytab/nm.service.keytabKerberos keytab file for the NodeManager.yarn.nodemanager.principalnm/_HOST@REALM.TLDKerberos principal name for the NodeManager.yarn.nodemanager.container-executor.classorg.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutorUse LinuxContainerExecutor.yarn.nodemanager.linux-container-executor.grouphadoopUnix group of the NodeManager.
    • conf/mapred-site.xml
      • Configurations for MapReduce JobHistory Server:ParameterValueNotesmapreduce.jobhistory.addressMapReduce JobHistory Server host:portDefault port is 10020.mapreduce.jobhistory.keytab/etc/security/keytab/jhs.service.keytabKerberos keytab file for the MapReduce JobHistory Server.mapreduce.jobhistory.principaljhs/_HOST@REALM.TLDKerberos 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 directory on all the machines.

    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:

    DaemonWeb InterfaceNotesNameNodehttp://nn_host:port/Default HTTP port is 50070.ResourceManagerhttp://rm_host:port/Default HTTP port is 8088.MapReduce JobHistory Serverhttp://jhs_host:port/Default HTTP port is 19888.