Hadoop 2.3.0官方文档翻译

Hadoop 2.3.0 集群安装

集群安装

目的

本文描述了如何安装、配置和管理 Hadoop 集群


准备工作

从 Apache mirrors 下载稳定版本的 Hadoop


安装

通常,将集群中的一台机器作为 NameNode,另一台机器作为 ResourceManager。它们是 masters。集群中剩余的机器同时为 DataNode 和 NodeManager,它们是 slaves


以非安全模式运行 Hadoop

一些部分描述了如何配置一个Hadoop集群

配置文件

Hadoop 配置由两种类型的重要配置文件影响:

  • 只读的默认配置文件:core-default.xml, hdfs-default.xml, yarn-default.xml 和 mapred-default.xml
  • 特定的配置文件:conf/core-site.xml, conf/hdfs-site.xml, conf/yarn-site.xml 和 conf/mapred-site.xml 此外,你可以通过 conf/hadoop-env.sh 和 yarn-env.sh 设置特定值来控制 bin/ 目录下的 Hadoop 脚本文件

Site 配置

为了配置集群,你需要配置 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 HADOOP_JOB_HISTORYSERVER_OPTS

例如,配置 NameNode 使用 paralleIGC,以下这句应该被添加到 hadoop-env.sh 中:

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

其他你可以定制的有用参数包括:

  • HADOOP_LOG_DIR / YARN_LOG_DIR:守护进程日志存放目录,如果不存在将会自动创建
  • HADOOP_HEAPSIZE / YARN_HEAPSIZE:使用的最大堆size(以mb为单位)。如果该变量被设置为1000,那么堆将被设置为1000mb。用该参数来设置守护进程的堆大小。默认值为1000。如果你想单独为每个守护进程设置堆大小,使用:
守护进程 Value
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标志 hdfs://host:port/
io.file.buffer.size 131072 用在序列化文件中读写缓冲区的size

conf/hdfs-site.xml

NameNode配置:

参数 注释
dfs.namenode.name.dir NameNode存放名字空间和持续处理日志的本地文件系统路径 如果这是一个以逗号分隔的目录列表,作为冗余考虑,名字表将被复制到所有目录下
dfs.namenode.hosts / dfs.namenode.hosts.exclude 允许的/拒绝的 DataNode 列表 如有需要,使用这些文件来控制被允许的datanode
dfs.blocksize 268435456 HDFS block size
dfs.namenode.handler.count 100 NameNode中用来处理来自众多 DataNode RPCs的线程数

DataNode配置:

参数 注释
dfs.datanode.data.dir 逗号分隔的本地文件系统上的路径列表,用来存放该 DataNode 的block 如果这是一个逗号分隔的目录列表,数据将被存储在所有命名的目录下, 通常在不同的设备上

conf/yarn-site.xml

ResourceManager 和 NodeManager 配置

参数 注释
yarn.acl.enable true / false 是否启动ACLs?默认不启用
yarn.admin.acl 管理员ACL(访问控制列表) 设置集群的管理员ACL。默认值为*,表示任何人。指定该值为空格表示任何人都没有访问权限
yarn.log-aggregation-enable false 启用或禁用日志聚合

ResourceManager 配置

参数 注释
yarn.resourcemanager.address ResourceManager用于给 client 提交 job 的地址(host:port) host:port
yarn.resourcemanager.scheduler.address ResourceManager 用于给 ApplicationMaster 向调度器申请资源的地址 host:port
yarn.resourcemanager.resource-tracker.address ResourceManager 为 NodeManagers 提供的地址 host:port
yarn.resourcemanager.admin.address ResourceManager 为管理员命令提供的地址 host:port
yarn.resourcemanager.webapp.address ResourceManager web 页面地址 host:port
yarn.resourcemanager.scheduler.class ResourceManager 资源调度类 CapacityScheduler (推荐的), FairScheduler (同样推荐的), or FifoScheduler
yarn.scheduler.minimum-allocation-mb 为每个 container 分配的内存的最小值 以 MB 为单位
yarn.scheduler.maximum-allocation-mb 为每个 container 分配的内存的最大值 以 MB 为单位
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path
允许的/拒绝的 NodeManager 列表 如有必要,使用这些文件来控制允许的 NodeManager 列表

NodeManager 配置

参数 注释
yarn.nodemanager.resource.memory-mb 可用的物理内存,以 MB 为单位 定义 NodeManager 所有可用的内存资源
yarn.nodemanager.vmem-pmem-ratio task 使用的虚拟内存相对于物理内存的最大倍数 /
yarn.nodemanager.local-dirs 以逗号分隔的本地文件系统路径列表,用来存放中间数据 多路径有助于分散磁盘 I/O
yarn.nodemanager.log-dirs 以逗号分隔的本地文件系统路径列表,用来存放日志文件 多路径有助于分散磁盘 I/O
yarn.nodemanager.log.retain-seconds 10800 保留 NodeManager 上日志文件的时长(以秒为单位),只有当关闭日志聚合才有效
yarn.nodemanager.remote-app-log-dir /logs 当 application 完成时 application 日志上传到的 HDFS 目录。
yarn.nodemanager.remote-app-log-dir-suffix logs 添加到远程日志目录的后缀。日志会被聚合到 ${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}。只有当开启日志聚合才有用
yarn.nodemanager.aux-services mapreduce_shuffle 为 Map Reduce 设置的 shuffle 服务

History Server 配置

参数 注释
yarn.log-aggregation.retain-seconds -1 在删除日志前保留的时长。-1禁用。注意,不要把该值设的太小
yarn.log-aggregation.retain-check-interval-seconds -1 检查已聚合日志保留时间的时间间隔。如果设为0或负数,该值为1/10的yarn.log-aggregation.retain-seconds的值。注意,别把该值设的太小

conf/mapred-site.xml

MapReduce Application 配置

参数 注释
mapreduce.framework.name yarn 将执行框架设为 Hadoop YARN
mapreduce.map.memory.mb 1536 map 内存资源限制
mapreduce.map.java.opts -Xmx1024M map 的子 jvm 堆 size
mapreduce.reduce.memory.mb 3072 reduce 内存资源限制
mapreduce.reduce.java.opts -Xmx2560M reduce 的子 jvm 堆 size
mapreduce.task.io.sort.mb 512 用于排序的内存 size 上限
mapreduce.task.io.sort.factor 100 排序时的数据流合并
mapreduce.reduce.shuffle.parallelcopies 50

MapReduce JobHistory服务配置:

参数 注释
mapreduce.jobhistory.address MapReduce JobHistory 服务的地址(host:port) 默认端口是10020
mapreduce.jobhistory.webapp.address MapReduce JobHistory 服务页面地址(host:port) 默认端口是19888
mapreduce.jobhistory.intermediate-done-dir /mr-history/tmp MapReduce job 写 history 文件的目录
mapreduce.jobhistory.done-dir /mr-history/done MR JobHistory 服务管理 history 文件的目录

Hadoop 机架敏感

HDFS 和 YARN 是机架敏感的。 NameNode 和 ResourceManager 通过在管理员模块中调用 API resolve 来获得集群中 slaves 的机架信息。 API解析DNS到到机架ID。 可以通过配置项 topology.node.switch.mapping.impl 来配置要用的 site-specific 模块。


监视 NodeManager 健康状况

pass

Slaves file

通常,你选择集群中的一台机器作为 NameNode 和一台机器作为 ResourceManager 。剩余的机器同时作为 DataNode 和 NodeManager 并被称为 slaves。 在你的 conf/slaves 文件中列出所有的 slave 主机名或 ip,每项一行。


日志

Hadoop通过 Apache通用日志框架使用 Apache log4j来记录日志。编辑 conf/log4j.properties 文件来自定义 Hadoop 守护进程的日志配置


操作 Hadoop 集群

一旦完成所有需要的配置,将所有配置文件分发到所有节点上的 HADOOP_CONF_DIR 目录下。

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

格式化 HDFS: [hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>


启动 HDFS: [hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode 停止 HDFS: [hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode


以 root 用户和指定的环境变量 HADOOP_SECURE_DN_USER 执行一个脚本来启动所有 slaves 上的 DataNodes: [root]$ HADOOP_SECURE_DN_USER=hdfs $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start datanode 停止 DataNodes: [root]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode


启动 ResourceManager: [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager 停止 ResourceManager: [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager


执行一个脚本来启动所有 slaves 上的 NodeManagers: [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start nodemanager 停止 NodeManagers: [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager


启动一个单机的 WebAppProxy 服务。以 yarn 用户启动。如果多台服务器用户负载均衡,那么需要在每台服务器上执行下面命令: [yarn]$ $HADOOP_YARN_HOME/bin/yarn start proxyserver --config $HADOOP_CONF_DIR 停止 WebAppProxy: [yarn]$ $HADOOP_YARN_HOME/bin/yarn stop proxyserver --config $HADOOP_CONF_DIR


启动 MapReduce JobHistory 服务,以 mapred 用户在指定机器上运行: [mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh start historyserver --config $HADOOP_CONF_DIR 停止MapReduce JobHistory 服务: [mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh stop historyserver --config $HADOOP_CONF_DIR


web 接口

一旦 Hadoop 集群启动,通过以下页面检查各组件:

参数 注释
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.