本节内容:java
1. Hadoop版本种类node
目前Hadoop发行版很是多,有华为发行版、Intel发行版、Cloudera发行版(CDH)等,全部这些发行版均是基于Apache Hadoop衍生出来的,之因此有这么多的版本,彻底是由Apache Hadoop的开源协议(http://www.apache.org/licenses/LICENSE-2.0)决定的:任何人能够对其进行修改,并做为开源或商业产品发布/销售。linux
国内绝大多数公司发行版是收费的,好比Intel发行版、华为发行版等,尽管这些发行版增长了不少开源版本没有的新feature,但绝大多数公司选择Hadoop版本时会将把是否收费做为重要指标,不收费的Hadoop版本主要有三个(均是国外厂商),分别是:Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称“CDH”)、Apache基金会hadoop、Hortonworks版本(Hortonworks Data Platform,简称“HDP”)。按顺序表明了,在国内的使用率,CDH和HDP虽然是收费版本,可是他们是开源的,只是收取服务费用。web
Apache社区版本:彻底开源,免费,非商业。apache社区的hadoop版本分枝较多,并且部分hadoop存在bug。在选择hadoop,hbase,hive等时,须要考虑兼容性。正则表达式
Cloudera版本:开源,免费,有商业和非商业版本。是在apache社区版本的hadoop基础上,选择相对稳定版本的hadoop,并在此基础上,进行bug修改和维护。使用者没必要考虑hadoop,hbase,hive等在使用过程当中,版本兼容性。shell
Hortonworks版本:开源,免费,有商业和非商业版本。是在Apache基础上修改,具备apache的特点。apache
2. Apache Hadoop版本衍化vim
Apache Hadoop版本分为两代,咱们将第一代Hadoop称为Hadoop 1.0,第二代Hadoop称为Hadoop 2.0。第一代Hadoop包含三个大版本,分别是0.20.x,0.21.x和0.22.x,其中,0.20.x最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x则NameNode HA等新的重大特性。第二代Hadoop包含两个版本,分别是0.23.x和2.x,它们彻底不一样于Hadoop 1.0,是一套全新的架构,均包含HDFS Federation和YARN两个系统,相比于0.23.x,2.x增长了NameNode HA和Wire-compatibility两个重大特性。通过上面的大致解释,你们可能明白了Hadoop以重大特性区分各个版本的,总结起来,用于区分Hadoop版本的特性有如下几个:缓存
须要注意的是,Hadoop 2.0主要由Yahoo独立出来的hortonworks公司主持开发。安全
2013年10月,Hadoop 2.0发布。关键特性包括:
YARN是“Yet Another Resource Negotiator”的简称,它是Hadoop 2.0引入的一个全新的通用资源管理系统,可在其之上运行各类应用程序和框架,好比MapReduce、Tez、Storm等,它的引入使得各类应用运行在一个集群中成为可能。YARN是在MRv1基础上衍化而来的,是MapReduce发展到必定程度的必然产物,它的出现使得Hadoop计算类应用进入平台化时代,博客中包含大量介绍YARN的文章,有兴趣的读者可阅读:http://dongxicheng.org/category/mapreduce-nextgen/
Hadoop 2.2.0同时解决了NameNode单点故障问题和内存受限问题,其中,单点故障是经过主备NameNode切换实现的,这是一种古老的解决服务单点故障的方案,主备NameNode之间经过一个共享存储同步元数据信息,所以共享存储系统的选择称为关键,而Hadoop则提供了NFS、QJM和Bookeeper三种可选的共享存储系统,具体可阅读个人这篇文章:Hadoop 2.0单点故障问题方案总结。
前面提到HDFS 的NameNode存在内存受限问题,该问题也在2.2.0版本中获得了解决。这是经过HDFS Federation实现的,它容许一个HDFS集群中存在多个NameNode,每一个NameNode分管一部分目录,而不一样NameNode之间彼此独立,共享全部DataNode的存储资源,注意,NameNode Federation中的每一个NameNode仍存在单点问题,需为每一个NameNode提供一个backup以解决单点故障问题。
HDFS快照是指HDFS文件系统(或者子系统)在某一时刻的只读镜像,它的出现使得管理员可定时为重要文件或目录作快照,以防止数据误删、丢失等。具体可阅读:Snapshots for HDFS(使用说明),Support for RW/RO snapshots in HDFS。
经过NFSv3访问HDFS
NFS容许用户像访问本地文件系统同样访问远程文件系统,而将NFS引入HDFS后,用户可像读写本地文件同样读写HDFS上的文件,大大简化了HDFS使用,这是经过引入一个NFS gateway服务实现的,该服务能将NFS协议转换为HDFS访问协议,具体以下图所示。有兴趣的读者可阅读:Support NFSv3 interface to HDFS,以及相关设计文档:HDFS NFS Gateway。
在2.2.0版本以前,Hadoop仅支持Linux操做系统,而Windows仅做为实验平台使用。从2.2.0开始,Hadoop开始支持Windows操做系统,具体可阅读我以前写的一篇文章:Hadoop For Windows。
除了HDFS、MapReduce和YARN这三个核心系统外,Hadoop生态系统还包括Hbase、Hive、Pig等系统,这些系统底层依赖于Hadoop内核,而相比于Hadoop 1.0,Hadoop 2.0的最大变化出如今内核(HDFS、MapReduce和YARN),但与生态系统中其余系统进行集成测试是必需的。
除了以上特性外,Apache官方还给出了两个特殊说明:
(1)HDFS变化:HDFS的symlinks(相似于Linux中的软链接)被将移到了2.3.0版本中
(2)YARN/MapReduce注意事项:管理员在NodeManager上设置ShuffleHandler service时,要采用“mapreduce_shuffle”,而非以前的“mapreduce.shuffle”做为属性值。
新版本不只加强了核心平台的大量功能,同时还修复了大量bug。新版本对HDFS作了两个很是重要的加强:
(1)支持异构的存储层次;
(2)经过数据节点为存储在HDFS中的数据提供了内存缓存功能。
借助于HDFS对异构存储层次的支持,咱们将可以在同一个Hadoop集群上使用不一样的存储类型。此外咱们还可使用不一样的存储媒介——例如商业磁盘、企业级磁盘、SSD或者内存等——更好地权衡成本和收益。若是你想更详细地了解与该加强相关的信息,那么能够访问这里。相似地,在新版本中咱们还能使用Hadoop集群中的可用内存集中地缓存并管理数据节点内存中的数据集。MapReduce、Hive、Pig等相似的应用程序将可以申请内存进行缓存,而后直接从数据节点的地址空间中读取内容,经过彻底避免磁盘操做极大地提升扫描效率。Hive如今正在为ORC文件实现一个很是有效的零复制读取路径,该功能就使用了这项新技术。
在YARN方面,令咱们很是兴奋的事情是资源管理器自动故障转移功能已经进入尾声,虽然在2.3.0这个版本中该功能尚未被发布,可是极有可能会包含在Hadoop-2.4中。此外,2.3.0版本还对YARN作了一些关键的运维方面的加强,例如更好的日志、错误处理和诊断等。
MapReduce的一个关键加强MAPREDUCE-4421。借助于该功能咱们已经再也不须要在每一台机器上安装MapReduce二进制程序,仅仅须要经过YARN分布式缓存将一个MapReduce包复制到HDFS中就能够了。固然,新版本还包含大量的bug修复以及其余方面的加强。例如:
2014年4月,Hadoop 2.4.0发布。关键特性包括:
安全对于Hadoop来讲相当重要,因此在Hadoop 2.4.0版本中对HDFS的全部访问(包括WebHDFS, HsFTP甚至是web-interfaces)都支持了HTTPS。在Hadoop 2.4.0解决了ResourceManager的单点故障。这样会在集群中存在两个ResourceManager,其中一个处于Active;另外一个处于 standby。当Active的出现故障,这样Hadoop能够自动平滑地切换到另一个ResourceManager,这个新的ResourceManager将会自动的重启那些提交的applications。在下一阶段,Hadoop将会增长一个热standby(add a hot standby),这个standby能够继续从故障点运行的应用程序,以保存任何已经完成的工做。
2014年8月,Hadoop 2.5.0发布。关键特性包括:
使用HTTP代理服务器时认证改进。当经过代理服务器使用WebHDFS时这是很是有用的。
增长了一个新的Hadoop指标监控sink,容许直接写到Graphite。
Hadoop文件系统兼容相关的规范工做。
支持 POSIX风格的扩展文件系统。更多细节查看Extended Attributes in HDFS文档。
支持离线image浏览,客户端如今能够经过WebHDFS的API浏览一个fsimage。
NFS网关获得大量可支持性的改进和bug修复。Hadoop portmapper不在须要运行网关,网关如今能够拒绝没有权限的端口的链接。
SecondaryNameNode, JournalNode, and DataNode 的web UI已经使用HTML5和JS美化。
YARN的REST API如今支持写/修改操做。用户能够用REST API提交和杀死应用程序。
时间线存储到YARN,用来存储一个应用通用的和特殊的信息,支持Kerberos认证。
公平调度器支持动态分层用户队列,运行时,用户队列在任一指定的父队列中被动态的建立。
2014年11月,Hadoop 2.6.0发布。关键特性包括:
Hadoop Key Management Server(KMS)是一个基于HadoopKeyProvider API编写的密钥管理服务器。他提供了一个client和一个server组件,client和server之间基于HTTP协议使用REST API通讯。Client是一个KeyProvider的实现,使用KMS HTTP REST API与KMS交互。KMS和它的client有内置的安全机制,支持HTTP SPNEGO Kerberos认证和HTTPS安全传输。KMS是一个Java Web应用程序,运行在与Hadoop发行版绑定在一块儿的预先配置好的Tomcat服务器上。
HDFS-5274增长了追踪经过HDFS的请求的功能,此功能使用了开源的库,HTrace。你们能够看一下HTrace,功能很强大,Cloudera开源出来的。
Transparent Encryption,HDFS实现了一个透明的,端到端的加密方式。一旦配置了加密,从HDFS读出数据解密和写入数据加密的过程对用户应用程序代码带来讲都是透明的。加密过程是端到端的,这意味着数据只能在客户端被加密解密。HDFS历来不存储,也不访问未加密的数据和数据加密密钥。这样知足了加密过程的两个典型的需求:at-rest encryption(静态加密,也就是说,数据持久化在像硬盘这样的媒介上),in-transit encryption(在途加密,例如,当数据在网络中传输的时候)。
Storage SSD && Memory。ArchivalStorage(档案存储器)是将计算能力与不断增加的存储能力分离。拥有高密度低成本的存储可是计算能力较低的节点将变得可用,能够在集群中作冷存储。增长更多的节点做为冷存储能够提升集群的存储能力,跟集群的计算能力无关。
这一部分主要是一些bug的修复和改进。增长了两个新的新特,在2.5.2里已经有所描述了。这里在简单看一下。
ResourceManger Restart
容许AM发送历史事件信息到timeline server。
NodeManager Restart:这个特性可使NodeManager在不丢失运行在节点中的活动的container的状况下从新启动。
Docker Container Executor:DockerContainer Executor(DCE)容许YARN NodeManager在Docker container中启动YARN container。用户能够指定他们想用来运行YARN container的Docker的镜像。这些container提供了一个能够自定义的软件环境,用户的代码能够运行在其中,与NodeManager运行的环境隔离。这些运行用户代码的container能够包含应用程序须要的特定的库,它们能够拥有与NodeManager不一样版本的Perl,Python甚至是Java。事实上,这些container能够运行与NodeManager所在的OS不一样版本的Linux。尽管YARN container必须定义运行Job所需的全部的环境和库,可是NodeManager中的全部的东西都不会共享。
Docer为YARN提供了一致和隔离两种模式,一致模式下,全部的YARN container将拥有相同的软件环境,在隔离模式下,无论物理机器安装了什么都不干扰。
2015年7月,Hadoop 2.7.0发布。关键特性包括:
支持Windows Azure Storage,BLOB做为Hadoop中的文件系统。
Hadoop HDFS
支持文件截断(file truncate);
支持每一个存储类型配额(Support for quotas per storage type);
支持可变长度的块文件
YARN的本地化资源能够自动共享,全局缓存(测试版)
Hadoop MapReduce
可以限制运行的Map/Reduce做业的任务
为很是的大Job(有许多输出文件)加快了FileOutputCommitter。
支持文件截断(file truncate);
支持每一个存储类型配额(Support for quotas per storage type);
支持可变长度的块文件
可以限制运行的Map/Reduce做业的任务
为很是的大Job(有许多输出文件)加快了FileOutputCommitter。
2015年7月,Hadoop 2.7.1发布。关键特性包括:
本版本属于稳定版本,是自Hadoop 2.6.0以来又一个稳定版,同时也是Hadoop 2.7.x版本线的第一个稳定版本,也是 2.7版本线的维护版本,变化不大,主要是修复了一些比较严重的Bug(其中修复了131个Bugs和patches)
Hadoop 有两个主要版本,Hadoop 1.x.y 和 Hadoop 2.x.y 系列,比较老的教材上用的多是 0.20 这样的版本。Hadoop 2.x 版本在不断更新。
Hadoop安装部署模式有3种:
1. 安装部署本地模式Hadoop
本次实验使用的版本是hadoop-2.7.2,实验环境以下:
主机名 | IP地址 | 操做系统版本 | 安装软件 |
node3 | 172.16.7.153 | CentOS 7.1 | hadoop-2.7.2 |
(1)安装JDK1.7
Hadoop Java Versions
Version 2.7 and later of Apache Hadoop requires Java 7. It is built and tested on both OpenJDK and Oracle (HotSpot)'s JDK/JRE.
Earlier versions (2.6 and earlier) support Java 6.
[root@node3 ~]# mkdir /usr/java [root@node3 ~]# tar zxf /usr/local/jdk-7u80-linux-x64.gz -C /usr/java/ [root@node3 ~]# vim /etc/profile export JAVA_HOME=/usr/java/jdk1.7.0_80 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar [root@node3 ~]# source /etc/profile
(2)安装依赖包ssh和rsync
对于Redhat/CentOS系列的,安装系统时通常都会默认安装openssh软件,里面包含了ssh客户端和ssh服务端,因此先检查下这个软件包是否安装了:
# yum list all openssh
若是没有安装,安装:
# yum install -y openssh
在检查rsync软件包是否安装:
# yum list all rsync
(3)添加Hadoop运行用户
# groupadd -g 1000 hadoop # useradd -g 1000 -u 1000 hadoop # echo "wisedu" | passwd --stdin hadoop &> /dev/null
(4)配置主节点登陆本身和其余节点不须要输入密码
使用hadoop用户登陆主机,配置其ssh链接localhost不须要输入密码:
$ ssh-keygen -t rsa -P ''
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@localhost
此时再用 ssh localhost,无需输入密码就能够直接登录了,以下图所示:
(5)解压hadoop
root用户登陆shell:
[root@node3 ~]# cd /usr/local/ [root@node3 local]# tar zxf hadoop-2.7.2.tar.gz [root@node3 local]# ln -sv hadoop-2.7.2 hadoop ‘hadoop’ -> ‘hadoop-2.7.2’
(6)配置hadoop环境变量
[root@node3 ~]# vim /etc/profile # Hadoop HADOOP_HOME=/usr/local/hadoop PATH=$HADOOP_HOME/bin:$PATH export HADOOP_HOME PATH [root@node3 ~]# source /etc/profile [root@node3 ~]# hadoop version
修改/usr/local/hadoop的属主和属组为hadoop:
[root@node3 local]# chown -R hadoop.hadoop /usr/local/hadoop/
(7)配置本地模式并测试
Hadoop 默认模式为非分布式模式,无需进行其余配置便可运行。非分布式即单 Java 进程,方便进行调试。不使用集群文件系统的,只是个调试查看模式,不会启动什么DataNode这类的进程。
能够执行例子来感觉下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 能够看到全部例子),包括 wordcount、terasort、join、grep 等。
在此选择运行 grep 例子,咱们将 input 文件夹中的全部文件做为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。
hadoop用户登陆shell:
[hadoop@node3 ~]$ cd /usr/local/hadoop [hadoop@node3 hadoop]$ mkdir input [hadoop@node3 hadoop]$ cp etc/hadoop/*.xml input # 将配置文件做为输入文件
[hadoop@node3 hadoop]$ cat output/* # 查看运行结果
执行成功后以下所示,输出了做业的相关信息,输出的结果是符合正则的单词 dfsadmin 出现了1次:
注意: Hadoop 默认不会覆盖结果文件,所以再次运行上面实例会提示出错,须要先将 ./output 删除。
2. 安装部署伪分布式Hadoop
Hadoop 能够在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既做为 NameNode 也做为 DataNode,同时,读取的是 HDFS 中的文件。
(1)Hadoop配置文件说明
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式须要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每一个配置以声明 property 的 name 和 value 的方式来实现。
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),所以若是须要从伪分布式模式切换回非分布式模式,须要删除 core-site.xml 中的配置项。
此外,伪分布式虽然只须要配置 fs.defaultFS 和 dfs.replication 就能够运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,致使必须从新执行 format 才行。因此咱们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,不然在接下来的步骤中可能会出错。
(2)修改配置文件 core-site.xml,配置Hadoop的核心属性
[hadoop@node3 hadoop]$ vim etc/hadoop/core-site.xml <configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
(3)修改配置文件 hdfs-site.xml,定义hdfs的属性
[hadoop@node3 hadoop]$ vim etc/hadoop/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
注意: 若是须要其它用户对hdfs有写入权限,还须要在hdfs-site.xml添加一项属性定义。
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
HDFS进程有许多属性能够定义其工做路径,如dfs.namenode.name.dir属性定义的HDFS元数据持久存储路径,默认为${hadoop.tmp.dir}/dfs/name。
dfs.datanode.data.dir属性定义DataNode用于存储数据块的目录路径,默认为${hadoop.tmp.dir}/dfs/data。
fs.checkpoint.dir属性定义的SecondaryNameNode用于存储检查点文件的目录,默认为${hadoop.tmp.dir}/dfs/namesecondary。
为了数据可用性及冗余的目的,HDFS会在多个节点上保存同一个数据块的多个副本,其默认为3个。而只有一个节点的伪分布式环境中其仅用保存一个副本,这能够经过dfs.replication属性进行定义。
(4)执行 NameNode 的格式化
[hadoop@node3 hadoop]$ bin/hdfs namenode -format
成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。
(5)开启 NameNode 和 DataNode 守护进程
[hadoop@node3 hadoop]$ sbin/start-dfs.sh Error: JAVA_HOME is not set and could not be found.
解决:
[hadoop@node3 hadoop]$ vim etc/hadoop/hadoop-env.sh
再次启动:
[hadoop@node3 hadoop]$ sbin/start-dfs.sh
启动完成后,能够经过命令 jps 来判断是否成功启动,若成功启动则会列出以下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”(若是 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,而后再次尝试启动尝试)。若是没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查以前步骤,或经过查看启动日志排查缘由。The hadoop daemon log output is written to the $HADOOP_LOG_DIR directory (defaults to $HADOOP_HOME/logs)。
(6)查看NameNode 信息
成功启动后,能够访问 Web 界面 http://172.16.7.153:50070 查看 NameNode 和 Datanode 信息,还能够在线查看 HDFS 中的文件。
(7)测试hadoop
上面本地模式的例子,grep读取的是本地文件系统上的数据,本地模式是不使用集群文件系统HDFS的。
伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先须要在 HDFS 中建立用户目录。
a. 在HDFS中建立目录:
[hadoop@node3 ~]$ cd /usr/local/hadoop [hadoop@node3 hadoop]$ bin/hdfs dfs -mkdir -p /user/hadoop
b. 接着将 ./etc/hadoop 中的 xml 文件做为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/root/input 中。咱们使用的是hadoop用户,而且已建立相应的用户目录 /user/hadoop ,所以在命令中就可使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
[hadoop@node3 hadoop]$ bin/hdfs dfs -mkdir input [hadoop@node3 hadoop]$ bin/hdfs dfs -put ./etc/hadoop/*.xml input
c. 复制完成后,能够经过以下命令查看文件列表:
[hadoop@node3 hadoop]$ bin/hdfs dfs -ls input
d. 伪分布式运行 MapReduce 做业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(能够将单机步骤中建立的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)
hadoop@node3 hadoop]$ bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
e. 查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
[hadoop@node3 hadoop]$ bin/hdfs dfs -cat output/*
结果以下,注意到刚才咱们已经更改了配置文件,因此运行结果不一样。
f. 咱们也能够将运行结果取回到本地
[hadoop@node3 hadoop]$ rm -r ./output # 先删除本地的 output 文件夹(若是存在) [hadoop@node3 hadoop]$ bin/hdfs dfs -get output ./output # 将HDFS 上的 output 文件夹拷贝到本机
[hadoop@node3 hadoop]$ cat ./output/*
g. Hadoop 运行程序时,输出目录不能存在,不然会提示错误
“org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,所以若要再次执行,须要执行以下命令删除 output 文件夹:
[hadoop@node3 hadoop]$ bin/hdfs dfs -rm -r output 16/06/27 23:37:30 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes. Deleted output
注意: 运行 Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录(如 output)不能存在,不然会提示错误,所以运行前须要先删除输出目录。在实际开发应用程序时,可考虑在程序中加上以下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操做:
Configuration conf = new Configuration(); Job job = new Job(conf); Path outputPath = new Path(args[1]); outputPath.getFileSystem(conf).delete(outputPath, true);
h. 若要关闭 Hadoop,则运行
[hadoop@node3 hadoop]$ sbin/stop-dfs.sh
注意:下次启动 hadoop 时,无需进行 NameNode 的初始化,只须要运行 sbin/start-dfs.sh 就能够了。
(8)启动YARN
注意:伪分布式不启动 YARN 也能够,通常不会影响程序执行。
玩过Hadoop V1版本的可能会疑惑,启动 Hadoop 后,见不到所说的 JobTracker 和 TaskTracker进程,这是由于新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也称为 YARN,Yet Another Resource Negotiator)。
YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性。
上述经过 sbin/start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce 环境,咱们能够启动 YARN ,让 YARN 来负责资源管理与任务调度。
a. 首先修改配置文件 mapred-site.xml
[hadoop@node3 ~]$ cd /usr/local/hadoop [hadoop@node3 hadoop]$ mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml [hadoop@node3 hadoop]$ vim mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
b. 修改配置文件 yarn-site.xml
[hadoop@node3 hadoop]$ vim yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
c. 启动 YARN (须要先执行过 ./sbin/start-dfs.sh)
[hadoop@node3 hadoop]$ sbin/start-yarn.sh
[hadoop@node3 hadoop]$ sbin/mr-jobhistory-daemon.sh start historyserver # 开启历史服务器,才能在Web中查看任务运行状况
启动 YARN 以后,运行实例的方法仍是同样的,仅仅是资源管理方式、任务调度不一样。观察日志信息能够发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 以后,是 “mapred.YARNRunner” 在跑任务。启动 YARN 有个好处是能够经过 Web 界面查看任务的运行状况:http://localhost:8088/cluster,以下图所示。
在执行下上面的任务:
[hadoop@node3 hadoop]$ bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
但 YARN 主要是为集群提供更好的资源管理与任务调度,然而这在单机上体现不出价值,反而会使程序跑得稍慢些。所以在单机上是否开启 YARN 就看实际状况了。
e. 关闭 YARN 的脚本以下
[hadoop@node3 hadoop]$ sbin/stop-yarn.sh [hadoop@node3 hadoop]$ sbin/mr-jobhistory-daemon.sh stop historyserver
注意:不启动 YARN 需重命名 mapred-site.xml。若是不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改为 mapred-site.xml.template,须要用时改回来就行。不然在该配置文件存在,而未开启 YARN 的状况下,运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误,这也是为什么该配置文件初始文件名为 mapred-site.xml.template。