搭建一个Hadoop集群

目录

 

1. 目的

2. 安装和配置

2.1 配置Hadoop守护进程的运行环境

2.2 配置Hadoop各守护进程

2.2.1 etc/hadoop/core-site.xml

2.2.2 etc/hadoop/hdfs-site.xml

2.2.3 etc/hadoop/yarn-site.xml

2.2.4 etc/hadoop/mapred-site.xml

2.3 监控NodeManager的健康状况

2.4 从属文件

2.5 Hadoop的机架感知

2.6 日志

3. 操作Hadoop集群

3.1 启动Hadoop

3.2 关闭Hadoop

4. Web接口


1. 目的

本篇将详细介绍如何在几个节点乃至成百上千个节点上搭建和配置Hadoop集群。还未接触过Hadoop的朋友可参考上一篇博文的介绍,先尝试部署和使用单节点Hadoop。

本篇不讨论诸如安全或者高可用一类的更高层次话题。

关于JDK与Hadoop的兼容版本问题,镜像下载等问题,也请参考上一篇博文的介绍。

2. 安装和配置

理论上,我们需在所有安装节点上解压Hadoop软件包并进行安装(当然也可以写脚本进行批量上传和远程解压、安装)。集群中的一个节点会被选中并设置为NameNode,而ResourceManager则被部署在被选中的另一个节点上。这两个节点即为master。其他服务(如应用代理Web端服务,MapReduce任务历史信息服务)通常可以在专用硬件或者共享基础设施上运行,具体取决于负载。master以外的其它节点将扮演DataNode和NodeManager的角色,它们都是worker。

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

此外,还可以在etc/hadoop/hadoop-env.sh和etc/hadoop/yarn-env.sh中设置特定值,作为传递给bin/ 目录下Hadoop脚本的运行参数。

配置Hadoop集群即是配置Hadoop守护进程的运行环境和运行参数。

HDFS的守护进程包括NameNode, SecondaryNameNode和DataNode。

YARN的守护进程则包括ResourceManager, NodeManager和WebAppProxy。如果使用MapReduce,那么MapReduce Job History Server也必须运行,对于大型集群而言,它们通常运行在不同的主机上。

2.1 配置Hadoop守护进程的运行环境

管理员通过在以下脚本中的一个或多个中设置特定参数的值,来完成对Hadoop守护进程运行环境的配置:

① etc/hadoop/hadoop-env.sh

② etc/hadoop/mapred-env.sh

③ etc/hadoop/yarn-env.sh

必须指定JAVA_HOME,以便在每个远程节点上正确地定义之。

管理员可以使用表中所示的配置选项配置各个守护进程:

进程

环境变量

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的jvm使用parallelGC 垃圾回收机制,4GB的堆内存,可以在hadoop-env.sh脚本中追加以下语句:

export HDFS_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx4g"

在大多数情况下,应该指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录,以便它们只能由将要运行hadoop守护进程的用户写入。否则可能会出现符号链接攻击。

在系统范围的shell环境配置中配置HADOOP_HOME也是一种传统做法(即配置环境变量)。例如:

HADOOP_HOME=/path/to/hadoop
export HADOOP_HOME

2.2 配置Hadoop各守护进程

2.2.1 etc/hadoop/core-site.xml

参数说明
fs.defaultFSNameNode URIhdfs://host:port/
io.file.buffer.size131072顺序文件中使用的读/写缓冲区的大小。

 

2.2.2 etc/hadoop/hdfs-site.xml

NameNode的相关配置

参数说明
dfs.namenode.name.dirNameNode持久存储名称空间和事务日志的本地文件系统上的路径。

如果是一个以逗号分隔的目录列表,为了冗余,内容将被复制到所有目录中

dfs.hosts / dfs.hosts.exclude允许/不允许的DataNodes列表

必要情况下,使用这些文件来控制允许的DataNode列表。

dfs.blocksize268435456

HDFS 数据块大小为256MB

dfs.namenode.handler.count100

更多NameNode服务器线程处理大量DataNode中的rpc。

DataNode相关配置

参数说明
dfs.datanode.data.dir

DataNode的本地文件系统上存储其数据块的路径列表,以逗号分隔。

如果这是一个以逗号分隔的目录列表,那么数据将存储在所有命名目录中(通常在不同的设备上)。

2.2.3 etc/hadoop/yarn-site.xml

ResourceManager和NodeManager的相关配置

参数说明
yarn.acl.enabletrue / false是否开启ACLs? 默认值是false
yarn.admin.aclAdmin ACL

ACL用于在集群上设置管理员。ACL之间通过逗号分割,注明的组则与用户之间通过空格分割(形如:user1 group1, user2 group2)。默认值为*,表示任何人。特殊值空格意味着没有人可以访问。

yarn.log-aggregation-enablefalse是否开启日志收集

ResourceManager相关详细配置

参数说明
yarn.resourcemanager.address

为客户端提交作业指明ResourceManager地址

如何设置, 将覆盖在yarn.resourcemanager.hostname中配置的主机名

yarn.resourcemanager.scheduler.address为应用程序与调度程序通信并获得资源指明ResourceManager地址

如果设置,将覆盖yarn.resourcemanager.hostname中配置的主机名

yarn.resourcemanager.resource-tracker.address为NodeManager指明ResourceManager地址如果设置,将覆盖yarn.resourcemanager.hostname中配置的主机名
yarn.resourcemanager.admin.address为管理员执行命令指明ResourceManager地址

如果设置,将覆盖yarn.resourcemanager.hostname中配置的主机名

yarn.resourcemanager.webapp.address为web-ui指明ResourceManager地址

如果设置,将覆盖yarn.resourcemanager.hostname中配置的主机名

yarn.resourcemanager.hostnameResourceManager 主机名

主机名

yarn.resourcemanager.scheduler.classResourceManager 调度类CapacityScheduler (推荐), FairScheduler (推荐), 或者 FifoScheduler. 使用完整的类名, 如:org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler.
yarn.scheduler.minimum-allocation-mb

在资源管理器上分配给每个容器请求的最小内存限制。

单位为:MB
yarn.scheduler.maximum-allocation-mb在资源管理器上分配给每个容器请求的最大内存限制。单位为:MB
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path

List of permitted/excluded NodeManagers.

被允许使用/被排除的NodeManager列表

必要时,使用这些文件来控制允许的NodeManager列表。

NodeManager相关详细配置

参数说明
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-seconds10800

在NodeManager上保留日志生成文件的默认时间间隔(以秒为单位),仅适用于禁用日志聚合的情况。

yarn.nodemanager.remote-app-log-dir/logs

应用程序完成时,移动并另存应用程序日志的HDFS目录,需要设置适当的权限。仅在启用日志聚合时适用。

yarn.nodemanager.remote-app-log-dir-suffixlogs

附加到远程日志目录的后缀。日志将被聚合为:${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam},仅适用于启用日志聚合的情况。

yarn.nodemanager.aux-servicesmapreduce_shuffle应用需要设置Shuffle服务
yarn.nodemanager.env-whitelist

容器从NodeManager继承的环境属性

对于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相关配置

参数说明
yarn.log-aggregation.retain-seconds-1

指定删除聚合日志前的保存时间,-1表示不可用,注意,如果设置得过小,将会造成名称节点收取到过多垃圾邮件

yarn.log-aggregation.retain-check-interval-seconds-1

聚合日志保留检查的时间间隔,如果设置为0或者一个负数,这个数将以聚合日志保留时间的十分之一计。注意,如果设置得过小,将会造成名称节点收取到过多垃圾邮件

2.2.4 etc/hadoop/mapred-site.xml

MapReduce相关配置

参数说明
mapreduce.framework.nameyarn

执行框架设置为Hadoop YARN

mapreduce.map.memory.mb1536

map的资源大小(以MB为单位)

mapreduce.map.java.opts-Xmx1024M

map的子jvm堆内存大小(以MB为单位)

mapreduce.reduce.memory.mb3072

reduce的资源大小(以MB为单位)

mapreduce.reduce.java.opts-Xmx2560M

reduce的子jvm堆内存大小(以MB为单位)

mapreduce.task.io.sort.mb512

实现数据高效率排序的内存大小

mapreduce.task.io.sort.factor100

对文件进行排序时的合并流数量

mapreduce.reduce.shuffle.parallelcopies50

从大量map中抓取输出文件的reduce个数

MapReduce JobHistory Server相关配置

参数说明
mapreduce.jobhistory.addressMapReduce JobHistory Server 主机:端口默认端口10020
mapreduce.jobhistory.webapp.addressMapReduce JobHistory Server Web UI 主机:端口默认端口19888
mapreduce.jobhistory.intermediate-done-dir/mr-history/tmpMapReduce作业历史文件临时写入目录
mapreduce.jobhistory.done-dir/mr-history/done

MR JobHistory Server管理历史文件的目录

2.3 监控NodeManager的健康状况

Hadoop提供了一种机制,管理员可以通过该机制配置NodeManager,然后周期性地运行管理员提供的脚本,用来确定节点是否健康。

管理员可以通过在脚本中执行他们选择的任何检查来确定节点是否处于正常状态。如果脚本检测到该节点处于异常状态,它将在标准输出中打印出一行以"ERROR"开头的信息。NodeManager定期生成脚本并检查其输出。如果脚本输出包含字符串“ERROR”,如上所述,该节点的异常状态将上报,然后这个节点将被ResourceManager拉入黑名单,接下来的task将不再分发到该节点。然而,NodeManager也将继续运行该脚本,直到此节点的状态再次恢复正常,将自动从黑名单中将其移除。如果节点不健康,管理员可以在ResourceManager web界面中使用该节点的运行状况以及脚本的输出。web界面上还显示了节点运行正常以来持续的时间。

以下参数可以在节点健康度监控脚本中起到作用(配置文件为:etc/hadoop/yarn-site.xml)

参数Notes
yarn.nodemanager.health-checker.script.path节点检查脚本

节点运行状况检查脚本

yarn.nodemanager.health-checker.script.opts节点检查脚本选项

用于检查节点运行状况状态的脚本选项

yarn.nodemanager.health-checker.interval-ms

节点检查脚本运行时间间隔

检查脚本的运行时间间隔,单位为ms

yarn.nodemanager.health-checker.script.timeout-ms

节点检查脚本超时时间

脚本执行超时时间,单位为ms

 

如果只是本地磁盘损坏,运行状况检查脚本不用报出ERROR,NodeManager能够定期检查本地磁盘的运行状况(特别是nodemanager-local-dirs 和nodemanager-log-dirs),然后根据配置属性yarn.nodemanager.disk-health-checker.min-health -disks设置的值,达到坏目录数量的阈值,所有节点将被标注为异常状态,这些信息也将被发送给ResourceManager,启动磁盘被攻击,或者运行状况检查脚本将标识启动磁盘中的故障。

2.4 从属文件

在etc/hadoop/workers中列出所有worker的主机名或ip地址,一行一个worker。助手脚本据此远程控制所有slave节点并一次性运行脚本命令,它不用于任何基于java的Hadoop配置。为了使用这项功能,必须为用于运行Hadoop的帐户建立ssh信任(通过无密码的ssh或其他方法,如Kerberos)。

2.5 Hadoop的机架感知

较多Hadoop组件是具备机架感知能力并充分利用网络拓扑来提高性能和安全性的。Hadoop的守护进程可以通过管理员配置模块,获取到集群中workers的机架信息(后期再推出详细介绍机架感知的博文)。

强烈建议在启动HDFS之前配置机架感知。

2.6 日志

Hadoop通过Apache Commons日志框架使用log4j记录日志,编辑etc/hadoop/log4j.properties配置Hadoop各守护进程的日志输出的格式等等

3. 操作Hadoop集群

当完成了所有必须配置项后,将文件分发到所有机器上的HADOOP_CONF_DIR目录。这应该是所有机器上的相同目录。

原则上,建议HDFS和YARN由各自的用户分别启动,在大多数部署过程中,HDFS进程由hdfs用户启动,YARN进程则由yarn用户启动。

3.1 启动Hadoop

启动Hadoop集群包括启动HDFS和YARN

首次使用HDFS时,需要以hdfs用户,对NameNode进行格式化:

$HADOOP_HOME/bin/hdfs namenode -format <cluster_name>

在指定节点以hdfs用户,启动HDFS NameNode:

$HADOOP_HOME/bin/hdfs --daemon start namenode

在每个指定节点上以hdfs用户,启动HDFS DataNode

$HADOOP_HOME/bin/hdfs --daemon start datanode

如果配置了etc/hadoop/workers和ssh通信信任,所有的HDFS进程可以以hdfs用户,通过一个实用的脚本进行启动

$HADOOP_HOME/sbin/start-dfs.sh

通过以下命令,以yarn用户,在指定的ResourceManager节点上启动YARN ResourceManager

$HADOOP_HOME/bin/yarn --daemon start resourcemanager

在每一台指定主机,以yarn用户,启动NodeManager

$HADOOP_HOME/bin/yarn --daemon start nodemanager

以yarn用户启动一个独立的WebAppProxy服务,如果使用多个服务器进行负载平衡,则应该在每个服务器上运行

$HADOOP_HOME/bin/yarn --daemon start proxyserver

如果配置了etc/hadoop/workers和ssh通信信任,所有的YARN进程可以以yarn用户通过一个实用的脚本进行启动

$HADOOP_HOME/sbin/start-yarn.sh

启动MapReduce JobHistory服务,在指定的服务器上以mapred用户运行

$HADOOP_HOME/bin/mapred --daemon start historyserver

3.2 关闭Hadoop

使用hdfs用户在指定NameNode节点停止NameNode进程

$HADOOP_HOME/bin/hdfs --daemon stop namenode

使用hdfs用户运行以下脚本停止DataNode进程

$HADOOP_HOME/bin/hdfs --daemon stop datanode

如果配置了etc/hadoop/workers和ssh通信信任,所有的HDFS进程可以使用hdfs用户通过一个实用的脚本进行停止

$HADOOP_HOME/sbin/stop-dfs.sh

以yarn用户在指定ResourceManager运行以下命令停止ResourceManager

$HADOOP_HOME/bin/yarn --daemon stop resourcemanager

以yarn用户在各worker节点停止NodeManager

$HADOOP_HOME/bin/yarn --daemon stop nodemanager

如果配置了etc/hadoop/workers和ssh通信信任,所有的YARN进程可以以yarn用户通过一个实用的脚本进行停止

$HADOOP_HOME/sbin/stop-yarn.sh

以yarn用户停止一个独立的WebAppProxy服务,如果使用多个服务器进行负载平衡,则应该在每个服务器上进行停止操作

$HADOOP_HOME/bin/yarn stop proxyserver

停止MapReduce JobHistory服务,在指定的服务器上以mapred用户运行

$HADOOP_HOME/bin/mapred --daemon stop historyserver

4. Web接口

Hadoop集群正常启动后,web端各组件的运行状态可通过以下连接进行查看

进程Web 接口说明
NameNodehttp://nn_host:port/默认的HTTP端口为:9870
ResourceManagerhttp://rm_host:port/默认的HTTP端口为:8088
MapReduce JobHistory Serverhttp://jhs_host:port/默认的HTTP端口为:19888
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值