1. 目的
2. 前期准备
- 安装Java,有关已知的好版本,请参阅Hadoop Wiki。
- 从Apache镜像下载一个稳定版本的Hadoop。
3. 安装
- 安装Hadoop集群通常涉及在群集中的所有机器上打开软件包,或者通过适用于您的操作系统的包装系统来安装它。将硬件分成功能是很重要的。
- 通常,集群中的一台计算机被指定为NameNode,另一台计算机被指定为ResourceManager。这些是Masters。其他服务(例如Web App代理服务器和MapReduce作业历史记录服务器)通常在专用硬件或共享基础设施上运行,具体取决于负载。
- 集群中的其余计算机充当DataNode和NodeManager。这些是Slaves。
4. 在非安全模式下配置Hadoop
Hadoop的Java配置由两种类型的重要配置文件驱动:
只读缺省配置–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设置特定于站点的值,从而控制分发包的bin /目录中的Hadoop脚本。
要配置Hadoop集群,您需要配置Hadoop守护程序执行的环境以及Hadoop守护程序的配置参数。
HDFS守护程序是NameNode,SecondaryNameNode和DataNode。
YARN 守护进程是ResourceManager,NodeManager和WebAppProxy。
如果要使用MapReduce,则MapReduce作业历史记录服务器也将运行。对于大型安装,这些通常在单独的主机上运行。
4.1配置Hadoop后台进程的环境
管理员应该使用etc / hadoop / hadoop-env.sh和可选的etc / hadoop / mapred-env.sh和etc / hadoop / yarn-env.sh脚本对Hadoop守护进程环境进行特定于站点的定制
至少,您必须指定JAVA_HOME,以便在每个远程节点上正确定义它。
管理员可以使用下表中所示的配置选项配置单个守护程序:
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"
有关其他示例,请参阅etc / hadoop / hadoop-env.sh。
您可以自定义的其他有用的配置参数包括:
- HADOOP_PID_DIR - 守护进程id文件的存储目录。
- HADOOP_LOG_DIR - 守护程序日志文件的存储目录。如果日志文件不存在,则自动创建日志文件。
- HADOOP_HEAPSIZE / YARN_HEAPSIZE - 要使用的最大堆大小,以MB为单位。如果varibale设置为1000,则堆将设置为1000MB。这用于配置守护程序的堆大小。默认情况下,值为1000。如果要为每个deamon分别配置值,您可以使用。
在大多数情况下,应指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录,以便只能由要运行hadoop守护程序的用户写入。否则,有可能发生符号链接攻击。
在系统范围的shell环境配置中配置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 |
4.2配置Hadoop守护程序
本节介绍在给定配置文件中指定的重要参数:
etc/hadoop/core-site.xml
Parameter | Value | Notes |
---|---|---|
fs.defaultFS | NameNode URI | hdfs://host:port/ |
io.file.buffer.size | 131072 | 用于SequenceFiles中的读/写缓冲区的大小。 |
etc/hadoop/hdfs-site.xml
- 1.NameNode的配置:
Parameter | Value | Notes |
---|---|---|
dfs.namenode.name.dir | 在本地文件系统上,NameNode永久存储命名空间和事务日志的路径。 | 如果这是以逗号分隔的目录列表,那么将在所有目录中复制名称表,以实现冗余。 |
dfs.hosts / dfs.hosts.exclude | 允许/排除的DataNode列表。 | 如果需要,使用这些文件来控制允许的数据节点的列表。 |
dfs.blocksize | 268435456 | 对于大文件系统,HDFS块大小为256MB。 |
dfs.namenode.handler.count | 100 | 更多NameNode服务器线程来处理来自大量DataNode的RPC。 |
- 2.DataNode的配置:
Parameter | Value | Notes |
---|---|---|
dfs.datanode.data.dir | 逗号分隔DataNode的本地文件系统上应存储其块的路径列表。 | 如果这是以逗号分隔的目录列表,则数据将存储在所有命名目录中,通常在不同的设备上。 |
etc/hadoop/yarn-site.xml
- ResourceManager和NodeManager的配置:
Parameter | Value | Notes |
---|---|---|
yarn.acl.enable | true / false | 启用ACL?默认为false。 |
yarn.admin.acl | Admin ACL | ACL在集群上设置管理员。 ACL的用法是逗号分隔的用户空间命令分隔组。默认为特殊值*,意味着任何人。只有空间的特殊价值意味着没有人可以访问。 |
yarn.log-aggregation-enable | false | 配置启用或禁用日志聚合 |
- 1.ResourceManager的配置:
Parameter | Value | Notes |
---|---|---|
yarn.resourcemanager.address | ResourceManager主机:客户端提交作业的端口。 | host:port如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.scheduler.address | ResourceManager主机:ApplicationMasters的端口,与调度程序交谈以获取资源。 | host:port如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.resource-tracker.address | ResourceManager主机:NodeManager的端口。 | host:port如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.admin.address | ResourceManager 主机:管理命令的端口。 | host:port如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.webapp.address | ResourceManager web-ui主机:端口。 | host:port如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名。 |
yarn.resourcemanager.hostname | ResourceManager主机。 | host可以设置的单个主机名,而不是设置所有yarn.resourcemanager *地址资源。在ResourceManager组件的默认端口中结果。 |
yarn.resourcemanager.scheduler.class | ResourceManager调度程序类 | CapacityScheduler(推荐),FairScheduler(也推荐)或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 | 允许/排除的NodeManager列表。 | 如果需要,使用这些文件来控制允许的NodeManager的列表。 |
- 2.NodeManager的配置:
Parameter | Value | Notes |
---|---|---|
yarn.nodemanager.resource.memory-mb | 资源,即给定NodeManager的可用物理内存(MB) | 定义NodeManager上可用于运行容器的总可用资源 |
yarn.nodemanager.vmem-pmem-ratio | 任务的虚拟内存使用率可能超过物理内存的最大比率 | 每个任务的虚拟内存使用可能会超过其物理内存限制。 NodeManager上的任务使用的虚拟内存总量可能会超过其物理内存使用率。 |
yarn.nodemanager.local-dirs | 在写入中间数据的本地文件系统上的路径的逗号分隔列表。 | M多路径帮助传播磁盘i / o |
yarn.nodemanager.log-dirs | 在写入日志的本地文件系统上的路径的逗号分隔列表。 | 多路径帮助传播磁盘i / o。 |
yarn.nodemanager.log.retain-seconds | 10800 | 在NodeManager上保留日志文件的默认时间(以秒为单位)仅适用于禁用日志聚合的情况。 |
yarn.nodemanager.remote-app-log-dir | /logs | 应用程序完成时移动应用程序日志的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服务。 |
- 3.历史记录服务器的配置(需要移动到其他位置):
Parameter | Value | Notes |
---|---|---|
yarn.log-aggregation.retain-seconds | -1 | 在删除聚合日志之前保留聚合日志多长时间。 -1禁用。小心,设置太小,你将垃圾邮件的名称节点。 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 检查聚合日志保留之间的时间。如果设置为0或负值,那么该值将计算为聚合日志保留时间的十分之一。小心,设置太小,你将垃圾邮件的名称节点。 |
etc/hadoop/mapred-site.xml
- 1.MapReduce应用程序的配置:
Parameter | Value | Notes |
---|---|---|
mapreduce.framework.name | yarn | 执行框架设置为Hadoop YARN。 |
mapreduce.map.memory.mb | 1536 | maps较大资源限制。 |
mapreduce.map.java.opts | -Xmx1024M | maps的子jvms的较大堆大小。 |
mapreduce.reduce.memory.mb | 3072 | reduces较大资源限制。 |
mapreduce.reduce.java.opts | -Xmx2560M | reduces的子jvms的较大堆大小。 |
mapreduce.task.io.sort.mb | 512 | 更高的内存限制,同时排序数据的效率。 |
mapreduce.task.io.sort.factor | 100 | 更高的内存限制,同时排序数据的效率。 |
mapreduce.reduce.shuffle.parallelcopies | 50 | 通过减少运行的并行副本的数量以从非常大量的映射获取输出。 |
- 2.MapReduce的配置JobHistory服务器:
Parameter | Value | Notes |
---|---|---|
mapreduce.jobhistory.address | MapReduce JobHistory服务器主机:端口 | 默认端口为10020。 |
mapreduce.jobhistory.webapp.address | MapReduce JobHistory服务器Web UI主机:端口 | 默认端口为19888。 |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | 历史文件由MapReduce作业写入的目录。 |
mapreduce.jobhistory.done-dir | /mr-history/done | 历史文件由MR JobHistory Server管理的目录。 |
5.监视NodeManager的运行状况
Hadoop提供了一种机制,管理员可以通过该机制来配置NodeManager定期运行管理员提供的脚本,以确定节点是否健康。
管理员可以通过对脚本中的选择执行任何检查来确定节点是否处于健康状态。如果脚本检测到节点处于不正常状态,则它必须将一行打印到以字符串ERROR开头的标准输出。
NodeManager定期生成脚本并检查其输出。如果脚本的输出包含字符串ERROR,如上所述,则将该节点的状态报告为不正常,并且该节点由ResourceManager列入黑名单。不会将其他任务分配给此节点。
但是,NodeManager继续运行脚本,因此如果节点再次变得健康,则会自动从ResourceManager上的黑名单节点中删除。节点的健康状况以及脚本的输出(如果不正常)可供ResourceManager Web界面中的管理员使用。节点健康后的时间也显示在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.script.interval-ms | 节点运行状况脚本间隔 | 运行健康脚本的时间间隔。 |
yarn.nodemanager.health-checker.script.timeout-ms | 节点运行状况脚本超时时间间隔 | 运行健康脚本执行的超时。 |
如果只有一些本地磁盘变坏,健康检查器脚本不应该给出错误。NodeManage 能够定期检查本地磁盘的健康状况(特别是检查nodemanager-local-dirs和nodemanager-log-dirs),并且在达到阈值后,根据为配置属性yarn.nodemanager设置的值 .disk-health-checker.min-healthy-disks,整个节点被标记为不健康,并且此信息也被发送到资源管理器。 引导磁盘被突袭或引导磁盘中的故障由运行状况检查器脚本标识。
6.Slaves 文件
列出etc / hadoop / slaves文件中的所有从属主机名或IP地址,每行一个。 辅助程序脚本(如下所述)将使用etc / hadoop / slaves文件在多个主机上同时运行命令。 它不用于任何基于Java的Hadoop配置。 为了使用此功能,必须为用于运行Hadoop的帐户建立ssh信任(通过passphrasess ssh或一些其他方式,如Kerberos)。
7.Hadoop机架意识
许多Hadoop组件是机架感知的,并且利用网络拓扑结构的性能和安全性。 Hadoop守护程序通过调用管理员配置的模块获取集群中从站的机架信息。 有关更多具体信息,请参阅机架感知文档。
强烈建议在启动HDFS之前配置机架感知。
8.记录
Hadoop通过Apache Commons Logging框架使用Apache log4j进行日志记录。编辑etc / hadoop / log4j.properties文件以自定义Hadoop守护程序的日志记录配置(日志格式等)。
9.操作Hadoop集群
一旦完成所有必要的配置,将文件分发到所有计算机上的HADOOP_CONF_DIR目录。这应该是所有机器上的同一目录。
9.1Hadoop启动
要启动Hadoop集群,您需要启动HDFS和YARN集群。
第一次启动HDFS时,必须格式化。将新的分布式文件系统格式化为hdfs:
[hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>
使用以下命令在指定节点上启动HDFS NameNode为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode
在每个指定节点上使用以下命令启动HDFS DataNode为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs start datanode
如果配置了etc / hadoop / slaves和ssh信任访问(请参阅单节点设置),则可以使用实用程序脚本启动所有HDFS进程。作为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/start-dfs.sh
使用以下命令启动YARN,在指定的ResourceManager上作为yarn运行:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager
运行脚本以在每个指定的主机上启动NodeManager作为yarn:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR start nodemanager
启动独立的WebAppProxy服务器。作为yarn在WebAppProxy服务器上运行。如果多个服务器使用负载平衡,则应在每个服务器上运行:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start proxyserver
如果配置了etc / hadoop / slaves和ssh信任访问(请参阅单节点设置),则可以使用实用程序脚本启动所有YARN进程。作为yarn:
[yarn]$ $HADOOP_PREFIX/sbin/start-yarn.sh
使用以下命令启动MapReduce JobHistory Server,在指定的服务器上以mapred运行:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver
9.2Hadoop关闭
使用以下命令停止NameNode,在指定的NameNode上运行hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
运行脚本以将数据节点停止为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode
如果配置了etc / hadoop / slaves和ssh信任访问(请参阅单节点设置),则可能会使用实用程序脚本停止所有HDFS进程。作为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/stop-dfs.sh
使用以下命令停止ResourceManager,在指定的ResourceManager上作为yarn运行:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager
运行脚本以将slave上的NodeManager停止为yarn:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR stop nodemanager
如果配置了etc / hadoop / slaves和ssh信任访问(请参阅单节点设置),则可以使用实用程序脚本停止所有YARN进程。作为yarn:
[yarn]$ $HADOOP_PREFIX/sbin/stop-yarn.sh
停止WebAppProxy服务器。作为yarn在WebAppProxy服务器上运行。如果多个服务器使用负载平衡,则应在每个服务器上运行:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop proxyserver
使用以下命令停止MapReduce JobHistory Server,在指定的服务器上以mapred运行:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver
10.Web界面
一旦Hadoop集群启动并运行,请检查组件的web-ui,如下所述:
Daemon | Web Interface | Notes |
---|---|---|
NameNode | http://nn_host:port/ | 默认HTTP端口为50070。 |
ResourceManager | http://rm_host:port/ | 默认HTTP端口为8088。 |
MapReduce JobHistory Server | http://jhs_host:port/ | 默认HTTP端口为19888。 |