Hadoop集群设置文档
- Hadoop集群安装
- 目的
- 先决条件
- 安装
- 安装Hadoop在非安全模式
- 配置Hadoop Deamons运行环境
- 配置Hadoop Deamons
- 监控NodeManagers健康状况
- Slaves配置文件
- Hadoop机架感知
- 日志
- Hadoop常见操作
- Hadoop启动
- Hadoop停止
- Web接口
Hadoop集群设置
本文档描述如何安装和配置Hadoop集群从几个节点到几千个节点,要使用Hadoop,你可能首先想要在一台机器上安装它。(详见单节点安装)
本文档没有覆盖高级主题,如安全和高可用。
- 安装Java.详见Hadoop Wiki说明的已知好用版本。
- 从Apache镜像网站下载一个稳定的Hadoop版本
安装一个Hadoop集群,通常包括在集群的所有机器上解压软件并安装,或通过适合您操作系统包管理系统进行安装。把硬件分成不同的功能模块是非常重要的。
通常在集群里面,一台机器被指定为NameNode,另一台机器作为ResourceManager,他们两个是主服务节点,其他服务(如:Web App Proxy服务和MapReduce Job History 服务)经常运行在专用硬件或者共享硬件之上,具体因负载而定。
集群里其他的机器作为DataNode和NodeManager,这些是从服务节点。
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配置文件,设置特定值来控制Hadoop的bin/分发目录,
要配置Hadoop集群,首先你要配置Hadoop deamons执行所需的环境参数。
HDFS deamons包括NameNode,SecondaryNameNode和DataNode,YARN deamons包括ResourceManager,NodeManager和WebAppProxy。如果使用MapReduce,还需要运行MapReduce Job History Server。在大型集群环境,这些组件都是运行在独立的机器上。
管理员首先要使用etc/hadoop/hadoop-env.sh和 etc/hadoop/mapred-env.sh 和etc/hadoop/yarn-env.sh 脚本来做Hadoop deamons 程序运行环境的定制工作。
至少,你必须修改JAVA_HOME,并确保已经在所有远端节点上配置正确。
管理员可以根据下面表中的选项单独配置每个模块的参数。
守护进程 | 环境变量 |
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里面:
exportHADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"
可以查看etc/hadoop/hadoop-env.sh 其它的例子
其它你需要定制的有用配置参数包括:
- HADOOP_PID_DIR- Hadoop deamons的进程ID文件存放目录
- HADOOP_LOG_DIR - Hadoop deamons的日志文件存放目录,日志文件如果不存在会自动创建
- HADOOP_HEAPSIZE / YARN_HEAPSIZE-可以使用的heapsize最大值,单位MB,如果变量设置为1000,则heap会被设置为1000MB,这个参数用了配置deamon的heap大小,默认值是1000,如果你想每个deamon配置单独的值,你可以使用这个参数。
大部分场景,你应该修改HADOOP_PID_DIR和HADOOP_LOG_DIR目录,保证它们只能被运行Hadoop deamons的用户写入,否则会有链式攻击的风险。
同样,经常需要在系统脚本环境变量里面配置HADOOP_PREFIX 参数,例如,在/etc/profile里面配置简单的脚本如下:
HADOOP_PREFIX=/path/to/hadoop
exportHADOOP_PREFIX
守护进程 | 环境变量 |
ResourceManager | YARN_RESOURCEMANAGER_HEAPSIZE |
NodeManager | YARN_NODEMANAGER_HEAPSIZE |
WebAppProxy | YARN_PROXYSERVER_HEAPSIZE |
Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_HEAPSIZE |
这节讲述一些在特定的配置文件里面需要配置的重要参数,
配置文件:etc/hadoop/core-site.xml
参数 | 值 | 说明 |
fs.defaultFS | HDFS文件系统的全局访问接口 Host:NameNode服务所在机器P地址 Port:NameNode服务对外端口 默认值:8020 | |
io.file.buffer.size | 131072 | IO读写缓存大小. |
配置文件:etc/hadoop/hdfs-site.xml
- NameNode相关配置
参数 | 值 | 说明 |
dfs.namenode.name.dir | Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently. | 如果这是一个逗号分隔的目录列表,则在所有目录中复制名称表,以实现冗余。 |
dfs.hosts /dfs.hosts.exclude | List of permitted/excluded DataNodes. | dfs.hosts of允许数据节点.如有必要,使用这些文件控制允许的数据节点列表。 |
dfs.blocksize | 268435456 | Blocksize 256MB,HDFS系统文件最小文件块的大小 |
dfs.namenode.handler.count | 100 | 更多的NameNode服务器线程来处理来自大量DataNode的RPC |
- DataNode相关配置
参数 | 值 | 说明 |
dfs.datanode.data.dir | Comma separated list of paths on the local filesystem of aDataNode where it should store its blocks. | 如果这是一个逗号分隔的目录列表,则数据将存储在所有命名的目录中,通常位于不同的设备上。 |
配置文件:etc/hadoop/yarn-site.xml
- ResourceManager和NodeManager相关配置
参数 | 值 | 说明 |
yarn.acl.enable | true /false | 是否启动ACLs 默认值:不启动 |
yarn.admin.acl | Admin ACL | 在群集上设置管理员的ACL。ACL是用于逗号分隔的用户,组的.默认值为*,表示任何人。只有空间的特殊价值意味着没有人能进入。 |
yarn.log-aggregation-enable | false | 是否启用日志聚合 默认值:不启用 |
- ResourceManager相关配置
参数 | 值 | 说明 |
yarn.resourcemanager.address | ResourceManager host:port for clients to submit jobs. | host :port如果设置,则覆盖yarn.resourcem中设置的主机名anager.hostname. |
yarn.resourcemanager.scheduler.address | ResourceManager host:port for ApplicationMasters to talk to Scheduler to obtain resources. | host :port如果设置,则覆盖yarn.resourcem中设置的主机名hostname. |
yarn.resourcemanager.resource-tracker.address | ResourceManager host:port for NodeManagers. | host :port如果设置,则覆盖yarn.resourcem中设置的主机名urcemanager.hostname. |
yarn.resourcemanager.admin.address | ResourceManager host:port for administrative commands. | host :port如果设置,则覆盖yarn.resourcem中设置的主机名anager.hostname. |
yarn.resourcemanager.webapp.address | ResourceManager web-ui host:port. | host :port如果设置,则覆盖yarn.resourcem中设置的主机名emanager.hostname. |
yarn.resourcemanager.hostname | ResourceManager host. | hhost可以设置的单一主机名设置allyarn.resourcemanager*地址资源。结果在resourcemanager组件的默认端口中。 |
yarn.resourcemanager.scheduler.class | ResourceManager Scheduler class. | Capacity scheduler (推荐) , fairs cheduler (也推荐) , 或者fifo scheduler(不推荐) |
yarn.scheduler.minimum-allocation-mb | Minimum limit of memory to allocate to each container request at the Resource Manager. | 单位:MB |
yarn.scheduler.maximum-allocation-mb | Maximum limit of memory to allocate to each container request at the Resource Manager. | 单位:MB |
yarn.resourcemanager.nodes.include-path/ yarn.resourcemanager.nodes.exclude-path | List of permitted/excluded NodeManagers. | 如有必要,使用这些文件控制允许的nodemanagers列表。 |
- NodeManager相关配置
参数 | 值 | 说明 |
yarn.nodemanager.resource.memory-mb | Resource i.e. available physical memory, in MB, for given NodeManager | 定义可用于运行容器的nodemanager上的可用资源总数。 |
yarn.nodemanager.vmem-pmem-ratio | Maximum ratio by which virtual memory usage of tasks may exceed physical memory | 每个任务的虚拟内存使用可能超过其物理内存限制。在nodemanager上的任务使用的虚拟内存总量可能超过此比率的物理内存使用率。 |
yarn.nodemanager.local-dirs | Comma-separated list of paths on the local filesystem where intermediate data is written. | 在写入中间数据的本地文件系统上的yarn.nodemanager.local的路径列表。多路径帮助扩展磁盘i/o |
yarn.nodemanager.log-dirs | Comma-separated list of paths on the local filesystem where logs are written. | 在写入日志的本地文件系统上的yarn.nodemanager.log的路径列表。多路径帮助扩展磁盘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 -应用程序} / $ {乌塞尔} / $ { thisparam}。 |
yarn.nodemanager.aux-services | mapreduce_shuffle | 需要为MapReduce设置的洗牌服务 |
- History Server相关配置
参数 | 值 | 说明 |
yarn.log-aggregation.retain-seconds | -1 | 在删除聚合日志之前保留多长时间。-1禁用。小心,设置这个太小,您将垃圾邮件的名称节点。 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 检查聚合日志保留之间的时间。如果设置为0或负值,则值将计算为聚合日志保留时间的十分之一。小心,设定这个太小,你垃圾化你的NameNode |
配置文件:etc/hadoop/mapred-site.xml
- MapReduce应用相关配置
参数 | 值 | 说明 |
mapreduce.framework.name | yarn | 执行框架设置为YARN |
mapreduce.map.memory.mb | 1536 | Maps的内存资源使用上限 |
mapreduce.map.java.opts | -Xmx1024M | Larger heap-size for child jvms of maps. Maps虚拟机堆栈的内存资源使用上限 |
mapreduce.reduce.memory.mb | 3072 | Reduce的内存资源使用上限 |
mapreduce.reduce.java.opts | -Xmx2560M | Reduce虚拟机堆栈的内存资源使用上限 |
mapreduce.task.io.sort.mb | 512 | 排序任务的内存资源使用上限,单位:MBs, |
mapreduce.task.io.sort.factor | 100 | 排序任务是要的factor个数。 |
mapreduce.reduce.shuffle.parallelcopies | 50 | Reduce并行拷贝个数 |
- MapReduce JobHistory Server相关配置
参数 | 值 | 说明 |
mapreduce.jobhistory.address | MapReduce JobHistory Server host:port | 默认端口:10020 |
mapreduce.jobhistory.webapp.address | MapReduce JobHistory Server Web UI host:port | 默认端口:19888 |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | MapReduce写历史文件-临时文件目录 |
mapreduce.jobhistory.done-dir | /mr-history/done | MapReduce写历史文件-结果文件目录 |
Hadoop提供了方法,每个管理员可以配置NodeManager运行脚本定期检查节点是否健康。
管理员可以通过执行脚本检查节点是否处于健康状态,如果脚本发现节点处于不健康状态,他会在标准输出设备输出带有ERROR的字符串,NodeManager执行脚本定期检查他的输出,如果脚本输出ERROR,像上面提到的,节点会被报告为不健康,节点会被ResourceManager加到黑名单,后续就不会有任务被分派给该节点。然后NodeManager会继续运行脚本,如果这个节点又恢复健康了,他就会自动被从黑名单节点中去除,这个节点的健康依赖于脚本的输出,如果不健康,就可以被管理员在web界面上看到,节点不健康的时间也会显示在web页面上。
在etc/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 | 检查节点状态的脚本参数. |
yarn.nodemanager.health-checker.script.interval-ms | Node health script interval | 运行健康检查脚本的时间周期 |
yarn.nodemanager.health-checker.script.timeout-ms | Node health script timeout interval | 节点健康检查超时时间 |
如果只是一些本地磁盘坏了,健康检查脚本不会报告ERROR,NodeManager有能力检查本地磁盘的健康(特别检查nodemanager-local-dirs and nodemanager-log-dirs)并且在到达坏目录上限后,基于yarn.nodemanager.disk-health-checker.min-healthy-disks参数控制,这个节点被标识不健康,这些信息被发送给ResourceManager。启动盘是否RAID或启动盘发生故障也会被健康检查脚本识别。
在你的etc/hadoop/slaves文件里,列上所有的slave主机名或ip地址,一行一个,脚本将使用etc/hadoop/slaves文件同时在多台主机上运行命令。他不是被基于Java的hadoop配置文件使用。想要使用这个功能,需要在运行hadoop程序的账号之间配置Ssh信任访问(通过免密登录或其他方式,如Kerberos)。
很多Hadoop组件是有机架感知的,并且可以从网络拓扑获利提高性能和安全。Hadoop daemons通过管理配置模块获取集群中slave节点机柜信息。请查看看Rack Awareness文档关于更详细的信息.
强烈推荐在启动HDFS之前配置机架感知。
Hadoop使用Apache通用日志框架Apachelog4j来管理log,编辑etc/hadoop/log4j.properties 文件来定制Hadoop daemons的日志配置文件(日志格式等等)
配置完毕后,需要分发配置文件到所有机器的HADOOP_CONF_DIR目录。在所有机器上,配置目录应该是相同的。
通常情况下,建议HDFS和YARN使用独立的用户运行。在大多数安装中,HDFS进程使用hdfs用户,而YARN进程使用yarn用户。
要启动一个Hadoop集群,你需要把HDFS和YARN集群两个都启动。
首次启动HDFS时,需要格式化文件系统,通过hdfs用户,使用以下命令可以格式化一个新的分布式文件系统:
[hdfs]$$HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>
在指定节点上,通过hdfs用户,使用以下命令可以启动HDFS NameNode服务:
[hdfs]$$HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfsstart namenode
在所有指定节点上,通过hdfs用户,使用以下命令可以启动HDFS DataNode服务:
[hdfs]$$HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfsstart datanode
如果etc/hadoop/slaves 和ssh信任访问已配置,通过hdfs用户,使用以下实用脚本可以启动所有的HDFS进程:
[hdfs]$$HADOOP_PREFIX/sbin/start-dfs.sh
在指定ResourceManager节点上,通过yarn用户,使用以下命令可以启动YARN服务:
[yarn]$$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR startresourcemanager
在所有指定节点上,通过yarn用户,运行以下脚本可以启动NodeManager服务:
[yarn]$$HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR startnodemanager
通过yarn用户,使用以下脚本可以启动WebAppProxy server服务,如果多台服务器做负载均衡,则需要在每台机器上运行:
[yarn]$$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR startproxyserver
如果etc/hadoop/slaves 和ssh信任访问已配置,通过yarn用户,使用以下实用脚本可以停止所有的YARN进程:
[yarn]$$HADOOP_PREFIX/sbin/start-yarn.sh
在指定服务器上,通过mapred用户,使用以下命令可以启动MapReduce JobHistoryServer 服务:
[mapred]$$HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR starthistoryserver
在指定NameNode节点上,通过hdfs用户,使用以下命令可以停止HDFS NameNode服务:
[hdfs]$$HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfsstop namenode
通过hdfs用户,使用以下脚本可以停止DataNode服务:
[hdfs]$$HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfsstop datanode
如果etc/hadoop/slaves 和ssh信任访问被配置,通过hdfs用户,使用以下实用脚本可以停止所有的HDFS进程:
[hdfs]$$HADOOP_PREFIX/sbin/stop-dfs.sh
在指定ResourceManager节点上,通过yarn用户,使用以下命令可以停止ResourceManager服务:
[yarn]$$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stopresourcemanager
在slave节点上,通过yarn用户,运行以下脚本可以停止NodeManager服务:
[yarn]$$HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR stopnodemanager
如果etc/hadoop/slaves 和ssh信任访问被配置,通过yarn用户,可以使用以下实用脚本来停止所有YARN进程:
[yarn]$$HADOOP_PREFIX/sbin/stop-yarn.sh
在WebAppProxy server节点上,通过yarn用户,使用以下命令可以停止WebAppProxy server服务,如果使用多台服务器做负载均衡,则需要在每台机器上运行。
[yarn]$$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stopproxyserver
在指定节点,通过mapred用户,使用以下命令可以停止MapReduce JobHistoryServer服务:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh--config $HADOOP_CONF_DIR stop historyserver
Hadoop集群启动并运行后,实用一下web用户界面可以检查组件运行状态:
守护进程 | Web用户界面 | 说明 |
NameNode | Nn_host:NameNode节点的IP地址 Port:NameNode的web用户界面端口 默认HTTP端口是50070 | |
ResourceManager | Rm_host:ResourceManager节点的IP地址 Port:ResourceManager的web用户界面端口 默认HTTP端口是8088 | |
MapReduce JobHistory Server | Jhs_host:MapReduce JobHistory服务节点的IP地址 Port:MapReduce JobHistory服务的web用户界面端口 默认HTTP端口是19888 |