hadoop2.8.2官方文档之分布式集群

来源:互联网 发布:greenvpn网络加速器 编辑:程序博客网 时间:2024/06/06 07:23

目标

这个文档介绍怎么使用Hadoop集群,从几个节点到几千个节点。想要玩转Hadoop,你可能需要先尝试一下单节点模式:see(单节点模式)
这个文档不包括一些高级主题,比如:安全性和高可用性。

需求

  • 安装java正确版本。(单节点模式中介绍了如何选择正确java版本)
  • 从Apache镜像下载稳定版的Hadoop。

安装

安装一个Hadoop集群需要在不同的机器上解压软件。把不同的硬件(服务器)拆分为不同的功能是非常重要的。
通常一台集群中的一台机器指定作为NameNode,另外一台作为ResourceManager,这是主节点。其他的服务,比如Web App代理服务和MapReduce任务历史服务,通常运行在专门的机器上或者共享的机器上,这需要根据负载因素考虑。
急群中剩下的机器作为DataNode和NodeManager,这是从节点。

配置Hadoop为非安全模式

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集群,你需要配置Hadoop运行的环境,也就是Hadoop运行需要的参数。
HDFS进程包括:NameNode,SecondaryNameNode和DataNode。
YARN进程包括:ResourceManager,NodeManager和WebAppProxy。
如果用到MapReduce的话,MapReduce任务历史服务也需要运行。为了集群能够更大,这些东西一般都运行在不同的机器上。

配置Hadoop进程的环境

管理员可以用etc/hadoop/hadoop-env.sh或者etc/hadoop/mapred-env.sh和etc/hadoop/yarn-env.sh 脚本来自定义具体地址配置。
至少,你必须指定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中。

export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"

更多的配置可以查看etc/hadoop/hadoop-env.sh 文件。下面列几个常用到的参数。

  • HADOOP_PID_DIR :进程id文件存放的目录。
  • HADOOP_LOG_DIR :进程的日志文件存放的目录。
  • HADOOP_HEAPSIZE / YARN_HEAPSIZE:最大堆大小,单位MB。如果这个参数设置为1000,那么堆就是1000MB。默认就是1000。

通常情况,你应该指定HADOOP_PID_DIR 和HADOOP_LOG_DIR ,并且使得这些目录只有指定用户才有权限操作。否则会有潜在符号链接攻击的危险。
配置HADOOP_PREFIX 也是很常用的,举个例子,在/etc/profile.d中添加一个简单的脚本:

HADOOP_PREFIX=/path/to/hadoopexport HADOOP_PREFIX

还有一些设置堆大小的参数如下所示:

进程 环境变量 ResourceManager YARN_RESOURCEMANAGER_HEAPSIZE NodeManager YARN_NODEMANAGER_HEAPSIZE Secondary NameNode YARN_PROXYSERVER_HEAPSIZE Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_HEAPSIZE

配置Hadoop进程

这个章节介绍一些配置文件中重要的参数。

etc/hadoop/core-site.xml

参数 值 备注 fs.defaultFS NameNode地址 hdfs://host:port/ io.file.buffer.size 131072 SequenceFiles的读写缓冲区大小

etc/hadoop/hdfs-site.xml

配置NameNode:

参数 值 备注 dfs.namenode.name.dir NameNode存放命名空间和事务日志的路径 逗号分开的路径,为了冗余,名称表会存在在多个路径中 dfs.hosts /dfs.hosts.exclude 允许和排除的DataNode列表 如果需要,使用这些文件控制那些Datanode是被允许的。 dfs.blocksize 268435456 大的文件系统HDFS块大小为256M fs.namenode.handler.count 100 多个NameNode服务线程处理大量DataNodes的RPC调用

配置DataNode:

参数 值 备注 dfs.datanode.data.dir 数据块的本地存储路径,逗号分开 如果是逗号分开的多个路径,那么数据会存储在所有的目录中,通常在不同的设备上

etc/hadoop/yarn-site.xml

配置ResourceManager 和NodeManager:

参数 值 备注 yarn.acl.enable true/false 使得ACLs可用,默认是false yarn.admin.acl Admin ACL ACL指定集群的管理员,默认是*。逗号分开用户空间和组 yarn.log-aggregation-enable false 日志聚合开关

配置ResourceManager:

参数 值 备注 yarn.resourcemanager.address ResourceManager 主机:端口,客户端用来提交任务。 如果不设置,默认是yarn.resourcemanager.hostname的值 yarn.resourcemanager.scheduler.address ResourceManager 主机:端口,ApplicationMasters向Scheduler获得资源 如果不设置,默认是yarn.resourcemanager.hostname的值 yarn.resourcemanager.resource-tracker.address ResourceManager 主机:端口,NodeManagers使用 如果不设置,默认是yarn.resourcemanager.hostname的值 yarn.resourcemanager.admin.address ResourceManager 主机:端口,管理员命令 如果不设置,默认是yarn.resourcemanager.hostname的值 yarn.resourcemanager.webapp.address ResourceManager 主机:端口,web-ui访问 如果不设置,默认是yarn.resourcemanager.hostname的值 yarn.resourcemanager.hostname ResourceManager主机 设置yarn.resourcemanager*address的默认地址,使用默认端口 yarn.resourcemanager.scheduler.class ResourceManager调度器 CapacityScheduler(推荐),FairScheduler(推荐)和FifoScheduler yarn.scheduler.minimum-allocation-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资源的物理内存 定义了NodeManager总可用资源可用运行容器 yarn.nodemanager.vmem-pmem-ratio 可超过物理内存的虚拟内存的最大比例 每个任务的虚拟内存可超过物理内存,但必须在这个比例限制下。 yarn.nodemanager.local-dirs 逗号分开的本地路径,存放中间数据 多路径传播磁盘I/O yarn.nodemanager.log-dirs 逗号分开的日志路径 多路径传播磁盘I/O yarn.nodemanager.log.retain-seconds 10800 默认日志文件保留时间,仅在log-aggregation是false时可用 yarn.nodemanager.remote-app-log-dir /logs HDFS目录,存储应用日志,需要设置相应的权限,仅在log-aggregation为true时可用 yarn.nodemanager.remote-app-log-dir-suffix logs 远程日志目录的后缀,格式为yarn.nodemanager.remoteapplogdir/{user}/${thisParam} ,仅在log-aggregation为true时可用 yarn.nodemanager.aux-services mapreduce_shuffle Map Reduce应用的Shuffle服务

配置历史服务(需要移动到任务地方):

参数 值 备注 yarn.log-aggregation.retain-seconds -1 聚合日志的保存时间,-1表示不可用,如果设置的太小会向namenode发送垃圾邮件 yarn.log-aggregation.retain-check-interval-seconds -1 聚合日志的检查时间间隔,如果是0或者负数,那么就是聚合日志保存时间的十分之一。如果设置的太小会向namenode发送垃圾邮件。

etc/hadoop/mapred-site.xml

配置MapReduce应用:

参数 值 备注 mapreduce.framework.nam yarn 执行框架设置为Hadoop YARN mapreduce.map.memory.mb 1536 map所需要的内存资源 mapreduce.map.java.opts -Xmx1024M map 子 JVM的堆大小 mapreduce.reduce.memory.mb 3072 reduce锁需要的内存资源 mapreduce.reduce.java.opts -Xmx2560M reduce 子 JVM的堆大小 mapreduce.task.io.sort.mb 512 为了排序效率更高,可以使用更高的内存 mapreduce.task.io.sort.factor 100 排序文件一次合并的流数量 mapreduce.reduce.shuffle.parallelcopies 50 reduce从map的结果中拷贝数据的并行数量

配置MapReduce JobHistory服务:

参数 值 备注 mapreduce.jobhistory.address 主机:端口 默认端口是10020 mapreduce.jobhistory.webapp.address WEB-UI的主机:端口 默认端口19888 mapreduce.jobhistory.intermediate-done-dir /mr-history/tmp MapReduce任务的历史文件目录 mapreduce.jobhistory.done-dir /mr-history/done MR JobHistory管理的历史文件目录

NodeManager的健康监测

Hadoop提供了一个监测节点是否健康的机制,管理员通过配置NodeManager运行一个间隔执行的脚本就可以做到做到。
管理员选择脚本中提供的功能就可以监测节点的健康状态,如果脚本监测到节点处于一个非健康状态,就会打印一个ERROR开头的日志到标准输出,NodeManager间隔执行脚本并检查它的输出。如果脚本的输出包含一个ERROR,那么就会报告这个节点处于非健康状态,然后ResourceManager就会把这个节点加入黑名单,任务不会再让这个节点处理。此后NodeManager依旧会执行这个脚本,来检测这个节点是否恢复健康,恢复健康后ResourceManager 会自动的移除黑名单。节点的健康是根据脚本的输出来检测的,我们可以通过ResourceManager 的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 超时 脚本执行的超时时间

如果本地应该坏了的话,这个脚本不应该打印ERROR。NodeManager有能力检测硬盘是否正常工作(具体检测nodemanager-local-dirs和nodemanager-log-dirs),如果达到了yarn.nodemanager.disk-health-checker.min-healthy-disks配置的数量,整个节点就会被标记为非健康的,这个信息也会发送给ResourceManager。

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]$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>

启动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访问已经配置好了(查看单节点安装),所有的HDFS进程可以使用一个脚本启动,使用hdfs用户:

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

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

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

在每一个yarn节点上执行下面的脚本启动NodeManager :

[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访问已经配置好了(查看单节点安装),所有的YARN进程可以使用一个脚本启动,使用yarn用户:

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

在指定的服务器上启动MapReduce JobHistory服务,使用mapred用户:

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

关闭Hadoop

在NameNode节点上停止NameNode使用下面的命令。用hdfs用户:

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

执行脚本停止DataNode。

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

如果etc/hadoop/slaves和ssh访问已经配置好了(查看单节点安装),所有的HDFS进程可以使用一个脚本停止,使用hdfs用户:

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

在ResourceManager 节点上停止ResourceManager 使用下面的命令,使用yarn用户:

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

在slave上执行一个脚本停止NodeManager ,yarn用户:

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

如果etc/hadoop/slaves和ssh访问已经配置好了(查看单节点安装),所有的YARN进程可以使用一个脚本停止,使用yarn用户:

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

指定服务器上,停止MapReduce JobHistory服务,使用下面命令,mapred用户:

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

Web接口

一旦Hadoop集群启动了,你可以使用下面的web-ui查看各种组件,

进程 web接口 备注 NameNode http://nn_host:port/ 默认端口50070 ResourceManager http://rm_host:port/ 默认端口8088 MapReduce JobHistory Server http://jhs_host:port/ 默认端口19888
原创粉丝点击