Hadoop Cluster Setup

安装部署

安装 Hadoop cluster 常用方式:在所有服务器上解压软件;通过操作系统支持的包安装。建议将不同的功能分散到不同的硬件上。

通常,cluster 内的一台作为 NameNode ,另一台作为 ResourceManager。 这些都是 masters 角色。其他服务 (比如 Web App Proxy Server , MapReduce Job History server) 可以运行在独立硬件上,也可以共享运行,取决于负载。

Cluster 内的其他机器同时作为 DataNode 和 NodeManager。它们都是 slaves 角色。

在Non-Secure模式下配置Hadoop

Hadoop 的 Java 配置被两种类型的重要配置文件驱动:

  • 只读属性的默认配置: core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml.
  • 站点自定义配置: etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml and etc/hadoop/mapred-site.xml.

另外,你还可以配置 bin/ 目录下的Hadoop脚本,通过etc/hadoop/hadoop-env.sh and etc/hadoop/yarn-env.sh设置站点自定义值。

配置 Hadoop cluster 需要配置环境变量,Hadoop daemons 会识别为其配置参数。

Daemon Type Daemons
HDFS NameNode
SecondaryNameNode
DataNode
YARN ResourceManager
NodeManager
WebAppProxy
MapReduce Job History Server

大型部署,deamons建议都部署在独立的主机上。

1. 配置环境变量

管理员通过 etc/hadoop/hadoop-env.shetc/hadoop/mapred-env.shetc/hadoop/yarn-env.sh 脚本来定制环境变量。

至少,在每个远程节点上配置 JAVA_HOME

如下表列出了不同deamons的配置:

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"

See etc/hadoop/hadoop-env.sh for other examples.
其他一些常见配置参数:

配置参数 说明
HADOOP_PID_DIR deamon进程ID存放目录
HADOOP_LOG_DIR deamon日志存放目录。日志文件会自己创建。
HADOOP_HEAPSIZE / YARN_HEAPSIZE 最大heapsize定义,单位MB。
比如,设置1000,heap就会是1000MB。
用来配置daemon的 heap size。
默认值 1000。

大多情况下,设置 HADOOP_PID_DIR and HADOOP_LOG_DIR目录,这样它们只可以被运行deamons进程的用户写入。否则,会有 symlink attack 的风险。

还可以在系统层面设置 HADOOP_PREFIX 变量。比如,在 /etc/profile.d:

  HADOOP_PREFIX=/path/to/hadoop
  export HADOOP_PREFIX
Daemon Environment Variable
ResourceManager YARN_RESOURCEMANAGER_HEAPSIZE
NodeManager YARN_NODEMANAGER_HEAPSIZE
WebAppProxy YARN_PROXYSERVER_HEAPSIZE
Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_HEAPSIZE
2. 配置 Hadoop Daemons

配置文件 etc/hadoop/core-site.xml

Parameter Value Notes
fs.defaultFS NameNode URI hdfs://host:port/
io.file.buffer.size 131072 Size of read/write buffer used in SequenceFiles.

配置文件 etc/hadoop/hdfs-site.xml

  • NameNode 配置
Parameter Value Notes
dfs.namenode.name.dir NameNode存储namespace 和transactions 日志的本地文件系统路径。 如果是一个逗号分隔的目录列表,那么name tables会复制到所有的目录,以实现冗余。
dfs.hosts / dfs.hosts.exclude 允许/拒绝的DataNodes列表 如有必要,使用该文件控制允许加入的datanodes列表
dfs.blocksize 268435456 HDFS blocksize 设置, 大文件系统256MB
dfs.namenode.handler.count 100 处理大量DataNodes RPCS的 NameNode 服务线程数量。
  • DataNode配置
Parameter Value Notes
dfs.datanode.data.dir DataNode 存储它的块文件的本地文件系统路径,以逗号分隔的列表 如果是一个以逗号分隔的目录列表,那么数据会村粗到所有命名的目录,通常是在不同的设备上。

配置文件 etc/hadoop/yarn-site.xml

  • ResourceManager & NodeManager 共用配置
Parameter Value Notes
yarn.acl.enable true / false 开启 ACLs ? 默认 false.
yarn.admin.acl Admin ACL 设置管理员ACL。
默认值 *,代表任意人;空格代表拒绝访问。
yarn.log-aggregation-enable false 开启or关闭 log aggregation
  • ResourceManager 配置
Parameter Value Notes
yarn.resourcemanager.address 客户端提交任务地址
host:port
覆盖 yarn.resourcemanager.hostname内的hostname 设置
yarn.resourcemanager.scheduler.address ApplicationMasters调度资源的地址
host:port
覆盖 yarn.resourcemanager.hostname内的hostname 设置
yarn.resourcemanager.resource-tracker.address NodeManagers调用地址
host:port
覆盖 yarn.resourcemanager.hostname内的hostname 设置
yarn.resourcemanager.admin.address 管理命令行地址
host:port
覆盖 yarn.resourcemanager.hostname内的hostname 设置
yarn.resourcemanager.webapp.address Web UI地址
host:port.
覆盖 yarn.resourcemanager.hostname内的hostname 设置
yarn.resourcemanager.hostname ResourceManager 主机 主机唯一hostname,可用于替代所有yarn.resourcemanager*address设置。端口皆为默认配置。
yarn.resourcemanager.scheduler.class ResourceManager Scheduler class. CapacityScheduler (recommended)
FairScheduler (also recommended)
or FifoScheduler
yarn.scheduler.minimum-allocation-mb 分配给容器的最小内存 In MBs
yarn.scheduler.maximum-allocation-mb 分配给容器的最大内存 In MBs
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path NodeManagers的允许/排它列表 如有必要,使用这些文件控制允许的NodeManagers列表
  • NodeManager 配置
Parameter Value Notes
yarn.nodemanager.resource.memory-mb 可用物理内存 定义了NodeManager 可供运行容器的总可用内存
yarn.nodemanager.vmem-pmem-ratio 任务使用的虚拟内存可以超越物理内存的最大比率 每个任务所用虚拟内存可以超越物理内存的比率受此限制。
该NodeManager 上所有任务使用的总虚拟内存,可以根据此比率超越物理内存。
yarn.nodemanager.local-dirs 中间数据写入的本地路径列表,以逗号分隔 多路径有助于扩展disk i/o
yarn.nodemanager.log-dirs 日志写入的本地路径列表,以逗号分隔 多路径有助于扩展disk i/o
yarn.nodemanager.log.retain-seconds 10800 日志保留的默认时间(s计),仅在关闭log-aggregation时适用。
yarn.nodemanager.remote-app-log-dir /logs HDFS目录,当应用完成时将应用日志移过去。需要设置相应权限。仅在开启log-aggregation时生效。
yarn.nodemanager.remote-app-log-dir-suffix logs 附加到remote log目录的前缀。日志聚合格式 ${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam} ,仅在开启log-aggregation时生效。
yarn.nodemanager.aux-services mapreduce_shuffle 需要给Map Reduce应用设置的Shuffle service
  • History Server 配置(Needs to be moved elsewhere):
Parameter Value Notes
yarn.log-aggregation.retain-seconds -1 aggregation logs的保留时间。 -1 禁用。设置太小,会向namenode发送大量垃圾信息。
yarn.log-aggregation.retain-check-interval-seconds -1 aggregated log 周期检查时间。0或负值,将该值设置为aggregated log周期的1/10时间。设置太小,会向namenode发送大量垃圾信息。
etc/hadoop/mapred-site.xml

配置文件 etc/hadoop/mapred-site.xml

  • MapReduce 应用配置
Parameter Value Notes
mapreduce.framework.name yarn 执行框架设置为 Hadoop YARN.
mapreduce.map.memory.mb 1536 maps的最大资源限制
mapreduce.map.java.opts -Xmx1024M maps的子jvm的最大 heap-size 限制
mapreduce.reduce.memory.mb 3072 reduces的最大资源限制
mapreduce.reduce.java.opts -Xmx2560M reduces的子jvm的最大 heap-size 限制
mapreduce.task.io.sort.mb 512 数据排序的最大内存限制
mapreduce.task.io.sort.factor 100 排序文件时,单次的streams merge限制
mapreduce.reduce.shuffle.parallelcopies 50 匹配大量maps输出的reduce并行复制最大数量
  • 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 history文件写入的临时目录
mapreduce.jobhistory.done-dir /mr-history/done history文件最终目录
MR JobHistory Server管理

监控NodeManagers

Hadoop提供了一种机制,管理员可以配置NodeManager周期运行脚本来判断node的健康状况。

通过执行脚本的一些选项,管理员可以判断node的健康状况。如果脚本检测出来node是不健康状况,它会以ERROR标准输出打印出来。NodeManager定期调用脚本、检查输出。 如果输出包含ERROR,节点就被上报以不健康状况,ResourceManager将其纳入黑名单。后续任务不会再分发到该节点。但是,NodeManager 还是会继续运行脚本,这样如果node恢复正常, ResourceManager 就会自动将其从黑名单删除。节点依赖于脚本的输出判断健康状态,如果不健康,管理员会在ResourceManager web界面上看到。节点的健康状态时间也会显示。

etc/hadoop/yarn-site.xml文件,如下参数用于设置节点健康监测状态脚本:

Parameter Value Notes
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可以周期性的监测local disks (specifically checks nodemanager-local-dirs and nodemanager-log-dirs) ,在达到yarn.nodemanager.disk-health-checker.min-healthy-disks设置的故障目录阈值后, 整个节点都会标记为不健康,这个信息会被发送至resource manager。The boot disk is either raided or a failure in the boot disk is identified by the health checker script.

Slaves File

将slaves的hostnames or IP 写到 etc/hadoop/slaves文件,一行一条。 Helper scripts (described below) 将使用 etc/hadoop/slaves 文件来批量执行命令。它不是用于 Java-based Hadoop configuration。要使用该功能,需要在运行Hadoop的账户配置 ssh trusts (通过免密ssh or 其他,比如 Kerberos) 。

Hadoop Rack Awareness

很多 Hadoop 组件都是机架感知的,利用了网络拓扑性能和安全的优势。Hadoop daemons 通过调用管理员配置的模块来获取slaves的机架信息。
参见 Rack Awareness 文档。

强烈推荐启动HDFS前配置机架感知。

Logging

Hadoop 通过 Apache Commons Logging framework 使用 Apache log4j 记录日志。编辑 etc/hadoop/log4j.properties 文件自定义日志配置。

Operating the Hadoop Cluster

在所有配置完成后,将文件分发到所有服务器的HADOOP_CONF_DIR目录。所有服务器应该是同样的目录。

通常,建议 HDFS 和 YARN 以独立用户运行。安装时,HDFS 使用账户 hdfs,YARN 使用账户 yarn

  • Hadoop Startup
    启动一个Hadoop集群,需要启动 HDFS 和 YARN cluster。
    第一次启动 HDFS,需要格式化。以hdfs格式化一个新的分布式文件系统:
[hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format 

hdfs启动/停止 HDFS NameNode

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

hdfs启动/停止 HDFS DataNode

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

etc/hadoop/slaves 和 ssh trusted access 配置好后, (see Single Node Setup), 以hdfs启动所有的HDFS进程:

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

在规划的ResourceManager服务器上,以yarn用户启动/停止 YARN

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

在每台服务器上,以yarn用户启动 NodeManager

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

yarn用户启动一台独立的 WebAppProxy server。如果以负载均衡配置多台,那么在每台都要启动。

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

etc/hadoop/slaves 和 ssh trusted access 配置好后, (see Single Node Setup), 以yarn启动所有的YARN进程:

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

在规划的服务器上,以mapred用户启动 MapReduce JobHistory Server

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

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 Cluster Setup)