一般集群中的一台机器作为NameNode,另一台机器作为ResourceManager,这是masters。

  剩下的服务(Web App Proxy Server和MapReduce Job History server)会运行在专用硬件或者共享设施上,这取决于加载方式。(这一块还不太理解)

  master之外的机器都是DataNode和NodeManager。他们属于slaves。

  Hadoop有两类重要的配置文件

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 , etc/hadoop/mapred-env.sh,这三个文件来控制bin目录下的hadoop脚本。

  Hadoop的守护进程包括

  HDFS的NameNode,SecondaryNameNode,DataNode

  YARN的ResourceManager,NodeManager,WebAppProxy

  此外还有个前面提到过的MapReduce Job History server

  某个hadoop实例运行的守护进程不同,所需的配置也不太一样。

  大致关系是这样的:

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


export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"

其他配置还包括:

HADOOP_PID_DIR

HADOOP_LOG_DIR

HADOOP_HEAPSIZE / YARN_HEAPSIZE-指定最大的heapsize,单位是MB

HADOOP_PREIFX-貌似就是个前缀,还需要在系统级别配置这个环境变量。实际就是hadoop的安装目录,哈哈。

此外还有下面的环境变量:

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

主节点URI,类似hdfs://host:port/

io.file.buffer.size

131072

SequenceFiles的读写缓存

etc/hadoop/hdfs-site.xml中

为NameNode配置

Parameter

Value

Notes

dfs.namenode.name.dir

NameNode持久化namespace和事务日志的目录

可以配多个目录以保证冗余,逗号分隔。

dfs.hosts / dfs.hosts.exclude

permitted和excluded的datanodes清单

使用这些文件来管理allowable datanode清单

dfs.blocksize

268435456

HDFS blocksize

dfs.namenode.handler.count

100

处理来自DataNodes的RPC(remote procedure call)的线程数

为DataNode配置


Parameter

Value

Notes

dfs.datanode.data.dir

用于存储blocks的目录,用逗号做分隔符

数据将会存储在所有列举出的目录中

etc/hadoop/yarn-site.xml

ResourceManager和NodeManager的配置

Parameter

 

Value

Notes

yarn.acl.enable

true / false

是否开启ACLs(一种权限管理),默认false.

yarn.admin.acl

Admin ACL

设置集群的管理。由由逗号分隔的用户和逗号分隔的group组成,这两部分中间用空格隔开。默认是*表示所有人都可以访问,若设置为空格则表示所有人无权访问。

yarn.log-aggregation-enable

false

是否开启 log aggregation

为ResourceManager配置


Parameter

Value

Notes

yarn.resourcemanager.address

ResourceManager

host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.

yarn.resourcemanager.scheduler.address

ResourceManager

host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.

yarn.resourcemanager.resource-tracker.address

ResourceManager

host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.

yarn.resourcemanager.admin.address

ResourceManager

host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.

yarn.resourcemanager.webapp.address

ResourceManager

host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.

yarn.resourcemanager.hostname

ResourceManager

host Single hostname that can be set in place of setting all yarn.resourcemanager*address

yarn.resourcemanager.scheduler.class

ResourceManager

CapacityScheduler (recommended), FairScheduler (also recommended), or FifoScheduler

yarn.scheduler.minimum-allocation-mb

Minimum limit of memory to allocate to each container request at the Resource Manager.

In MBs

yarn.scheduler.maximum-allocation-mb

Maximum limit of memory to allocate to each container request at the Resource Manager.

In MBs

yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path

permitted/excluded NodeManagers清单.

使用该清单来控制allowable NodeManagers.

为NodeManager配置


Parameter

Value

Notes

yarn.nodemanager.resource.memory-mb

NodeManager的可用物理内存,单位MB

定义NodeManager中可以用来运行容器的所有资源

yarn.nodemanager.vmem-pmem-ratio

任务所占用的虚拟内存超过物理内存的最大比例

虚拟内存可以按照这个比例超过物理内存

yarn.nodemanager.local-dirs

媒介数据存放的目录

配置多个路径可以分散IO

yarn.nodemanager.log-dirs

日志文件存放的目录

配置多个路径可以分散IO

yarn.nodemanager.log.retain-seconds

10800

仅当log-aggregation失效时才有效,用来指定日志文件存放在NodeManager的默认时间。单位是秒

yarn.nodemanager.remote-app-log-dir

/logs

仅当log-aggregation生效时才有效。当应用结束时,日志文件将会转移到这个HDFS目录。需要设置合适的权限。

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

logs

仅当log-aggregation生效时才有效。远程日志目录的后缀名,日志将会被聚集到${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}

yarn.nodemanager.aux-services

mapreduce_shuffle

Map Reduce applications.所需的Shuffle service

为History Server配置


Parameter

Value

Notes

yarn.log-aggregation.retain-seconds

-1

保存聚合日志的时间。-1表示无效。

yarn.log-aggregation.retain-check-interval-seconds

-1

检查聚合日志保存时间的时间间隔,0或负数表示聚合日志保存时间的十分之一。

etc/hadoop/mapred-site.xml


为MapReduce Application配置


Parameter

Value

Notes

mapreduce.framework.name

yarn

将执行的框架设置为YARN

mapreduce.map.memory.mb

1536

maps操作的资源上限

mapreduce.map.java.opts

-Xmx1024M

maps操作的子虚拟机的heap-size上限

mapreduce.reduce.memory.mb

3072

reduces操作的资源上限

mapreduce.reduce.java.opts

-Xmx2560M

reduces子虚拟机的heap-size上限

mapreduce.task.io.sort.mb

512

执行sorting data for efficiency(为了提升效率而进行的排序操作)时的内存上限

mapreduce.task.io.sort.factor

100

对文件进行排序时,一次融合的流的数目

mapreduce.reduce.shuffle.parallelcopies

50

reduce操作中,从maps操作的大的结果集中复制数据的最大并行数.

为MapReduce JobHistory Server配置


Parameter

Value

Notes

mapreduce.jobhistory.address

MapReduce JobHistory 服务器的 host:port

默认端口是10020.

mapreduce.jobhistory.webapp.address

MapReduce JobHistory Server Web UI的 host:port

默认端口是19888.

mapreduce.jobhistory.intermediate-done-dir

/mr-history/tmp

写入历史文件的目录

mapreduce.jobhistory.done-dir

/mr-history/done

MR JobHistory Server管理历史文件的目录

监控NodeManager

hadoop允许管理者配置NodeManager,使其周期性执行一个管理者提供的脚本来判断这个节点是否是健康的。

若该脚本判断节点不健康,它需要打印以Error开头的一行信息到标准输出。NodeManager周期性执行该脚本,并检查输出。若检查到ERROR,则标记该节点为unhealthy。接着ResourceManager会将该节点加入黑名单,接下来的任务也不会被提交到该节点。直到某次运行脚本时检测结果为healthy才将它从黑名单移除。

下列etc/hadoop/yarn-site.xml中的参数用来控制节点健康监控脚本


Parameter

Value

Notes

yarn.nodemanager.health-checker.script.path

Node health script

check使用的脚本

yarn.nodemanager.health-checker.script.opts

Node health script options

check脚本使用的options

yarn.nodemanager.health-checker.script.interval-ms

Node health script interval

运行check脚本的时间间隔

yarn.nodemanager.health-checker.script.timeout-ms

Node health script timeout interval

check脚本执行的超时时间

check脚本没必要检测硬盘。因为NodeManager会周期性检测本地硬盘。yarn.nodemanager.disk-health-checker.min-healthy-disks参数可以配置NodeManager加入黑名单的可用硬盘阈值。


Slaves File

在etc/hadoop/slaves文件中列出所有slave的hostname或IP地址,一个一行。Helper脚本将会使用这个文件中的清单来在多个主机执行命令。它不会被任何基于java的配置项使用。为使用该功能,运行hadoop的账号需要实现ssh免密码登录。

Hadoop Rack Awareness

hadoop很多组件都是机架敏感的。hadoop守护进程通过激活一个管理者配置的模型来获得关于机架的信息。

Hadoop日志打印使用log4j,配置文件位于etc/hadoop/log4j.properties

操作Hadoop集群

完成以上配置后,可以将它们集中发送到所有机器的HADOOP_CONF_DIR目录(猜测就是etc/hadoop)。

推荐用不同的用户运行HDFS和YARN。

启动步骤

1、格式化dfs



[hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>(我觉得这个集群名称是可以随便取的)

2、启动hdfs的namenode



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

3、启动datanode



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


4、如果etc/hadoop/slaves和ssh免密码登录都配置好了,那么上面的操作可以用下面的脚本代替。




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

5、启动ResourceManager



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

6、启动NodeManager



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

7、启动webAppProxy服务器,若采用多服务器负载均衡,则需要依次启动它们。



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

8、

如果etc/hadoop/slaves和ssh免密码登录都配置好了,那么上面的操作可以用下面的脚本代替。




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

9、启动MapReduce JobHistory Server




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


关闭步骤


1、关闭NameNode



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

2、关闭DataNode



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

3、

如果etc/hadoop/slaves和ssh免密码登录都配置好了,那么上面的操作可以用下面的脚本代替。




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

4、关闭ResourceManager



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

5、关闭NodeManager



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

6、

如果etc/hadoop/slaves和ssh免密码登录都配置好了,那么上面的操作可以用下面的脚本代替。




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

7、关闭WebAppProxy server.




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

8、关闭MapReduce JobHistory Server




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

其中中括号中的是执行命令行的账号。

Web Interfaces

下面列举了hadoop集群的所有web ui


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.