问题导读
1.说说你对集群配置的认识?
2.集群配置的配置项你了解多少?
3.下面内容让你对集群的配置有了什么新的认识?
目的
目的1:
这个文档描述了如何安装配置hadoop集群,从几个节点到上千节点。为了学习hadoop,你可能先从单节点入手 (查看 Single Node Setup).这里有中文版hadoop2.7【单节点】单机、伪分布、分布式安装指导
http://www.aboutyun.com/thread-12798-1-1.html
这个文档不包括:hadoop在安全模式下配置和HA【高可用配置】,后面在更新
目的2:
我们看了很多集群配置文档,你是否静下心来,想集群配置到底是怎么一回事。
准备
1.安装Java
2.下载hadoop包
##################################
包集合:
hadoop家族、strom、spark、Linux、flume等jar包、安装包汇总下载(持续更新)
http://www.aboutyun.com/thread-8178-1-1.html
##################################
安装
安装hadoop集群包括:解压包,配置hadoop,划分主节点和子节点。
集群中可以将namenode和ResourceManager分布在不同的机器上,这些称之为master。其它服务例如:Web App Proxy Server 和 MapReduce Job History server,根据负载可以共享设施或则使用专用的机器。
集群其它机器作为 DataNode 和 NodeManager.这些是slaves
配置hadoop【非安全模式】
hadoop配置文件被分为两类:
1.只读默认配置,有下列配置文件
core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml.
2.定制配置,有下列配置文件
etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml and etc/hadoop/mapred-site.xml.
另外你可以配置hadoop脚本,在hadoop的bin目录下,通过 etc/hadoop/hadoop-env.sh 和 etc/hadoop/yarn-env.sh来指定值。
配置hadoop集群需要配置环境变量,Hadoop守护进程执行以及Hadoop守护进程的配置参数。如果没有配置过集群,可能对这个了解不多,具体参考
hadoop(2.x)以hadoop2.2为例完全分布式最新高可靠安装文档
http://www.aboutyun.com/thread-7684-1-1.html
hdfs守护进程:
NameNode, SecondaryNameNode, 和 DataNode
YARN 守护进程:
ResourceManager, NodeManager, 和 WebAppProxy
如果运行MapReduce , MapReduce Job History Server也会运行。前提需要配置并开启。对于比较大的集群安装,他们分别运行在不同的客户端。
配置守护进程环境变量
管理员使用 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 声明如下:[mw_shl_code=bash,true] export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"[/mw_shl_code]
查看 etc/hadoop/hadoop-env.sh 其它例子
其它可定义的有用参数包括
- HADOOP_PID_DIR - 存储守护进程id的文件目录.
- HADOOP_LOG_DIR - 存储守护进程日志文件目录. 日志文件自动创建如果不存在。
- HADOOP_HEAPSIZE / YARN_HEAPSIZE -heapsize内存最大配置.如果变量为1000, heap 是1000MB. 这是为守护进程配置heap. 默认值1000M.
在大多数情况下,应该指定HADOOP_PID_DIR 和 HADOOP_LOG_DIR,他们由用户运行hadoop守护进程所写,否则可能是潜在攻击。
传统配置HADOOP_PREFIX 在系统级环境变量配置,例如一个简单的脚本 /etc/profile.d:
[mw_shl_code=bash,true] HADOOP_PREFIX=/path/to/hadoop
export HADOOP_PREFIX[/mw_shl_code]
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 | | io.file.buffer.size | 131072 | 读写序列文件缓存大小 |
彻底了解namenode
Parameter | Value | Notes | dfs.namenode.name.dir | 本地文件系统存储着命令空间和操作日志 | 如果含有多个目录,是冗余的【多个目录以逗号隔开】 | dfs.hosts / dfs.hosts.exclude | 列出排除DataNodes. | 如何需要使用这一功能来控制datanode的访问 | dfs.blocksize | 268435456 | 大文件系统HDFS blocksize 256MB | dfs.namenode.handler.count | 100 | 更多 NameNode server 线程来处理来自datanode的 RPCs请求 |
Parameter | Value | Notes | dfs.datanode.data.dir | 存储blocks的本地路径列表,用逗号隔开 | 这是一个逗号分隔的目录列表, 数据将被存储在所有被命名的目录中,通常在不同的设备上。 |
Parameter | Value | Notes | yarn.acl.enable | true / false | 是否启用ACLs,默认为false不启用 | yarn.admin.acl | Admin ACL | admin.acl设置YARN的集群管理员,. 值为*表示任何人都可以. 仅指定的可以访问 | yarn.log-aggregation-enable | false | 配置启用或则禁用日志 |
Parameter | Value | Notes | yarn.resourcemanager.address | ResourceManager host:port 为客户端提交job. | 如果配置host:port , 会覆盖在yarn.resourcemanager.hostname 设置的 hostname | yarn.resourcemanager.scheduler.address | ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。 | 如果配置host:port , 会覆盖在yarn.resourcemanager.hostname 设置的 hostname | yarn.resourcemanager.resource-tracker.address | ResourceManager 对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等。 | 如果配置host:port , 会覆盖在yarn.resourcemanager.hostname 设置的 hostname | yarn.resourcemanager.admin.address | ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等 | 如果配置host:port , 会覆盖在yarn.resourcemanager.hostname 设置的 hostname | yarn.resourcemanager.webapp.address | ResourceManager web-ui host:port(ResourceManager访问端口) | 如果配置host:port , 会覆盖在yarn.resourcemanager.hostname 设置的 hostname | yarn.resourcemanager.hostname | ResourceManager 客户端. | 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 调度类 . | CapacityScheduler (recommended), FairScheduler (also recommended), or FifoScheduler | yarn.scheduler.minimum-allocation-mb | 单个container可申请的最小内存资源量。比如设置为1024,则运行MapRedce作业时,每个Task最少可申请1024MB内存 | In MBs | yarn.scheduler.maximum-allocation-mb | 单个container可申请的最大内存资源量。比如设置为3072,则运行MapRedce作业时,每个Task最多可申请3072MB内存。 | In MBs | yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path | | NodeManager黑白名单。如果发现若干个NodeManager存在问题,比如故障率很高,任务运行失败率高,则可以将之加入黑名单中。注意,这两个配置参数可以动态生效。(调用一个refresh命令即可) 默认值:“” |
Parameter | Value | Notes | yarn.nodemanager.resource.memory-mb | NodeManager总的可用物理内存。 | 定义了资源总量的nodemanager可用运行containers | yarn.nodemanager.vmem-pmem-ratio | 每使用1MB物理内存,最多可用的虚拟内存数。 | 每个任务的虚拟内存的使用可能会超过其物理内存的限制,这个比例。通过对nodemanager任务使用的虚拟内存总量可能超过物理内存使用的比率。 | yarn.nodemanager.local-dirs | 中间结果存放位置 | 这个参数通常会配置多个目录,分摊磁盘IO负载。 | yarn.nodemanager.log-dirs | 日志存放路径 | 这个参数通常会配置多个目录,分摊磁盘IO负载。 | 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.aux-services | mapreduce_shuffle | NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序. |
- 配置 History Server (Needs to be moved elsewhere):
Parameter | Value | Notes | yarn.log-aggregation.retain-seconds | -1 | 参数解释:在HDFS上聚集的日志最多保存多长时间。 默认值:-1 | yarn.log-aggregation.retain-check-interval-seconds | -1 | 参数解释:多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10。 默认值:-1 | mapreduce.map.memory.mb
mapreduce.reduce.memory.mb
说明:这两个参数指定用于MapReduce的两个任务(Map and Reduce task)的内存大小,其值应该在RM中的最大最小container之间。如果没有配置则通过如下简单公式获得:
max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))
一般的reduce应该是map的2倍。注:这两个值可以在应用启动时通过参数改变;
mapreduce.map.java.opts
mapreduce.reduce.java.opts
说明:这两个参主要是为需要运行JVM程序(java、scala等)准备的,通过这两个设置可以向JVM中传递参数的,与内存有关的是,-Xmx,-Xms等选项。此数值大小,应该在AM中的map.mb和reduce.mb之间。
Parameter | Value | Notes | mapreduce.framework.name | yarn | 执行框架设置为Hadoop YARN. | mapreduce.map.memory.mb | 1536 | maps资源限制 | mapreduce.map.java.opts | -Xmx1024M | maps的child jvms heap-size | mapreduce.reduce.memory.mb | 3072 | reduces资源限制 | mapreduce.reduce.java.opts | -Xmx2560M | reduces的child jvms heap-size | mapreduce.task.io.sort.mb | 512 | 任务内部排序缓冲区大小 | mapreduce.task.io.sort.factor | 100 | 排序文件的时候一次同时最多可并流的个数,这里设置100。 | mapreduce.reduce.shuffle.parallelcopies | 50 | reuduce shuffle阶段并行传输数据的数量。 |
- 配置MapReduce JobHistory Server:
Parameter | Value | Notes | 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 | MR JobHistory Server管理的日志的存放位置。 |
监控NodeManagers健康
hadoop提供检测一个节点健康状态的机制,管理员可以配置NodeManager去周期性执行一个脚本来决定一个节点是否健康
管理员可以在这个脚本中做任何的状态监控从而决定此节点是否健康.如果脚本检测节点处于非健康状态,它必须打印必须打印error开头的标准输出。NodeManager 周期性检测,和检测输出,如果脚本输出包含错误(ERROR),如上所述,node的状态报告为unhealthy,该节点被资源管理器列为黑名单。该节点不会被分配任务。
尽管如此,如果资源管理器恢复健康状态,脚本继续运行,并且会自动被移除黑名单。节点脚本输出,提供给管理,在界面上节点不健康,以及在界面上显示节点健康时间。
下面参数可以被用来控制节点是否健康监视脚本在 etc/hadoop/yarn-site.xml.
参数 | 值 | 说明 | yarn.nodemanager.health-checker.script.path | Node health script | 节点健康状态监测脚本 | 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 和nodemanager-log-dirs)。当目录损坏数达到配置的阀值(yarn.nodemanager.disk-health-checker.min-healthy-disks配置的)之后整个节点就会被标记为不正常的。同时这些信息也会上报给资源管理器(resource manager),检测脚本也会检测启动盘。
Slaves File
列出所有slave hostnames or IP 地址在etc/hadoop/slaves 文件, 一行一个。Helper 脚本 (described below) 使用etc/hadoop/slaves 文件运行命令在许多客户端. 它不需要任何基于Java的hadoop配置,为了使用此功能,ssh必须连接信任( passphraseless 或则其它方法,比如 Kerberos)的账户运行hadoop
Hadoop 机架感知
许多hadoop具有感知功能和利用网络拓扑结构的性能和安全性。hadoop守护进程调用管理员配置模块获取集群slaves信息。更多信息查看 Rack Awareness ,开始启动hdfs之前,推荐配置集群机架感应。
日志
hadoop通过Apache Commons的日志框架使用 Apache log4j 作为日志。编辑 etc/hadoop/log4j.properties 文件定制hadoop守护进程日志配置比如log格式等
hadoop集群操作
所有的配置完成,分部署文件HADOOP_CONF_DIR目录分发到所有机器,他们在所有机器上路径是相同的。
建议hdfs和yarn使用独立的用户。hdfs执行hdfs用户,yarn使用yarn账户。
hadoop启动
启动hadoop集群,需要启动hdfs和yarn
第一次启动hdfs,必须要格式化,格式化分布式文件系统作为HDFS:
[mw_shl_code=bash,true][hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>[/mw_shl_code]
启动hdfs[mw_shl_code=bash,true][hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode[/mw_shl_code]
启动datanode
[mw_shl_code=bash,true][hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs start datanode[/mw_shl_code]
如果 etc/hadoop/slaves 和 ssh配置了相互访问 (see Single Node Setup), 所有hdfs可以使用下面命令
[mw_shl_code=bash,true][hdfs]$ $HADOOP_PREFIX/sbin/start-dfs.sh[/mw_shl_code]
启动yarn用下面命令,在指定的ResourceManager作为yarn
[mw_shl_code=bash,true][yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager[/mw_shl_code]
运行下面命令在指定的客户端作为yarn启动NodeManager
[mw_shl_code=bash,true][yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR start nodemanager[/mw_shl_code]
启动独立WebAppProxy server. 运行 WebAppProxy server作为yarn.如果多台服务器使用负载均衡,则每台都需运行
[mw_shl_code=bash,true][yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start proxyserver[/mw_shl_code]
如果etc/hadoop/slaves和ssh配置,启动脚本如下:
[mw_shl_code=bash,true][yarn]$ $HADOOP_PREFIX/sbin/start-yarn.sh[/mw_shl_code]
启动MapReduce JobHistory Server
[mw_shl_code=bash,true][mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver[/mw_shl_code]
hadoop停止
停止namenode,用下面命令
[mw_shl_code=bash,true][hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode[/mw_shl_code]
停止datanode,用下面命令
[mw_shl_code=bash,true][hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode[/mw_shl_code]
如果etc/hadoop/slaves 和 ssh配置相互访问,用下面脚本停止
[mw_shl_code=bash,true][hdfs]$ $HADOOP_PREFIX/sbin/stop-dfs.sh[/mw_shl_code]
停止ResourceManager用下面命令
[mw_shl_code=bash,true][yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager[/mw_shl_code]
运行脚本停止NodeManager
[mw_shl_code=bash,true][yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR stop nodemanager[/mw_shl_code]
如果etc/hadoop/slaves 和 ssh配置相互访问,则运行下面脚本
[mw_shl_code=bash,true][yarn]$ $HADOOP_PREFIX/sbin/stop-yarn.sh[/mw_shl_code]
停止WebAppProxy server。运行WebAppProxy,如果多台服务器使用负载平衡,则每一个都运行。
[mw_shl_code=bash,true][yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop proxyserver[/mw_shl_code]
停止MapReduce JobHistory Server,使用下面命令
[mw_shl_code=bash,true][mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver[/mw_shl_code]
Web Interfaces
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. |
相关文章
hadoop入门-第一章General:第一节单节点伪分布
hadoop入门-第一章General:第二节集群配置
hadoop入门-第一章General:第三节Hadoop初级入门之命令指南
hadoop入门-第一章General:第四节文件系统shell
hadoop入门-第一章General:第五节hadoop的兼容性说明
hadoop入门-第一章General:第六节开发人员和用户接口指南:hadoop接口分类
hadoop入门-第一章General:第七节Hadoop 文件系统 API :概述
hadoop入门-第二章common:第一节hadoop 本地库 指南
hadoop入门-第二章common:第二节hadoop代理用户 -超级用户代理其它用户
hadoop入门-第二章common:第三节机架智能感知
hadoop入门-第二章common:第四节安全模式说明
hadoop入门-第二章common:第五节服务级别授权指南
hadoop入门-第二章common:第六节Hadoop HTTP web-consoles认证机制
hadoop入门-第二章common:第七节Hadoop Key管理服务器(KMS) - 文档集
hadoop入门:第三章HDFS文档概述(一)
hadoop入门:第三章HDFS文档概述(二)
hadoop入门:第四章mapreduce文档概述
hadoop入门:第五章MapReduce REST APIs文档概述
hadoop入门:第六章YARN文档概述
hadoop入门:第七章YARN REST APIs
hadoop入门:第八章hadoop兼容文件系统
hadoop入门:第九章hadoop认证
hadoop入门:第十章hadoop工具
hadoop入门:第十一章hadoop配置
|