hadoop 集群安装

本文固定链接: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

 


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *