java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2429|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66105

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

    发表于 2017-4-12 20:39:03 | 显示全部楼层 |阅读模式
    1.5 Hadoop初体验; g+ l3 i/ P" g: X5 Z/ t
    一般而言, 我们想要深入学习一个新的系统时, 首先要尝试使用该系统, 了解系统对外提供的功能, 然后再通过某个功能逐步深2 f' l7 v6 @/ y0 [- g3 T5 P; `
    入其实现细节。 本节将介绍如何在 伪分布式工作模式
    [4] 下使用Hadoop, 包括搭建Hadoop环境、 访问HDFS以及向YARN提交应用程序4 h" V& r- p# y% u2 M' L
    等最基本的操作。 本节只是有代表性地介绍
    Hadoop的一些基本使用方法, 使读者对Hadoop有一个初步认识, 并引导读者逐步进行更全
    * c( C/ d! i5 v/ |) o! e+ I面的学习。
    : E/ \) C7 ~( Y" @: l, V) i+ z
    1.5.1 搭建Hadoop环境2 U/ t0 m8 p9 Y1 ?0 `: Y
    本小节仅介绍单机环境的搭建方法, 更加完整的Hadoop安装步骤和配置方法可参考本书最后的附录A和附录B。 另外, 需要注意" \: D1 Q9 M7 g0 j+ g5 [- k
    的是, 由于不同用户拥有的
    Linux环境不尽相同( 比如已经安装的软件不同、 统一软件的版本不同等) , 每个人安装Hadoop过程中遇到2 g% K* U! @' ~4 L3 s1 i" i
    的问题可能不同, 此时需要根据具体的日志提示解决问题。 本小节仅给出一般情况下,
    Hadoop 2.0的安装步骤。
    . O& j& O. |: X' r7 U! B. ^# v步骤
    1 修改Hadoop配置文件。% A4 C9 i! h) z* e
    1) 设置环境变量。 在${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中, 添加JAVA安装目录, 命令如下:
    ! h: n; c( _( k; q* ?
    export JAVA_HOME=/usrb/jvm/java-6-openjdk+ h  d% T8 M- i. {2 s4 k
    修改conf目录下的mapred-site.xmlcore-site.xmlyarn-site.xmlhdfs-site.xml四个文件, 在<configuration></configuration>之间添加的内
    4 Z/ y. D6 S- O5 \& f" U* a7 t容见下面的介绍。
    " _+ G1 P2 ]7 G8 n' b6 a3 e" |% y+ y
    2) 在${HADOOP_HOME}/etc/hadoop/下, 将mapred-site.xml.templat重命名成mapred-site.xml, 并添加以下内容:
    5 M/ z8 G, w* Z
    <property>$ `0 H& q- ]; D6 J
    <name>mapreduce.framework.name</name>
    # G; Y4 {7 l) {  {1 C* a) g7 d<value>yarn</value>/ L3 o, Y. d$ A
    </property>8 ~. ~( ]! c" H2 V" _
    【 解释】 相比于Hadoop1.0, 用户无须再配置mapred.job.tracker, 这是因为JobTracker相关实现已变成客户端的一个库( 实际上在
    , r% Q; p& d) @5 ~+ w! m) y5 }
    Hadoop 2.0中, JobTracker已经不存在, 它的功能由另外一个称为MRAppMaster的组件实现) , 它可能被随机调度到任何一个slave上," F1 Q& L+ Y; j8 }
    也就是它的位置是动态生成的。 需要注意的是, 在该配置文件中需用
    mapreduce.framework.name指定采用的运行时框架的名称, 在此指
    2 e5 G  p) h, v( h
    "yarn"9 N- d3 r2 E1 {( M7 B" a1 P( ?) c
    3) 在${HADOOP_HOME}/etc/hadoop/中, 修改core-site.xml, 为了简单, 我们仍采用Hadoop 1.0中的HDFS工作模式( 不配置HDFS
    , {( d' a8 M6 E  \: D& z; M* XFederation
    ) , 修改后如下:( R/ L- b# L. [' R* J4 y
    <property>: \* V# T3 v; o+ N' O  y" L
    <name>fs.default.name</name>
    9 e3 E9 F" A9 C, `4 o<value>hdfs://YARN001:8020</value>
    ) Y( k1 ^! d% {+ h2 a, C</property>. R/ I) d' U1 h, R9 j7 r3 z- t
    其中, YARN001表示节点的IP或者host
    , @: |2 _8 y( o% r
    4) 在${HADOOP_HOME}/etc/hadoop/中, 修改yarn-site.xml, 修改后如下:
    6 E* W0 Y" A+ Y: @
    <property>5 y4 A" C* p; o0 K" T0 C% M4 Z
    <name>yarn.nodemanager.aux-services</name>9 f/ ]( N0 c3 ^2 G1 o9 [
    <value>mapreduce-shuffle</value>. l& j1 U7 e- h  v
    </property>
    - R, A, E: w- f& B# i6 ]【 解释】 为了能够运行MapReduce程序, 需要让各个NodeManager在启动时加载shuffle servershuffle server实际上是Jetty/Netty
    % F/ |& [( W/ U8 @1 y7 i$ U" `Server
    Reduce Task通过该server从各个NodeManager上远程复制Map Task产生的中间结果。 上面增加的两个配置均用于指定shuffle
    : _; I- Z* k2 Y3 J9 e5 Rserver

    9 }" T) J# r% s, v+ }
    5) 修改${HADCOP_HOME}/etc/hadoop中的hdfs-site.xml文件:0 D# y+ O. `% a% Z
    <property>
    ; ]# ], `! Y9 |$ K" W- H<name>dfs.replication</name>+ F2 v& v; a$ x' d9 l
    <value>1</value>9 X: Z) K: q0 E- _5 E' Y
    </property>
    & y( B& K$ R. p0 c9 q【解释】 默认情况下, HDFS数据块副本数是3, 而在集群规模小于3的集群中该参数会导致出现错误, 这可通过将dfs.replication$ u/ f  k4 j2 V' d+ h% O1 f
    整为
    1解决。( W8 v# k$ u9 {! n7 z( ]
    注意 如果你是在虚拟机中搭建Hadoop环境, 且虚拟机经常关闭与重启, 为了避免每次重新虚拟机后启动Hadoop时出现各种问
    * h8 ^: v1 V: a+ j题, 建议在
    core-site.xml中将hadoop.tmp.dir属性设置为一个非/tmp目录, 比如/data或者/home/dongxicheng/data( 注意该目录对当前用户需具
    $ G! ]. S4 y+ n, q+ T9 e. B( H1 _0 i有读写权限) 。
    / l+ J& m" L% ]3 b- d1 _% A0 `步骤
    2 设置免密码登录。  e# n0 j& M7 `: c8 O) v5 Z- W
    前面提到
    Hadoop启动/停止脚本需要通过SSH发送命令启动相关守护进程, 为了避免每次启动/停止Hadoop都要输入密码进行验
    ! r5 Y* t( x0 a; Z2 m9 N+ w# o3 ~: d证, 需设置免密码登录, 步骤如下。: a* p' ~) f1 J4 Z* m
    1) 打开命令行终端, 输入以下命令:+ [9 F+ M0 D) b% I% W
    ssh-keygen -t rsa, x0 I1 n' D4 i8 J) z# }- X
    将会在"~/.ssh/"目录下生成公钥文件id_rsa.pub和私钥文件id_rsa9 r) L( k& K* k# v+ l/ W, O
    2) 将公钥文件id_rsa.pub中的内容复制到相同目录下的authorized_keys文件中:
    9 w& o2 a, q) [! W; X3 e
    cd ~/.ssh/
    6 H! U" |/ \; [9 fcat id_rsa.pub >> authorized_keys- Q- \+ e- K0 s, {% E
    步骤3 启动Hadoop9 J  a5 a% N% e: z9 M+ F( N
    Hadoop安装目录中, 按以下三步操作启动Hadoop, 我们单步启动每一个服务, 以便于排查错误, 如果某一个服务没有启动成& {( y$ ?3 ]0 \' m. u( i2 ]. ^
    功, 可查看对应的日志查看启动失败原因。: k2 b4 I  n7 ^' n
    1) 格式化HDFS, 命令如下:. G7 @& U# k; Z* b* K9 M( P
    bin/hadoop namenode -format5 B1 e3 X- A- e( o$ v0 Z
    2) 启动HDFS。 你可以使用以下命令分别启动NameNodeDataNode1 E# Y1 X, _+ ~+ y6 O  N! Z- _
    sbin/hadoop-daemon.sh start namenode, |& Q$ M  O7 ?+ d4 R
    sbin/hadoop-daemon.sh start datanode) \' q* [# y5 U; _! {/ t  m! n% t) `
    如果有多个DataNode, 可使用hadoop-daemons.sh启动所有DataNode, 具体命令如下:
    , S% y' `$ {2 Z
    sbin/hadoop-daemons.sh start datanode
    ; N- o! u: ~! ~. f你也可以使用以下命令一次性启动NameNode和所有DataNode# S; f8 Z- f+ S( V' `
    sbin/ start-dfs.sh- s% C- B: z6 C7 v1 O5 g+ X( M: @  ]8 U
    3) 启动YARN。 你可以使用以下命令分别启动ResourceManagerNodeManager
    ! D7 W- [8 d5 t$ N7 i
    sbin/hadoop-daemon.sh start namenode4 t6 n' N' c- o& I
    sbin/hadoop-daemon.sh start datanode9 `3 ^' |3 D, E; \6 L1 `
    如果有多个NodeManager, 可使用yarn-daemon.sh启动所有NodeManager, 具体命令如下:2 s3 ]$ @) V( _$ M9 m$ y# w3 `
    sbin/yarn-daemon.sh start nodemanager/ p0 [7 L  s* p( S4 b
    你也可以使用以下命令一次性启动ResourceManager和所有NodeManager
    7 c; R# L  \. f* P- ^: [( x
    sbin/start-yarn.sh1 Y: R1 C/ o% c
    通过如下jps命令查看是否启动成功:
    5 E5 G4 W0 ]& s) Q2 L
    dong@YARN001:/opt/hadoop/hadoop-2.0$ jps
    9 C0 b5 A) N1 Y1 a+ j/ L3 t" u27577 NameNode
    8 y, p8 R2 V' n5 X8 q30315 ResourceManager
    9 r' p- I3 b2 M" U/ ^* Q27924 SecondaryNameNode$ E! ^: a  M; v, q: Z; X+ d
    16803 NodeManager
    9 ]* r& R- M+ u. H通过以下URL可查看YARN是否启动成功:
    . f2 C# M8 B( N$ m( j7 D! g
    http://YARN001:8080/3 ]8 A5 Z6 E: F
    YARN对外提供的Web运行界面如图1-10所示。
    ! M$ g7 t5 _- d( n7 y; m
    1-10 YARN对外提供的Web界面
    8 n" r2 p$ B3 L* D如果安装过程中出现问题, 可通过查看日志发现问题所在。
    Hadoop日志存放在$HADOOP_HOME/logs目录下的以".log"结尾的文件6 d7 D- ?) q7 I( q
    中, 比如
    yarn-dongxicheng-resourcemanager-yarn001.log就是ResourceManager产生的日志。
    ' \% ]/ x6 \$ o7 p6 U% L$ y5 ?经过以上三步操作,
    Hadoop成功启动后, 接下来可以通过Hadoop Shell或者Eclipse插件访问HDFS和提交MapReduce作业。 下面两小
    : z/ z' |4 |) W6 B  K8 h1 C% Z: g+ k节分别介绍
    Hadoop ShellEclipse插件使用方法。% k" C; }" C" p5 Z! c7 q
    1.5.2 Hadoop Shell介绍
    ! Z2 I/ E4 D6 a
    1.4节我们曾提到, bin目录下是最基础的集群管理脚本, 用户可以通过该脚本完成各种功能, 如HDFS文件管理、 MapReduce
    2 K0 ?8 s- f% h4 G" ~" R* j; R业管理等, 更加详细的脚本使用说明, 可参考附录
    C* f  W  D; K3 D8 H! [- H+ K; `+ y
    作为入门, 本节介绍的是
    bin目录下Hadoop脚本的使用方法。 如果你已经对Hadoop 1.0有所了解( 比如尝试安装和使用过Hadoop
    / ^/ N4 x5 a( J% s' m0 m8 f1.0
    ) , 那么可直接使用该脚本, 因为该脚本的功能与Hadoop 1.0对应的Hadoop脚本功能完全一致。, S1 Z3 T" s. d8 f
    该脚本的使用方法为:5 a3 s& a$ i8 P" T% J; {
    hadoop [--config confdir] COMMAND
    ! k. y' `2 h# W5 ]8 Q2 @6 k* V其中, --config用于设置Hadoop配置文件目录。 默认目录为${HADOOP_HOME}/conf。 而COMMAND是具体的某个命令, 常用的) M6 L# J3 @/ s5 M" K- ?
    HDFS管理命令fs、 作业管理命令job和作业提交命令jar等, 它们的使用方法如下。
      l. |- t7 z: Q
    1HDFS管理命令fs和作业管理命令job
    ; z# a. m$ z$ a4 c, S
    它们的用法一样, 均为:/ k. E- `0 T% |3 x
    bin/hadoop command [genericOptions] [commandOptions]8 v/ ?5 G" Q1 q  [  K' e
    其中, command可以是fs或者jobgenericOptions是一些通用选项, commandOptionsfs或者job附加的命令选项, 看下面两个例子。+ t) C/ `( \& L
    &#10065;HDFS上创建一个目录/test, 命令如下:
    4 W1 G- J) x5 \7 n" p* r$ b
    bin/hadoop fs -mkdir /test5 {7 S. ~) [! B& b3 n8 V
    &#10065;显示所有Hadoop上正在运行的作业, 命令如下:6 B8 J; Q. M) z6 ]: q# G
    bin/hadoop job -list, q: T# u2 X9 _. h/ p2 r
    2) 作业提交命令jar" o$ ?) ~5 [/ T* y  D4 x
    这个命令的用法是:
    $ D' V# E$ [+ e5 \) T3 J! b
    hadoop jar <jar> [mainClass] args..) ~- r) ?7 m' A( k7 F0 C6 s, a6 d
    其中, <jar>表示JAR包名, mainClass表示main class名称, 可以不必输入而由jar命令自动搜索, argsmain class输入参数。 举例如: p4 V9 S. B6 M9 P5 K
    下:6 `* x% R1 f3 {' S' [- [
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 5 10
    * P- b  ], f- m/ [, t其中pihadoop-mapreduce-examples-*.jar 中一个作业名称, 该作业主要功能是采用拟蒙特卡罗法估算圆周率pi3.1415926…) 的大
    ) T0 d/ s; r+ C' W' I/ o: q5 y小, 它有两个整型输入参数:
    Map Task数目和样本数目。
    2 @: @4 v- L% z( A其他更多命令, 读者可自行查阅
    Hadoop官方设计文档。3 s* T0 |( Z8 J" G9 l0 e
    [4] 单机环境中, Hadoop有两种工作模式: 本地模式和伪分布式模式。 其中, 本地模式完全运行在本地, 不会加载任何Hadoop服务,
    1 G5 _- X* W# y. \因而不会涉及
    Hadoop最核心的代码实现, 伪分布式即为单点集群, 在该模式下, 所有的守护进行均会运行在单个节点上, 因而本节
    3 [$ e7 w- P7 f3 u: H选用该工作模式。
      & t. }: Z+ L$ [- k3 H# k4 }
    ; _. }6 ?% K, D6 H

    + }! v, e" \2 Q7 P. ^; K7 ^
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-6 18:38 , Processed in 0.174324 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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