二、Hadoop集群

  • 目的
  • 准备工作
  • 安装
  • 在非保护模式下运行Hadoop
    • 配置Hadoop的守护进程环境
    • 在非保护模式下配置Hadoop守护进程
  • Hadoop的支架意识
  • 监视健康状态的节点管理器
  • slaves文件
  • 日志
  • 操纵Hadoop集群
    • 启动Hadoop
    • 关闭Hadoop
  • web接口

目的

这篇文档描述了如何安装、配置和管理从几个节点到几千个节点的Hadoop集群。

为了玩好Hadoop,你应该首先试着在单个机器上安装它(参考单个节点的建立)。

准备工作

从Apache所维护的镜像文件中下载一个稳定版本的Hadoop。

安装

安装一个Hadoop集群就是将解压的软件安装到集群当中的所有机器上。

典型地,在集群中的一台机器被设计成NameNode,另外一台设计成ResourceManager,它们就是主机。

在集群中余下的机器都充当着DataNode和NodeManager的角色。它们是从机。

在非保护模式下运行Hadoop

接下来的章节就描述了如何配置Hadoop集群。

配置文件

Hadoop配置有两种类型的重要配置文件:

  • 默认只读-core-default.xml,hdfs-default.xml,yarn-default.xml和mapred-default.xml
  • 针对站点配置-conf/core-site.xml,conf/hsdf-site.xml,conf/yarn-site.xml和conf/mapred-site.xml

另外,你能够配置目录/bin下的conf/hadoop-evn.sh和yarn-env.sh脚本文件的值来控制Hadoop的脚本。

展现配置

为了配置Hadoop集群,你需要配置Hadoop守护进程的执行环境和Hadoop守护进程的配置参数。

Hadoop守护进程有NameNode/DataNode和ResourceManager/NodeManager。

配置Hadoop守护进程的环境

管理员应该利用conf/hadoop-env.sh和conf/yarn-env.sh脚本来对Hadoop守护进程的环境做一些自定义的配置。

至少你应该配置JAVA_HOME。

在大多数的案例中,你也应该配置HADOOP_PID_DIR和HADOOP_SECURE_DN_PID_DIR来指向hadoop守护进程被用户写进的目录。否者存在潜在的符号链接攻击。

管理员能够使用下面的表格当中的配置选项来配置独立的守护进程:

守护进程 环境变量
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 YARN_JOB_HISTORYSERVER_OPTS

比如,将NameNode配置成使用parallelGC,下面的语句应该被加到hadoop-env.sh当中:

export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"

其他有用的能够自定义的配置参数包括:

  • HADOOP_LOG_DIR/YARN_LOG_DIR — 指向守护进程日志文件的存储目录。如果它们不存在,它们就会自动创建。
  • HADOOP_HEAPSIZE/YARN_HEAPSIZE — 指定能够使用的最大的堆内存,单位为MB。比如,如果将这个变量设置成1000,那么堆的大小就是1000MB。它就是为了配置守护进程的堆的大小。默认值为1000。如果想为每个进程配置独立的值,参数如下:
守护进程 环境变量
ResourceManager YARN_RESOURCEMANAGER_HEAPSIZE
NodeManager YARN_NodeMANAGER_HEAPSIZE
WebAppProxy YARN_PROXYSERVER_HEAPSIZE
Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_HEAPSIZE

在非保护模式下配置Hadoop守护进程

这一章节用来处理给定配置文件的一些重要参数:

  • conf/core-site.xml
参数
fs.defaultFS NameNode URI
io.file.buffer.size 131072
  • conf/hdfs-site.xml

    • 配置NameNode:
参数 注意
dfs.namenode.name.dir 指向NameNode存储的命名空间和事务日志的本地文件系统路径 如果这是一个用逗号分隔开来的一组目录,那么名称表格将会复制到所有的目录,形成冗余。

dfs.namenode.hosts /

dfs.namenode.hosts.exclude

列出所有允许的/排斥的DataNode 如果有必要,利用这些文件来控制允许的列表

dfs.blocksize

268435456 HDFS一块的大小为256MB

dfs.namenode.handler.count

100 大量的NameNode服务器线程从大量的DataNode处理RPC(Remote Procedure Call,远程过程调用)
    • 配置DataNode:
参数 注意

dfs.datanode.data.dir

以逗号进行分割的存储DataNode块的本地文件系统的路径 如果是以逗号分隔的一组目录,那么数据将会存储在所有的命名目录,一般在不同的设备
  • conf/yarn-site.xml

    • 配置ResourceManager和NodeManager:
参数 注意

yarn.acl.enable

true/false ACL(访问控制列表)是否有效?默认是false

yarn.admin.acl

Admin ACL 在即群上将ACL设置成admin。ACL是以一组用户之间为空来表示。默认的值为*,表示任何人。如果是空格意味着没有人能够访问
    • 配置ResourceManager:
参数 注意

yarn.resourcemanager.address

ResourceManager主机:端口 为了用户能够提交作业 主机:端口 如果设置了,就会覆盖在yarn.resourcemanager.hostname当中设置的主机名

yarn.resourcemanager.scheduler.address

ResourceManager主机:端口 为了应用主机能够与拥有资源的调度者进行会话 主机:端口,如果设置了,将会覆盖在yarn.resourcemanager.hostname当中设置的值

yarn.resourcemanager.resource-tracker.address

ResourceManager主机:端口 为了NodeManager 主机:端口,如果设置了,将会覆盖在yarn.resourcemanager.hostname当中设置的值

yarn.resourcemanager.admin.address

ResourceManager主机:端口 为了管理员命令 主机:端口,如果设置了,将会覆盖在yarn.resourcemanager.hostname当中设置的值

yarn.resourcemanager.webapp.address

主机:端口 为ResourceManager的web接口 主机:端口,如果设置了,将会覆盖在yarn.resourcemanager.hostname当中设置的值

yarn.resourcemanager.hostname

ResourceManager主机 主机名能够替换所有配置了yarn.resourcemanager*address的资源。给ResourceManager分配默认端口

yarn.resourcemanager.scheduler.class

ResourceManager Scheduler类 CapacityScheduler(推荐类),FairScheduler(也推荐)或者FifoScheduler

yarn.scheduler.minimum-allocation-mb

在ResourceManager分配给每个容器的请求的最小内存 单位为MB

yarn.scheduler.maximum-allocation-mb

在ResourceManager分配给每个容器的请求的最大内存 单位为MB

yarn.resourcemanager.nodes.include-path /

yarn.resourcemanager.nodes.exclude-path

列出允许的/排斥的NodeManager 如果有必要,利用这些文件来控制允许的NodeManager列表
    • 配置NodeManager:
参数 注意

yarn.nodemanager.resource.memory-mb

对于给定的NodeManager的Resource比如可用的物理内存,单位为MB 定义了在NodeManager上总共可用的资源来运行容器

yarn.nodemanager.vmem-pmem-ratio

虚拟内存的最大比例 通过按比例计算,每个任务可用的虚拟内存可能会超过它的物理内存的限制。通过这个比例计算,任务在NodeManager上能够使用的虚拟内存的数量也许会超过可用的物理内存

yarn.nodemanager.local-dirs

以逗号分隔的本地文件系统路径列表,在这些目录下写入中间数据 多路径能够帮助扩展磁盘I/O

yarn.nodemanager.log-dirs

以逗号分隔的本地文件系统路径列表,在这些目录下写入日志 多路径能够帮助扩展磁盘I/O

yarn.nodemanager.log.retain-seconds

10800 在NodeManager上保留日志文件的默认时间(单位秒)。只有在log-aggregation失效时,才提供。

yarn.nodemanager.remote-app-log-dir

/logs 当应用完成时,应用日志被移入到HDFS目录。有必要设置合适的权限。只有在log-aggregation有效时才提供。

yarn.nodemanager.remote-app-log-dir-suffix

logs 后缀追加到远程日志目录。日志将会aggregated to(聚集)在${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}。只有在log-aggregation有效时才提供。

yarn.nodemanager.aux-services

mapreduce_shuffle 对于Map Reduce应用,Shuffle service(洗牌服务)需要被设置
  • conf/mapred-site.xml
    • 配置MapReduce应用:
参数 注意

mapreduce.framework.name

yarn 将执行框架设置成Hadoop YARN

mapreduce.map.memory.mb

1536 对于map的资源限制

mapreduce.map.java.opts

-Xmx1024M map的子虚拟机的堆大小

mapreducereduce.memory.mb

3072 reduce的资源限制

mapreduce.reduce.java.opts

-Xmx2560M reduce子虚拟机的堆的大小

mapreduce.task.io.sort.mb

512 当对数据进行排序时的内存限制

mapreduce.task.io.sort.factor

100 当对文件排序时,一次性多少流合并

mapreduce.reduce.shuffle.parallelcopies

50 设置reduce运行的并行拷贝数目,从大量的map中拿取output。
    • 配置MapReduce的JobHistory服务器:
参数 注意

mapreduce.jobhistory.address

MapReduce JobHistory服务器主机:端口 默认端口为10020
  MapReduce JobHistory服务器的Web接口 主机:端口 默认端口是19888

mapreduce.jobhistory.webapp.address

MapReduce JobHistory服务器的Web接口 主机:端口 默认端口是19888

mapreduce.jobhistory.intermediate-done-dir

/mr-history/tmp MapReduce作业写入的历史文件目录

mapreduce.jobhistory.done-dir

/mr-history/done 被MR JobHistory服务器所管理的历史文件目录

Hadoop支架意识

HDFS和YARN组件是一种支架意识。

NameNode和ResourceManager通过调用一个API解析管理员配置的模块从而获得在集群中从机的支架信息。

这个API将DNS名称(也可以是IP地址)转换成支架ID。

站点细化模块能够配置成使用topology.node.switch.mapping.impl项。默认实现与运行脚本或命令一样使用的topology.script.file.name。如果topology.script.file.name没有设置,支架ID或者默认的支架被任何传入的ip地址返回。

监视NodeManager的健康状态

Hadoop提供了一种机制,通过管理员配置NodeManager定期的运行一个管理员提供的脚本来检测节点是否处于健康状态。

如果脚本检测出节点处于不健康的状态,它必须打印出一行以ERROR开始的字符串输出。NodeManager定期的生产脚本来检测输出。如果脚本输出当中包含ERROR字符串,那么节点就报告了一个不健康的状态,那么ResourceManager就会将这个节点列入黑名单,并且将不会有任务分配给这个节点。然而,NodeManager会继续执行脚本,于是,如果节点再次处于健康状态,它就会自动从ResourceManager所管理的黑名单中移除。节点的健康状态是与输出脚本相关的,如果它不健康了,是能够在ResourceManager的Web接口当中看到的,节点健康的时间也能够在web接口当中展现出来。

下面的参数通过在conf/yarn-site.xml中监听脚本从而能够利用来控制节点健康状态

参数 注释
yarn.nodemanager.health-checker.script.path 节点健康脚本 检查节点健康状态的脚本
yarn.nodemanager.health-checker.script.opts 节点健康脚本选项 检查节点健康状态的可选脚本
yarn.nodemanager.health-checker.script.interval-ms   运行健康状态监测脚本的时间区间
yarn.nodemanager.health-checker.script.timeout-ms   运行健康状态监测脚超时的时间

如果本地磁盘损坏,健康状态检查脚本是不一定能够给出ERROR字符串的。NodeManager有能力定期的去检查本地磁盘的健康状态(尤其是检查nodemanager-local-dirs和nodemanager-log-dirs)并且在损坏目录达到属性yarn.nodemanager.disk-health-checker所配置的阀值后,所有的节点都会标记成不健康的并且这个信息将会被发送给resource manager。

slaves文件

你选择集群中的一个机器充当NameNode的角色,一台充当ResourceManger的角色。其他所有的机器都充当着DataNode和NodeManager的角色,被指定为从机。

在conf/slaves文件中列出所有的从机的主机名或者IP地址,一行一个。

日志

Hadoop使用Apache log4j通过Apache Commons日志框架来记录日志。编辑conf/log4j.properties文件来自定义Hadoop守护线程的日志配置(打印日志格式等等)。

操纵Hadoop集群

当所有必要的配置完成之后,将文件分发到所有的机器的HADOOP_CONF_DIR目录。

Hadoop的启动

为了启动Hadoop集群,你需要启动HDFS和YARN集群。

格式化新分发的文件系统:

$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>

通过如下命令启动HDFS,运行指定的NameNode:

$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode

运行一个脚本来启动所有从机上的DataNode:

$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start datanode

通过下面的命令启动YARN,运行指定的ResourceManager:

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

运行脚本来启动从机上的所有NodeManager:

$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start nodemanager

启动本地化的WebAppProxy服务器。如果想使用大量的服务器来实现负载均衡,那么它就应该运行在它们各自机器之上:

$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh start proxyserver --config $HADOOP_CONF_DIR

根据下面的命令启动MapReduce JobHistory服务器:

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

Hadoop关闭

通过以下命令停止NameNode:

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

运行脚本停止在所有从机上的所有DataNode:

$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode

通过以下命令停止ResourceManager:

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

运行一下脚本停止所有从机上的DataNode: $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager

停止Web代理服务器: $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh stop proxyserver --config $HADOOP_CONF_DIR

通过以下命令停止MapReduce JobHistory 服务器:

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

Web接口

一旦Hadoop集群被建立并且运行起来了,各个组件的web接口描述如下:

守护进程 web接口
NameNode http://nn_host:port/
ResourceManager http://rm_host:port/
MampReduce JobHistory Server http://jhs_host:port/
时间: 2024-11-07 03:35:28

二、Hadoop集群的相关文章

Hadoop(二)——分布式集群搭建

前两天和一个朋友在聊天的时候说,很多自学Hadoop的朋友80%都会夭折在集群环境的搭建上,原因吗无在乎:1,没有很好的电脑配置,不能像机房一样用多台电脑搭建起集群:2,对linux的不熟悉,各种小黑窗,linux命令--:3,环境搭建的反锁步骤,需要耐心+细心+认真等等吧.不过吗,我觉的,只要敢于坚持,敢于付出都是会成功的.下边讲述一下我的Hadoop集群搭建过程,由于条件有限,也是在虚拟机中进行的. 一,准备资料: 1,一台笔记本:I5的CPU,4G内存,500硬盘(内存有些小,运行的时候比

搭建Hadoop集群 (二)

前面的步骤请看  http://www.cnblogs.com/haibinyuan/p/5153681.html 安装Hadoop 解压安装 登录master, 下载解压hadoop 2.6.2压缩包到/home/hm/文件夹. (也可以从主机拖拽或者psftp压缩包到master) [[email protected] ~]$ tar -xzvf hadoop-2.6.2.tar.gz -C ~ [[email protected] ~]$ mv hadoop-2.6.2 hadoop[[e

Hadoop的学习前奏(二)——Hadoop集群的配置

前言: Hadoop集群的配置即全然分布式Hadoop配置. 笔者的环境: Linux:  CentOS 6.6(Final) x64 JDK:    java version "1.7.0_75" OpenJDK Runtime Environment (rhel-2.5.4.0.el6_6-x86_64 u75-b13) OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode) SSH:    OpenSSH_5.3p1, Ope

Hadoop集群(二) HDFS搭建

HDFS只是Hadoop最基本的一个服务,很多其他服务,都是基于HDFS展开的.所以部署一个HDFS集群,是很核心的一个动作,也是大数据平台的开始. 安装Hadoop集群,首先需要有Zookeeper才可以完成安装.如果没有Zookeeper,请先部署一套Zookeeper.另外,JDK以及物理主机的一些设置等.请参考: Hadoop集群(一) Zookeeper搭建 Hadoop集群(三) Hbase搭建 Hadoop集群(四) Hadoop升级 下面开始HDFS的安装 HDFS主机分配 1

Hadoop集群内lzo的安装与配置

LZO压缩,可分块并行处理,解压缩的效率也是可以的. 为了配合部门hadoop平台测试,作者详细的介绍了如何在Hadoop平台下安装lzo所需要软件包:gcc.ant.lzo.lzo编码/解码器并配置lzo的文件:core-site.xml.mapred-site.xml.希望对大家有所帮助.以下是正文: 最近我们部门在测试云计算平台hadoop,我被lzo折腾了三四天,累了个够呛.在此总结一下,也给大家做个参考. 操作系统:CentOS 5.5,Hadoop版本:hadoop-0.20.2-C

在Hadoop集群上运行R程序--安装RHadoop

RHadoop是由Revolution Analytics发起的一个开源项目,它可以将统计语言R与Hadoop结合起来.目前该项目包括三个R packages,分别为支持用R来编写MapReduce应用的rmr.用于R语言访问HDFS的rhdfs以及用于R语言访问HBASE的rhbase.下载网址为https://github.com/RevolutionAnalytics/RHadoop/wiki/Downloads. 说明:下面的记录是在安装成功后的总结,中间的过程描述及解决方法可能并不精确

搭建Hadoop集群 (三)

通过 搭建Hadoop集群 (二), 我们已经可以顺利运行自带的wordcount程序. 下面学习如何创建自己的Java应用, 放到Hadoop集群上运行, 并且可以通过debug来调试. 有多少种Debug方式 Hadoop在Eclipse上的Debug方式 一般来说, Debug最多的应用场景是调试MR中的代码逻辑, 还有部分是调试main方法中的某些代码逻辑. 无论是Standalone, Pesudo-Distributed, 还是Fully-Distributed Mode, 都可以d

Python菜鸟的Hadoop实战——Hadoop集群搭建

Hadoop集群的部署 网上很多关于hadoop集群部署的文章, 我这里重新整理下,毕竟,别人的经历,让你按照着完整走下来,总有或多或少的问题. 小技巧分享: 有些初学者喜欢在自己机器上安装虚拟机来部署hadoop,毕竟,很多同学的学习环境都是比较受限的. 我这里则直接选择了阿里云的机器,买了三台ECS作为学习环境.毕竟,最低配一个月才40多块,学习还是要稍微投入点的. 一. 基础环境准备 Windows不熟练,小主只有选择Linux了. 官方提示如下,Linux所需软件包括: JavaTM1.

Hadoop集群维护

HDFS小文件问题及解决方案:http://dongxicheng.org/mapreduce/hdfs-small-files-solution/ Hadoop升级方案(一):Hadoop 1.0内部版本升级(初稿):http://dongxicheng.org/mapreduce-nextgen/hadoop-upgrade-in-version-1/ Hadoop升级方案(二):从Hadoop 1.0升级到2.0:http://dongxicheng.org/mapreduce-nextg