Hadoop3.0集群配置

Posted 沛沛老爹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop3.0集群配置相关的知识,希望对你有一定的参考价值。

前言

本文主要是讲述如何在上千节点下的大规模集群的安装和配置。如果你只是想尝hadoop。你可以在单台机器上进行安装。(查看单例安装)

本文不涉及安全或高可用等方面的主题。

先决条件

  • 安装Java。想获java取匹配的hadoop版本详情查看Hadoop Wiki 
  • 从Apache的hadoop镜像上下载稳定的版本。

安装

Hadoop集群典型安装方式包括在所有的集群机器上解压软件或者从你的操作系统中通过安装包来安装它。这是一个硬件到功能的很重要的划分。

通常,集群中的一台机器被指定为NameNode,而另一台机器则被指定为ResourceManager。这些都是主。根据负载的情况,其他服务(如Web App Proxy服务和MapReduce Job History 服务)通常在专硬件或共享设备上运行。

集群中的其余机器同时充当DataNode和no需求者。这些都是工作者。

Hadoop的非安全模式下配置

Hadoop的Java配置驱动来源于重要的配置文件

只读的默认配置  - core-default.xmlhdfs-default.xmlyarn-default.xml  mapred-default.xml

特定站点配置 etc/hadoop/core-site.xmletc/hadoop/hdfs-site.xmletc/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 Job History Server也将运行。对于大规模的使用,它们通常运行在单独的主机上。

配置Hadoop守护进程的环境

后台管理员通过etc/hadoop/hadoop-env.sh和etc/hadoop/mapred-env.sh etc/hadoop/yarn-env.sh脚本对Hadoop守护进程的运行环境进行针对性的配置

最起码的一点,您必须指定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以使用parallelGC和4GB Java堆,应该在hadoop-env.sh中添加以下语句

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

See etc/hadoop/hadoop-env.sh for other examples.

etc/hadoop/hadoop-env.sh其他例子查看。

其他常用的配置参数包括:

HADOOP_PID_DIR –守护进程id文件的存储目录。

HADOOP_LOG_DIR -守护进程日志文件的存储目录。如果日志文件不存在,则自动创建。

HADOOP_HEAPSIZE_MAX - 用于Java heapsize的最大内存使用量. 还支持由JVM支持的单位设置。如果没有任何单位,则假定该数字的单位为M。默认情况下, Hadoop将让JVM决定使用多少内存。这个值可以被每个守护进程的_OPTS 变量覆写。例: 设置HADOOP_HEAPSIZE_MAX=1g  HADOOP_NAMENODE_OPTS="-Xmx5g" , NameNode将配置具有5GB堆。

在大多数情况下,您应该指定HADOOP_PID_DIR  HADOOP_LOG_DIR目录,这些目录只能由将要运行hadoop守护进程的用户有写的功能,否则的话可能会出现symlink攻击的情况。

在系统范围的shell环境配置中配置HADOOP_HOME也是一种传统。例如,一个简单的

/etc/profile.d脚本

HADOOP_HOME=/path/to/hadoop

export HADOOP_HOME

配置Hadoop守护进程

本节主要说明在常用的配置文件中的重要参数。

etc/hadoop/core-site.xml

参数

说明

fs.defaultFS

NameNode URI

hdfs://host:port/

io.file.buffer.size

131072

队列文件中的读/写缓冲区的大小。

etc/hadoop/hdfs-site.xml

NameNode配置:

参数

说明

dfs.namenode.name.dir

NameNode持久存储名称空间和事务日志的本地文件系统上路径

如果这是一个逗号分隔的目录列表,那么将在所有目录中复制名称的表,以进行冗余。

dfs.hosts / dfs.hosts.exclude

包含/摒弃的数据存储节点清单

如果有必要,使用这些文件来控制允许的数据存储节点列表

dfs.blocksize

268435456

HDFS 块大小为256MB 的大文件系统.

dfs.namenode.handler.count

100

多个NameNode服务器线程处理来自大量数据节点的rpc。

DataNode配置:

参数

说明

dfs.datanode.data.dir

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

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

etc/hadoop/yarn-site.xml

ResourceManager NodeManager配置:

参数

说明

yarn.acl.enable

true / false

允许ACLs? 默认 false.

yarn.admin.acl

Admin ACL

在集群上设置adminis。 ACLs are of for comma-separated-usersspacecomma-separated-groups.默认是指定值为*表示任何人。特别的是空格表示皆无权限。

yarn.log-aggregation-enable

false

Configuration to enable or disable log aggregation

配置是否允许日志聚合。

ResourceManager配置:

参数

说明

yarn.resourcemanager.address

ResourceManager host:port 用于客户端任务提交.

如果设置host:port ,将覆盖yarn.resourcemanager.hostname.

host:port主机名。

yarn.resourcemanager.scheduler.address

ResourceManager host:port 用于应用管理者向调度程序获取资源。

如果设置host:port ,将覆盖yarn.resourcemanager.hostname主机名

yarn.resourcemanager.resource-tracker.address

ResourceManager host:port 用于NodeManagers.

如果设置host:port ,将覆盖yarn.resourcemanager.hostname的主机名设置。

yarn.resourcemanager.admin.address

ResourceManager host:port 用于管理命令。

如果设置host:port ,将覆盖yarn.resourcemanager.hostname主机名的设置

yarn.resourcemanager.webapp.address

ResourceManager web-ui host:port.

如果设置host:port ,将覆盖yarn.resourcemanager.hostname主机名的设置

yarn.resourcemanager.hostname

ResourceManager host.

可设置为代替所有yarn.resourcemanager* address 资源的主机单一主机名。其结果默认端口为ResourceManager组件。

yarn.resourcemanager.scheduler.class

ResourceManager 调度类.

Capacity调度 (推荐), Fair调度 (也推荐), Fifo调度. 使用完全限定类名,如 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler.

yarn.scheduler.minimum-allocation-mb

 Resource Manager上为每个请求的容器分配的最小内存.

In MBs

yarn.scheduler.maximum-allocation-mb

Resource Manager上为每个请求的容器分配的最大内存

In MBs

yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path

允许/摒弃的nodeManagers列表

如果必要,可使用这些文件来控制允许的NodeManagers列表

NodeManager配置:

参数

说明

yarn.nodemanager.resource.memory-mb

用于给定的NodeManager的资源,即可用的物理内存、内存容量

用于运行容器的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

Shuffle service that needs to be set for Map Reduce applications.

需要被设置Shuffle服务的Map Reduce应用程序

yarn.nodemanager.env-whitelist

环境变量通过

从NodeManagers的容器继承的环境属性

对于mapreduce应用程序,除了默认值hadoop op_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或负值,则将值计算为聚合日志保留时间的十分之一。要小心,设置这个太小,这个节点将成为垃圾箱

etc/hadoop/mapred-site.xml

MapReduce 应用程序配置:

参数

说明

mapreduce.framework.name

yarn

设置执行的框架为 Hadoop YARN.

mapreduce.map.memory.mb

1536

Maps的资源限制

mapreduce.map.java.opts

-Xmx1024M

Maps的子jvm的堆大小设置

mapreduce.reduce.memory.mb

3072

Reduces的资源限制

mapreduce.reduce.java.opts

-Xmx2560M

reduces的子jvm的堆大小设置

mapreduce.task.io.sort.mb

512

更高的内存限制,同时对数据进行排序以提高效率。

mapreduce.task.io.sort.factor

100

在排序文件时,同时合并更多的流。

mapreduce.reduce.shuffle.parallelcopies

50

reduce通过运行更多的并行副本来取得大量的maps的输出结果

MapReduce JobHistory Server配置:

参数

说明

mapreduce.jobhistory.address

MapReduce JobHistory 服务 主机:端口

默认端口为 10020.

mapreduce.jobhistory.webapp.address

MapReduce JobHistory Server Web UI 主机:端口

默认端口为19888.

mapreduce.jobhistory.intermediate-done-dir

/mr-history/tmp

MapReduce jobs写历史文件的目录

mapreduce.jobhistory.done-dir

/mr-history/done

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

NodeManagers健康监控

Hadoop提供了一种管理员可以通过配置NodeManager以便定期运行管理员提供的脚本,确定节点是否健康机制。管理员可以通过他们选择的脚本中的任一检查来确定节点是否处于健康状态。如果脚本检测到节点处于不健康状态,它必须打印一行以ERRO开始的字符串并进行标准输出。NodeManager会周期性地生成脚本并检查它的输出。如果脚本的输出包含字符串ERROR错误,如上所述,该节点的状态是不健康的,并且该节点将由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.interval-ms

节点健康脚本间隔时间

运行健康脚本的时间间隔。

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

节点健康脚本超时间隔。

用于健康脚本执行的超时。.

如果只有一些本地磁盘变得糟糕,那么health checker脚本不出现ERROR错误信息

NodeManager有能力定期检查本地磁盘的健康状况(特别是检查NodeManager -local-dirs和NodeManager -log-dirs),并且在达到了基于配置属性yarn.nodemanager.disk-health-checker的值设置的坏目录的阈值之后。如果整个节点都是不健康的,这个信息被发送到资源管理器。由健康检查脚本标识引导磁盘被检查还是引导磁盘上出现故障。

从文件

etc/hadoop/workers文件中列出所有工作主机名或IP地址,每行一个。Helper脚本(如下所述)将使用etc/hadoop/workers文件同时在许多主机上运行命令。它不基于java的任何Hadoop配置。使用这个功能,必须为运行Hadoop的帐户建立ssh信任(通过无密码ssh或其他一些方法,例如Kerberos)。

Hadoop机架感知

许多Hadoop组件都是机架感知的,并利用网络拓扑来实现性能和安全性。Hadoop守护进程通过调用管理员配置的模块获取集群中工作人员的机架信息。有关更详细的信息,请参阅“机架感知”文档。

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

日志

Hadoop使用Apache Commons日志框架Apache log4j进行日志记录。

编辑the etc/hadoop/log4j.properties 文件来实现Hadoop守护进程日志配置(日志格式等)的定制化。

Hadoop集群操作

一旦完成所有必要的配置之后,将文件分发到所有机器上的HADOOP_CONF_DIR目录。这所有机器上的目录相同

正常情况下,建议将HDFS和YARN使用单独的用户运行。在大多数的安装情况中,HDFS 进程使用‘hdfs’账号,YARN 通常使用 ‘yarn’ 账号。

Hadoop启动

启动Hadoop集群,您需要启动HDFS和YARN集群。

The first time you bring up HDFS, it must be formatted. Format a new distributed filesystem as hdfs:

第一次打开HDFS时,必须对其进行格式化。将新的分布式文件系统格式化为hdfs

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

Start the HDFS NameNode with the following command on the designated node as hdfs:

在指定的节点上使用以下命令启动HDFS NameNode作为hdfs

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode

Start a HDFS DataNode with the following command on each designated node as hdfs:

在每个指定节点上使用以下命令启动一个HDFS DataNode,作为hdfs:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start datanode

If etc/hadoop/workers and ssh trusted access is configured (see Single Node Setup), all of the HDFS processes can be started with a utility script. As hdfs:

如果etc/hadoop/workers和ssh可信访问配置(参见单节点设置),那么所有的HDFS进程都可以使用一个用脚本启动hdfs:

[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh

Start the YARN with the following command, run on the designated ResourceManager as yarn:

用下面的命令启动YARN,在指定的ResourceManager上运行YARN

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager

Run a script to start a NodeManager on each designated host as yarn:

运行一个脚本,在每个指定的主机上启动一个NodeManager作为yarn

[yarn]$ $HADOOP_HOME/bin/yarn --daemon 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:

启动一个独立的WebAppProxy服务器。作为运行在WebAppProxy服务器上yarn。如果在负载均衡中使用多个服务器,则应该在每个服务器上运行

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver

If etc/hadoop/workers and ssh trusted access is configured (see Single Node Setup), all of the YARN processes can be started with a utility script. As yarn:

如果etc/hadoop/workers和ssh可信访问被配置(参见单节点设置),那么所有的线程进程都可以从一个用脚本开始yarn

[yarn]$ $HADOOP_HOME/sbin/start-yarn.sh

Start the MapReduce JobHistory Server with the following command, run on the designated server as mapred:

使用下面的命令启动MapReduce JobHistory服务,运行指定的mapred服务:

[mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver

Hadoop关闭

Stop the NameNode with the following command, run on the designated NameNode as hdfs:

用下面的命令停止在指定的NameNode上运行hdfs:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop namenode

Run a script to stop a DataNode as hdfs:

运行一个脚本来止hdfsDataNode。

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop datanode

If etc/hadoop/workers and ssh trusted access is configured (see Single Node Setup), all of the HDFS processes may be stopped with a utility script. As hdfs:

如果etc/hadoop/workers和ssh可信访问被配置(参见单节点设置),那么所有的HDFS进程都可以用一个用脚本停hdfs

[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh

Stop the ResourceManager with the following command, run on the designated ResourceManager as yarn:

使用下面的命令停止在指定的ResourceManager上运行yarn:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop resourcemanager

Run a script to stop a NodeManager on a worker as yarn:

运行一个脚本,以停止yarn的NodeManager工作

[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop nodemanager

If etc/hadoop/workers and ssh trusted access is configured (see Single Node Setup), all of the YARN processes can be stopped with a utility script. As yarn:

如果etc/hadoop/workers和ssh可信访问被配置(参见单节点设置),那么所有的yarn程都可以用一个用脚本停止:

[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh

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:

停止WebAppProxy服务。运行在WebAppProxy服务上yarn。如果在负载均衡中使用多个服务,则应该在每个服务器上运行停止WebAppProxy服务

[yarn]$ $HADOOP_HOME/bin/yarn stop proxyserver

Stop the MapReduce JobHistory Server with the following command, run on the designated server as mapred:

使用以下命令停止在指定的服务上运行mapredMapReduce JobHistory服务

[mapred]$ $HADOOP_HOME/bin/mapred --daemon stop historyserver

Web 界面

Once the Hadoop cluster is up and running check the web-ui of the components as described below:

如果Hadoop集群启动并运行web ui组件进行检查,如下所述:

守护进程

Web 界面

说明

NameNode

http://nn_host:port/

默认HTTP端口为 9870

ResourceManager

http://rm_host:port/

默认HTTP端口为 8088

MapReduce JobHistory Server

http://jhs_host:port/

默认HTTP端口为 19888

以上是关于Hadoop3.0集群配置的主要内容,如果未能解决你的问题,请参考以下文章

HDFS学习:HDFS机架感知与副本放置策略

hadoop3.0.0 分布式集群安装过程

Hadoop机架感知原理

超详细!CentOS 7 + Hadoop3.0.0 搭建伪分布式集群

一文理解 Apache Hadoop 机架感知

hdfs 机架感知