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

11 篇文章 0 订阅
11 篇文章 0 订阅

目标

这个文档介绍怎么使用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的值。
管理员可以使用下面的选项单独配置每一个进程,选项如下:

进程环境变量
NameNodeHADOOP_NAMENODE_OPTS
DataNodeHADOOP_DATANODE_OPTS
Secondary NameNodeHADOOP_SECONDARYNAMENODE_OPTS
ResourceManagerYARN_RESOURCEMANAGER_OPTS
NodeManagerYARN_NODEMANAGER_OPTS
WebAppProxyYARN_PROXYSERVER_OPTS
Map Reduce Job History ServerHADOOP_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/hadoop
export HADOOP_PREFIX

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

进程环境变量
ResourceManagerYARN_RESOURCEMANAGER_HEAPSIZE
NodeManagerYARN_NODEMANAGER_HEAPSIZE
Secondary NameNodeYARN_PROXYSERVER_HEAPSIZE
Map Reduce Job History ServerHADOOP_JOB_HISTORYSERVER_HEAPSIZE

配置Hadoop进程

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

etc/hadoop/core-site.xml
参数备注
fs.defaultFSNameNode地址hdfs://host:port/
io.file.buffer.size131072SequenceFiles的读写缓冲区大小
etc/hadoop/hdfs-site.xml

配置NameNode:

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

配置DataNode:

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

配置ResourceManager 和NodeManager:

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

配置ResourceManager:

参数备注
yarn.resourcemanager.addressResourceManager 主机:端口,客户端用来提交任务。如果不设置,默认是yarn.resourcemanager.hostname的值
yarn.resourcemanager.scheduler.addressResourceManager 主机:端口,ApplicationMasters向Scheduler获得资源如果不设置,默认是yarn.resourcemanager.hostname的值
yarn.resourcemanager.resource-tracker.addressResourceManager 主机:端口,NodeManagers使用如果不设置,默认是yarn.resourcemanager.hostname的值
yarn.resourcemanager.admin.addressResourceManager 主机:端口,管理员命令如果不设置,默认是yarn.resourcemanager.hostname的值
yarn.resourcemanager.webapp.addressResourceManager 主机:端口,web-ui访问如果不设置,默认是yarn.resourcemanager.hostname的值
yarn.resourcemanager.hostnameResourceManager主机设置yarn.resourcemanager*address的默认地址,使用默认端口
yarn.resourcemanager.scheduler.classResourceManager调度器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-mbNodeManager资源的物理内存定义了NodeManager总可用资源可用运行容器
yarn.nodemanager.vmem-pmem-ratio可超过物理内存的虚拟内存的最大比例每个任务的虚拟内存可超过物理内存,但必须在这个比例限制下。
yarn.nodemanager.local-dirs逗号分开的本地路径,存放中间数据多路径传播磁盘I/O
yarn.nodemanager.log-dirs逗号分开的日志路径多路径传播磁盘I/O
yarn.nodemanager.log.retain-seconds10800默认日志文件保留时间,仅在log-aggregation是false时可用
yarn.nodemanager.remote-app-log-dir/logsHDFS目录,存储应用日志,需要设置相应的权限,仅在log-aggregation为true时可用
yarn.nodemanager.remote-app-log-dir-suffixlogs远程日志目录的后缀,格式为 yarn.nodemanager.remoteapplogdir/ {user}/${thisParam} ,仅在log-aggregation为true时可用
yarn.nodemanager.aux-servicesmapreduce_shuffleMap 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.namyarn执行框架设置为Hadoop YARN
mapreduce.map.memory.mb1536map所需要的内存资源
mapreduce.map.java.opts-Xmx1024Mmap 子 JVM的堆大小
mapreduce.reduce.memory.mb3072reduce锁需要的内存资源
mapreduce.reduce.java.opts-Xmx2560Mreduce 子 JVM的堆大小
mapreduce.task.io.sort.mb512为了排序效率更高,可以使用更高的内存
mapreduce.task.io.sort.factor100排序文件一次合并的流数量
mapreduce.reduce.shuffle.parallelcopies50reduce从map的结果中拷贝数据的并行数量

配置MapReduce JobHistory服务:

参数备注
mapreduce.jobhistory.address主机:端口默认端口是10020
mapreduce.jobhistory.webapp.addressWEB-UI的主机:端口默认端口19888
mapreduce.jobhistory.intermediate-done-dir/mr-history/tmpMapReduce任务的历史文件目录
mapreduce.jobhistory.done-dir/mr-history/doneMR 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接口备注
NameNodehttp://nn_host:port/默认端口50070
ResourceManagerhttp://rm_host:port/默认端口8088
MapReduce JobHistory Serverhttp://jhs_host:port/默认端口19888
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值