hadoop2.8.2官方文档之分布式集群
2017-10-30 19:24
441 查看
目标
这个文档介绍怎么使用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 |
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/hadoop export 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调用 |
参数 | 值 | 备注 |
---|---|---|
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 | 日志聚合开关 |
参数 | 值 | 备注 |
---|---|---|
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 |
参数 | 值 | 备注 |
---|---|---|
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.remote−app−log−dir/{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.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 | 超时 | 脚本执行的超时时间 |
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 |
相关文章推荐
- hadoop2.8.2官方文档之单节点集群
- Hadoop全分布式集群配置文档
- Hadoop Single Node Setup(hadoop本地模式和伪分布式模式安装-官方文档翻译 2.7.3)
- 5节点Hadoop分布式集群搭建-超详细文档
- Ubuntu搭建Hadoop --伪分布式模式 ----官方文档翻译
- 5节点Hadoop分布式集群搭建-超详细文档
- hadoop伪分布式安装【翻译自hadoop1.1.2官方文档】
- 5节点Hadoop分布式集群搭建-超详细文档
- 5节点Hadoop分布式集群搭建-超详细文档
- 5节点Hadoop分布式集群搭建-超详细文档
- HADOOP集群安装(官方文档翻译)
- 5节点Hadoop分布式集群搭建-超详细文档
- Hadoop官方文档(1) — 设置单节点集群
- 5节点Hadoop分布式集群搭建-超详细文档
- 【大数据系列】hadoop集群设置官方文档翻译
- 5节点Hadoop分布式集群搭建-超详细文档
- Hadoop(2.7.3)集群配置-官方文档
- 5节点Hadoop分布式集群搭建-超详细文档
- 5节点Hadoop分布式集群搭建-超详细文档
- hadoop-2.7.4-翻译文档-分布式集群搭建