Hadoop(2.7.3)集群配置-官方文档

云计算 来源:m1213642578 263℃ 0评论

原文地址:http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/ClusterSetup.html

目标

本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。如果你希望在单机上安装Hadoop玩玩,从这里(Single Node Setup)能找到相关细节。

这份文档不包含更先进话题,比如安全或者高可用。

先决条件

  1. 安装Java。查看Hadoop Wiki了解合适的版本。
  2. 从Apache镜像下载一个稳定版本的Hadoop。

安装

安装Hadoop集群通常包括将安装软件解压到集群内的所有机器上。

通常,集群里的一台机器被指定为NameNode,另一台不同的机器被指定为ResourceManager。这些机器是masters。其他服务(比如:App Proxy Server和MapReduce Job History server)通常运行在专用的硬件或在共享的基础设施上,视负载而定。

余下的机器即作为DataNode也作为NodeManager。这些机器是slaves。

配置Hadoop在Non-Secure模式下

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守护进程的运行环境和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,这样才能在每个远程节点上被正确定义。

管理员可以通过使用下面列表中显示的配置选项配置个人的守护进程:

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

比如,配置NameNode使用parallelGC,在hadoop-env.sh中应该加入下面的描述:

export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"

更多的例子,查看etc/hadoop/hadoop-env.sh。

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

  • HADOOP_PID_DIR - 守护进程id文件的存放目录。
  • HADOOP_LOG_DIR - 守护进程log文件的存放目录。日志文件如果不存在的话会被自动创建。
  • HADOOP_HEAPSIZE / YARN_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB。如果你想分别设置每个进程的推大小,你可以使用它。

在多数情况下,你应该指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录。这样,他们就只能被将要运行hadoop进程的用户写入。否则,就存在符号链接攻击的可能性。

通常也会在系统全局的shell环境变量配置HADOOP_PREFIX,比如在/etc/profile.d中的一个简单的脚本。

HADOOP_PREFIX=/path/to/hadoop
export 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

配置Hadoop进程

这节处理给定的配置文件中被指定的重要参数:

  • etc/hadoop/core-site.xml
Parameter Value Notes
fs.defaultFS NameNode URI hdfs://host:port/
io.file.buffer.size 131072 Size of read/write buffer used in SequenceFiles.
  • etc/hadoop/hdfs-site.xml
  • 配置NameNode:
Parameter Value Notes
dfs.namenode.name.dir Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.
dfs.hosts / dfs.hosts.exclude List of permitted/excluded DataNodes. If necessary, use these files to control the list of allowable datanodes.
dfs.blocksize 268435456 HDFS blocksize of 256MB for large file-systems.
dfs.namenode.handler.count 100 More NameNode server threads to handle RPCs from large number of DataNodes.
  • etc/hadoop/yarn-site.xml
  • 配置ResourceManager和NodeManager:
Parameter Value Notes
yarn.acl.enable true / false Enable ACLs? Defaults to false.
yarn.admin.acl Admin ACL ACL to set admins on the cluster. ACLs are of for comma-separated-usersspacecomma-separated-groups. Defaults to special value of * which means anyone. Special value of just space means no one has access.
yarn.log-aggregation-enable false Configuration to enable or disable log aggregation
  • 配置ResourceManager:
Parameter Value Notes
yarn.resourcemanager.address ResourceManager host:port for clients to submit jobs. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
yarn.resourcemanager.scheduler.address ResourceManager host:port for ApplicationMasters to talk to Scheduler to obtain resources. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
yarn.resourcemanager.resource-tracker.address ResourceManager host:port for NodeManagers. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
yarn.resourcemanager.admin.address ResourceManager host:port for administrative commands. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
yarn.resourcemanager.webapp.address ResourceManager web-ui host:port. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
yarn.resourcemanager.hostname ResourceManager host. host Single hostname that can be set in place of setting all yarn.resourcemanager*address resources. Results in default ports for ResourceManager components.
yarn.resourcemanager.scheduler.class ResourceManager Scheduler class. CapacityScheduler (recommended), FairScheduler (also recommended), or FifoScheduler
yarn.scheduler.minimum-allocation-mb Minimum limit of memory to allocate to each container request at the Resource Manager. In MBs
yarn.scheduler.maximum-allocation-mb Maximum limit of memory to allocate to each container request at the Resource Manager. In MBs
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path List of permitted/excluded NodeManagers. If necessary, use these files to control the list of allowable NodeManagers.
  • 配置NodeManager:
Parameter Value Notes
yarn.nodemanager.resource.memory-mb Resource i.e. available physical memory, in MB, for given NodeManager Defines total available resources on the NodeManager to be made available to running containers
yarn.nodemanager.vmem-pmem-ratio Maximum ratio by which virtual memory usage of tasks may exceed physical memory The virtual memory usage of each task may exceed its physical memory limit by this ratio. The total amount of virtual memory used by tasks on the NodeManager may exceed its physical memory usage by this ratio.
yarn.nodemanager.local-dirs Comma-separated list of paths on the local filesystem where intermediate data is written. Multiple paths help spread disk i/o.
yarn.nodemanager.log-dirs Comma-separated list of paths on the local filesystem where logs are written. Multiple paths help spread disk i/o.
yarn.nodemanager.log.retain-seconds 10800 Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.
yarn.nodemanager.remote-app-log-dir /logs HDFS directory where the application logs are moved on application completion. Need to set appropriate permissions. Only applicable if log-aggregation is enabled.
yarn.nodemanager.remote-app-log-dir-suffix logs Suffix appended to the remote log dir. Logs will be aggregated to yarn.nodemanager.remoteapplogdir/ {user}/${thisParam} Only applicable if log-aggregation is enabled.
yarn.nodemanager.aux-services mapreduce_shuffle Shuffle service that needs to be set for Map Reduce applications.
  • 配置History Server (需要转移到其他地方):
Parameter Value Notes
yarn.log-aggregation.retain-seconds -1 How long to keep aggregation logs before deleting them. -1 disables. Be careful, set this too small and you will spam the name node.
yarn.log-aggregation.retain-check-interval-seconds -1 Time between checks for aggregated log retention. If set to 0 or a negative value then the value is computed as one-tenth of the aggregated log retention time. Be careful, set this too small and you will spam the name node.
  • etc/hadoop/mapred-site.xml
  • 配置MapReduce Applications:
Parameter Value Notes
mapreduce.framework.name yarn Execution framework set to Hadoop YARN.
mapreduce.map.memory.mb 1536 Larger resource limit for maps.
mapreduce.map.java.opts -Xmx1024M Larger heap-size for child jvms of maps.
mapreduce.reduce.memory.mb 3072 Larger resource limit for reduces.
mapreduce.reduce.java.opts -Xmx2560M Larger heap-size for child jvms of reduces.
mapreduce.task.io.sort.mb 512 Higher memory-limit while sorting data for efficiency.
mapreduce.task.io.sort.factor 100 More streams merged at once while sorting files.
mapreduce.reduce.shuffle.parallelcopies 50 Higher number of parallel copies run by reduces to fetch outputs from very large number of maps.
  • 配置ConfigurationsMapReduce JobHistory Server:
Parameter Value Notes
mapreduce.jobhistory.address MapReduce JobHistory Server host:port Default port is 10020.
mapreduce.jobhistory.webapp.address MapReduce JobHistory Server Web UI host:port Default port is 19888.
mapreduce.jobhistory.intermediate-done-dir /mr-history/tmp Directory where history files are written by MapReduce jobs.
mapreduce.jobhistory.done-dir /mr-history/done Directory where history files are managed by the MR JobHistory Server.

NodeManager的健康检测

Hadoop提供了一种机制,管理员可以配置nodemanager定期运行管理员提供的脚本来确定一个节点是否健康。

管理员可以通过操作他在脚本中选择的任何检查,来确定一个节点是否处于一个健康的状态。如果脚本检测到节点处于一个不健康的状态,它会打印一行以字符串ERROR开始的行到标准输出。NodeManager定期产生大量的脚本并检查它的输出。如果脚本的输出中存在上面描述中的ERROR字符串,这个节点的状态就被报告成不健康,并且这个节点就被ResourceManager加入到黑名单。没有进一步的任务将被分配到这个节点。但是,这nodemanager会继续运行脚本,所以如果节点再次变得健康,他将自动从ResourceManager的黑名单节点列表中移除。节点的健康随着脚本的输出,如果是不健康的,在ResourceManager的web界面对管理员是可见的,同时如果节点是健康的,它也会在web界面显示。

下面的参数可以在/Hadoop/yarn-site.xml中使用,用来控制节点的健康监测脚本。

Parameter Value Notes
yarn.nodemanager.health-checker.script.path Node health script Script to check for node’s health status.
yarn.nodemanager.health-checker.script.opts Node health script options Options for script to check for node’s health status.
yarn.nodemanager.health-checker.script.interval-ms Node health script interval Time interval for running health script.
yarn.nodemanager.health-checker.script.timeout-ms Node health script timeout interval Timeout for health script execution.

健康检查脚本不应该给错误,如果只有一些本地磁盘坏了。nodemanager拥有定期检查本地磁盘健康的能力(具体检查nodemanager-local-dirs和nodemanager-log-dirs),坏的目录数达到在yarn.nodemanager.disk-health-checker.min-healthy-disks配置属性设置的阈值后,整个节点被标记为不健康并且也会发信息给resource manager。启动磁盘或是在启动磁盘中的一个故障是由健康检查脚本确定的。

Slaves文件

在conf/slaves文件中列出所有slave的主机名或者IP地址,一行一个。辅助脚本(如下所述)将使用Hadoop/slaves文件同时在多台主机上运行命令。它不用于任何基于java的Hadoop的配置。为了使用这一功能,必须为运行Hadoop的账号建立SSH信任(通过免密码SSH或其他手段,如Kerberos)。

Hadoop机架感知

许多Hadoop的组件是具有机架感知的,它有利于网络拓扑结构的高性能和安全。Hadoop守护进程通过调用一个管理员配置模块获取集群中Slaves的机架信息。
HDFS和Map/Reduce的组件是能够感知机架的。查看Rack Awareness获取更多特定信息。

非常推荐你在启动HDFS前配置机架感知。

日志

Hadoop使用Apache log4j来记录日志,它由Apache Commons Logging框架来实现。编辑conf/log4j.properties文件可以改变Hadoop守护进程的日志配置(日志格式等)。

操作Hadoop集群

一旦所有必要的配置齐全,分发文件到所有机器的HADOOP_CONF_DIR目录上。所有机器上的目录应该是相同的。

一般情况下,推荐HDFS和YARN的运行用户是不同的。在大多数安装中,HDFS进程由‘hdfs’运行,YARN通常使用‘YARN’用户。

Hadoop的开启

开启一个Hadoop集群,你需要启动HDFS集群和YARN集群。

第一次启动HDFS,它必须被格式化。格式化成一种新的分布式文件系统,使用hdfs用户:

[hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format 

在指定的节点,使用下面的指令开启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和ssh信任访问被配置(查看Single Node Setup),所有的HDFS进程可以使用一个功能脚本启动,使用hdfs用户:

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

在指定的ResourceManager上,使用如下命令启动YARN,使用yarn用户:

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager

在每个指定的主机上,执行脚本来启动NodeManager,使用yarn用户:

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR start nodemanager

开启一个独立的WebAppProxy服务器。使用yarn用户跑WebAppProxy服务。如果使用多台负载均衡的服务器,应该在每台机器上执行:

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start proxyserver

如果etc/hadoop/slaves和ssh信任访问被配置(查看Single Node Setup),所有的YARN进程可以使用一个功能脚本启动,使用yarn用户:

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

在指定的服务器上用mapred用户执行下面命令,开启MapReduce JobHistory Server:

[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver

Hadoop的关闭

在指定的NameNode使用hdfs用户执行如下命令关闭NameNode:

[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode

使用hdfs用户执行脚本关闭DataNode:

[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode

如果etc/hadoop/slaves和ssh信任访问被配置(查看Single Node Setup),所有的HDFS进程可以使用一个功能脚本关闭,使用hdfs用户:

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

在指定的ResourceManager使用yarn用户执行如下命令关闭ResourceManager:

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager

使用yarn用户执行脚本关闭NodeManager:

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR stop nodemanager

如果etc/hadoop/slaves和ssh信任访问被配置(查看Single Node Setup),所有的YARN进程可以使用一个功能脚本关闭,使用yarn用户:

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

关闭WebAppProxy服务器。使用yarn用户跑WebAppProxy服务。如果使用多台负载均衡的服务器,应该在每台机器上执行:

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop proxyserver

在指定的服务器上用mapred用户执行下面命令,关闭MapReduce JobHistory Server:

[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver

Web接口

一旦Hadoop启动并运行起来检查如下描述的web-ui组件:

Daemon Web Interface Notes
NameNode http://nn_host:port/ Default HTTP port is 50070.
ResourceManager http://rm_host:port/ Default HTTP port is 8088.
MapReduce JobHistory Server http://jhs_host:port/ Default HTTP port is 19888.

转载请注明出处:http://blog.csdn.net/m1213642578

关闭

IT问道推荐

银行贷款频频被拒?
“Dr信用牛牛”让你远离信用污点 国内首家信用健康管理平台免费为你提供信用修复方案