《深入解析YARN架构设计与实现原理》第1章 环境准备【1.5】
1.5 Hadoop初体验一般而言, 我们想要深入学习一个新的系统时, 首先要尝试使用该系统, 了解系统对外提供的功能, 然后再通过某个功能逐步深
入其实现细节。 本节将介绍如何在 伪分布式工作模式 下使用Hadoop, 包括搭建Hadoop环境、 访问HDFS以及向YARN提交应用程序
等最基本的操作。 本节只是有代表性地介绍Hadoop的一些基本使用方法, 使读者对Hadoop有一个初步认识, 并引导读者逐步进行更全
面的学习。
1.5.1 搭建Hadoop环境
本小节仅介绍单机环境的搭建方法, 更加完整的Hadoop安装步骤和配置方法可参考本书最后的附录A和附录B。 另外, 需要注意
的是, 由于不同用户拥有的Linux环境不尽相同( 比如已经安装的软件不同、 统一软件的版本不同等) , 每个人安装Hadoop过程中遇到
的问题可能不同, 此时需要根据具体的日志提示解决问题。 本小节仅给出一般情况下, Hadoop 2.0的安装步骤。
步骤1 修改Hadoop配置文件。
1) 设置环境变量。 在${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中, 添加JAVA安装目录, 命令如下:
export JAVA_HOME=/usrb/jvm/java-6-openjdk
修改conf目录下的mapred-site.xml、 core-site.xml、 yarn-site.xml和hdfs-site.xml四个文件, 在<configuration>与</configuration>之间添加的内
容见下面的介绍。
2) 在${HADOOP_HOME}/etc/hadoop/下, 将mapred-site.xml.templat重命名成mapred-site.xml, 并添加以下内容:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
【 解释】 相比于Hadoop1.0, 用户无须再配置mapred.job.tracker, 这是因为JobTracker相关实现已变成客户端的一个库( 实际上在
Hadoop 2.0中, JobTracker已经不存在, 它的功能由另外一个称为MRAppMaster的组件实现) , 它可能被随机调度到任何一个slave上,
也就是它的位置是动态生成的。 需要注意的是, 在该配置文件中需用mapreduce.framework.name指定采用的运行时框架的名称, 在此指
定"yarn"。
3) 在${HADOOP_HOME}/etc/hadoop/中, 修改core-site.xml, 为了简单, 我们仍采用Hadoop 1.0中的HDFS工作模式( 不配置HDFS
Federation) , 修改后如下:
<property>
<name>fs.default.name</name>
<value>hdfs://YARN001:8020</value>
</property>
其中, YARN001表示节点的IP或者host。
4) 在${HADOOP_HOME}/etc/hadoop/中, 修改yarn-site.xml, 修改后如下:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce-shuffle</value>
</property>
【 解释】 为了能够运行MapReduce程序, 需要让各个NodeManager在启动时加载shuffle server, shuffle server实际上是Jetty/Netty
Server, Reduce Task通过该server从各个NodeManager上远程复制Map Task产生的中间结果。 上面增加的两个配置均用于指定shuffle
server。
5) 修改${HADCOP_HOME}/etc/hadoop中的hdfs-site.xml文件:
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
【解释】 默认情况下, HDFS数据块副本数是3, 而在集群规模小于3的集群中该参数会导致出现错误, 这可通过将dfs.replication调
整为1解决。
注意 如果你是在虚拟机中搭建Hadoop环境, 且虚拟机经常关闭与重启, 为了避免每次重新虚拟机后启动Hadoop时出现各种问
题, 建议在core-site.xml中将hadoop.tmp.dir属性设置为一个非/tmp目录, 比如/data或者/home/dongxicheng/data( 注意该目录对当前用户需具
有读写权限) 。
步骤2 设置免密码登录。
前面提到Hadoop启动/停止脚本需要通过SSH发送命令启动相关守护进程, 为了避免每次启动/停止Hadoop都要输入密码进行验
证, 需设置免密码登录, 步骤如下。
1) 打开命令行终端, 输入以下命令:
ssh-keygen -t rsa
将会在"~/.ssh/"目录下生成公钥文件id_rsa.pub和私钥文件id_rsa。
2) 将公钥文件id_rsa.pub中的内容复制到相同目录下的authorized_keys文件中:
cd ~/.ssh/
cat id_rsa.pub >> authorized_keys
步骤3 启动Hadoop。
在Hadoop安装目录中, 按以下三步操作启动Hadoop, 我们单步启动每一个服务, 以便于排查错误, 如果某一个服务没有启动成
功, 可查看对应的日志查看启动失败原因。
1) 格式化HDFS, 命令如下:
bin/hadoop namenode -format
2) 启动HDFS。 你可以使用以下命令分别启动NameNode和DataNode:
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
如果有多个DataNode, 可使用hadoop-daemons.sh启动所有DataNode, 具体命令如下:
sbin/hadoop-daemons.sh start datanode
你也可以使用以下命令一次性启动NameNode和所有DataNode:
sbin/ start-dfs.sh
3) 启动YARN。 你可以使用以下命令分别启动ResourceManager和NodeManager:
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
如果有多个NodeManager, 可使用yarn-daemon.sh启动所有NodeManager, 具体命令如下:
sbin/yarn-daemon.sh start nodemanager
你也可以使用以下命令一次性启动ResourceManager和所有NodeManager:
sbin/start-yarn.sh
通过如下jps命令查看是否启动成功:
dong@YARN001:/opt/hadoop/hadoop-2.0$ jps
27577 NameNode
30315 ResourceManager
27924 SecondaryNameNode
16803 NodeManager
通过以下URL可查看YARN是否启动成功:
http://YARN001:8080/
YARN对外提供的Web运行界面如图1-10所示。
图1-10 YARN对外提供的Web界面
如果安装过程中出现问题, 可通过查看日志发现问题所在。 Hadoop日志存放在$HADOOP_HOME/logs目录下的以".log"结尾的文件
中, 比如yarn-dongxicheng-resourcemanager-yarn001.log就是ResourceManager产生的日志。
经过以上三步操作, Hadoop成功启动后, 接下来可以通过Hadoop Shell或者Eclipse插件访问HDFS和提交MapReduce作业。 下面两小
节分别介绍Hadoop Shell和Eclipse插件使用方法。
1.5.2 Hadoop Shell介绍
在1.4节我们曾提到, bin目录下是最基础的集群管理脚本, 用户可以通过该脚本完成各种功能, 如HDFS文件管理、 MapReduce作
业管理等, 更加详细的脚本使用说明, 可参考附录C。
作为入门, 本节介绍的是bin目录下Hadoop脚本的使用方法。 如果你已经对Hadoop 1.0有所了解( 比如尝试安装和使用过Hadoop
1.0) , 那么可直接使用该脚本, 因为该脚本的功能与Hadoop 1.0对应的Hadoop脚本功能完全一致。
该脚本的使用方法为:
hadoop [--config confdir] COMMAND
其中, --config用于设置Hadoop配置文件目录。 默认目录为${HADOOP_HOME}/conf。 而COMMAND是具体的某个命令, 常用的
有HDFS管理命令fs、 作业管理命令job和作业提交命令jar等, 它们的使用方法如下。
( 1) HDFS管理命令fs和作业管理命令job
它们的用法一样, 均为:
bin/hadoop command
其中, command可以是fs或者job, genericOptions是一些通用选项, commandOptions是fs或者job附加的命令选项, 看下面两个例子。
❑在HDFS上创建一个目录/test, 命令如下:
bin/hadoop fs -mkdir /test
❑显示所有Hadoop上正在运行的作业, 命令如下:
bin/hadoop job -list
( 2) 作业提交命令jar
这个命令的用法是:
hadoop jar <jar> args..
其中, <jar>表示JAR包名, mainClass表示main class名称, 可以不必输入而由jar命令自动搜索, args是main class输入参数。 举例如
下:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 5 10
其中pi是hadoop-mapreduce-examples-*.jar 中一个作业名称, 该作业主要功能是采用拟蒙特卡罗法估算圆周率pi( 3.1415926…) 的大
小, 它有两个整型输入参数: Map Task数目和样本数目。
其他更多命令, 读者可自行查阅Hadoop官方设计文档。
单机环境中, Hadoop有两种工作模式: 本地模式和伪分布式模式。 其中, 本地模式完全运行在本地, 不会加载任何Hadoop服务,
因而不会涉及Hadoop最核心的代码实现, 伪分布式即为“单点集群”, 在该模式下, 所有的守护进行均会运行在单个节点上, 因而本节
选用该工作模式。
页:
[1]