本文固定链接:https://www.askmac.cn/archives/hadoop-cluster-installation.html
此文是官方文档翻译,原文链接:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html
1.目的
这个文档描述了如何安装和配置hadoop集群,从小范围节点拓展到上千个节点。要玩hadoop,你先要再单机上安装上它(参考单机安装hadoop)
2.先决条件:
- 安装JAVA
- 从apache镜像上下载稳定的hadoop版本
3.安装:
安装一个hadoop集群,通常是在集群内所有集群上解压软件,或者根据你的操作系统通过包系统来安装。重点是在于分配硬件的功能。
通常在集群中一个集群被指定为NameNode,另外一个集群作为资源管理器,唯一地。这些都是主要的机器。其他的服务(例如WEB app 代理服务器和 mapreduce 任务历史服务器)通常根据负载,运行在专有的硬件模块上或共享基础。
其余的在集群中的机器,充当数据节点(DataNode)和节点管理者(NodeManager)。这些都是从属的。
4.在非安全模式下配置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 etc/hadoop/yarn-env.sh特定参数的值来控制hadoop查找bin/ 路径下的脚本。
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 | 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 |
例如,配置Name节点使用parallelGC,应该在hadoop-env.sh中添加
export HADOOP_NAMENODE_OPTS=”-XX:+UseParallelGC” |
对于其他的例子都可以参考 hadoop-env.sh
你可以配置其他有用的参数如下:
- HADOOP_PID_DIR – 这个目录是后台进程ID文件存储的位置。
- HADOOP_LOG_DIR -这个目录是守护进程日志文件存储位置。如果日志文件不存在会自动创建。
- HADOOP_HEAPSIZE/YARN_HEAPSIZE -最大使用的heapsize大小,单位是MB。如果这个值被设置为1000,那么堆会被设置1000MB。这个是为守护进程配置堆大小的。默认情况下,这个值是1000.你可以分别对每一个后台进程配置值。
在大多数情况下,你需要指定HADOOP_PID_DIR和HADOOP_LOG_DIR目,录样,他们只能通过正在运行Hadoop守护进程的用户写的。否则会有潜在的符号链接攻击危险。
传统惯例是配置HADOOP_PREFIX 到系统的环境变量配置中。例如,一个简单的在/etc/profile.d的例子:
HADOOP_PREFIX=/path/to/hadoopexport HADOOP_PREFIX |
Daemon | Environment Variable |
ResourceManager | YARN_RESOURCEMANAGER_HEAPSIZE |
NodeManager | YARN_NODEMANAGER_HEAPSIZE |
WebAppProxy | YARN_PROXYSERVER_HEAPSIZE |
Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_HEAPSIZE |
4.2 配置守护进程
本节讨论在给定的配置文件中指定重要的参数:
- etc/hadoop/core-site.xml
Parameter | Value | note |
fs.defaultFS | NameNode URI | hdfs://host:port/ |
io.file.buffer.size | 131072 | 在SequenceFiles中读写buffer的大小 |
- etc/hadoop/hdfs-site.xml
为NameNode配置:
Parameter | Value | Notes |
dfs.namenode.name.dir | 一个本地文件系统路径,用来永久存储NameNode命名空间和事务日志 | 如果是一个逗号隔开的目录列表,那么名称表会复制到所有目录中,作为冗余。 |
dfs.hosts /dfs.hosts.exclude | 列出 被允许/被排除的DataNodes | 如果必要的话,使用这个文件来控制允许datanodes的列表 |
dfs.blocksize | 268435456 | 分布式文件系统块大小是256MB作为大文件系统 |
dfs.namenode.handler.count | 100 | 更多的NameNode服务器线程来处理从大量Datanodes来的RPCs。 |
–默认128M
- etc/hadoop/yan-site.xml
为ResourceManager和nodeManager配置:
Parameter | Value | Notes |
yarn.acl.enable | true /false | 是否启用ACLs 默认是false |
yarn.admin.acl | Admin ACL | 设置ACL管理员。ACLS是comma-separated-usersspacecomma-separated-groups特殊的指定*是任何人,指定空格是没有人访问 |
yarn.log-aggregation-enable | false | 配置是否开启日志聚合 |
为ResourceManager的配置:
参数 | 值 | 备注 |
yarn.resourcemanager.address | 客户端提交任务的host:port | 如果设置了,会覆盖在yarn.resourcemanager.hostname中的主机名设置 |
yarn.resourcemanager.scheduler.address | 应用主机通过调度获取资源的host:port | 如果设置了,会覆盖在yarn.resourcemanager.hostname中的主机名设置 |
yarn.resourcemanager.resource-tracker.address | nodeManagers的host:port | 如果设置了,会覆盖在yarn.resourcemanager.hostname中的主机名设置 |
yarn.resourcemanager.admin.address | 管理命令的 host:port | 如果设置了,会覆盖在yarn.resourcemanager.hostname中的主机名设置 |
yarn.resourcemanager.webapp.address | web-ui的 host:port | 如果设置了,会覆盖在yarn.resourcemanager.hostname中的主机名设置 |
yarn.resourcemanager.hostname | 主机名 | 一个单独主机名可以设置到所有yarn.resourcemanager*address 资源中。各个resourcemanager使用默认端口 |
yarn.resourcemanager.scheduler.class | 进程调度类别 | 建议是CapacityScheduler或FairScheduler。FifoScheduler |
yarn.scheduler.minimum-allocation-mb | 在Resource Manager中分配给各个容器请求的最小内存 | 单位是MB |
yarn.scheduler.maximum-allocation-mb | 在Resource Manager中分配给各个容器请求的最大内存 | 单位是MB |
yarn.resourcemanager.nodes.include-path/ yarn.resourcemanager.nodes.exclude-path | 允许/排除 NodeManager的列表 | 必要时,使用这个文件来控制访问nodeManager的列表 |
NodeManager 的配置:
参数 | 值 | 注释 |
yarn.nodemanager.resource.memory-mb | 可用物理内存大小MB | 定义允许nodemanager容器总共可用的资源 |
yarn.nodemanager.vmem-pmem-ratio | 在可以超出物理内存任务中最大虚拟内存使用比例 | 也是总的nodemanger能够使用虚拟内存处理任务的最大值 |
yarn.nodemanager.local-dirs | 中间数据写入本地文件系统的路径,以逗号分隔 | 多路径可以帮助拓展磁盘I/O |
yarn.nodemanager.log-dirs | 日志写入本地文件系统的路径,以逗号分隔 | 多路径可以帮助拓展磁盘I/O |
yarn.nodemanager.log.retain-seconds | 10800 | 如果日志聚合被禁用,那么是nodemanager上日志保留的默认时间(s) |
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 应用需要配置的洗牌服务 |
- 历史服务器配置(需要搬到别处)
参数 | 值 | 备注 |
yarn.log-aggregation.retain-seconds | -1 | 聚合日志在保留多久后删除,-1是禁用。注意设置太小的话名称节点会滥发邮件 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 检查汇总日志保留时间之间的时间。如果设置为0或负值,则计算为十分之一的聚合日志保留时间。要小心,设置太小的话名称节点会滥发邮件。 |
- etc/hadoop/mapred-site.xml
MapReduce 应用的配置:
参数 | 值 | 备注 |
mapreduce.framework.name | yarn | 执行框架设置为YARN |
mapreduce.map.memory.mb | 1536 | 为maps设置最大资源限制 |
mapreduce.map.java.opts | -Xmx1024M | maps的子jvms的最大堆大小 |
mapreduce.reduce.memory.mb | 3072 | reduces最大资源限制 |
mapreduce.reduce.java.opts | -Xmx2560M | reduces的子jvms的最大堆大小 |
mapreduce.task.io.sort.mb | 512 | 为了性能限制数据排序使用的最大内存 |
mapreduce.task.io.sort.factor | 100 | 在排序文件时更多流进行合并 |
mapreduce.reduce.shuffle.parallelcopies | 50 | 通过reduces从大量数目maps中获得输出的最大并行副本的数目 |
- 配置mapreduce任务历史服务器:
参数 | 值 | 注释 |
mapreduce.jobhistory.address | 服务器的host:port | 默认是10020 |
mapreduce.jobhistory.webapp.address | Web-UI的host:port | 默认是19888 |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | mapreduce任务写入的历史文件路径 |
mapreduce.jobhistory.done-dir | /mr-history/done | MR任务历史服务器管理的历史文件的路径 |
5.监控NodeManagers的健康
hadoop提供了一个机制–管理员可以配置 NodeManager运行一个管理员提供的脚本来定期的确定节点是否健康。
管理源可以通过执行任何检查选项的脚本,来确定节点的健康。如果脚本检查到节点处于不健康的状态,它必须打印一行以ERROR开头的字符串到标准输出。NodeManager定义去执行脚本然后检查其输出。如果脚本的输出包含ERROR的字符串,同上所述,这个节点的状态被报告为unhealthy,这个节点被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.script.interval-ms | 节点健康脚本间隔 | 运行脚本的时间间隔 |
yarn.nodemanager.health-checker.script.timeout-ms | 节点健康脚本超时间隔 | 脚本执行超时时间 |
如果仅仅是一些本地磁盘损坏,健康检查脚本是不应该给出ERROR的。NodeManager有能力来定期检查本地磁盘的健康(特别的去检查nodemanager-local-dirs 和nodemanager-log-dirs),并且在达到了基于yarn配置属性中设置的坏目录的阀值之后。disk-health-checker.min-healthy-disks,整个节点会被标记为不健康,整个消息也会发送到资源管理器。引导盘在启动盘上检查或是一个故障是由健康检查脚本确定。
6.从属文件
在etc/hadoop/slaves中列出所有从属主机名或者IP地址,一个一行。帮助脚本(以下描述)将会使用etc/hadoop/slaves来在许多主机上立刻运行命令。它不是用于任何基于JAVA的Hadoop配置。为了使用此功能,ssh信任(或者通过其他ssh无密码手段,例如Kerberos)必须在运行Hadoop的用户上建立好。
7.Hadoop 构架
很多Hadoop组件是rack-aware,利用网络拓扑结构来提升性能和安全性。Hadoop后台进程通过调用管理员配置模块来获得,集群中从属的构架信息。可以参考构架文档来获得更多特定的信息。
8.日志
Hadoop 使用APACHE log4j 通过APACHE普通日志框架来记录日志。编辑etc/hadoop/log4j.properties来自定义Hadoop 后台的日志配置(日志格式等等)
9.操作Hadoop集群
一旦完成所有必要的配置,在所有集群上分配文件到HADOOP_CONF_DIR。这应该是所有机器的相同目录。
一般来说,建议运行HDFS和YARN使用单独的用户。在大多数安装上,HDFS进程以’hdfs’执行,YARN通常使用’yarn’用户。
9.1 启动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 he SSH 信任访问被配置(参考单节点安装),所有HDFS进程可以被一个功能脚本开启。作为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/start-dfs.sh |
在特定的ResourceManager 上运行下列命令来开启YARN 。作为yarn:
[yarn]$ $HADOOP_PREFIX/sbin/yarn-daemon.sh –config $HADOOP_CONF_DIR start resourcemanager |
运行一个脚本在每个指定的机器上开启一个NodeManager 。作为yarn:
[yarn]$ $HADOOP_PREFIX/sbin/yarn-daemons.sh –config $HADOOP_CONF_DIR start nodemanager |
单独启动一个WebAppProxy。运行WebAppProxy服务器。作为yarn。如果使用多个服务器来进行负载均衡的话,需要在每个机器上运行:
[yarn]$ $HADOOP_PREFIX/sbin/yarn-daemon.sh –config $HADOOP_CONF_DIR start proxyserver |
如果etc/hadoop/slaves he SSH 信任访问被配置(参考单节点安装),所有YARN进程可以被一个功能脚本开启。作为yarn:
[yarn]$ $HADOOP_PREFIX/sbin/start-yarn.sh |
开启MapReduce 任务历史服务器 使用下列命令,在指定服务器上运行,作为mapred:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh –config $HADOOP_CONF_DIR start historyserver |
9.2 关闭Hadoop
在指定 NameNode节点上作为hdfs运行下列命令来关闭NameNode:
[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 he SSH 信任访问被配置(参考单节点安装),所有HDFS进程可以被一个功能脚本关闭。作为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/stop-dfs.sh |
在指定的机器上作为yarn 运行下列命令关闭ResourceManager:
[yarn]$ $HADOOP_PREFIX /sbin/yarn-daemon.sh –config $HADOOP_CONF_DIR stop resourcemanager |
运行一个脚本来关闭NodeManager 在一个从属上 作为yarn:
[yarn]$ $HADOOP_PREFIX/sbin/yarn-daemons.sh –config $HADOOP_CONF_DIR stop nodemanager |
如果etc/hadoop/slaves he SSH 信任访问被配置(参考单节点安装),所有YARN进程可以被一个功能脚本关闭。作为yarn:
[yarn]$ $HADOOP_PREFIX/sbin/stop-yarn.sh |
关闭WebAppProxy。运行WebAppProxy服务器。作为yarn。如果使用多个服务器来进行负载均衡的话,需要在每个机器上运行:
[yarn]$ $HADOOP_PREFIX /sbin/yarn-daemon.sh –config $HADOOP_CONF_DIR stop proxyserver |
关闭MapReduce 任务历史服务器 使用下列命令,在指定服务器上运行,作为mapred:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh –config $HADOOP_CONF_DIR stop historyserver |
10. Web 接口
一旦hadoop集群启动,可以从下列描述的web-ui组件来进行检查:
守护进程 | web 接口 | 备注 |
NameNode | http://nn_host:port/ | 50070 |
ResourceManager | http://rm_host:port/ | 8088 |
MaReduce JobHistory Server | http://jhs_host:port/ | 19888 |
Leave a Reply