• 目的
  • 先决条件
  • 安装
  • 在非安全模式下配置Hadoop
  • 配置Hadoop守护进程的环境
  • 配置Hadoop守护进程
  • 监控NodeManager的健康状况
  • slave 文件
  • Hadoop机架感知
  • 记录
  • 操作Hadoop集群
  • Hadoop启动
  • Hadoop关闭
  • Web界面

目的

本文档描述了如何安装和配置Hadoop集群,范围从几个节点到具有数千个节点的极大集群。要使用Hadoop,您可能首先要将其安装在一台计算机上(请参阅单节点设置)。

本文档不包括安全性或高可用性等高级主题。

先决条件

  • 安装Java。有关已知的好版本,请参阅Hadoop Wiki
  • 从Apache镜像下载稳定版本的Hadoop。

安装

安装Hadoop集群通常涉及在集群中的所有计算机上解压缩软件,或者通过适合您的操作系统的打包系统进行安装。将硬件划分为功能非常重要。

通常,群集中的一台计算机被指定为NameNode,而另一台计算机则被指定为ResourceManager。这些都是大师。其他服务(例如Web App Proxy Server和MapReduce作业历史记录服务器)通常在专用硬件或共享基础架构上运行,具体取决于负载。

集群中的其余计算机充当DataNode和NodeManager。这些是workers。

在非安全模式下配置Hadoop

Hadoop的Java配置由两种类型的重要配置文件驱动:

  • 只读默认配置 - 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 /目录中的Hadoop脚本  ,  通过修改etc/hadoop/hadoop-env.sh and etc/hadoop/yarn-env.sh.设置特定属性的值  。

要配置Hadoop集群,您需要配置Hadoop守护程序执行的环境以及Hadoop守护程序的配置参数。

HDFS守护程序是NameNode,SecondaryNameNode和DataNode。YARN守护程序是ResourceManager,NodeManager和WebAppProxy。如果要使用MapReduce,则MapReduce作业历史记录服务器也将运行。对于大型安装,这些通常在不同的主机上运行。

配置Hadoop守护进程的环境

管理员应该使用etc/hadoop/hadoop-env.sh and optionally the etc/hadoop/mapred-env.sh 和 etc/hadoop/yarn-env.sh 脚本来对Hadoop守护进程的进程环境进行特定于的自定义。

至少,您必须指定每个远程节点上JAVA_HOME.

管理员可以使用下表中显示的配置选项配置各个守护程序:

 

守护进程

环境变量

NameNode

HDFS_NAMENODE_OPTS

DataNode

HDFS_DATANODE_OPTS

Secondary NameNode

HDFS_SECONDARYNAMENODE_OPTS

ResourceManager

YARN_RESOURCEMANAGER_OPTS

NodeManager

YARN_NODEMANAGER_OPTS

WebAppProxy

YARN_PROXYSERVER_OPTS

Map Reduce Job History Server

MAPRED_HISTORYSERVER_OPTS

例如,要将Namenode配置为使用parallelGC和4GB Java堆,应在hadoop-env.sh中添加以下语句:

export HDFS_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx4g"

有关其他示例,请参阅 etc/hadoop/hadoop-env.sh 

您可以自定义的其他有用配置参数包括:

  • HADOOP_PID_DIR - 存储守护进程的进程标识文件的目录。
  • HADOOP_LOG_DIR - 存储守护程序日志文件的目录。如果日志文件不存在,则会自动创建日志文件。
  • HADOOP_HEAPSIZE_MAX - 用于Java堆的最大内存量。此处还支持JVM支持的单元。如果没有单元,则假定该数字以兆字节为单位。默认情况下,Hadoop会让JVM确定要使用多少。可以使用上面列出的相应_OPTS变量在每个守护程序的基础上覆盖此值。例如,设置HADOOP_HEAPSIZE_MAX = 1g 和 HADOOP_NAMENODE_OPTS =“ - Xmx5g” 将为NameNode配置5GB堆。

在大多数情况下,您应该指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录,以便它们只能由将要运行hadoop守护程序的用户写入。否则就有可能发生符号链接攻击。

在系统范围的shell环境配置中配置HADOOP_HOME也是必要的。例如,在/etc/profile.d中有一个简单的脚本:

HADOOP_HOME=/path/to/hadoop
  export HADOOP_HOME

配置Hadoop守护进程

本节介绍在给定配置文件中指定的重要参数:

  • etc/hadoop/core-site.xml

参数


笔记

fs.defaultFS

NameNode URI

HDFS://主机:端口/

io.file.buffer.size

131072

SequenceFiles中使用的读/写缓冲区的大小。

  • etc/hadoop/hdfs-site.xml
  • NameNode的配置:

参数


笔记

dfs.namenode.name.dir

NameNode持久存储命名空间和事务日志的本地文件系统上的路径。

如果这是逗号分隔的目录列表,那么名称表将在所有目录中复制,以实现冗余。

dfs.hosts / dfs.hosts.exclude

允许/排除的DataNodes列表。

如有必要,请使用这些文件来控制允许的数据节点列表。

dfs.blocksize

268435456

对于大型文件系统,HDFS块大小为256MB。

dfs.namenode.handler.count

100

更多NameNode服务器线程来处理来自大量DataNode的RPC。

  • DataNode的配置:

参数


笔记

dfs.datanode.data.dir

逗号分隔的DataNode本地文件系统上的路径列表,它应该存储其块。

如果这是逗号分隔的目录列表,则数据将存储在所有命名目录中,通常位于不同设备上。

  • etc/hadoop/yarn-site.xml
  • ResourceManager和NodeManager的配置:

参数


笔记

yarn.acl.enable

是 / 否

启用ACL?默认为false

yarn.admin.acl

管理员ACL

用于在集群上设置管理员的ACL。ACL用于逗号分隔的用户空间命令分隔组。默认为*的特殊值,这意味着任何人。只是空间的特殊价值意味着没有人可以访问。

yarn.log聚集启用

用于启用或禁用日志聚合的配置

  • ResourceManager的配置:

参数


笔记

yarn.resourcemanager.address

ResourceManager主机:客户端提交作业的端口。

host:port  如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。

yarn.resourcemanager.scheduler.address

ResourceManager主机:ApplicationMasters与Scheduler通信以获取资源的端口。

host:port  如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。

yarn.resourcemanager.resource-tracker.address

ResourceManager主机:NodeManagers的端口。

host:port  如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。

yarn.resourcemanager.admin.address

ResourceManager主机:管理命令的端口。

host:port  如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。

yarn.resourcemanager.webapp.address

ResourceManager web-ui主机:端口。

host:port  如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。

yarn.resourcemanager.hostname

ResourceManager主机。

host  可以设置的单个主机名,而不是设置所有yarn.resourcemanager *地址资源。导致ResourceManager组件的默认端口。

yarn.resourcemanager.scheduler.class

ResourceManager Scheduler类。

CapacityScheduler(推荐),FairScheduler(也推荐)或FifoScheduler。使用完全限定的类名,例如org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。

yarn.scheduler.minimum分配-MB

在资源管理器中分配给每个容器请求的最小内存限制。

在MB中

yarn.scheduler.maximum分配-MB

在资源管理器中分配给每个容器请求的最大内存限制。

在MB中

yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path

允许/排除的NodeManager列表。

如有必要,请使用这些文件来控制允许的NodeManager列表。

  • NodeManager的配置:

参数


笔记

yarn.nodemanager.resource.memory-mb

资源即给定NodeManager的可用物理内存(MB)

定义NodeManager上可用于运行容器的总可用资源

yarn.nodemanager.vmem-ratio

虚拟内存使用任务可能超过物理内存的最大比率

每个任务的虚拟内存使用量可能超过其物理内存限制。NodeManager上的任务使用的虚拟内存总量可能会超过其物理内存使用率。

yarn.nodemanager.local-dirs

以逗号分隔的本地文件系统上写入中间数据的路径列表。

多个路径有助于传播磁盘I / O.

yarn.nodemanager.log-dirs

以逗号分隔的本地文件系统上写入日志的路径列表。

多个路径有助于传播磁盘I / O.

yarn.nodemanager.log.retain-seconds

10800

在NodeManager上保留日志文件的默认时间(以秒为单位)仅在禁用日志聚合时适用。

yarn.nodemanager.remote-app-logdir

/logs

应用程序完成时移动应用程序日志的HDFS目录。需要设置适当的权限。仅适用于启用了日志聚合的情况。

yarn.nodemanager.remote-app-dir-suffix

logs

附加到远程日志目录的后缀。日志将汇总到$ {yarn.nodemanager.remote-app-log-dir} / $ {user} / $ {thisParam}仅在启用了日志聚合时才适用。

yarn.nodemanager.aux-services

mapreduce_shuffle

需要为Map Reduce应用程序设置的随机服务。

yarn.nodemanager.env-whitelist

NodeManagers中容器继承的环境属性

对于mapreduce应用程序,除了默认值之外,还应添加HADOOP_MAPRED_HOME。属性值应为JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME

  • 历史服务器的配置(需要移动到其他地方):

参数


笔记

yarn.log-aggregation.retain秒

-1

在删除聚合日志之前保留多长时间。-1禁用。小心,将其设置得太小,您将垃圾邮件名称节点。

yarn.log-aggregation.retain-check-interval-seconds

-1

检查聚合日志保留期间的时间。如果设置为0或负值,则该值将计算为聚合日志保留时间的十分之一。小心,将其设置得太小,您将垃圾邮件名称节点。

  • etc/hadoop/mapred-site.xml
  • MapReduce应用程序的配置:

参数


笔记

mapreduce.framework.name

yarn

执行框架设置为Hadoop YARN。

mapreduce.map.memory.mb

1536

map的资源限制  1.5G

mapreduce.map.java.opts

-Xmx1024M

子 map 的jvms的堆大小。

mapreduce.reduce.memory.mb

3072

reduce 内存限制   3G。

mapreduce.reduce.java.opts

-Xmx2560M

子 reduces 的 jvm   heap-size 

mapreduce.task.io.sort.mb

512

数据排序的时候, 内存限制

mapreduce.task.io.sort.factor

100

在对文件进行排序时,会立即合并更多流。

mapreduce.reduce.shuffle.parallelcopies

50

Higher number of parallel copies run by reduces to fetch outputs from very large number of maps。

  • MapReduce JobHistory服务器的配置:

 

参数


笔记

mapreduce.jobhistory.address

MapReduce JobHistory服务器主机:端口

默认端口是10020。

mapreduce.jobhistory.webapp.address

MapReduce JobHistory Server Web UI 主机:端口

默认端口是19888。

mapreduce.jobhistory.intermediate-done-dir

/mr-history/tmp

MapReduce任务写入历史文件的目录。

mapreduce.jobhistory.done-dir

/mr-history/done

MR JobHistory Server文件的目录。

监控NodeManager的健康状况

Hadoop提供了一种机制,管理员可以通过该机制将NodeManager定期运行管理员提供的脚本,以确定节点是否健康。

管理员可以通过在脚本中执行对其选择的任何检查来确定节点是否处于正常状态。如果脚本检测到节点处于不健康状态,则必须以字符串ERROR开头的标准输出行。NodeManager定期生成脚本并检查其输出。如果脚本的输出包含字符串ERROR,如上所述,节点的状态将报告为运行状况不佳并且ResourceManager将节点列入黑名单。不会为此节点分配其他任务。但是,NodeManager继续运行脚本,因此如果节点再次变得健康,它将自动从ResourceManager上的黑名单节点中删除。在ResourceManager Web界面中,管理员可以使用节点的运行状况以及脚本的输出(如果它不健康)。自节点健康以来的时间也显示在Web界面上。

以下参数可用于控制etc / hadoop / yarn-site.xml中的节点运行状况监视脚本。

参数


笔记

yarn.nodemanager.health-checker.script.path

节点健康脚本

用于检查节点健康状况的脚本。

yarn.nodemanager.health-checker.script.opts

节点健康脚本选项

用于检查节点健康状态的脚本选项。

yarn.nodemanager.health-checker.interval-MS

节点健康脚本间隔

运行运行状况脚本的时间间隔。

yarn.nodemanager.health-checker.script.timeout-MS

节点运行状况超时间隔

健康脚本执行超时。

如果只有部分本地磁盘变坏,则运行状况检查程序脚本不应该给出错误。NodeManager能够定期检查本地磁盘的运行状况(具体检查nodemanager-local-dirs和nodemanager-log-dirs),并在根据为配置属性yarn.nodemanager设置的值达到坏目录数阈值后.disk-health-checker.min-healthy-disks,整个节点被标记为不健康,此信息也被发送到资源管理器。引导磁盘被突袭或健康检查程序脚本识别引导磁盘中的故障。

Slaves 文件

列出etc/hadoop/workers文件中的所有工作者主机名或IP地址,每行一个。Helper脚本(如下所述)将使用 etc/hadoop/workers 文件一次在多个主机上运行命令。它不用于任何基于Java的Hadoop配置。为了使用此功能,必须为用于运行Hadoop的帐户建立ssh信任(通过无密码ssh或其他方式,如Kerberos)。

Hadoop机架感知

许多Hadoop组件都具有机架感知功能,并利用网络拓扑结构提高性能和安全性。Hadoop守护程序通过调用管理员配置的模块来获取集群中工作程序的机架信息。有关更多具体信息,请参阅Rack Awareness文档。

强烈建议在启动HDFS之前配置机架感知。

记录

Hadoop 通过Apache Commons Logging框架使用Apache log4j进行日志记录。编辑 etc/hadoop/log4j.properties 文件以自定义Hadoop守护程序的日志记录配置(日志格式等)。

操作Hadoop集群

完成所有必要的配置后,将文件分发到所有计算机上的HADOOP_CONF_DIR目录。这应该是所有计算机上的同一目录。

通常,建议HDFS和YARN作为单独的用户运行。在大多数安装中,HDFS进程以'hdfs'的形式执行。YARN通常使用'yarn'帐户。

Hadoop启动

要启动Hadoop集群,您需要启动HDFS和YARN集群。

第一次启动HDFS时,必须对其进行格式化。将新的分布式文件系统格式化为hdfs

[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format <cluster_name>

在指定节点上使用以下命令以hdfs启动HDFS NameNode :

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode

在每个指定节点上使用以下命令启动HDFS DataNode作为hdfs

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start datanode

如果配置了etc/hadoop/workers 和ssh 免密登录(请参阅单节点设置),则可以使用实用程序脚本启动所有HDFS进程。作为hdfs

[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh

使用以下命令启动YARN,在指定的ResourceManager上作为yarn运行

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager

运行脚本以在每个指定的主机上启动NodeManager作为yarn

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start nodemanager

启动独立的WebAppProxy服务器。以yarn形式在WebAppProxy服务器上运行。如果使用多个服务器进行负载平衡,则应在每个服务器上运行:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver

如果配置了etc / hadoop / workers和ssh trusted access(请参阅单节点设置),则可以使用实用程序脚本启动所有YARN进程。作为纱线

[yarn]$ $HADOOP_HOME/sbin/start-yarn.sh

使用以下命令启动MapReduce JobHistory Server,在指定的服务器上以mapred运行

[mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver

Hadoop关闭

使用以下命令停止NameNode,在指定的NameNode上以hdfs运行

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop namenode

运行脚本以将DataNode作为hdfs停止:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop datanode

如果配置了etc/hadoop/workers 和ssh 免登陆(请参阅单节点设置),则可以使用实用程序脚本停止所有HDFS进程。作为hdfs

[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh

使用以下命令停止ResourceManager,在指定的ResourceManager上以yarn形式运行

[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop resourcemanager

运行脚本以将作为yarn的worker上的NodeManager停止:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop nodemanager

如果配置了etc/hadoop/workers和ssh 免登陆(请参阅单节点设置),则可以使用实用程序脚本停止所有YARN进程。作为纱线

[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh

停止WebAppProxy服务器。以纱线形式在WebAppProxy服务器上运行。如果使用多个服务器进行负载平衡,则应在每个服务器上运行:

[yarn]$ $HADOOP_HOME/bin/yarn stop proxyserver

使用以下命令停止MapReduce JobHistory Server,在指定的服务器上以mapred运行

[mapred]$ $HADOOP_HOME/bin/mapred --daemon stop historyserver

Web界面

一旦Hadoop集群启动并运行,请检查组件的web-ui,如下所述:

守护进程

Web 接口

备注

NameNode

http://nn_host:port/

Default HTTP port is 9870.

ResourceManager

http://rm_host:port/

Default HTTP port is 8088.

MapReduce JobHistory Server

http://jhs_host:port/

Default HTTP port is 19888.