目录
4.5.Hadoop机架意识(Rack Awareness)
1.目的
本文档介绍了如何安装和配置Hadoop集群,范围从几个节点到具有数千个节点的超大型集群。 要使用Hadoop,您可能首先需要将其安装在单台计算机上(请参阅单节点设置)。
本文档不涉及安全或高可用性等高级主题。
2.先决条件
- 安装Java。 有关已知的良好版本,请参见 Hadoop Wik。
- 从Apache镜像下载稳定的Hadoop版本。
3.安装
安装Hadoop群集通常涉及在群集中的所有计算机上解压缩软件,或通过适用于您的操作系统的打包系统进行安装。将硬件划分为功能很重要。
通常,将群集中的一台机器专门指定为NameNode,将另一台机器指定为ResourceManager。这些是雇主(masters)。其他服务(例如Web App代理服务器和MapReduce作业历史服务器)通常根据负载在专用硬件或共享基础结构上运行。
群集中的其余计算机同时充当DataNode和NodeManager。这些都是工人(workers)。
4.在非安全模式下配置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 和 etc/hadoop/yarn-env.sh中设置站点的具体数值。
要配置Hadoop集群,您将需要配置Hadoop守护程序执行的环境以及Hadoop守护程序的配置参数。
HDFS守护程序是NameNode,SecondaryNameNode和DataNode。 YARN守护程序是ResourceManager,NodeManager和WebAppProxy。 如果要使用MapReduce,则MapReduce作业历史服务器也将运行。 对于大型安装,它们通常在单独的主机上运行。
4.1.Hadoop守护程序的配置环境
管理员应使用etc/hadoop/hadoop-env.sh以及可选的etc/hadoop/mapred-env.sh和etc/hadoop/yarn-env.sh脚本对Hadoop守护进程的处理环境进行特定于站点的自定义。
至少必须指定JAVA_HOME,以便在每个远程节点上正确定义它。
管理员可以使用下表中显示的配置选项来配置各个守护程序:
Daemon | Environment Variable |
---|---|
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 Heap,应在hadoop-env.sh中添加以下语句:
export HDFS_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx4g"
有关其他示例,请参见etc/hadoop/hadoop-env.sh。
您可以自定义的其他有用的配置参数包括:
- HADOOP_PID_DIR-守护程序的进程ID文件的存储目录。
- HADOOP_LOG_DIR-守护程序日志文件的存储目录。 如果日志文件不存在,则会自动创建。
- HADOOP_HEAPSIZE_MAX-用于Java heapsize的最大内存量。 此处也支持JVM支持的单元。 如果不存在任何单位,则将假定该数字以兆字节为单位。 默认情况下,Hadoop将让JVM确定使用多少资源。 可以使用上面列出的适当的_OPTS变量逐个守护程序覆盖此值。 例如,设置HADOOP_HEAPSIZE_MAX=1g和HADOOP_NAMENODE_OPTS="-Xmx5g"将为NameNode配置5GB的堆。
在大多数情况下,您应该指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录,以便它们只能由将要运行hadoop守护程序的用户写入。 否则可能会发生符号链接攻击。
在系统级外壳环境配置中配置HADOOP_HOME也是传统的做法。 例如,/etc/profile.d中的一个简单脚本:
HADOOP_HOME=/path/to/hadoop
export HADOOP_HOME
4.2.配置Hadoop守护程序
本节介绍在给定的配置文件中指定的重要参数:
- etc/hadoop/core-site.xml
Parameter | Value | Notes |
---|---|---|
fs.defaultFS | NameNode URI | hdfs://host:port/ |
io.file.buffer.size | 131072 | Size of read/write buffer used in SequenceFiles. |
- etc/hadoop/hdfs-site.xml
- 配置NameNode:
Parameter | Value | Notes |
---|---|---|
dfs.namenode.name.dir | NameNode持久存储名称空间和事务日志的本地文件系统上的路径 | 如果这是用逗号分隔的目录列表,则将名称表复制到所有目录中,以实现冗余。 |
dfs.hosts / dfs.hosts.exclude | permitted/excluded DataNodes的列表。 | 如有必要,请使用这些文件来控制允许的数据节点列表。 |
dfs.blocksize | 268435456 | 大型文件系统的HDFS块大小为256MB。 |
dfs.namenode.handler.count | 100 | 更多的NameNode服务器线程可处理来自大量DataNode的RPC。 |
- 配置DataNode:
Parameter | Value | Notes |
---|---|---|
dfs.datanode.data.dir | 逗号分隔的DataNode本地文件系统上应存储其块的路径列表。 | 如果这是逗号分隔的目录列表,则数据将存储在所有命名的目录中,通常在不同的设备上。 |
- etc/hadoop/yarn-site.xml
- 配置ResourceManager和NodeManager:
Parameter | Value | Notes |
---|---|---|
yarn.acl.enable | true / false | Enable ACLs? Defaults to false. |
yarn.admin.acl | Admin ACL | ACL用于在群集上设置管理员。 ACL适用于逗号分隔的用户空间逗号分隔的组。 默认为特殊值*,表示任何人。 仅有空格的特殊价值意味着没有人可以使用。 |
yarn.log-aggregation-enable | false | 启用或禁用日志聚合的配置 |
- 配置ResourceManager:
Parameter | Value | Notes |
---|---|---|
yarn.resourcemanager.address | ResourceManager host:port 供客户端提交作业 | host:port 如果已设置, 将覆盖在yarn.resourcemanager.hostname中设置的hostname |
yarn.resourcemanager.scheduler.address | ResourceManager host:port ,ApplicationMaster可以与Scheduler通信以获取资源。 | host:port 如果已设置, |
yarn.resourcemanager.resource-tracker.address | ResourceManager host:port for NodeManagers. | host:port 如果已设置, |
yarn.resourcemanager.admin.address | ResourceManager host:port for administrative commands. | host:port 如果已设置, 将覆盖在yarn.resourcemanager.hostname中设置的hostname |
yarn.resourcemanager.webapp.address | ResourceManager web-ui host:port. | host:port 如果已设置, 将覆盖在yarn.resourcemanager.hostname中设置的hostname |
yarn.resourcemanager.hostname | ResourceManager host. | host 可以设置单个主机名来代替设置所有yarn.resourcemanager*address资源。生成ResourceManager组件的默认端口。 |
yarn.resourcemanager.scheduler.class | ResourceManager Scheduler class. | CapacityScheduler (推荐), FairScheduler (也推荐), or FifoScheduler. 使用完全限定的类名称, 例如, org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler. |
yarn.scheduler.minimum-allocation-mb | 在资源管理器中分配给每个容器请求的最小内存限制。 | In MBs |
yarn.scheduler.maximum-allocation-mb | 在资源管理器中分配给每个容器请求的最大内存限制。 | In MBs |
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path | List of permitted/excluded NodeManagers. | 如有必要,请使用这些文件来控制允许的NodeManager列表。 |
- 配置NodeManager:
Parameter | Value | Notes |
---|---|---|
yarn.nodemanager.resource.memory-mb | 资源,即给定的NodeManager可用的物理内存(MB) | 在NodeManager上定义可供运行中的容器使用的总可用资源 |
yarn.nodemanager.vmem-pmem-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-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服务。 |
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 |
- 配置History Server(需要移至其他位置):
Parameter | Value | Notes |
---|---|---|
yarn.log-aggregation.retain-seconds | -1 | 删除聚合日志前要保留多长时间。 -1禁用。 请注意,将此值设置得太小,您将向名称节点发送垃圾邮件(spam)。 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 检查聚合日志保留之间的时间。 如果设置为0或负值,则该值将被计算为聚合日志保留时间的十分之一。 请注意,将此值设置得太小,您将向名称节点发送垃圾邮件。 |
- etc/hadoop/mapred-site.xml
- 配置MapReduce Applications:
Parameter | Value | Notes |
---|---|---|
mapreduce.framework.name | yarn | 执行框架设置为Hadoop YARN。 |
mapreduce.map.memory.mb | 1536 | Larger resource limit for maps. |
mapreduce.map.java.opts | -Xmx1024M | Larger heap-size for child jvms of maps. |
mapreduce.reduce.memory.mb | 3072 | Larger resource limit for reduces. |
mapreduce.reduce.java.opts | -Xmx2560M | Larger heap-size for child jvms of reduces. |
mapreduce.task.io.sort.mb | 512 | Higher memory-limit while sorting data for efficiency. |
mapreduce.task.io.sort.factor | 100 | More streams merged at once while sorting files. |
mapreduce.reduce.shuffle.parallelcopies | 50 | Higher number of parallel copies run by reduces to fetch outputs from very large number of maps. |
- 配置MapReduce JobHistory Server:
Parameter | Value | Notes |
---|---|---|
mapreduce.jobhistory.address | MapReduce JobHistory Server host:port | Default port is 10020. |
mapreduce.jobhistory.webapp.address | MapReduce JobHistory Server Web UI host:port | Default port is 19888. |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | Directory where history files are written by MapReduce jobs. |
mapreduce.jobhistory.done-dir | /mr-history/done | Directory where history files are managed by the MR JobHistory Server. |
4.3.监视NodeManager的运行状况
Hadoop提供了一种机制,管理员可以通过该机制将NodeManager配置为定期运行管理员提供的脚本,以确定节点是否正常。
管理员可以通过在脚本中执行对其选择的任何检查来确定节点是否处于健康状态。如果脚本检测到该节点处于不正常状态,则它必须从标准字符串ERROR开始打印一行到标准输出。NodeManager会定期生成脚本并检查其输出。如上所述,如果脚本的输出包含字符串ERROR,则该节点的状态报告为unhealthy,并且ResourceManager将其列入黑名单。没有其他任务将分配给该节点。但是,NodeManager会继续运行该脚本,因此,如果该节点再次恢复正常,则它将自动从ResourceManager的黑名单节点中删除。节点的运行状况以及脚本的输出(如果运行状况不正常)对于管理员在ResourceManager Web界面(interface)中可用。 Web界面(interface)上还显示自节点运行状况良好以来的时间。
以下参数可用于控制 etc/hadoop/yarn-site.xml 中的节点运行状况监视脚本。
Parameter | Value | Notes |
---|---|---|
yarn.nodemanager.health-checker.script.path | Node health script | Script to check for node’s health status. |
yarn.nodemanager.health-checker.script.opts | Node health script options | Options for script to check for node’s health status. |
yarn.nodemanager.health-checker.interval-ms | Node health script interval | Time interval for running health script. |
yarn.nodemanager.health-checker.script.timeout-ms | Node health script timeout interval | Timeout for health script execution. |
如果仅某些本地磁盘出错,则运行状况检查器脚本不应给出ERROR。 NodeManager能够定期检查本地磁盘的运行状况(特别是检查nodemanager-local-dirs和nodemanager-log-dirs),并根据配置属性yarn.nodemanager.disk-health-checker.min-healthy-disks的值达到错误目录数量的阈值后,整个节点被标记为unhealthy,并且此信息也发送到资源管理器。 启动磁盘被检查,或者运行状况检查程序脚本标识了启动磁盘中的故障。
4.4.奴隶(Slaves)文件
在您的etc/hadoop/workers文件中列出所有工作者主机名或IP地址,每行列出一个。 帮助程序脚本(如下所述)将使用etc/hadoop/workers 文件在多个主机上一次运行命令。 它不用于任何基于Java的Hadoop配置。 为了使用此功能,必须为用于运行Hadoop的帐户建立ssh信任(通过无密码ssh或其他某种方式,例如Kerberos)。
4.5.Hadoop机架意识(Rack Awareness)
许多Hadoop组件都知道机架,并利用网络拓扑来提高性能和安全性。 Hadoop守护程序通过调用管理员配置的模块来获取集群中工作线程的机架信息。 有关更多特定信息,请参阅机架意识文档(Rack Awareness)。
强烈建议在启动HDFS之前配置机架感知。
4.6.Logging
Hadoop通过Apache Commons Logging框架使用 Apache log4j进行日志记录。 编辑 etc/hadoop/log4j.properties文件以自定义Hadoop守护程序的日志配置(日志格式等)。
4.7.操作Hadoop集群
完成所有必要的配置后,将文件分发到所有计算机上的HADOOP_CONF_DIR目录。 在所有计算机上,该目录应该是相同的目录。
通常,建议HDFS和YARN以单独的用户身份运行。 在大多数安装中,HDFS进程以“hdfs”的身份执行。 YARN通常使用的是“yarn”帐户。
4.7.1.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启动HDFS DataNode:
[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
运行脚本以在每个指定的主机上以yarn形式启动NodeManager:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start nodemanager
启动独立的WebAppProxy服务器。 以yarn的形式在WebAppProxy服务器上运行。 如果将多个服务器用于负载平衡,则应在每个服务器上运行该服务器:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver
如果配置了etc/hadoop/workers和ssh信任访问权限(请参阅单节点设置),则可以使用实用程序脚本启动所有YARN进程。 作为yarn:
[yarn]$ $HADOOP_HOME/sbin/start-yarn.sh
使用以下命令启动MapReduce JobHistory服务器,以mapred在指定服务器上运行:
[mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver
4.7.2.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
运行脚本以停止NodeManager在一个工人(worker) 以yarn身份运行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop nodemanager
如果配置了etc/hadoop/workers和ssh信任访问权限(请参阅单节点设置),则可以使用实用程序脚本停止所有YARN进程。 作为yarn:
[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh
停止WebAppProxy服务器。 以yarn的形式在WebAppProxy服务器上运行。 如果将多个服务器用于负载平衡,则应在每个服务器上运行该服务器:
[yarn]$ $HADOOP_HOME/bin/yarn stop proxyserver
使用以下命令停止MapReduce JobHistory Server,以mapred在指定服务器上运行:
[mapred]$ $HADOOP_HOME/bin/mapred --daemon stop historyserver
4.8.Web Interfaces
Hadoop集群启动并运行后,如下所述检查组件的Web UI:
Daemon | Web Interface | Notes |
---|---|---|
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. |