翻译: http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html
版本:2.9.0
目的
本文档介绍如何安装和配置Hadoop集群,范围从几个节点到具有数千个节点的超大型集群。要使用Hadoop,您可能首先需要将其安装在单台机器上(请参阅单节点安装)。
本文档不包括安全或高可用性等高级主题。
先决条件
- 安装Java。查看Hadoop Wiki以获取已知的良好版本。
- 从Apache镜像下载稳定版本的Hadoop。
安装
安装Hadoop集群通常涉及在群集中的所有机器上解压软件,或者通过适合您的操作系统的打包系统进行安装。把硬件进行功能划分是很重要的。
通常,群集中的一台机器被指定为NameNode,另一台机器指定为ResourceManager。这些是masters。其他服务(例如Web App Proxy Server和MapReduce Job History服务器)通常在专用硬件或共享基础架构上运行,具体取决于负载。
集群中的其余机器充当DataNode和NodeManager。这些是slaves。
以非安全模式配置Hadoop
Hadoop的Java配置有两种重要的配置文件:
只读的默认配置 - core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml.
自定义的配置 - etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml and etc/hadoop/mapred-site.xml.
此外,您可以通过 etc/hadoop/hadoop-env.sh and etc/hadoop/yarn-env.sh.设置自定义路径,来控制bin/目录下的hadoop脚本。
要配置Hadoop集群,您需要配置Hadoop守护程序执行的environment 以及Hadoop守护程序的 configuration parameters。
HDFS守护进程包括NameNode,SecondaryNameNode和DataNode。YARN守护进程是ResourceManager,NodeManager和WebAppProxy。如果要使用MapReduce,则MapReduce作业历史记录服务器Job History Server也需要运行。对于大型安装,这些守护进程通常在不同的主机上运行。
配置Hadoop守护程序的环境
管理员应该使用 etc/hadoop/hadoop-env.sh 以及可选的etc/hadoop/mapred-env.sh and etc/hadoop/yarn-env.sh 脚本来定制Hadoop守护进程的进程环境。
至少,您必须指定JAVA_HOME 以便在每个远程节点上正确定义它。
管理员可以使用下表中显示的配置选项配置各个守护程序:
例如,要将Namenode配置为使用parallelGC,应在hadoop-env.sh中添加以下语句:
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"
其他示例请参阅etc/hadoop/hadoop-env.sh。
您可以自定义的其他有用的配置参数包括:
- HADOOP_PID_DIR - 存储守护进程进程ID文件的目录。
- HADOOP_LOG_DIR - 守护进程日志文件存储的目录。如果日志文件不存在,它们将自动创建。
- HADOOP_HEAPSIZE / YARN_HEAPSIZE - 使用的最大堆数,以MB为单位,例如,如果varibale设置为1000,堆将设置为1000MB。这用于配置守护进程的堆大小。默认情况下,该值为1000。
在大多数情况下,您应该指定 HADOOP_PID_DIR 和 HADOOP_LOG_DIR 目录,以便它们只能由要运行hadoop守护程序的用户写入。否则就有可能发生符号链接攻击。
在系统范围的shell环境配置中配置 HADOOP_PREFIX 。例如,/etc/profile.d:一个简单脚本:
HADOOP_PREFIX=/path/to/hadoop
export HADOOP_PREFIX
配置Hadoop守护程序
本节介绍在给定的配置文件中要指定的重要参数:
-
etc/hadoop/core-site.xml
图片.png etc/hadoop/hdfs-site.xml
-
NameNode的配置:
图片.png DataNode的配置:
参数 | 值 | 笔记 |
---|---|---|
dfs.datanode.data.dir | 逗号分隔的, DataNode 用于在本地文件系统上存储blocks的列表。 | 如果这是以逗号分隔的目录列表,则数据将存储在所有已命名的目录中,通常位于不同的设备上。 |
etc/hadoop/yarn-site.xml
-
ResourceManager和NodeManager的配置:
图片.png -
ResourceManager的配置:
图片.png -
NodeManager的配置:
图片.png
-
历史记录服务器的配置(需要移到别处):
图片.png etc/hadoop/mapred-site.xml
-
MapReduce应用程序的配置:
图片.png -
MapReduce JobHistory服务器的配置:
图片.png
监视NodeManagers的运行状况
Hadoop提供了一种机制,管理员可以通过该机制将NodeManager配置为定期运行管理员提供的脚本,以确定节点是否健康。
管理员可以通过在脚本中执行任何选择检查来确定节点是否处于健康状态。如果脚本检测到节点处于不健康状态,则它必须以字符串ERROR打印一行到标准输出。NodeManager定期生成脚本并检查其输出。如果脚本的输出包含字符串ERROR,如上所述,则该节点的状态会报告为 unhealthy 并且ResourceManager将该节点列入黑名单。没有更多的任务将被分配给这个节点。但是,NodeManager继续运行该脚本,以便如果该节点再次变得健康,它将自动从ResourceManager中的黑名单节点中删除。如果ResourceManager Web界面中的管理员可以使用该节点的健康状况以及脚本的输出(如果状态不健康),那么该节点的健康状况将与脚本的输出一起提供。节点健康时长也显示在Web界面上。
以下参数可用于控制 etc/hadoop/yarn-site.xml. 的节点运行状况监控脚本。
如果有一些本地磁盘变坏,则健康检查器脚本不支持发出ERROR。NodeManager能够定期检查本地磁盘的运行状况(特别是检查nodemanager-local-dirs和nodemanager-log-dirs),并根据为config属性设置的值达到坏目录数阈值yarn.nodemanager.disk-health-checker.min-healthy-disks,整个节点被标记为不健康,并且该信息也被发送到资源管理器。引导磁盘要么被突然检测,要么由运行状况检查程序脚本识别引导磁盘中的故障。
从属文件
在etc/hadoop/slaves 文件中列出所有的从属主机名或IP地址,每行一个。Helper脚本(如下所述)将使用etc/hadoop/slaves 文件一次在多台主机上运行命令。它不用于任何基于Java的Hadoop配置。为了使用此功能,必须为用于运行Hadoop的帐户建立ssh信任(通过无密码ssh或其他方式,例如Kerberos)。
Hadoop Rack 感知
许多Hadoop组件都具有机架感知功能,可以充分利用网络拓扑的性能和安全性。Hadoop守护进程通过调用管理员配置的模块获取集群中从属机架的机架信息。有关更多具体信息,请参阅RackAware文档。
强烈建议在启动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_PREFIX/bin/hdfs namenode -format <cluster_name>
在指定节点上使用以下命令启动HDFS NameNode作为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode
在每个指定节点上使用以下命令启动HDFS DataNode作为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs start datanode
如果配置了etc/hadoop/slaves 和ssh信任访问(请参阅单节点安装),则可以使用实用程序脚本启动所有HDFS进程。 hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/start-dfs.sh
使用以下命令启动YARN,在指定的ResourceManager上作为yarn:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager
运行一个脚本在每个指定的主机上启动一个NodeManager作为yarn:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR start nodemanager
启动一个独立的WebAppProxy服务器。按照yarn在WebAppProxy服务器上运行。如果使用多个服务器进行负载平衡,则应在每个服务器上运行它们:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start proxyserver
如果配置了etc/hadoop/slaves 和ssh信任访问(请参阅单节点设置),则可以使用实用程序脚本启动所有YARN进程。:
[yarn]$ $HADOOP_PREFIX/sbin/start-yarn.sh
使用以下命令启动MapReduce JobHistory服务器,在指定服务器上以mapred:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver
Hadoop关机
使用以下命令停止NameNode,在指定的NameNode上运行hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
运行一个脚本来将DataNode停止为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode
如果配置了etc/hadoop/slaves 和ssh信任访问权限(请参阅单节点设置),则所有HDFS进程都可以使用实用程序脚本停止。hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/stop-dfs.sh
使用以下命令停止ResourceManager,在指定的ResourceManager上作为yarn运行:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager
运行脚本以停止作为yarn上的NodeManager :
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR stop nodemanager
如果配置了etc/hadoop/slaves和ssh信任访问(请参阅单节点安装),则可以使用实用程序脚本停止所有YARN进程。作为yarn:
[yarn]$ $HADOOP_PREFIX/sbin/stop-yarn.sh
停止WebAppProxy服务器。按照yarn在WebAppProxy服务器上运行。如果使用多个服务器进行负载平衡,则应在每个服务器上运行它们:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop proxyserver
使用以下命令停止MapReduce JobHistory服务器,在指定服务器上以mapred方式运行:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver
Web界面
一旦Hadoop集群启动并运行,请检查组件的web-ui,如下所述: