java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2646|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66345

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

    发表于 2017-4-12 20:39:03 | 显示全部楼层 |阅读模式
    1.5 Hadoop初体验
    # X2 @5 u( j/ m9 |6 f2 \& O9 a一般而言, 我们想要深入学习一个新的系统时, 首先要尝试使用该系统, 了解系统对外提供的功能, 然后再通过某个功能逐步深
    8 b0 E( g* f- f  _  k0 A入其实现细节。 本节将介绍如何在 伪分布式工作模式
    [4] 下使用Hadoop, 包括搭建Hadoop环境、 访问HDFS以及向YARN提交应用程序2 _. M: O4 P! P/ C2 ?
    等最基本的操作。 本节只是有代表性地介绍
    Hadoop的一些基本使用方法, 使读者对Hadoop有一个初步认识, 并引导读者逐步进行更全% C3 Q  y( N  p, _& O9 D
    面的学习。
    - H" y3 S7 g+ K  C8 f* Q# d7 ]
    1.5.1 搭建Hadoop环境- Z6 R, c- V# }$ h
    本小节仅介绍单机环境的搭建方法, 更加完整的Hadoop安装步骤和配置方法可参考本书最后的附录A和附录B。 另外, 需要注意; ]1 g) x0 |) `% ^
    的是, 由于不同用户拥有的
    Linux环境不尽相同( 比如已经安装的软件不同、 统一软件的版本不同等) , 每个人安装Hadoop过程中遇到
    7 c% w$ u" ^! I  K: C# h  `  b的问题可能不同, 此时需要根据具体的日志提示解决问题。 本小节仅给出一般情况下,
    Hadoop 2.0的安装步骤。
    6 [' P8 ^' B+ M& {5 c, d  X6 r步骤
    1 修改Hadoop配置文件。
    " o9 |' `( q# ?) {. v& o, i. P* H
    1) 设置环境变量。 在${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中, 添加JAVA安装目录, 命令如下:
    5 T+ M% o- L9 n; w$ T; D/ \" I7 _; B
    export JAVA_HOME=/usrb/jvm/java-6-openjdk
    , [# R' j$ j' S6 _( o6 @修改conf目录下的mapred-site.xmlcore-site.xmlyarn-site.xmlhdfs-site.xml四个文件, 在<configuration></configuration>之间添加的内5 |4 l7 r9 y) n3 `; {$ j
    容见下面的介绍。) B. _( t( m0 c1 W  ?
    2) 在${HADOOP_HOME}/etc/hadoop/下, 将mapred-site.xml.templat重命名成mapred-site.xml, 并添加以下内容:
    ! u+ J& q8 O6 l8 O1 n6 v( f& T2 ~
    <property>9 k1 F  \  ~) Q1 Q- s! N, h0 ]
    <name>mapreduce.framework.name</name>( h0 c- x9 |6 n+ C- D+ S
    <value>yarn</value>% ]& k7 z. Z. M3 y1 l, U; _
    </property>7 C' _# @0 K% X
    【 解释】 相比于Hadoop1.0, 用户无须再配置mapred.job.tracker, 这是因为JobTracker相关实现已变成客户端的一个库( 实际上在
    - L+ g% [. |8 H, f1 k& d
    Hadoop 2.0中, JobTracker已经不存在, 它的功能由另外一个称为MRAppMaster的组件实现) , 它可能被随机调度到任何一个slave上,- t( F. K1 \: W. v
    也就是它的位置是动态生成的。 需要注意的是, 在该配置文件中需用
    mapreduce.framework.name指定采用的运行时框架的名称, 在此指
    0 L+ A7 ?. \! t; c. s4 |1 c1 r8 B
    "yarn": t) S) C3 h7 K" c
    3) 在${HADOOP_HOME}/etc/hadoop/中, 修改core-site.xml, 为了简单, 我们仍采用Hadoop 1.0中的HDFS工作模式( 不配置HDFS
    # _7 [1 ?; ~5 K! B4 R# I' SFederation
    ) , 修改后如下:
    5 T  T- j- y* N, ?: _
    <property>
    ) G. E2 X/ v, d* Z<name>fs.default.name</name>9 h% }; V! P  G2 t$ G2 t  S. h
    <value>hdfs://YARN001:8020</value>" R$ T$ z# J, x8 j
    </property>1 ]2 P7 M* O9 ~3 i  l; c
    其中, YARN001表示节点的IP或者host5 j; [" S; ?, k* d: o
    4) 在${HADOOP_HOME}/etc/hadoop/中, 修改yarn-site.xml, 修改后如下:$ W0 k5 R7 ]( u0 r' ]
    <property>$ l! @! k  W1 O: m* O
    <name>yarn.nodemanager.aux-services</name>3 {" m5 d, Q- G2 A3 P
    <value>mapreduce-shuffle</value>
      X4 {9 U$ l' P* _</property>
    ! W% F: l8 a  ~# L: m【 解释】 为了能够运行MapReduce程序, 需要让各个NodeManager在启动时加载shuffle servershuffle server实际上是Jetty/Netty
    3 ^9 K+ G9 [4 G. {! p2 aServer
    Reduce Task通过该server从各个NodeManager上远程复制Map Task产生的中间结果。 上面增加的两个配置均用于指定shuffle8 P  u* [. U+ d# S
    server

    3 A  j1 q. e9 q5 V
    5) 修改${HADCOP_HOME}/etc/hadoop中的hdfs-site.xml文件:, s5 U! e' C0 K% X9 Y
    <property>
    8 k, Y' H$ A" X) g7 ^4 u, U; N) H<name>dfs.replication</name>* t4 j, N2 E6 K
    <value>1</value>8 S6 G: d# a" [! A9 D
    </property>
    . P" G. x" m+ R& }" e【解释】 默认情况下, HDFS数据块副本数是3, 而在集群规模小于3的集群中该参数会导致出现错误, 这可通过将dfs.replication' u7 O: a3 J9 i8 l
    整为
    1解决。
    ' R1 f( D( W: `
    注意 如果你是在虚拟机中搭建Hadoop环境, 且虚拟机经常关闭与重启, 为了避免每次重新虚拟机后启动Hadoop时出现各种问
    * N# ~; _, x  K8 l0 X题, 建议在
    core-site.xml中将hadoop.tmp.dir属性设置为一个非/tmp目录, 比如/data或者/home/dongxicheng/data( 注意该目录对当前用户需具- a# L4 ]; g) Z! o- f
    有读写权限) 。
    $ J* P- E. y; D步骤
    2 设置免密码登录。
    9 C1 w$ u; t( b% v" s' q, @* `! i前面提到
    Hadoop启动/停止脚本需要通过SSH发送命令启动相关守护进程, 为了避免每次启动/停止Hadoop都要输入密码进行验8 }- U2 x$ I; F$ T( l1 Z
    证, 需设置免密码登录, 步骤如下。1 u: t3 R" `$ P" c% W
    1) 打开命令行终端, 输入以下命令:5 _3 d8 i0 m& W9 a* q6 Q
    ssh-keygen -t rsa5 t3 \2 Y. N$ N# z) M7 C
    将会在"~/.ssh/"目录下生成公钥文件id_rsa.pub和私钥文件id_rsa/ \% K: }; R  u% v5 y7 M
    2) 将公钥文件id_rsa.pub中的内容复制到相同目录下的authorized_keys文件中:
    + ?7 n$ {! r1 a* H6 P/ i
    cd ~/.ssh/
    ; L3 [( ]5 J9 A( Ccat id_rsa.pub >> authorized_keys
    + v' @' @8 g& n7 g* \2 ^步骤3 启动Hadoop5 U5 c' f3 H3 `3 i( {1 z6 u/ d  J
    Hadoop安装目录中, 按以下三步操作启动Hadoop, 我们单步启动每一个服务, 以便于排查错误, 如果某一个服务没有启动成
    ' l* z' X( Z* s+ F# K/ D功, 可查看对应的日志查看启动失败原因。
    ! `  B+ B1 u3 K3 A  `
    1) 格式化HDFS, 命令如下:2 ?4 P# |  c& O$ ^6 p
    bin/hadoop namenode -format
    8 Y+ c5 p2 @0 P2 ~$ L! w, Q, f2) 启动HDFS。 你可以使用以下命令分别启动NameNodeDataNode
    $ G8 m" l& `* K$ @6 I
    sbin/hadoop-daemon.sh start namenode
    4 ?  u" j+ R# F- C7 _1 lsbin/hadoop-daemon.sh start datanode: W; z2 C0 q- H8 S# c
    如果有多个DataNode, 可使用hadoop-daemons.sh启动所有DataNode, 具体命令如下:
    / N  m- \3 B; B
    sbin/hadoop-daemons.sh start datanode- h; ~& ?; [2 G' S' O" }  p
    你也可以使用以下命令一次性启动NameNode和所有DataNode
      L5 |! [9 b9 v
    sbin/ start-dfs.sh4 T4 A& a( k/ j$ o$ H( I$ w$ p1 s/ v/ d
    3) 启动YARN。 你可以使用以下命令分别启动ResourceManagerNodeManager0 x5 F# P: k2 V1 K) ]$ O
    sbin/hadoop-daemon.sh start namenode
    0 w; n8 M( L* l8 X9 Z# x1 isbin/hadoop-daemon.sh start datanode
    0 c. y2 g  D2 c8 c如果有多个NodeManager, 可使用yarn-daemon.sh启动所有NodeManager, 具体命令如下:) ^  V1 t4 t7 X+ c/ I
    sbin/yarn-daemon.sh start nodemanager
    7 U3 |3 ~8 X8 j8 t% w" ?" ]你也可以使用以下命令一次性启动ResourceManager和所有NodeManager
    2 ~! C0 u/ r0 Q' J: N. J
    sbin/start-yarn.sh
    + ^+ Y3 @7 B5 _! T# _) {) r通过如下jps命令查看是否启动成功:
    0 P1 e5 u7 K5 a/ X: `* Q) ~' g
    dong@YARN001:/opt/hadoop/hadoop-2.0$ jps5 u0 r) `/ Z) T
    27577 NameNode5 ^9 j  Q$ v7 u/ q' i: L+ D6 V+ i
    30315 ResourceManager
      p  f9 e# k8 i/ ~# @, H, l* T27924 SecondaryNameNode
    & i+ W1 M4 _2 _1 K/ _% k2 S16803 NodeManager' t: A% Z. _/ h  b  }: B
    通过以下URL可查看YARN是否启动成功:5 ~, H% e& b3 G2 }3 P& _, j' ~
    http://YARN001:8080/# U2 h7 q6 G2 X( X
    YARN对外提供的Web运行界面如图1-10所示。
    3 t2 N* s( J- X& H
    1-10 YARN对外提供的Web界面
    " v2 `4 `% n# |, O9 [" b0 d; I如果安装过程中出现问题, 可通过查看日志发现问题所在。
    Hadoop日志存放在$HADOOP_HOME/logs目录下的以".log"结尾的文件% p4 P% @8 n/ Z, Y5 V0 \. E% ]' \" y$ Q
    中, 比如
    yarn-dongxicheng-resourcemanager-yarn001.log就是ResourceManager产生的日志。0 w, q% D/ w/ e( x7 p
    经过以上三步操作,
    Hadoop成功启动后, 接下来可以通过Hadoop Shell或者Eclipse插件访问HDFS和提交MapReduce作业。 下面两小5 W* W  L0 e8 z$ |3 c( k
    节分别介绍
    Hadoop ShellEclipse插件使用方法。# m3 w- M+ E6 k% ^2 i
    1.5.2 Hadoop Shell介绍
    3 G$ L5 X/ o2 x; U9 Y! y: X" p/ C
    1.4节我们曾提到, bin目录下是最基础的集群管理脚本, 用户可以通过该脚本完成各种功能, 如HDFS文件管理、 MapReduce3 Z% O% F& L) q) }
    业管理等, 更加详细的脚本使用说明, 可参考附录
    C0 W! ~* |) d4 ]: ^' w, g+ `3 F8 l5 v
    作为入门, 本节介绍的是
    bin目录下Hadoop脚本的使用方法。 如果你已经对Hadoop 1.0有所了解( 比如尝试安装和使用过Hadoop
    ( j0 w8 u! g! Y  s( M  t1.0
    ) , 那么可直接使用该脚本, 因为该脚本的功能与Hadoop 1.0对应的Hadoop脚本功能完全一致。( T2 G" h0 C' V
    该脚本的使用方法为:
    4 B1 u0 t) o5 K; x* [- U
    hadoop [--config confdir] COMMAND% |& g# x+ k/ m+ i3 P3 |+ w
    其中, --config用于设置Hadoop配置文件目录。 默认目录为${HADOOP_HOME}/conf。 而COMMAND是具体的某个命令, 常用的4 a6 J- P# a. H/ I9 [0 N& h
    HDFS管理命令fs、 作业管理命令job和作业提交命令jar等, 它们的使用方法如下。- r' i% F! R+ m( A/ A/ u, m7 F+ z
    1HDFS管理命令fs和作业管理命令job
    & \. I" y3 s' O- Z* H& t3 @' r
    它们的用法一样, 均为:
    0 }; g4 ?" B* |" }" o
    bin/hadoop command [genericOptions] [commandOptions]
    & b% f0 r7 }3 s- I( x其中, command可以是fs或者jobgenericOptions是一些通用选项, commandOptionsfs或者job附加的命令选项, 看下面两个例子。# p! h! B" i' X; _# ^/ E% X; M
    &#10065;HDFS上创建一个目录/test, 命令如下:- p. s; P% I! v5 K3 x
    bin/hadoop fs -mkdir /test
    2 s/ t% ?5 k; x$ s- l&#10065;显示所有Hadoop上正在运行的作业, 命令如下:
    % f+ F- a% s  w5 }: ~, d
    bin/hadoop job -list+ G+ X. g  Q  x  n! N5 l9 H* e
    2) 作业提交命令jar
    # P3 @/ H0 _% v4 b0 Q
    这个命令的用法是:' X% V2 I8 j/ C
    hadoop jar <jar> [mainClass] args..
    9 Z6 Y  b9 y9 }4 Z其中, <jar>表示JAR包名, mainClass表示main class名称, 可以不必输入而由jar命令自动搜索, argsmain class输入参数。 举例如
    " s8 d7 z& O7 S) D下:, A5 C- e9 U0 f- P) N
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 5 10' N# t+ ~, ^3 Y+ c  v5 K* l
    其中pihadoop-mapreduce-examples-*.jar 中一个作业名称, 该作业主要功能是采用拟蒙特卡罗法估算圆周率pi3.1415926…) 的大
    3 k, ^! D8 l$ i/ a; a: _小, 它有两个整型输入参数:
    Map Task数目和样本数目。
    * p3 e" ~) z( s其他更多命令, 读者可自行查阅
    Hadoop官方设计文档。- ?+ @: U' M( H9 _
    [4] 单机环境中, Hadoop有两种工作模式: 本地模式和伪分布式模式。 其中, 本地模式完全运行在本地, 不会加载任何Hadoop服务,
    / U+ W0 v- Y. S5 H7 q/ _因而不会涉及
    Hadoop最核心的代码实现, 伪分布式即为单点集群, 在该模式下, 所有的守护进行均会运行在单个节点上, 因而本节
    : U0 N; g- N" g$ Y选用该工作模式。
      7 w0 q# c0 C- z, A: `% |7 q6 g
    , S/ k4 G* k* Y& z/ `
    + T/ a+ |2 }$ o4 S7 U7 \; h
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-21 20:53 , Processed in 0.184085 second(s), 29 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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