本文主要是介绍Hadoop 下一代 MapReduce - 集群参数设置与启动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文地址:http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/ClusterSetup.html
- 一 目的
- 二 先决条件
- 三 安装
- 四 运行 Hadoop Non-Secure 模式
- 1 配置 Hadoop 守护进程的运行环境
- 2 配置非安全模式下的 Hadoop 进程
- 五 Hadoop 的机架感知
- 六 监控 NodeManagers 健康情况
- 七 Slaves 文件
- 八 日志
- 九 操作 Hadoop 集群
- 1 Hadoop 启动
- 2 Hadoop 关闭
- 十 操作 Hadoop 集群
- 1 Hadoop 启动
- 2 Hadoop 关闭
- 十一 网页接口
一. 目的
本文描述了如何安装、配置和管理有实际意义的 Hadoop 集群,其规模可从几个节点的小集群到几千个节点的超大集群。如果你希望在单机上安装 Hadoop 玩玩,从这里能找到相关细节。 (see Single Node Setup).
二. 先决条件
从 Apache 镜像中下载一个稳定的 Hadoop 版本
三. 安装
安装 Hadoop 集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为 ResourceManager。这些机器是 masters。余下的机器即作为 DataNode 也作为 NodeManager。这些机器是 slaves。
我们用 HADOOP_HOME
指代安装的根路径。通常,集群里的所有机器的 HADOOP_HOME
路径相同。
四. 运行 Hadoop Non-Secure 模式
接下来的几节描述了如何配置Hadoop集群。
1. 配置文件
对 Hadoop 的配置通过 conf/
目录下的两个重要配置文件完成:
- 只读的默认配置: core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml
- 集群特有的配置: conf/core-site.xml, conf/hdfs-site.xml, conf/yarn-site.xml and conf/mapred-site.xml
要了解更多关于这些配置文件如何影响 Hadoop 框架的细节,请看这里。
此外,通过设置 conf/hadoop-env.sh
和 yarn-env.sh
中的变量为集群特有的值,你可以对 bin/
目录下的 Hadoop 脚本进行控制
2. 集群配置
要配置 Hadoop 集群,你需要设置 Hadoop 守护进程的运行环境和 Hadoop 守护进程的运行参数。Hadoop 守护进程指 NameNode/DataNode 和ResourceManager/NodeManager。
4.1 配置 Hadoop 守护进程的运行环境
管理员可在 conf/hadoop-env.sh
和 conf/yarn-env.sh
脚本内对 Hadoop 守护进程的运行环境做特别指定。
至少,你得设定 JAVA_HOME
使之在每一远端节点上都被正确设置。
Administrators can configure individual daemons using the configuration options shown below in the table:
在大部分情况下,你可以应该指定 HADOOP_PID_DIR
和 HADOOP_SECURE_DN_PID_DIR
来指出仅可以被用户进行写操作的目录。否则会潜在的 symlink 攻击。
管理员可以通过配置选项来分别配置各个守护进程。 下表是可以配置的选项。
进程 | 环境变量 |
---|---|
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 |
例如,配置 Namenode 时,为了使其能够并行回收垃圾(parallelGC), 要把下面的代码加入到 hadoop-env.sh :
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"
其它可定制的常用参数还包括:
HADOOP_LOG_DIR / YARN_LOG_DIR
: 守护进程日志文件的存放目录。如果不存在会被自动创建。- HADOOP_HEAPSIZE / YARN_HEAPSIZE : 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置 hadoop 守护进程的堆大小。缺省大小是 1000MB。
进程 | 环境变量 |
---|---|
ResourceManager | YARN_RESOURCEMANAGER_HEAPSIZE |
NodeManager | YARN_NODEMANAGER_HEAPSIZE |
WebAppProxy | YARN_PROXYSERVER_HEAPSIZE |
Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_HEAPSIZE |
4.2 配置非安全模式下的 Hadoop 进程
这部分涉及 Hadoop 集群的重要参数,这些参数在给定的配置文件中指定。
1. conf/core-site.xml
参数 | 值 | 注意事项 |
---|---|---|
fs.defaultFS | NameNode URI | hdfs://host:port/ |
io.file.buffer.size | 131072 | SequenceFiles 文件中.读写缓存 size 设定 |
2. conf/hdfs-site.xml
- 配置 NameNode
参数 | 值 | 注意事项 |
---|---|---|
dfs.namenode.name.dir | 在本地文件系统所在的 NameNode 的存储空间和持续化处理日志 | 如果这是一个以逗号分隔的目录列表,然后将名称表被复制的所有目录,以备不时之需 |
dfs.namenode.hosts / dfs.namenode.hosts.exclude | DataNodes permitted/excluded列表 | 如有必要,可以使用这些文件来控制允许数据节点的列表 |
dfs.blocksize | 268435456 | 大型的文件系统HDFS块大小为 256MB |
dfs.namenode.handler.count | 100 | 设置更多的 NameNode线程,处理从 DataNode 发出的大量 RPC 请求 |
- 配置 DataNode
参数 | 值 | 注意事项 |
---|---|---|
dfs.datanode.data.dir | 逗号分隔的一个 DataNode 上,它应该保存它的块的本地文件系统的路径列表 | 如果这是一个以逗号分隔的目录列表,那么数据将被存储在所有命名的目录,通常在不同的设备 |
3. conf/yarn-site.xml
- 配置 ResourceManager 和 NodeManager
参数 | 值 | 注意事项 |
---|---|---|
arn.acl.enable | true / false | 启用ACL的?默认为false |
yarn.admin.acl | Admin ACL | 访问控制列表,在群集上设置管理员。 ACL 是为逗号分隔usersspacecomma 分隔组。默认为 * 特殊值这意味着任何人。只是空间的特殊值意味着没有人进入 |
yarn.log-aggregation-enable | false | 配置来启用或禁用日志聚合 |
- 配置 ResourceManager
参数 | 值 | 注意事项 |
---|---|---|
yarn.resourcemanager.address | 客户端对 ResourceManager 主机通过 host:port 提交作业 | host:port If set, overrides the hostname set in yarn.resourcemanager.hostname |
yarn.resourcemanager.scheduler.address | ApplicationMasters 通过 ResourceManager 主机访问host:port 跟踪调度程序获资源 | host:port If set, overrides the hostname set in yarn.resourcemanager.hostname |
yarn.resourcemanager.resource-tracker.address | NodeManagers 通过 ResourceManager 主机访问 host:port | host:port If set, overrides the hostname set in yarn.resourcemanager.hostname |
yarn.resourcemanager.admin.address | 管理命令通过ResourceManager 主机访问host:port | host:port If set, overrides the hostname set in yarn.resourcemanager.hostname |
yarn.resourcemanager.webapp.address | RResourceManager web 页面 host:port | host:port If set, overrides the hostname set in yarn.resourcemanager.hostname |
yarn.resourcemanager.hostname | ResourceManager 主机名 | host Single hostname that can be set in place of setting all yarn.resourcemanager*address resources. Results in default ports for ResourceManager components. |
yarn.resourcemanager.scheduler.class | ResourceManager 调度类(Scheduler class) | CapacityScheduler(推荐),FairScheduler(也推荐),orFifoScheduler |
yarn.scheduler.minimum-allocation-mb | 每个容器内存最低限额分配到的资源管理器要求 | 以MB为单位 |
yarn.scheduler.maximum-allocation-mb | 资源管理器分配给每个容器的内存最大限制 | 以MB为单位 |
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path | NodeManagers 的 permitted/excluded 列表 | 如有必要,可使用这些文件来控制允许NodeManagers列表 |
- 配置给 NodeManager
参数 | 值 | 注意事项 |
---|---|---|
yarn.nodemanager.resource.memory-mb | 给定 NodeManager 资源的可用物理内存,以MB为单位 | 定义在节点管理器总的可用资源,以提供给运行容器 |
yarn.nodemanager.vmem-pmem-ratio | 最大比率为一些任务的虚拟内存使用量可能会超过物理内存率 | 每个任务的虚拟内存的使用可以通过这个比例超过了物理内存的限制。虚拟内存的使用上的节点管理器任务的总量可以通过这个比率超过其物理内存的使用 |
yarn.nodemanager.local-dirs | 数据写入本地文件系统路径的列表用逗号分隔 | 多条存储路径可以提高磁盘的读写速度 |
yarn.nodemanager.log-dirs | 本地文件系统日志路径的列表逗号分隔 | 多条存储路径可以提高磁盘的读写速度 |
yarn.nodemanager.log.retain-seconds | 10800 | 如果日志聚合被禁用。默认的时间(以秒为单位)保留在节点管理器只适用日志文件 |
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 | Shuffle service 需要加以设置的 Map Reduce 的应用程序服务 |
- 配置给 History Server (需要移动到其他地方)
参数 | 值 | 注意事项 |
---|---|---|
yarn.log-aggregation.retain-seconds | -1 | 如何长期保持聚集日志删除之前。 -1禁用。请注意,设置这个太小了,你将向 namenode 节点发送垃圾邮件 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 检查汇总的日志保留的时间。如果设置为0或负值,则该值被计算为十分之一的聚合日志保留时间。请注意,设置这个太小了,你将向 namenode 节点发送垃圾邮件 |
4. conf/mapred-site.xml
- Configurations for MapReduce Applications
参数 | 值 | 注意事项 |
---|---|---|
mapreduce.framework.name | yarn | 执行框架设置为 Hadoop YARN |
mapreduce.map.memory.mb | 1536 | 对maps更大的资源限制的 |
mapreduce.map.java.opts | -Xmx1024M | maps 中对 jvm child 设置更大的堆大小 |
mapreduce.reduce.memory.mb | 3072 | 设置 reduces对于较大的资源限制 |
mapreduce.reduce.java.opts | -Xmx2560M | reduces对 child jvms Larger heap-size 设置 |
mapreduce.task.io.sort.mb | 512 | 更高的内存限制,而对数据进行排序的效率 |
mapreduce.task.io.sort.factor | 100 | 在文件排序中更多的流合并为一次 |
mapreduce.reduce.shuffle.parallelcopies | 50 | 通过 reduces 从非常多的 map 中读取较多的平行副本 |
- Configurations for MapReduce JobHistory Server
参数 | 值 | 注意事项 |
---|---|---|
mapreduce.jobhistory.address | MapReduce JobHistory Server host:port | 默认端口号 10020 |
mapreduce.jobhistory.webapp.address | MapReduce JobHistory Server Web UI host:port | 默认端口号 19888 |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | Directory where history files are written by MapReduce jobs. 由 MapReduce 作业所写入历史文件的目录 |
mapreduce.jobhistory.done-dir | /mr-history/done | Directory where history files are managed by the MR JobHistory Server. 由 MR JobHistory Server 管理历史文件所在的目录 |
五. Hadoop 的机架感知
HDFS 和 Map/Reduce
的组件是能够感知机架的。
NameNode 和 ResourceManager 通过调用管理员配置模块中的 API resolve 来获取集群里每个 slave 的机架 id。
该 API 将 slave 的 DNS 名称(或者IP地址)转换成机架 id。
使用哪个模块是通过配置项 topology.node.switch.mapping.impl 来指定的。模块的默认实现会调用 topology.script.file.name 配置项指定的一个的脚本/命令。 如果 topology.script.file.name 未被设置,对于所有传入的 IP 地址,模块会返回 /default-rack
作为机架 id。
六. 监控 NodeManagers 健康情况
Hadoop 提供了哪些管理员可以配置节点管理器来定期运行管理员提供的脚本,以确定如果一个节点是正常运行与否的机制。
管理员可以执行他们所选择的检查脚本判断该节点是否处于正常运行状态通过。如果脚本检测该节点是在一个不能正常运行的状态,它必须打印一行到标准输出的字符串错误。该节点管理器周期性地产卵的脚本,并检查其输出。如果脚本的输出包含字符串错误,如上文所述,节点的状态报告为节点错误和节点加入 ResourceManager 黑名单中。没有进一步的任务将被分配到该节点。然而,节点管理器继续运行脚本。如果该节点再次变得可以正常运行,它将被从上 ResourceManager 中的黑名单中的节点自动删除。随着该脚本的输出节点的正常,如果是不正常的节点的,是提供给管理员位于 ResourceManager web 界面。因为节点是正常的时间也显示在 Web 界面上。
下面的参数可以用来控制 conf /yarn-site.xml
节点正常运行监测脚本。
参数 | 值 | 注意事项 |
---|---|---|
yarn.nodemanager.health-checker.script.path | Node health script | 检查节点健康状态的脚本 |
yarn.nodemanager.health-checker.script.opts | Node health script options | 检查节点的健康状态脚本选项 |
yarn.nodemanager.health-checker.script.interval-ms | Node health script interval | 运行健康脚本的时间间隔 |
yarn.nodemanager.health-checker.script.timeout-ms | Node health script timeout interval | 健康脚本的执行超时时间 |
如果只在本地磁盘的一些变差,健康检查脚本不支持发送错误的。节点管理器必须定期检查本地磁盘(特别检查节点管理器 - 本地显示目录和节点管理器日志 - 显示目录)的健康的能力和深远的基础上对配置属性 yarn.nodemanager 设置的值坏目录数的阈值,磁盘健康 checker.min - 健康 - 磁盘,整个节点被标记为不健康的,这个信息被发送到资源管理器也。将启动盘或者搜查或引导磁盘故障是由健康检查脚本识别。
七. Slaves 文件
通常情况下你选择一台机器的集群中充当的 NameNode 和一体机作为充当 ResourceManager 中,专门。机器的其余部分作为既是一个的 DataNode 和节点管理器和被称为 slave。
列出你的 conf /slave 文件,每行一个所有从主机名或 IP 地址。
八. 日志
Hadoop 的使用 Apache log4j 的通过 Apache 共享日志框架记录。编辑 conf/log4j.properties 文件自定义的 Hadoop 守护进程的日志记录配置(日志格式等)。
九. 操作 Hadoop 集群
一旦所有的必须配置文件都完成了,就分发文件到所有机器上的 HADOOP_CONF_DIR
路径的目录下
9.1 Hadoop 启动
为了启动 Hadoop 集群,你需要启动 HDFS 和 YARN 集群。
1. 格式化一个新的分布式文件系统
$HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>
2. 用以下命令启动 HDFS ,运行在指定的 NameNode
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode
3. 在所有的 slave 上运行以下脚本来启动 DataNode
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start datanode
4. 使用以下命名来启动 YARN ,运行在指定的 ResourceManager
$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager
5. 在所有的 slave 上运行以下脚本来启动 NodeManagers
$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start nodemanager
6. 启动 standalone WebAppProxy 服务器
如果多个服务器被用于负载均衡,那么它应该都运行在这些服务器上
$HADOOP_YARN_HOME/sbin/yarn-daemon.sh start proxyserver --config $HADOOP_CONF_DIR
7. 使用以下命令来启动 MapReduce JobHistory,运行在指定的服务器上
$HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh start historyserver --config $HADOOP_CONF_DIR
9.2 Hadoop 关闭
Stop the NameNode with the following command, run on the designated NameNode:
1. 使用以下命令来停止 NameNode,运行在指定的 NameNode 上
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
2. 在所有的 slave 上运行脚本来停止 DataNode
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode
3. 使用以下命名来停止 ResourceManager ,运行在指定的 ResourceManager
$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager
4. 在所有的 slave 上运行脚本停止 NodeManagers
$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager
5. 关闭 standalone WebAppProxy 服务器
如果多个服务器被用于负载均衡,那么它应该都运行在这些服务器上
$HADOOP_YARN_HOME/sbin/yarn-daemon.sh stop proxyserver --config $HADOOP_CONF_DIR
6. 使用以下命令来关闭 MapReduce JobHistory,运行在指定的服务器上
$HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh stop historyserver --config $HADOOP_CONF_DIR
十. 操作 Hadoop 集群
一旦所有的必须配置文件都完成了,就分发文件到所有机器上的 HADOOP_CONF_DIR
路径的目录下
本章节同样也描述了不同 Unix 用户启动不同组件和之前使用相同的 Unix 账号和用户组:
10.1 Hadoop 启动
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 variable HADOOP_SECURE_DN_USER set to hdfs:
[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 as yarn:
[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 as mapred:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh start historyserver --config $HADOOP_CONF_DIR
10.2 Hadoop 关闭
Stop the NameNode with the following command, run on the designated NameNode as hdfs:
[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 as yarn:
[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 as mapred:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh stop historyserver --config $HADOOP_CONF_DIR
十一. 网页接口
一旦 Hadoop 集群已经启动并运行检查以下描述组件的网页界面:
进程 | 网页接口 | 注意事项 |
---|---|---|
NameNode | http://nn_host:port/ | 默认http端口号 50070 |
ResourceManager | http://rm_host:port/ | 默认http端口号 8088 |
MapReduce JobHistory Server | http://jhs_host:port/ | 默认http端口号19888 |
这篇关于Hadoop 下一代 MapReduce - 集群参数设置与启动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!