Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

目的

本文档介绍了如何安装和配置Hadoop集群,范围从几个节点到具有数千个节点的超大型集群。要使用Hadoop,您可能首先需要将其安装在单台计算机上(请参阅单节点设置)。

本文档不涉及安全或高可用性等高级主题。

先决条件

  • 安装Java。有关已知的良好版本,请参见Hadoop Wiki
  • 从Apache镜像下载稳定的Hadoop版本。

安装

安装Hadoop群集通常涉及在群集中的所有计算机上解压缩软件,或通过适用于您的操作系统的打包系统进行安装。将硬件划分为功能很重要。

通常,将群集中的一台机器专门指定为NameNode,将另一台机器指定为ResourceManager。这些是大师。其他服务(例如Web App代理服务器和MapReduce作业历史服务器)通常根据负载在专用硬件或共享基础结构上运行。

群集中的其余计算机同时充当DataNode和NodeManager。这些是工人。

在非安全模式下配置Hadoop

Hadoop的Java配置由两种重要的配置文件驱动:

  • 只读默认配置- 核心default.xml中HDFS-default.xml中纱default.xml中mapred-default.xml中

  • 特定于站点的配置-etc / hadoop / core-site.xmletc / hadoop / hdfs-site.xmletc / hadoop / yarn-site.xmletc / hadoop / mapred-site.xml

此外,您可以通过在etc / hadoop / hadoop-env.shetc / hadoop / yarn-env.sh中设置特定于站点的值,来控制在发行版的bin /目录中找到的Hadoop脚本。

要配置Hadoop集群,您将需要配置Hadoop守护程序执行的环境以及Hadoop守护程序的配置参数

HDFS守护程序是NameNode,SecondaryNameNode和DataNode。YARN守护程序是ResourceManager,NodeManager和WebAppProxy。如果要使用MapReduce,则MapReduce作业历史服务器也将运行。对于大型安装,它们通常在单独的主机上运行。

Hadoop守护程序的配置环境

管理员应使用etc / hadoop / hadoop-env.sh以及可选的etc / hadoop / mapred-env.shetc / hadoop / yarn-env.sh脚本对Hadoop守护进程的处理环境进行特定于站点的自定义。

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

管理员可以使用下表中显示的配置选项来配置各个守护程序:

守护进程 环境变量
名称节点 HDFS_NAMENODE_OPTS
数据节点 HDFS_DATANODE_OPTS
次要名称节点 HDFS_SECONDARYNAMENODE_OPTS
资源管理器 YARN_RESOURCEMANAGER_OPTS
节点管理器 YARN_NODEMANAGER_OPTS
WebAppProxy YARN_PROXYSERVER_OPTS
Map Reduce作业历史记录服务器 MAPRED_HISTORYSERVER_OPTS

例如,要将Namenode配置为使用parallelGC和4GB Java Heap,应在hadoop-env.sh中添加以下语句:

  导出HDFS_NAMENODE_OPTS =“-XX:+ UseParallelGC -Xmx4g”

有关其他示例,请参见etc / hadoop / hadoop-env.sh

您可以自定义的其他有用的配置参数包括:

  • HADOOP_PID_DIR-守护程序的进程ID文件的存储目录。
  • HADOOP_LOG_DIR-守护程序的日志文件存储的目录。如果日志文件不存在,则会自动创建。
  • HADOOP_HEAPSIZE_MAX-用于Java堆大小的最大内存量。此处也支持JVM支持的单元。如果不存在任何单位,则将假定该数字以兆字节为单位。默认情况下,Hadoop将让JVM确定使用多少资源。可以使用上面列出的适当的_OPTS变量逐个守护程序覆盖此值。例如,设置HADOOP_HEAPSIZE_MAX = 1gHADOOP_NAMENODE_OPTS =“-Xmx5g”将为NameNode配置5GB的堆。

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

在系统级外壳环境配置中配置HADOOP_HOME也是传统的做法。例如,/ etc/profile.d中的一个简单脚本:

  HADOOP_HOME = /路径/到/ hadoop
  导出HADOOP_HOME

配置Hadoop守护程序

本节介绍在给定的配置文件中指定的重要参数:

  • 等/hadoop/core-site.xml
参数 笔记
fs.defaultFS NameNode URI hdfs://主机:端口/
io.file.buffer.size 131072 SequenceFiles中使用的读/写缓冲区的大小。
  • 等/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服务器线程可处理来自大量DataNode的RPC。
  • DataNode的配置:
参数 笔记
dfs.datanode.data.dir 逗号分隔的DataNode本地文件系统上应存储其块的路径列表。 如果这是逗号分隔的目录列表,则数据将存储在所有命名的目录中,通常在不同的设备上。
  • etc / hadoop / yarn-site.xml

  • ResourceManager和NodeManager的配置:

参数 笔记
纱线使能 / 启用ACL?默认为false
yarn.admin.acl 管理员ACL 用于在群集上设置管理员的ACL。ACL适用于逗号分隔的用户空间逗号分隔的组。默认为特殊值*,表示任何人。仅有空间的特殊价值意味着没有人可以使用。
yarn.log-aggregation-enable 启用或禁用日志聚合的配置
  • ResourceManager的配置:
参数 笔记
yarn.resourcemanager.address ResourceManager host:port供客户端提交作业。 host:port  如果已设置,则将覆盖yarn.resourcemanager.hostname中设置的主机名。
yarn.resourcemanager.scheduler.address ResourceManager host:ApplicationMaster的端口,可与Scheduler进行对话以获取资源。 host:port  如果已设置,则将覆盖yarn.resourcemanager.hostname中设置的主机名。
yarn.resourcemanager.resource-tracker.address NodeManager的ResourceManager host:port。 host:port  如果已设置,则将覆盖yarn.resourcemanager.hostname中设置的主机名。
yarn.resourcemanager.admin.address ResourceManager host:port用于管理命令。 host:port  如果已设置,则将覆盖yarn.resourcemanager.hostname中设置的主机名。
yarn.resourcemanager.webapp.address ResourceManager Web用户界面主机:端口。 host:port  如果已设置,则将覆盖yarn.resourcemanager.hostname中设置的主机名。
yarn.resourcemanager.hostname ResourceManager主机。 主机  可以设置单个主机名,以代替设置所有yarn.resourcemanager * address资源。生成ResourceManager组件的默认端口。
yarn.resourcemanager.scheduler.class ResourceManager Scheduler类。 CapacityScheduler(推荐),FairScheduler(也推荐)或FifoScheduler。使用完全限定的类名,例如org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
纱线调度器最小分配MB 资源管理器中分配给每个容器请求的最小内存限制。 以MB为单位
yarn.scheduler.maximum-allocation-mb 资源管理器中分配给每个容器请求的最大内存限制。 以MB为单位
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path 允许/排除的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目录 逗号分隔的本地文件系统上写入日志的路径列表。 多个路径有助于传播磁盘I / O。
yarn.nodemanager.log.retain-seconds 10800 在NodeManager上保留日志文件的默认时间(以秒为单位)仅在禁用日志聚合时适用。
yarn.nodemanager.remote-app-log-dir /日志 应用程序完成时将应用程序日志移动到的HDFS目录。需要设置适当的权限。仅在启用日志聚合的情况下适用。
yarn.nodemanager.remote-app-log-dir-后缀 日志 后缀附加到远程日志目录。日志将汇总到$ {yarn.nodemanager.remote-app-log-dir} / $ {user} / $ {thisParam},仅在启用日志汇总的情况下适用。
yarn.nodemanager.aux服务 mapreduce_shuffle 需要为Map Reduce应用程序设置洗牌服务。
yarn.nodemanager.env白名单 容器从NodeManagers继承的环境属性 对于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或负值,则该值将被计算为聚合日志保留时间的十分之一。请注意,将此值设置得太小,您将向名称节点发送垃圾邮件。
  • 等/hadoop/mapred-site.xml

  • MapReduce应用程序的配置:

参数 笔记
mapreduce.framework.name 执行框架设置为Hadoop YARN。
mapreduce.map.memory.mb 1536 较大的地图资源限制。
mapreduce.map.java.opts -Xmx1024M 地图的子jvm的较大堆大小。
mapreduce.reduce.memory.mb 3072 较大的资源限制用于减少。
mapreduce.reduce.java.opts -Xmx2560M 减少子jvm的堆大小。
mapreduce.task.io.sort.mb 512 更高的内存限制,同时对数据进行排序以提高效率。
mapreduce.task.io.sort.factor 100 排序文件时,更多的流一次合并。
mapreduce.reduce.shuffle.parallelcopies 50 减少运行的并行副本数量,可以从大量映射中获取输出。
  • MapReduce JobHistory服务器的配置:
参数 笔记
mapreduce.jobhistory.address MapReduce JobHistory Server 主机:端口 默认端口为10020。
mapreduce.jobhistory.webapp.address MapReduce JobHistory Server Web UI 主机:端口 默认端口是19888。
mapreduce.jobhistory.intermediate-done-dir /先生历史/ tmp MapReduce作业在其中写入历史文件的目录。
mapreduce.jobhistory.done-dir / mr-history /完成 历史记录文件由MR JobHistory服务器管理的目录。

监视NodeManager的运行状况

Hadoop提供了一种机制,管理员可以通过该机制将NodeManager配置为定期运行管理员提供的脚本,以确定节点是否正常。

管理员可以通过在脚本中执行对其选择的任何检查来确定节点是否处于健康状态。如果脚本检测到该节点处于不正常状态,则它必须从标准字符串ERROR开始打印一行到标准输出。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 节点运行状况脚本超时间隔 运行状况脚本执行超时。

如果仅某些本地磁盘变坏,则运行状况检查器脚本不应给出错误。NodeManager能够定期检查本地磁盘的运行状况(特别是检查nodemanager-local-dirs和nodemanager-log-dirs),并且在达到config目录属性yarn.nodemanager设置的坏目录数量阈值之后.disk-health-checker.min-healthy-disks,整个节点被标记为不正常,并且此信息也发送到资源管理器。启动磁盘被搜查,或者运行状况检查程序脚本标识了启动磁盘中的故障。

奴隶文件

在您的etc / hadoop / workers文件中列出所有工作者主机名或IP地址,每行列出一个。帮助程序脚本(如下所述)将使用etc / hadoop / workers文件在多个主机上一次运行命令。它不用于任何基于Java的Hadoop配置。为了使用此功能,必须为用于运行Hadoop的帐户建立ssh信任(通过无密码ssh或其他某种方式,例如Kerberos)。

Hadoop机架意识

许多Hadoop组件都知道机架,并利用网络拓扑来提高性能和安全性。Hadoop守护程序通过调用管理员配置的模块来获取集群中工作线程的机架信息。有关更多特定信息,请参阅机架意识文档。

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

记录中

Hadoop 通过Apache Commons Logging框架使用Apache log4j进行日志记录。编辑etc / hadoop / log4j.properties文件以自定义Hadoop守护程序的日志配置(日志格式等)。

操作Hadoop集群

完成所有必要的配置后,将文件分发到所有计算机上的HADOOP_CONF_DIR目录。在所有计算机上,该目录应该是相同的目录。

通常,建议HDFS和YARN以单独的用户身份运行。在大多数安装中,HDFS进程以“ hdfs”执行。YARN通常使用“纱线”帐户。

Hadoop启动

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

首次启动HDFS时,必须对其进行格式化。将新的分布式文件系统格式化为hdfs

[hdfs] $ $ HADOOP_HOME / bin / hdfs namenode -format <群集名称>

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

[hdfs] $ $ HADOOP_HOME / bin / hdfs --daemon启动namenode

在每个指定的节点上以hdfs的以下命令启动HDFS DataNode :

[hdfs] $ $ HADOOP_HOME / bin / hdfs --daemon启动datanode

如果配置了etc / hadoop / workers和ssh可信访问权限(请参阅单节点设置),则可以使用实用程序脚本启动所有HDFS进程。作为hdfs

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

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

[yarn] $ $ HADOOP_HOME / bin / yarn --daemon启动resourcemanager

运行脚本以在每个指定的主机上以yarn形式启动NodeManager :

[yarn] $ $ HADOOP_HOME / bin / yarn --daemon启动nodemanager

启动独立的WebAppProxy服务器。作为yarn在WebAppProxy服务器上运行。如果将多个服务器用于负载平衡,则应在每个服务器上运行该服务器:

[yarn] $ $ HADOOP_HOME / bin / yarn --daemon启动代理服务器

如果配置了etc / hadoop / workers和ssh信任访问权限(请参阅单节点设置),则可以使用实用程序脚本启动所有YARN进程。作为纱线

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

使用以下命令启动MapReduce JobHistory服务器,以mapred在指定的服务器上运行:

[mapred] $ $ HADOOP_HOME / bin / mapred --daemon启动历史服务器

Hadoop关闭

使用以下命令停止NameNode,在指定的NameNode上以hdfs运行

[hdfs] $ $ HADOOP_HOME / bin / hdfs --daemon停止namenode

运行脚本以将DataNode停止为hdfs

[hdfs] $ $ HADOOP_HOME / bin / hdfs --daemon停止datanode

如果配置了etc / hadoop / workers和ssh信任访问权限(请参阅“ 单节点设置”),则可以使用实用程序脚本停止所有HDFS进程。作为hdfs

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

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

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

运行脚本以终止纱线上的工作器上的NodeManager :

[yarn] $ $ HADOOP_HOME / bin / yarn --daemon停止nodemanager

如果配置了etc / hadoop / workers和ssh信任访问权限(请参阅单节点设置),则可以使用实用程序脚本停止所有YARN进程。作为纱线

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

停止WebAppProxy服务器。作为yarn在WebAppProxy服务器上运行。如果将多个服务器用于负载平衡,则应在每个服务器上运行该服务器:

[yarn] $ $ HADOOP_HOME / bin / yarn停止proxyserver

使用以下命令停止MapReduce JobHistory服务器,以mapred在指定服务器上运行:

[mapred] $ $ HADOOP_HOME / bin / mapred --daemon停止历史服务器

Web界面

Hadoop集群启动并运行后,如下所述检查组件的Web UI:

守护进程 网页界面 笔记
名称节点 http:// nn_host:port / 默认的HTTP端口是9870。
资源管理器 http:// rm_host:port / 默认的HTTP端口为8088。
MapReduce JobHistory服务器 http:// jhs_host:port / 默认的HTTP端口是19888。