java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2787|回复: 0

《深入解析YARN架构设计与实现原理》第1章 环境准备【1.5】

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2096

    主题

    3754

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66788

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-4-12 20:39:03 | 显示全部楼层 |阅读模式
    1.5 Hadoop初体验
    3 M9 ~7 `3 q# O一般而言, 我们想要深入学习一个新的系统时, 首先要尝试使用该系统, 了解系统对外提供的功能, 然后再通过某个功能逐步深
    1 q/ ^+ `; T  K8 R. ?2 v入其实现细节。 本节将介绍如何在 伪分布式工作模式
    [4] 下使用Hadoop, 包括搭建Hadoop环境、 访问HDFS以及向YARN提交应用程序+ z! Y* h$ t% ]
    等最基本的操作。 本节只是有代表性地介绍
    Hadoop的一些基本使用方法, 使读者对Hadoop有一个初步认识, 并引导读者逐步进行更全) i! K# s- A2 j" p0 x$ ?2 k" n; a7 V# z% ]
    面的学习。
    , C  {. O8 L; n! E# {
    1.5.1 搭建Hadoop环境+ h. ^$ L& S5 ~/ q6 u5 a: X' |
    本小节仅介绍单机环境的搭建方法, 更加完整的Hadoop安装步骤和配置方法可参考本书最后的附录A和附录B。 另外, 需要注意
    & U9 R0 U- ^) f  Y; S的是, 由于不同用户拥有的
    Linux环境不尽相同( 比如已经安装的软件不同、 统一软件的版本不同等) , 每个人安装Hadoop过程中遇到
    ( ?6 b' j8 e' _. E的问题可能不同, 此时需要根据具体的日志提示解决问题。 本小节仅给出一般情况下,
    Hadoop 2.0的安装步骤。3 V) A+ ?) L: U/ t2 n2 ~
    步骤
    1 修改Hadoop配置文件。
    - d+ j- h. V. l. i! ]
    1) 设置环境变量。 在${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中, 添加JAVA安装目录, 命令如下:
    - i) k- s. l- M4 a5 u) y8 [- K
    export JAVA_HOME=/usrb/jvm/java-6-openjdk
    6 }9 R4 l0 T" z修改conf目录下的mapred-site.xmlcore-site.xmlyarn-site.xmlhdfs-site.xml四个文件, 在<configuration></configuration>之间添加的内1 P( U6 |# k9 O3 h
    容见下面的介绍。2 V6 u+ X: C6 ]/ R8 X' F; [! K0 Z8 u2 s
    2) 在${HADOOP_HOME}/etc/hadoop/下, 将mapred-site.xml.templat重命名成mapred-site.xml, 并添加以下内容:
    1 |/ V) C; q; u$ T: W( X
    <property>; @7 x* b1 G; B2 u
    <name>mapreduce.framework.name</name>7 N- C9 R4 z( ^$ i6 X
    <value>yarn</value>" W3 H; m& ]1 F7 h' T( i
    </property>4 d8 H$ _1 u& N( |
    【 解释】 相比于Hadoop1.0, 用户无须再配置mapred.job.tracker, 这是因为JobTracker相关实现已变成客户端的一个库( 实际上在
    - j8 `4 C5 C# A" b8 P8 f
    Hadoop 2.0中, JobTracker已经不存在, 它的功能由另外一个称为MRAppMaster的组件实现) , 它可能被随机调度到任何一个slave上,
    3 k0 i; b) G' n1 M也就是它的位置是动态生成的。 需要注意的是, 在该配置文件中需用
    mapreduce.framework.name指定采用的运行时框架的名称, 在此指7 U% S8 ~( t# o6 B# b
    "yarn"
    ( D6 J- r2 T4 W) Y+ O
    3) 在${HADOOP_HOME}/etc/hadoop/中, 修改core-site.xml, 为了简单, 我们仍采用Hadoop 1.0中的HDFS工作模式( 不配置HDFS
    ) u" x; E9 Y; y/ MFederation
    ) , 修改后如下:' F9 \( t" v  k1 L" [
    <property>* M  ^0 g; q% t% F( R5 `- F3 v' M
    <name>fs.default.name</name>
    ( s2 q3 D2 r* c. g" j; f0 G- @<value>hdfs://YARN001:8020</value>' o7 {; G0 b# L7 H6 l/ U% H$ H
    </property>% O7 `5 U5 R  U5 U. `& ?! x
    其中, YARN001表示节点的IP或者host
    ' p# A1 x5 u: p% I9 {
    4) 在${HADOOP_HOME}/etc/hadoop/中, 修改yarn-site.xml, 修改后如下:3 ]; F  u5 g: ^! _- _5 W
    <property>
    1 @; \5 C) x8 v; J<name>yarn.nodemanager.aux-services</name>$ n1 P( v  G8 V2 d9 y% r
    <value>mapreduce-shuffle</value>, T: v1 n, N/ }9 L) o% d* L
    </property>8 \1 A: H$ F. x- G1 K
    【 解释】 为了能够运行MapReduce程序, 需要让各个NodeManager在启动时加载shuffle servershuffle server实际上是Jetty/Netty1 ~& D9 s( n. R; z
    Server
    Reduce Task通过该server从各个NodeManager上远程复制Map Task产生的中间结果。 上面增加的两个配置均用于指定shuffle
    ' K3 ]" k( s" Z$ D+ }3 b( C- Oserver
    & Z+ j" }; P, S; x
    5) 修改${HADCOP_HOME}/etc/hadoop中的hdfs-site.xml文件:5 Z! f8 E0 j" t( R% ^6 k
    <property>- b' Z8 a6 }" V: _1 [% k# r) W
    <name>dfs.replication</name>
    1 ]. n) E7 i3 o; z% L<value>1</value>
    " |- Z" E8 F0 p8 l8 l1 m</property>
    * W& t. S7 f% s9 Q& I% H" {' }6 S【解释】 默认情况下, HDFS数据块副本数是3, 而在集群规模小于3的集群中该参数会导致出现错误, 这可通过将dfs.replication
    3 K2 R; ]4 B/ I9 W* B整为
    1解决。
    ; p. e7 }3 B* L
    注意 如果你是在虚拟机中搭建Hadoop环境, 且虚拟机经常关闭与重启, 为了避免每次重新虚拟机后启动Hadoop时出现各种问
    ) l) i7 ~8 }' u: Q0 u题, 建议在
    core-site.xml中将hadoop.tmp.dir属性设置为一个非/tmp目录, 比如/data或者/home/dongxicheng/data( 注意该目录对当前用户需具( k% o% |0 K# m7 k* Q% y1 A
    有读写权限) 。
    0 Q  P& |! R7 [' e" H4 s  v步骤
    2 设置免密码登录。
    ! d  x. s9 r& R& P% f! a- ~前面提到
    Hadoop启动/停止脚本需要通过SSH发送命令启动相关守护进程, 为了避免每次启动/停止Hadoop都要输入密码进行验  D* q8 V5 }$ Z, L; i
    证, 需设置免密码登录, 步骤如下。
    % Z( E- m* ^6 O
    1) 打开命令行终端, 输入以下命令:4 O& @+ ]: |& v3 F% x7 `0 u
    ssh-keygen -t rsa
    ( z4 N! ]( S3 J2 l/ u将会在"~/.ssh/"目录下生成公钥文件id_rsa.pub和私钥文件id_rsa
    * t' W/ D" k$ \' ~8 J
    2) 将公钥文件id_rsa.pub中的内容复制到相同目录下的authorized_keys文件中:- M) w4 I) E$ ]; U8 m
    cd ~/.ssh/" \) Y5 G9 A6 D3 y. ?0 K( M- v
    cat id_rsa.pub >> authorized_keys! a9 P! Y" d% n% H5 i
    步骤3 启动Hadoop
    6 w  I3 U# g: U7 g2 R  ~7 ^0 z
    Hadoop安装目录中, 按以下三步操作启动Hadoop, 我们单步启动每一个服务, 以便于排查错误, 如果某一个服务没有启动成
    0 h# h* A$ I/ V/ w功, 可查看对应的日志查看启动失败原因。
    9 Y" ]. F" u5 N/ s+ L
    1) 格式化HDFS, 命令如下:: l: \* V' r2 t9 U
    bin/hadoop namenode -format
    ' ~5 V/ b* \: k* H1 c6 a2) 启动HDFS。 你可以使用以下命令分别启动NameNodeDataNode3 J, j( Z0 C4 L7 |
    sbin/hadoop-daemon.sh start namenode
    + t6 \2 ?# }' w' Y. U9 Zsbin/hadoop-daemon.sh start datanode
    ( v: [5 k- i6 p4 m" E$ B: Q: n0 P如果有多个DataNode, 可使用hadoop-daemons.sh启动所有DataNode, 具体命令如下:" J: Y% e( C1 e1 p  ?
    sbin/hadoop-daemons.sh start datanode
    , a# Z8 R& O4 I1 P你也可以使用以下命令一次性启动NameNode和所有DataNode
    8 Q# B8 _" f# ?9 e% R( O
    sbin/ start-dfs.sh
    / C2 g6 U/ ?' P  G0 R4 B3) 启动YARN。 你可以使用以下命令分别启动ResourceManagerNodeManager, t8 F* Y, c8 ]# n
    sbin/hadoop-daemon.sh start namenode
    2 ^3 `. ], Z/ T  e& z8 E, {, a& dsbin/hadoop-daemon.sh start datanode3 j5 k- |  c9 x- k0 }, [. Z
    如果有多个NodeManager, 可使用yarn-daemon.sh启动所有NodeManager, 具体命令如下:0 U% L+ ]* I+ E4 D$ b( d
    sbin/yarn-daemon.sh start nodemanager) a# f5 A4 H, y' @) e2 b
    你也可以使用以下命令一次性启动ResourceManager和所有NodeManager" y. {1 i' X/ q: `+ }) l; O; r
    sbin/start-yarn.sh* s8 O/ p. v- J, e9 M
    通过如下jps命令查看是否启动成功:
    # o" ~$ X" U$ B' p9 y- x# p
    dong@YARN001:/opt/hadoop/hadoop-2.0$ jps
    ' ]0 h2 }; Q3 e  J27577 NameNode, x( |+ f- [5 U" Z, o2 v8 P
    30315 ResourceManager
    5 G( Z" g$ ]+ m2 _2 z! V! ~: A27924 SecondaryNameNode
    5 I9 q; \0 g  c) f6 V  w  ^. u16803 NodeManager
    ) h5 t; p8 r' ?' |; W3 A通过以下URL可查看YARN是否启动成功:
    . W! {- S  X2 O# p1 f$ l
    http://YARN001:8080/
    4 }) W8 _0 v: ~YARN对外提供的Web运行界面如图1-10所示。
    " q' p' _: v5 e; z3 j
    1-10 YARN对外提供的Web界面( s  k. I( p4 r/ J, @
    如果安装过程中出现问题, 可通过查看日志发现问题所在。
    Hadoop日志存放在$HADOOP_HOME/logs目录下的以".log"结尾的文件: n  J% M; J' n. H4 `5 x+ }* K
    中, 比如
    yarn-dongxicheng-resourcemanager-yarn001.log就是ResourceManager产生的日志。
    - Z0 ^" P$ I7 p经过以上三步操作,
    Hadoop成功启动后, 接下来可以通过Hadoop Shell或者Eclipse插件访问HDFS和提交MapReduce作业。 下面两小
    - V8 U) U0 A+ L  x节分别介绍
    Hadoop ShellEclipse插件使用方法。
    $ E/ O' [& l/ C
    1.5.2 Hadoop Shell介绍2 B2 L$ n8 O' l) m9 l
    1.4节我们曾提到, bin目录下是最基础的集群管理脚本, 用户可以通过该脚本完成各种功能, 如HDFS文件管理、 MapReduce3 z2 r$ \* {7 {" p% W
    业管理等, 更加详细的脚本使用说明, 可参考附录
    C
    7 ~9 ?  n+ E- e& m) H2 I! y7 G. g, ]( m作为入门, 本节介绍的是
    bin目录下Hadoop脚本的使用方法。 如果你已经对Hadoop 1.0有所了解( 比如尝试安装和使用过Hadoop: a" c6 ^1 H) f' o3 d, s- d
    1.0
    ) , 那么可直接使用该脚本, 因为该脚本的功能与Hadoop 1.0对应的Hadoop脚本功能完全一致。8 Y& s. p, @0 I* n4 d; N
    该脚本的使用方法为:2 k0 J- g- K: m2 G8 I
    hadoop [--config confdir] COMMAND1 E/ t7 l+ r  L- l4 h) \
    其中, --config用于设置Hadoop配置文件目录。 默认目录为${HADOOP_HOME}/conf。 而COMMAND是具体的某个命令, 常用的' m! x! _" r  I& T4 y6 y
    HDFS管理命令fs、 作业管理命令job和作业提交命令jar等, 它们的使用方法如下。
    % k) o5 f5 R0 T3 x# ?
    1HDFS管理命令fs和作业管理命令job( M. P7 a  T* u; T
    它们的用法一样, 均为:
    3 j: }8 v4 m. `  k6 \5 q
    bin/hadoop command [genericOptions] [commandOptions]
    ( W3 j; H, [% _5 d: u其中, command可以是fs或者jobgenericOptions是一些通用选项, commandOptionsfs或者job附加的命令选项, 看下面两个例子。
      L, d9 A6 u. g+ |( j$ |) h6 J# |
    &#10065;HDFS上创建一个目录/test, 命令如下:
    0 g9 u  _# g' `; O9 u. [6 }
    bin/hadoop fs -mkdir /test; l8 ?7 x8 ?: p! O5 L
    &#10065;显示所有Hadoop上正在运行的作业, 命令如下:
    2 d+ Z+ r1 h) [7 `6 S/ V
    bin/hadoop job -list, n$ y* m) @- x- N2 m+ j+ j0 G- w
    2) 作业提交命令jar
    & u. T9 m' J2 S1 t
    这个命令的用法是:
    1 m% ^1 \) q- r! q6 V$ B# b; x
    hadoop jar <jar> [mainClass] args..: o' p! Q8 Q# k8 c! Y4 ]- D
    其中, <jar>表示JAR包名, mainClass表示main class名称, 可以不必输入而由jar命令自动搜索, argsmain class输入参数。 举例如0 G7 d! i" ]+ O3 n" W
    下:
    - z3 n1 e' o" l: e; a
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 5 10: Z6 u' N) A9 Q( `) F# L3 X  M9 [: k
    其中pihadoop-mapreduce-examples-*.jar 中一个作业名称, 该作业主要功能是采用拟蒙特卡罗法估算圆周率pi3.1415926…) 的大  y3 }2 e5 h) i- p8 o) i0 ?
    小, 它有两个整型输入参数:
    Map Task数目和样本数目。
    % y" a7 v$ X& Z, n& O5 i其他更多命令, 读者可自行查阅
    Hadoop官方设计文档。, W$ d( ^$ \9 \0 Q
    [4] 单机环境中, Hadoop有两种工作模式: 本地模式和伪分布式模式。 其中, 本地模式完全运行在本地, 不会加载任何Hadoop服务,
    * z- g7 |& o( i因而不会涉及
    Hadoop最核心的代码实现, 伪分布式即为单点集群, 在该模式下, 所有的守护进行均会运行在单个节点上, 因而本节
    : i. \& Y) V$ S$ b% [7 ?3 i选用该工作模式。
      4 s9 }0 N( T1 `" z
    9 |0 h% X' L2 g6 q% G

    , h" G6 p% m# @  w5 v
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-4-1 14:31 , Processed in 0.402684 second(s), 28 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表