一、概述

  HDFS集群主要由NameNodeDataNodes组成,前者负责管理文件系统元数据,后者用于保存真正的数据。
  主要特性:
  1. 可使用商品级硬件(如普通PC)进行分布式存储和分布式计算。高容错、可扩展、易伸缩。
  2. 可根据不同的需求进行不同的配置。
  3. Hadoop使用Java编写,支持各主流平台。
  4. 支持使用类似shell命令与HDFS进行交互。
  5. NameNode和DataNodes集成在了web服务器中,可方便使用web查看集群状态。
  6. 其他特性:文件权限验证、机架感知、安全模式、fsck等等。
  以下笔记由hadoop 2.7.2文档而来。

二、Web界面

  默认的配置中,NameNode可通过http://namenode-name:50070/来访问(其中的namenode-name是你自己配置的namenode主机名)。使用Web界面可以查看集群状态、浏览文件系统、查看DataNodes等。

三、Hadoop集群安装

  略,请参考文档,或自行百度。

四、非安全模式下的Hadoop配置

1. 配置文件主要有两种:

  • 只读的默认配置 ——
  • 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

2. 控制Hadoop脚本行为:

  • etc/hadoop/hadoop-env.sh
  • etc/hadoop/yarn-env.sh
  • etc/hadoop/mapred-env.sh

3. Hadoop后台进程:

  • Hadoop后台进程一般各自运行在独立的主机上
  • HDFS后台进程
  • NameNode, SecondaryNameNode, DataNode
  • YARN后台进程
  • ResourceManager, NodeManager, WebAppProxy
  • MapReduce后台进程(若有)
  • Job History Server

4. Hadoop后台进程环境配置:

  • Hadoop进程的环境变量在以下3个脚本中设置
  • etc/hadoop/hadoop-env.sh
  • etc/hadoop/yarn-env.sh
  • etc/hadoop/mapred-env.sh
  • 各后台进程的环境变量如下:

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

MapReduce Job History Server

HADOOP_JOB_HISTORYSERVER_OPTS


比如,对NameNode的设置可以如下:
export HADOOP_NAMENODE_OPTS=”-Xmx30720m -XX:+UseParallelGC -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS}”

5. Hadoop后台进程配置:

  • etc/hadoop/core-site.xml

Parameter

Value

Notes

fs.defaultFS

NameNode URI

hdfs://主机名:端口/

io.file.buffer.size

131072

序列化文件的读/写缓存大小


  • etc/hadoop/hdfs-site.xml
    NameNode的配置

Parameter

Value

Notes

dfs.namenode.name.dir

本地文件系统上,NameNode保存命名空间和处理日志的路径

如果值指定为用逗号分隔的目录列表,命名表会复制到所有目录下做一个冗余。

dfs.hosts /dfs.hosts.exclude

许可/拒绝的DataNodes列表

如果有需要的话,可以使用该属性来指定哪些DataNodes可用/不可用。

dfs.blocksize

268435456

大型文件系统可指定HDFS的块大小为256MB

dfs.namenode.handler.count

100

指定有多少NameNode server线程来处理来自大量DataNodes的RPCs(远程过程调用)


  DataNode的配置

Parameter

Value

Notes

dfs.datanode.data.dir

一个DataNode将其数据块保存在本地文件系统上的指定路径中,多个路径使用逗号分隔

如果路径有多个,那么数据会保存在所有的目录下。一般而言,多个路径位于不同的device下。


  • etc/hadoop/yarn-site.xml
      ResourceManager和NodeManager共有的配置

Parameter

Value

Notes

yarn.acl.enable

true/false

是否开启ACLs,默认关闭

yarn.admin.acl

Admin ACL

ACL可设置集群的管理员。 ACLs是用逗号分隔的用户空间和用户组。默认值为* 表示任何人可以访问。空白表示无人可访问。

yarn.log-aggregation-enable

false

设置是否允许日志聚集


  ResourceManager的配置

Parameter

Value

Notes

yarn.resourcemanager.address

ResourceManager 主机名:端口号。用户向这里提交作业。

如果设置了主机名:端口号,会覆盖在 yarn.resourcemanager.hostname中设置的主机名

yarn.resourcemanager.scheduler.address

ResourceManager host:port ApplicationMasters向这里发出资源申请。

如果设置了主机名:端口号, 会覆盖在 yarn.resourcemanager.hostnamez中设置的主机名

yarn.resourcemanager.resource-tracker.address

ResourceManager host:port 供NodeManager使用

如果设置了主机名:端口号, 会覆盖在 yarn.resourcemanager.hostnamez中设置的主机名

yarn.resourcemanager.admin.address

ResourceManager host:port 供管理命令使用

如果设置了主机名:端口号, 会覆盖在 yarn.resourcemanager.hostnamez中设置的主机名

yarn.resourcemanager.webapp.address

ResourceManager web界面 host:port.

如果设置了主机名:端口号, 会覆盖在 yarn.resourcemanager.hostnamez中设置的主机名

yarn.resourcemanager.hostname

ResourceManager 主机.

单独的主机名可以在所有yarn.resourcemanager*address 中设置。端口号是默认的。

yarn.resourcemanager.scheduler.class

ResourceManager Scheduler class.

CapacityScheduler (推荐), FairScheduler (推荐), or FifoScheduler

yarn.scheduler.minimum-allocation-mb

分配给Resource Manager容器最小内存。

单位是MB

yarn.scheduler.maximum-allocation-mb

分配给 Resource Manager容器的最大内存

单位是MB

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

许可/拒绝的NodeManager列表

If necessary, use these files to control the list of allowable NodeManagers.


  NodeManager的配置

Parameter

Value

Notes

yarn.nodemanager.resource.memory-mb

NodeManager可用的屋里内存

Defines total available resources on the NodeManager to be made available to running containers

yarn.nodemanager.vmem-pmem-ratio

任务使用的虚拟内存可超出物理内存的最大比率

The virtual memory usage of each task may exceed its physical memory limit by this ratio. The total amount of virtual memory used by tasks on the NodeManager may exceed its physical memory usage by this ratio.

yarn.nodemanager.local-dirs

中间结果写入的本地文件系统路径列表,用逗号隔开

Multiple paths help spread disk i/o.

yarn.nodemanager.log-dirs

日志写入的本地文件系统路径列表,用逗号隔开

Multiple paths help spread disk 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

远程日志目录后缀。日志将被收集到${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}。仅适用于log-aggregation开启时

yarn.nodemanager.aux-services

mapreduce_shuffle

MapReduce程序所需的Shuffle 服务


  History Server的配置

Parameter

Value

Notes

yarn.log-aggregation.retain-seconds

-1

收集到的日志保存多久。 -1 表示不保存。注意,如果该属性值设置的太小,name node可能会收到垃圾信息。

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

-1

聚集日志保存时间检查间隔。如果设为0或负值,值被解释成聚集日志保存时间的1/10。注意,如果该属性值设置的太小,name node可能会收到垃圾信息。


  • etc/hadoop/mapred-site.xml
      MapReduce Applications的配置

Parameter

Value

Notes

mapreduce.framework.name

yarn

管理框架设为 Hadoop YARN.

mapreduce.map.memory.mb

1536

Larger resource limit for maps.

mapreduce.map.java.opts

-Xmx1024M

Larger heap-size for child jvms of maps.

mapreduce.reduce.memory.mb

3072

Larger resource limit for reduces.

mapreduce.reduce.java.opts

-Xmx2560M

Larger heap-size for child jvms of reduces.

mapreduce.task.io.sort.mb

512

更大的数值有利于数据的高效排序

mapreduce.task.io.sort.factor

100

排序时,每次将合并更多的流

mapreduce.reduce.shuffle.parallelcopies

50

map输出数据量较大时,该属性可使reduce在抓取map结果时并行更多的拷贝


  MapReduce JobHistory的配置

Parameter

Value

Notes

mapreduce.jobhistory.address

MapReduce JobHistory Server host:port

Default port is 10020.

mapreduce.jobhistory.webapp.address

MapReduce JobHistory Server Web UIhost:port

Default port is 19888.

mapreduce.jobhistory.intermediate-done-dir

/mr-history/tmp

MapReduce作业将history文件写入配置的目录中

mapreduce.jobhistory.done-dir

/mr-history/done

MR JobHistory Server管理history文件的目录

五、NodeManagers状态监控

  管理员可以提供一个脚本让NodeManager定期运行,检测节点的状态。如果脚本检测出一个节点处于不健康状态,必须向标准输出打印一行以”ERROR”开头的信息。NodeManager定期运行脚本并检查脚本输出。如果脚本的输出包含字符串”ERROR”,将报告节点为不健康状态,并且ResourceManager会将该节点加入黑名单。以后的任务将不会在该几点上运行。不过,如果在NodeManager之后的检测中发现改节点又恢复健康状态,则该节点又会从黑名单删除。
  节点状态监控脚本的控制参数在etc/hadoop/yarn-site.xml中:

Parameter

Value

Notes

yarn.nodemanager.health-checker.script.path

脚本路径

Script to check for node’s health status.

yarn.nodemanager.health-checker.script.opts

脚本参数

Options for script to check for node’s health status.

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

脚本运行间隔

Time interval for running health script.

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

脚本超时时间

Timeout for health script execution.

  如果仅仅是因为磁盘出问题,监控脚本不应该打印”ERROR”。NodeManager具备定期检测本地磁盘健康状态的能力(特别是检测nodemanager-local-dirs和nodemanager-log-dirs),一旦不健康的目录数量达到属性yarn.nodemanager.disk-health-checker.min-healthy-disks设定的阈值,整个节点就被标记为不健康,并报告给ResourceManager。引导盘要么做raid,要么也纳入脚本监控。

六、slaves文件

  etc/hadoop/slaves文件中列出了所有从节点的主机名或IP地址,每行一个。helper脚本会使用etc/hadoop/slaves文件同时在多台主机上运行命令。这个功能的前提是配置了ssh信任关系(通过ssh免密码登录或其他方式,比如Kerberos认证)。

七、机架感知

  许多Hadoop组件都使用了机架感知,并且利用网络拓扑来获得性能和安全性的平衡。Hadoop守护进程通过调用管理员配置的模块来获取集群上从节点的机架信息。详情请参见 Rack Awareness。
  强烈建议启动HDFS之前,先配置好机架感知。

八、日志

  Hadoop使用 Apache log4j 来记录日志。可通过 etc/hadoop/log4j.properties 文件来定义Hadoop守护进程的日志配置。