本文档描述了如何安装和配置Hadoop集群,范围从几个节点到具有数千个节点的极大集群。要使用Hadoop,您可能首先要将其安装在一台计算机上(请参阅单节点设置)。
本文档不包括安全性或高可用性等高级主题。
安装Hadoop集群通常涉及在集群中的所有计算机上解压缩软件,或者通过适合您的操作系统的打包系统进行安装。将硬件划分为功能非常重要。
通常,群集中的一台计算机被指定为NameNode,而另一台计算机则被指定为ResourceManager。这些都是大师。其他服务(例如Web App Proxy Server和MapReduce作业历史记录服务器)通常在专用硬件或共享基础架构上运行,具体取决于负载。
集群中的其余计算机充当DataNode和NodeManager。这些是workers。
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.
此外,您控制的bin /目录中的Hadoop脚本 , 通过修改etc/hadoop/hadoop-env.sh and etc/hadoop/yarn-env.sh.设置特定属性的值 。
要配置Hadoop集群,您需要配置Hadoop守护程序执行的环境以及Hadoop守护程序的配置参数。
HDFS守护程序是NameNode,SecondaryNameNode和DataNode。YARN守护程序是ResourceManager,NodeManager和WebAppProxy。如果要使用MapReduce,则MapReduce作业历史记录服务器也将运行。对于大型安装,这些通常在不同的主机上运行。
管理员应该使用etc/hadoop/hadoop-env.sh and optionally the 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"
有关其他示例,请参阅 etc/hadoop/hadoop-env.sh
您可以自定义的其他有用配置参数包括:
在大多数情况下,您应该指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录,以便它们只能由将要运行hadoop守护程序的用户写入。否则就有可能发生符号链接攻击。
在系统范围的shell环境配置中配置HADOOP_HOME也是必要的。例如,在/etc/profile.d中有一个简单的脚本:
HADOOP_HOME=/path/to/hadoop
export HADOOP_HOME
本节介绍在给定配置文件中指定的重要参数:
参数 | 值 | 笔记 |
---|---|---|
fs.defaultFS | NameNode URI | HDFS://主机:端口/ |
io.file.buffer.size | 131072 | SequenceFiles中使用的读/写缓冲区的大小。 |
etc/hadoop/hdfs-site.xml
NameNode的配置:
参数 | 值 | 笔记 |
---|---|---|
dfs.namenode.name.dir | NameNode持久存储命名空间和事务日志的本地文件系统上的路径。 | 如果这是逗号分隔的目录列表,那么名称表将在所有目录中复制,以实现冗余。 |
dfs.hosts / dfs.hosts.exclude | 允许/排除的DataNodes列表。 | 如有必要,请使用这些文件来控制允许的数据节点列表。 |
dfs.blocksize | 268435456 | 对于大型文件系统,HDFS块大小为256MB。 |
dfs.namenode.handler.count | 100 | 更多NameNode服务器线程来处理来自大量DataNode的RPC。 |
参数 | 值 | 笔记 |
---|---|---|
dfs.datanode.data.dir | 逗号分隔的DataNode本地文件系统上的路径列表,它应该存储其块。 | 如果这是逗号分隔的目录列表,则数据将存储在所有命名目录中,通常位于不同设备上。 |
etc/hadoop/yarn-site.xml
ResourceManager和NodeManager的配置:
参数 | 值 | 笔记 |
---|---|---|
yarn.acl.enable | 是 / 否 | 启用ACL?默认为false。 |
yarn.admin.acl | 管理员ACL | 用于在集群上设置管理员的ACL。ACL用于逗号分隔的用户空间命令分隔组。默认为*的特殊值,这意味着任何人。只是空间的特殊价值意味着没有人可以访问。 |
yarn.log聚集启用 | 假 | 用于启用或禁用日志聚合的配置 |
参数 | 值 | 笔记 |
---|---|---|
yarn.resourcemanager.address | ResourceManager主机:客户端提交作业的端口。 | host:port 如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.scheduler.address | ResourceManager主机:ApplicationMasters与Scheduler通信以获取资源的端口。 | host:port 如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.resource-tracker.address | ResourceManager主机:NodeManagers的端口。 | host:port 如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.admin.address | ResourceManager主机:管理命令的端口。 | host:port 如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.webapp.address | ResourceManager web-ui主机:端口。 | host:port 如果设置,则覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.hostname | ResourceManager主机。 | host 可以设置的单个主机名,而不是设置所有yarn.resourcemanager *地址资源。导致ResourceManager组件的默认端口。 |
yarn.resourcemanager.scheduler.class | ResourceManager Scheduler类。 | CapacityScheduler(推荐),FairScheduler(也推荐)或FifoScheduler。使用完全限定的类名,例如org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。 |
yarn.scheduler.minimum分配-MB | 在资源管理器中分配给每个容器请求的最小内存限制。 | 在MB中 |
yarn.scheduler.maximum分配-MB | 在资源管理器中分配给每个容器请求的最大内存限制。 | 在MB中 |
yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path | 允许/排除的NodeManager列表。 | 如有必要,请使用这些文件来控制允许的NodeManager列表。 |
参数 | 值 | 笔记 |
---|---|---|
yarn.nodemanager.resource.memory-mb | 资源即给定NodeManager的可用物理内存(MB) | 定义NodeManager上可用于运行容器的总可用资源 |
yarn.nodemanager.vmem-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-logdir | /logs | 应用程序完成时移动应用程序日志的HDFS目录。需要设置适当的权限。仅适用于启用了日志聚合的情况。 |
yarn.nodemanager.remote-app-dir-suffix | logs | 附加到远程日志目录的后缀。日志将汇总到$ {yarn.nodemanager.remote-app-log-dir} / $ {user} / $ {thisParam}仅在启用了日志聚合时才适用。 |
yarn.nodemanager.aux-services | mapreduce_shuffle | 需要为Map Reduce应用程序设置的随机服务。 |
yarn.nodemanager.env-whitelist | 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 |
参数 | 值 | 笔记 |
---|---|---|
yarn.log-aggregation.retain秒 | -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 | map的资源限制 1.5G |
mapreduce.map.java.opts | -Xmx1024M | 子 map 的jvms的堆大小。 |
mapreduce.reduce.memory.mb | 3072 | reduce 内存限制 3G。 |
mapreduce.reduce.java.opts | -Xmx2560M | 子 reduces 的 jvm heap-size |
mapreduce.task.io.sort.mb | 512 | 数据排序的时候, 内存限制 |
mapreduce.task.io.sort.factor | 100 | 在对文件进行排序时,会立即合并更多流。 |
mapreduce.reduce.shuffle.parallelcopies | 50 | Higher number of parallel copies run by reduces to fetch outputs from very large number of maps。 |
参数 | 值 | 笔记 |
---|---|---|
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任务写入历史文件的目录。 |
mapreduce.jobhistory.done-dir | /mr-history/done | MR JobHistory Server文件的目录。 |
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),并在根据为配置属性yarn.nodemanager设置的值达到坏目录数阈值后.disk-health-checker.min-healthy-disks,整个节点被标记为不健康,此信息也被发送到资源管理器。引导磁盘被突袭或健康检查程序脚本识别引导磁盘中的故障。
列出etc/hadoop/workers文件中的所有工作者主机名或IP地址,每行一个。Helper脚本(如下所述)将使用 etc/hadoop/workers 文件一次在多个主机上运行命令。它不用于任何基于Java的Hadoop配置。为了使用此功能,必须为用于运行Hadoop的帐户建立ssh信任(通过无密码ssh或其他方式,如Kerberos)。
许多Hadoop组件都具有机架感知功能,并利用网络拓扑结构提高性能和安全性。Hadoop守护程序通过调用管理员配置的模块来获取集群中工作程序的机架信息。有关更多具体信息,请参阅Rack Awareness文档。
强烈建议在启动HDFS之前配置机架感知。
Hadoop 通过Apache Commons Logging框架使用Apache log4j进行日志记录。编辑 etc/hadoop/log4j.properties 文件以自定义Hadoop守护程序的日志记录配置(日志格式等)。
完成所有必要的配置后,将文件分发到所有计算机上的HADOOP_CONF_DIR目录。这应该是所有计算机上的同一目录。
通常,建议HDFS和YARN作为单独的用户运行。在大多数安装中,HDFS进程以'hdfs'的形式执行。YARN通常使用'yarn'帐户。
要启动Hadoop集群,您需要启动HDFS和YARN集群。
第一次启动HDFS时,必须对其进行格式化。将新的分布式文件系统格式化为hdfs:
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format
在指定节点上使用以下命令以hdfs启动HDFS NameNode :
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode
在每个指定节点上使用以下命令启动HDFS DataNode作为hdfs:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start datanode
如果配置了etc/hadoop/workers 和ssh 免密登录(请参阅单节点设置),则可以使用实用程序脚本启动所有HDFS进程。作为hdfs:
[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh
使用以下命令启动YARN,在指定的ResourceManager上作为yarn运行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager
运行脚本以在每个指定的主机上启动NodeManager作为yarn:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start nodemanager
启动独立的WebAppProxy服务器。以yarn形式在WebAppProxy服务器上运行。如果使用多个服务器进行负载平衡,则应在每个服务器上运行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver
如果配置了etc / hadoop / workers和ssh trusted access(请参阅单节点设置),则可以使用实用程序脚本启动所有YARN进程。作为纱线:
[yarn]$ $HADOOP_HOME/sbin/start-yarn.sh
使用以下命令启动MapReduce JobHistory Server,在指定的服务器上以mapred运行:
[mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver
使用以下命令停止NameNode,在指定的NameNode上以hdfs运行:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop namenode
运行脚本以将DataNode作为hdfs停止:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop 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
运行脚本以将作为yarn的worker上的NodeManager停止:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop nodemanager
如果配置了etc/hadoop/workers和ssh 免登陆(请参阅单节点设置),则可以使用实用程序脚本停止所有YARN进程。作为纱线:
[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh
停止WebAppProxy服务器。以纱线形式在WebAppProxy服务器上运行。如果使用多个服务器进行负载平衡,则应在每个服务器上运行:
[yarn]$ $HADOOP_HOME/bin/yarn stop proxyserver
使用以下命令停止MapReduce JobHistory Server,在指定的服务器上以mapred运行:
[mapred]$ $HADOOP_HOME/bin/mapred --daemon stop historyserver
一旦Hadoop集群启动并运行,请检查组件的web-ui,如下所述:
守护进程 | Web 接口 | 备注 |
---|---|---|
NameNode | http://nn_host:port/ | Default HTTP port is 9870. |
ResourceManager | http://rm_host:port/ | Default HTTP port is 8088. |
MapReduce JobHistory Server | http://jhs_host:port/ | Default HTTP port is 19888. |
原文链接: https://hadoop.apache.org/docs/r3.2.0/