目录
6. Service Level Authorization
18. Centralized Cache Management
15. Running Applications in Docker Containers
八. Hadoop compatible File Systems
1. Changelog and Release Notes
一. General(概括)
1. Overview(概述)
Apache Hadoop 2.9.2
Apache Hadoop 2.9.2是2.x.y发行版中的一个点发行版,它建立在前一个稳定版2.9.1的基础上。
以下是主要特性和改进的简要概述:
* Common
> 阿里云OSS支持
> Hadoop资源估测器
* HDFS
> 基于HDFS路由器的联合
* YARN
> YARN 时间轴服务v.2
> YARN联合
> 随即容器
> YARN Web UI v.2
> 通过API(仅在容量调度器上支持)改变队列配置
> 更新已分配/正在运行的容器的资源和执行类型。(仅在容量调度器上支持)
入门(Getting Started)
Hadoop文档包括开始使用Hadoop所需要的信息。从单节点设置(Single Node Setup)开始,它向您展示了如何设置单节点Hadoop安装;然后转到集群设置(Cluster Setup),学习如何设置多节点Hadoop安装。
2. Single Node Setup
Hadoop: Setting up a Single Node Cluster.
Purpose
本文档描述了如何设置和配置单节点Hadoop安装,以便您可以使用Hadoop MapReduce和Hadoop分布式文件系统(HDFS)快速执行简单操作。
Prerequisites(前提条件)
支持的平台
- 支持GNU/Linux作为开发和生产平台。Hadoop已经在具有2000个节点的GNU/Linux集群上进行了演示。
- 也支持Window平台,但是下面的步骤只针对Linux。要在Window上设置Hadoop,请参阅wiki page。
所需软件
对于Linux需要的软件包括:
1. 必须安装Java。在 HadoopJavaVersions上描述了推荐的Java版本。
2. 必须安装ssh,并运行sshd以使用 管理远程Hadoop守护进程的Hadoop脚本。
安装软件
如果你的集群没有必备的软件,您将需要安装它。
例如在Ubuntu Linux:
|
Download
要获得一个Hadoop发行版,请从Apache Download Mirrors之一下载最新的稳定版本。
Prepare to Start the Hadoop Cluster
解压下载的Hadoop发行版。在发行版中,编辑etc/hadoop/hadoop-env.sh文件来定义以下一些参数:
# set to the root of your Java installation
export JAVA_HOME=/usr/java/latest
尝试以命令:
$ bin/hadoop |
这将显示hadoop脚本的使用文档。
现在您将在三种支持的模式之一中启动Hadoop集群:
- Local(Standalone) Mode--本地(独立)模式
- Pseudo-Distributed Mode--伪分布模式
- Fully-Distributed Mode--完全分布式模式
Standalone Operation
默认情况下,Hadoop被配置为在非分布式模式下运行,作为单个Java进程。这对调试很有用。
下面的示例复制解压后的conf目录用作输入,然后查找并显示给定的正则表达式的每个匹配项。输出被写入给定的输出目录。
$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop --config etc/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'
$ cat output/*
摘抄:
默认的模式,无需运行任何守护进程(daemon),所有程序都在单个JVM上执行。由于在本机模式下测试和调试MapReduce程序较为方便,因此,这种模式适宜用在开发阶段。
使用本地文件系统,而不是分布式文件系统。
Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程,Map()和Reduce()任务作为同一个进程的不同部分来执行的。
用于对MapReduce程序的逻辑进行调试,确保程序的正确。
所谓默认模式,及安装完jdk及hadoop,配置好相应的环境,及本地模式配置完成
Pseudo-Distributed Operation
Hadoop还可以在一个伪分布式模式的单个节点上运行,其中每个Hadoop守护进程在单独的Java进程中运行。
Configuration
使用如下:
etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
Setup passphraseless ssh(设置无密码ssh)
现在检查您在没有密码的情况下,是都能ssh到主机:
$ ssh localhost
如果在没密码的情况下无法ssh到主机,那么就执行下面的命令:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
Execution
以下说明用于在本地运行MapReduce作业。如果想在YARN上运行作业,请参见YARN on Single Node。
1. 格式化文件系统:
$ bin/hdfs namenode -format
2. 启动NameNode守护进程和DataNode守护进程:
$ sbin/start-dfs.sh
hadoop守护进程日志输出被写入$HADOOP_LOG_DIR目录(默认是$HADOOP_HOME/logs)
3.浏览NameNode的web页面;默认位于:
- NameNode - http://localhost:50070
4.创建执行MapReduce作业所需的HDFS目录:
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/<username>
5.将输入文件复制到分布式文件系统中:
$ bin/hdfs dfs -mkdir input
$ bin/hdfs dfs -put etc/hadoop/*.xml input
6.运行提供的一些示例:
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'
7.检查输出文件:将输出文件从分布式文件系统复制到本地文件系统,然后查看它们:
$ bin/hdfs dfs -get output output
$ cat output/*
or
在分布式文件系统上查看文件:
$ bin/hdfs dfs -cat output/*
8.完成后,停止守护进程:
$ sbin/stop-dfs.sh
YARN on a Single Node
通过设置一些参数并运行ResourceManager守护进程和NodeManager守护进程,您可以在伪分布式模式的YARN上运行MapReduce作业。以下说明假定Execution中的前4步已经执行。
1.配置参数如下:
etc/hadoop/mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
etc/hadoop/yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanger.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2.启动ResourceManager守护进程和NodeManager守护进程
$ sbin/start-yarn.sh
3.浏览ResourceManager web页面;默认位于:
- ResourceManager - http://localhost:8088/
4. 运行MapReduce作业。
5.完成后,停止守护进程。
$ sbin/stop-yarn.sh
Fully-Distributed Operation
有关设置完全分布式、非普通集群的信息,请参阅Cluster Setup.
3. Cluster Setup
Hadoop Cluster Setup
- Purpose
- Prerequisites
- Installation
- Configuring Hadoop in Non-Secure Mode
- Monitoring Health of NodeManagers
- Slaves File
- Hadoop Rack Awareness
- Logging
- Operating the Hadoop Cluster
- Web Interfaces
Pursose
本文描述了如何安装和配置Hadoop集群,从几个节点到具有数千个节点的超大集群。要使用Hadoop,您可能首先希望将其安装在一台机器上(请参阅单节点设置)
本文档不包括安全性或高可用性等高级主题。
Prerequisites(前提条件)
- 安装Java。参阅Hadoop Wiki了解已知的好的版本。
- 从Apache镜像下载稳定版Hadoop。
Installation(安装)
安装Hadoop集群通常需要在集群中的所有机器上解压软件,或者通过适合您的操作系统的打包系统安装软件。把硬件分成几个功能是很重要的。
通常集群中的一台机器被指定为Namenode,另一台机器被专门指定为ResourceManager。这些都是主机。其它服务(比如web应用代理服务器和MapReduce作业历史服务器)通常运行在专用硬件或共享基础设施上,这取决于负载。
集群中其它机器同时充当DataNode和NodeManager。这些都是slaves。
Configuring Hadoop in Non-Secure Mode(非安全模式下配置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,SecondaryNode,DataNode。YARN守护进程是:ResourceManager,NodeManager,WebAppProxy
。如果用到了MapReduce,那么MapReduce Job History服务器也将会运行。对于大型安装,它们通常安装在单独的主机上。
配置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_PROXY_SERVER_OPTS |
MapReduce 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.例如,如果此变量设置为1000,那么堆将设置为1000MB.这用于配置守护进程的堆大小.默认情况下,值是1000.如果你想为每一个守护进程单独配置值,你可以使用它.
大多情况下,应该指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录,这样它们只能由运行hadoop守护进程的用户写入.否者可能会发生符号攻击.
在整个系统shell环境配置中配置HADOOP_PREFIX也是传统的做法.比如,目录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 |
配置Hadoop守护进程
本节处理在给定配置文件中要指定的重要参数:
- etc/hadoop/core-site.xml
Parameter | Value | Notes |
fs.defaultFS | NameNode URI | hdfs://host:port/ |
io.file.buffer.size | 131072 | 序列文件中使用的读/写缓冲区大小 |
- etc/hadoop/hdfs-site.xml
- Configuration for NameNode:
Parameter | Value | Notes |
dfs.namenode.name.dir | NameNode持久存储名称空间和事务日志的本地文件系统上的路径 | 如果这是一个以逗号分隔的目录列表,那么那么将在所有目录中复制名称表,以实现冗余 |
dfs.hosts / dfs.hosts.exclude |
允许/排除的数据节点列表 | 如果必要,使用这些文件控制允许的数据节点列表 |
dfs.blocksize | 268435456 | 对于大型文件系统,HDFS块大小为256MB |
dfs.namenode.handler | 100 | 处理来自大量数据节点的PRCs的更多名称节点服务器线程数 |
- Configurations for DataNode:
Parameter | Value | Notes |
dfs.datanode.data.dir | 数据节点的本地文件系统上的以逗号分隔的路径列表,其中数据节点存储块 | 如果这是一个逗号分隔目录列表,那么数据将存储在所有命名分目录中,通常存储在不同的设备上 |
- etc/hadoop/yarn-site.xml
- Configurations for ResourceManager and NodeManager:
Parameter | Value | Notes |
yarn.acl.enable | true / false |
enable ACLs?默认为false |
yarn.admin.acl
|
Admin | 在集群上设置管理员的ACL.ACLs的形式:逗号分隔的用户+空格+逗号分隔的组.默认为特殊值*,表示所有人;仅仅是特殊值空格表示任何人都没权限. |
yarn.log-aggregation-enable | false | 启用或禁用日志聚合的配置 |
- Configuration for ResourceManager:
Parameter | Value | Notes |
yarn.resourcemanager.address | 供用户提交作业的ResourceManager的host:port
|
如果设置了host:port,将会覆盖设置在yarn.resourcemanager.hostname中的主机名. |
yarn.resourcemanager.scheduler.address | 供应用程序管理器与调度程序进行对话以获取资源的ResourceManager的host:port | 如果设置了host:port,将会覆盖设置在yarn.resourcemanager.hostname中的主机名. |
yarn.resourcemanager.resource-tracker.address | ResourceManager host:port for NodeManagers | 如果设置了host:port,将会覆盖设置在yarn.resourcemanager.hostname中的主机名. |
yarn.resourcemanager.admin.address | 用于管理命令的ResourceManager的host:port | 如果设置了host:port,将会覆盖设置在yarn.resourcemanager.hostname中的主机名. |
yarn.resourcemanager.webapp.address | ResourceManager web-ui host:port | 如果设置了host:port,将会覆盖设置在yarn.resourcemanager.hostname中的主机名. |
yarn.resourcemanager.hostname | ResourceManager host | host 可以替代所有yarn.resourcemanager*address资源的单一主机名.为ResourceManager组件生成默认端口. |
yarn.resourcemanager.scheduler.class | ResourceManager Scheduler class | CapacityScheduler(推荐),FairScheduler(也推荐),或者FiFoScheduler.使用完全限定的类名,比如:org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler |
yarn.scheduler.minimum-allocation-mb | 在ResourceManager上分配给每个容器请求的最小内存限制 | 单位是MBs |
yarn.scheduler.maximum-allocation-mb | 在ResourceManager上分配给每个容器请求的最大内存限制 | 单位是MBs |
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path |
允许/排除的NodeManagers列表 | 如果有必要,使用这些文件控制允许的NodeManagers列表 |
- Configurations for NodeManager:
Parameter | Value | Notes |
yarn.nodemanager.resource.memory-mb | 资源,即给定的NodeManager的可用物理内存,单位是MB
|
定义NodeManager上可供运行容器使用的总可用资源 |
yarn.nodemanager.vmem-pmem-ratio | 任务的虚拟内存使用可能超出物理内存的最大比率 | 每个任务的虚拟内存使用率可能超出其物理内存限制的比率;NodeManager上的任务使用的虚拟内存总量超过其物理内存使用的比率. |
yarn.nodemanager.local-dirs | 写入中间数据的本地文件系统上以逗号分隔的路径列表。 | 多路径有助于扩展磁盘I/O. |
yarn.nodemanager.log-dirs | 写入日志的本地文件系统上以逗号分隔的路径列表。 | 多路径有助于扩展磁盘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 | 需要为Map Reduce应用程序设置的洗牌服务 |
- Configuration for History Server(需要移动到别处):
Parameter | Value | Notes |
yarn.log-aggregation.retain-seconds | -1
|
在删除聚合日志之前保留多长时间.-1表示禁止.注意,此参数值设置太小将会向NameNode发送垃圾邮件. |
yarn.log-aggregation.retain-check-internal-seconds
|
-1 | 检查聚合日志间隔之间的时间间隔.如果设置为零或负值,则该值将计算为聚合日志保留时间的十分之一.注意,此参数值设置太小将会向NameNode发送垃圾邮件. |
- etc/hadoop/mapred-site.xml
- Configurations for MapReduce Applications:
Parameter | Value | Notes |
mapreduce.framework.name | yarn
|
执行框架设置为YARN |
mapreduce.map.memory.mb | 1536 | maps更大的资源限制.描述:调度程序为每个map任务请求的内存量. |
mapreduce.map.java.opts | -Xmx1024M | |
mapreduce.reduce.memory.mb | 3072 | reduces更大的资源限制.描述:调度程序为每个reduce任务请求的内存量. |
mapreduce.reduce.java.opts | -Xm2560M | |
mapreduce.task.io.sort.mb | 512 | 有效排序数据时更大的内存限制.描述:排序文件时要使用的缓冲区内存总量,以兆字节为单位。默认情况下,为每个合并流提供1MB,这将使查找最小化。 |
mapreduce.task.io.sort.factor | 100 | 排序文件时同时合并的更多的流.描述:排序文件时要同时合并的流的数目。这将确定打开的文件句柄数。 |
mapreduce.reduce.shuffle.parallelcopyies | 50 | 用于从大量的maps获取输出后在reduces上运行的更多的并行副本数.描述:在复制(混排)阶段通过由reduce运行的默认并行传输数. |
- Configuration for MapReduce JobHistroy Server:
Parameter | Value | Notes |
mapreduce.jobhistory.address | MapReduce JobHistroy Server host:port | 默认端口是10020.描述:MapReduce JobHistory Server IPC(进程间通信) host:port |
mapreduce.jobhistory.webapp.address | MapReduce JobHistory Server Web UI host:port | 默认端口是19888.描述:MapReduce JobHistory Server Web UI host:port |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | MapReduce作业写入历史文件的目录. |
mapreduce.jobhistory.done-dir | /mr-history/done | MR JobHistory 服务器管理历史文件的目录 |
Monitoring Health of NodeManagers
Hadoop提供了一种机制,管理员可以通过该机制将节点管理器配置为定期运行管理员提供的脚本,以确定节点是否正常。
管理员可以通过在脚本中执行他们选择的任何检查来确定节点是否处于健康状态.如果脚本检测到节点处于不健康状态,它必须将一行以字符串ERROR开头的内容打印到标准输出中。NodeManager定期生成脚本并检查其输出。如果脚本的输出包含如上所述的字符串错误,则节点的状态报告为不健康,并且该节点被ResourceManager列入黑名单。不再向该节点分配任何其他任务。但是,NodeManager将继续运行该脚本,以便如果节点再次恢复健康,它将自动从ResourceManager上的黑名单节点中删除。节点的运行状况以及脚本的输出(如果不正常)可供管理员在ResourceManager Web界面中使用。自节点正常运行以来的时间也显示在Web界面上.
etc/hadoop/ yarns -site.xml中的下面的参数可以用来控制节点健康监控脚本.
Parameter | Value | Notes |
yarn.nodemanager.health-checker.script.path | Node health script | 用于检查节点运行状况的脚本. |
yarn.nodemanager.health-checker.script.opts | Node health script options | 用于检查节点运行状况的脚本选项.描述:传递给运行状况检查脚本的参数 |
yarn.nodemanager.health-checker.inter | Node health script interval | 运行health script的时间间隔.描述:运行磁盘运行状况检查程序代码的频率. |
yarn.nodemanager.health-checker.script.timeout-ms | Node health script timeout interval | health script 执行超时. |
如果只有部分本地磁盘损坏,则健康检查程序脚本不应该给出ERROR.NodeManager能够定期检查本地磁盘的运行状况(特别是检查nodemanager-local-dirs和nodemanager-log-dirs),并且在根据配置属性yarn.nodeManager.disk-health-checker.min-health-disks设置的值达到坏目录数阈值后,整个节点都被标记为不健康,而且这个信息也会发送给资源管理器。引导盘被攻击,或者健康检查程序脚本检测到引导盘中的故障.
Slaves File
在文件etc/hadoop/slaves中列出所有从属主机名或IP地址,每行一个.Helper scripts(如下所述)将使用etc/hadoop/slaves文件一次在很多主机上运行命令.它不用于任何基于Java的Hadoop配置.为了使用此功能,必须为用于运行Hadoop的帐户建立ssh信任(通过无密码ssh或其它方式,如Kerberos).
Hadoop Rack Awareness
许多Hadoop组建具有机架感知功能,并利用网络拓扑结构提高性能和安全性.Hadoop守护进程通过调用管理员配置的模块来获取集群中从机的机架信息.有关更多具体信息,请参阅 Rack Awareness文档.
强烈建议在启动HDFS之前配置机架感知.
Logging
Hadoop使用 Apache log4j.通过Apache Commons日志框架进行日志记录.编辑etc/hadoop/log4j.properties文件以自定义Hadoop守护进程的日志配置(日志格式等).
Operating the Hadoop Cluster(操作Hadoop集群)
完成所有必需的配置后,将文件分发到所有计算机上的HADOOP_CONF_DIR目录.这应该是所有机器上的同一个目录.一般来说,建议HDFS和YARN作为单独的用户来运行.在大多数安装中,HDFS进程作为hdfs执行,YARN通常使用yarn帐户.
Hadoop Starttup
要启动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 |
在每个指定的节点上使用下面命令启动一个DataNode 作为hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --confg $HADOOP_CONF_DIR --script hdfs start datanode |
如果配置了etc/hadoop/slaves和ssh可信访问(参阅Single Node Setup),那么所有的HDFS进程都可以用一个实用脚本启动.作为hdfs:
[hdfs]$ $HADOOP_PR EFIX/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-daemon.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可信访问(参阅Single Node Setup),那么所有的YARN进程都可以用一个实用脚本启动.作为yarn:
[yarn]$ $HADOOP_YARN/HOME/sbin/start-yarn.sh |
用下面的命令启动MapReduce JobHistory服务器,运行在指定的服务器上,作为 mapred:
[mapred]$ $HDOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver |
Hadoop Shutdown
使用以下命令停止NameNode,运行在指定的NameNode,作为 hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadopo-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode |
运行一个脚本以停止一个DataNode,作为 hdfs:
[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode |
如果配置了etc/hadoop/slaves和ssh可信访问(参阅 Single Node Setu),那么所有的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 |
运行一个脚本以停止一个从属服务器器上NodeManager,作为 yarn:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager |
如果配置了etc/hadoop/slaves和ssh可信访问(参阅 Single Node Setu),那么就可以使用实用脚本程序停止所有yarn进程.作为 hdfs:
[yarn]$ $HADOOP_YARN_HOME/sbin/stop-yarn.sh |
停止WebAppProxy服务器.运行在WebAppProxy服务器上,作为 yarn. 如果多个服务器用于负载平衡,则应该在每个服务器上运行:
[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop proxyserver |
用下面的命令停止MapReduce JobHistory服务器,运行在指定的服务器上,作为 mapred:
[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver |
Web Inerfaces
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 |
4. Commands Reference(命令参考)
Hadoop Commands Guide
概述
所有Hadoop命令都由bin/hadoop脚本调用.在没有任何参数的情况下运行hadoop脚本将打印所有命令的描述.
Usage: hadoop [--config confdir] [--loglevel loglevel] [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]
FIELD | Description |
--config confdir | 覆盖默认的配置目录.默认是${HADOOP_HOME}/conf |
--loglevel loglevel | 覆盖日志级别.有效的日志级别包括:FATAL(致命),ERROR(错误),WARN(警告),INFO(信息),DEBUG(调试)和TRACE(跟踪).默认是INFO(信息) |
GENERIC_OPTIONS | 有多个命令支持的公共选项集合 |
COMMAND_OPTIONS | 本文档中描述了Hadoop公共子项目的各种命令及其选项.HDFS和YARN包含在其它文档中. |
GENERIC_OPTIONS
许多子命令使用一组通用的配置选项来改变其行为:
GENERIC_OPTION | Description |
-archives <comma separated list of archives> | 指定要在计算机上不归档的逗号分隔的存档.仅适用于job. |
-conf <configuration file> | 指定应用程序配置文件 |
-D <property>=<value> | 对给定属性使用值 |
-files <comma separated list of files> | 指定要复制到map reduce 集群的逗号分隔的文件.仅适用于job. |
-fs <file:///> or <hdfs://namenode:port> | 指定要使用的默认文件系统URL.会覆盖配置中的fs.defaultFS属性 |
-jt <local> or <resourcemanager:port> | 指定ResourceManager.仅适用于job. |
-libjars <comma separated list of jars> | 指定要包含在classpath(类路径)中的逗号分隔的jar文件 |
Hadoop Common Commands
所有这些命令都是从hadoop shell命令执行的.它们已经被分解成 User Commands 和 Administration Commands.
User Commands
对Hadoop集群用户有用的命令.
archive |
创建hadoop 备份.更多信息请参阅 Hadoop Archives Guide.
checknative |
Usage: hadoop checknative [-a] [-h]
COMMAND_OPTION | Description |
-a | 检查所有库是否可用 |
-h | 打印帮助 |
此命令检查Hadoop本机代码的可用性.参阅Native Libaries 以获取更多信息.默认情况下,此命令只检查libhadoop的可用性.
classpath |
Usage: hadoop classpath [--glob |--jar <path> |-h |--help]
COMMAND_OPTION | Description |
--glob | 扩展通配符 |
--jar path | 把路径作为清单写入名为 path 的jar中 |
-h, --help | 打印帮助 |
打印获取Hadoop jar和所需库的类路径.如果不带参数调用,则打印由命令脚本设置的类路径,很有可能在类路径条目中包含通配符.其它选项在通配符扩展后打印类路径,或将类路径写入JAR文件的清单中。后者在不能使用通配符且扩展类路径超过支持的最大命令行长度的环境中很有用。
credential |
Usage: hadoop credential <subcommand> [options]
COMMAND_OPTION | Description |
create alias [-provider provider-path] [-strict] [-value credential-value] | 提示用户将凭据存储为给定别名.除非指定-provider,否则将使用core-site.xml文件中的hadoop.security.credential.provider.path .如果provider使用默认密码,-strict标志将导致命令失败.使用-value标志提供凭证值(也就是别名密码),而不是提示. |
delete alias [-provider provider-path] [-strict] [-f] | 使用提供的别名删除凭据.除非指定-provider,否则将使用core-site.xml文件中的hadoop.security.credential.provider.path .如果provider使用默认密码,-strict标志将导致命令失败. 除非指定了-f, 否则命令要求确认. |
list [-provider provider-path] [-strict] | 列出特定provider包含的所有credential别名,比如core-site.xml中配置的或通过-provider参数指定的.如果provider使用默认密码,-strict标志将导致命令失败. |
用于管理凭据provider中的凭据, 密码和机密的命令.
Hadoop中的CredentialProvider允许分离应用程序以及它们如何存储所需密码/机密.为了指示特定的provider类型和位置,用户必须在core-site.xml中提供hadoop.security.credential.provider.path配置元素, 或者在以下每个命令上使用命令行选项 -provider. provider path是一个逗号分隔的URLs列表,这些URLs指示应咨询的provider的列表的类型和位置. 例如,以下路径:
user:///,jceks://file/tmp/test.jceks,jceks://hdfs@nn1.example.com/my/path/test.jceks
表示应该通过User Provider 咨询当前用户的凭据; 位于/tmp/test.jceks的本地文件是Java Keystore Provider; 位于HDFS中的nn1.example.com/my/path/test.jceks也是Java Keystore Provider的存储区.
当使用credential命令式,它通常用于向特定凭证存储提供程序提供密码或秘密. 为了指示使用哪个提供程序存储,应该使用-provider选项. 否则,给定多个提供程序的路径,将使用第一个非瞬时提供程序. 这可能是你想要的,也可能不是.
提供程序经常要求提供密码或其它机密.如果提供程序需要一个密码,但找到密码,它将使用默认密码,并发出警告信息,表明正在使用默认密码. 如果提供了-strict标志,警告信息将变为错误信息,命令将立即返回错误状态.
示例: hadoop credential list --provider jceks://file/tmp/test.jceks
distcp |
Usage: hadoop distcp <srcurl> <desturl>
递归地复制文件或目录. 有关更多信息,请参阅 Hadoop DistCp Guide.
fs |
Usage: hadoop fs [generic options]
运行通用文件系统用户客户端. 此命令记录在 File System Shell Guide. 当使用HDFS时, 它是hdfs dfs 的同义词.
jar |
Usage: hadoop jar <jar> [mainClass] args...
运行一个jar文件.
注意:使用yarn jar 来启动YARN应用程序.
key |
Usage: hadoop key <subcommand> [options]
COMMAND_OPTIONS | Description |
create keyname [-cipher cipher ] [-size size] [-description description] [-attr attribute=value] [-provider provider] [-strict] [-help] | 在-provider参数指定的提供程序中,为keyname参数指定的名称创建一个新密钥. 如果提供程序使用默认密码,-strict标志将导致命令失败。可以使用-cipher参数指定密码。默认密码当前为“AES/CTR/NoPadding”. 默认键大小是128. 可以用-size参数指定请求的密钥长度. 使用-attr参数可以指定任意attribute=value类型的属性. -attr可以指定多次,每次一个属性. |
roll keyname [-provider provider] [-strict] [-help] | 在使用-provider参数指示的提供程序中为指定密钥创建新版本. 如果提供程序使用默认密码,-strict标志将导致命令失败。 |
delete keyname [-provider provider] [-strict] [-f] [-help] | 在使用-provider参数指示的提供程序中删除keyname参数指定的密钥所有版本. 如果提供程序使用默认密码,-strict标志将导致命令失败。 该命令要求用户确认,除非指定了-f。 |
list [-provider provider] [-strict] [-metadata] [-help] | 显示正如core-site.xml配置的或由-provider参数指定的特定提供程序所包含的密钥名. 如果提供程序使用默认密码,-strict标志将导致命令失败。-metadata选项显示元数据 |
-help | 打印此命令的用法 |
通过密钥提供程序(KeyProvider)管理密钥. 有关密钥提供程序详情,请参阅 Transparent Encryption Guide.
提供程序经常要求提供密钥或其它机密. 如果提供程序需要密码,但找不到密码,它将使用默认密码并发出警告消息,说明正在使用默认密码。如果提供了-strict标志,则警告消息将变为错误消息,命令将立即返回错误状态。
注意: 某些 KeyProvider(比如:org.apache.hadoop.crypto.key.JavaKeyStoreProvider)不支持大写密钥名.
注意: 某些密钥提供程序不直接执行密钥删除(例如, 执行软删除,或延迟实际删除,以防出错). 在这种情况下,在删除密钥之后创建/删除具有相同名称的密钥时可能会遇到错误. 请检查基础密钥提供程序以获得详细信息。
trace |
查看和修改Hadoop tracing 设置. 请参阅Tracing Guide.
version |
Usage: hadoop version
CLASSNAME |
Usage: hadoop CLASSNAME
运行名为CLASSNAME的类.
envvars |
Usage: hadoop envvars
显示计算的Hadoop环境变量
Administration Commands
对Hadoop集群管理员有用的命令.
daemonlog |
Usage:
COMMAND_OPTION | Description |
-getlevel host:port classname [-protocol (http|https)] | 打印在host:port 运行的守护进程中由限定类名(classname)标识的日志等级. -protocol标志指定用于连接的协议 |
-setlevel host:port classname level [-protocol (http|https)] | 设置在host:port 运行的守护进程中由限定类名(classname)标识的日志等级. -protocol标志指定用于连接的协议 |
动态获取/设置守护进程中由限定类名标识的日志的日志级别. 默认情况下,该命令发送一个HTTP请求,但可以通过使用参数-protocol https发送一个HTTPS请求来覆盖它。
例如:
$ bin/hadoop daemonlog -setlevel 127.0.0.1:50070 org.apache.hadoop.hdfs.server.namenode.NameNode $ bin/hadoop daemonlog -getlevel 127.0.0.1:50074 org.apache.hadoop.hdfs.server.namenode.NameNode DEBUG -protocol https |
注意: 改设置不是永久性的, 重启守护进程时会重置. 此命令通过向守护进程内部的Jetty servlet发送HTTP/HTTPS请求来工作,因此它支持以下守护进程:
- HDFS
- name node
- secondary name node
- data node
- journal node
- YARN
- resource manager
- node manager
- Timeline server
但是,该命令不支持KMS服务器,因为它的Web界面基于不支持servlet的Tomcat.
5. FileSystem Shell
- appendToFile
- cat
- checksum
- chgrp
- chmod
- chown
- copyFromLocal
- copyToLocal
- count
- cp
- createSnapshot
- deleteSnapshot
- df
- du
- dus
- expunge
- find
- get
- getfacl
- getfattr
- getmerge
- help
- ls
- lsr
- mkdir
- moveFromLocal
- moveToLocal
- mv
- put
- renameSnapshot
- rm
- rmdir
- rmr
- setfacl
- setfattr
- setrep
- stat
- tail
- test
- text
- touchz
- truncate
- usage
- Deleting objects
- Overwriting Objects
- Timestamps
- Security model and operations
- Commands of limited value
Overview
文件系统(FS)shell包含各种类似shell的命令,这些命令直接和分布式文件系统(HDFS)以及Hadoop支持的其它文件系统交互,例如,Local FS, HFTP FS, S3和其它。FS shell 这样来调用:
bin/hadoop fs <args> |
所有FS shell都把path URIs当作参数。URI格式是:scheme://authority/path. 对于HDFS来说,scheme是hdfs;对于Local FS来说,scheme是file。scheme和authority是可选的,如果未指定,则使用配置中指定的默认scheme。HDFS文件或目录,如/parent/child,可以指定为hdfs://namenodehost/parent/child或仅指定为/parent/child(假定你的配置设置为指向hdfs://namenodehost)。
FS shell中大多数命令的行为类似于相应的Unix命令。每个命令都描述了不同之处。错误信息发送到stderr,输出发送到stdout.
如果使用了HDFS,则hdfs dfs是同义词。
可以使用相对路径。对于HDFS来说,当前工作目录是HDFS主目录/user/<username>,此目录通常需要手动创建。HDFS也可以隐式访问,例如,当使用HDFS垃圾文件夹时, .Trash文件夹就在主目录中.
参阅 Commands Manual知晓通用shell选项.
appendToFile
Usage: hadoop fs -appendToFile <localfile> ... <dst>
将单个或多个src从本地文件系统追加到目标文件系统. 还从stdin读取输入并追加到目标文件系统.
- hadoop fs -appendToFile localfile /user/hadoop/hadoopfile
- hadoop fs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile
- hadoop fs -appendToFile localfile hdfs://nn.example.com/hadoop/hadoopfile 注意:会在HDFS根目录下创建新文件夹hadoop
- hadoop fs -appendToFile - hdfs//nn.example.com/hadoop/hadoopfile 从stdin读取输入
退出代码:
成功时返回0,失败时返回1.
cat
Usage: hadoop fs -cat [-ignoreCrc] URI [URI ...]
将源路径复制到stdout.
Options
- -ignoreCrc选项表示禁用校验和验证.
示例:
- hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
- hadoop fs -cat file:///file3 /user/hadoop/file4
checksum
Usage: hadoop fs -checksum URI
返回一个文件的校验和信息.
示例:
- hadoop fs -checksum hdfs://nn1.example.com/file1
- hadoop fs -checksum file:///etc/hosts
chgrp
Usage: hadoop fs -chgrp [-R] GROUP URI [URI ...]
改变文件的组关联. 用户必须是文件属主(所有者),否则必须是超级用户. 其它信息在 Permissions Guide.
Options
- -R选项将通过目录结构递归地进行更改。
chmod
Usage: hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
更改文件权限。使用-R,通过目录结构递归地进行更改。用户必须是文件属主(所有者),否则必须是超级用户. 其它信息在 Permissions Guide.
选项:
- -R选项将通过目录结构递归地进行更改。
chown
Usage: hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ...]
改变文件所有者。用户必须是文件属主(所有者),否则必须是超级用户. 其它信息在 Permissions Guide.
Options
- -R选项将通过目录结构递归地进行更改。
copyFromLocal
Usage: hadoop fs -copyFromLocal <localsrc> URI
类似于fs -put 命令,只是源文件仅限于本地文件引用。
选项:
- -p: 保留访问和修改时间,所有权和权限。(假设权限可以通过文件系统传播)
- -f: 如果目标已存在就覆盖目标
- -l: 允许DataNode将文件延迟保存到磁盘,强制复制因子为1。此标志将导致耐久性降低。小心使用。
- -d: 跳过创建后缀为._COPYIN