找回密码
 注册
查看: 4598|回复: 3

分布式hadoop【CentOS7】

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-9-26 10:27:20 | 显示全部楼层 |阅读模式
一、安装jdk (各个节点均操作) " Y) @5 D) V% Q: V: t
1、环境准备
) a; G7 f- @. W7 \7 n# [, q
( T& m( G! }9 t
  J" z6 h7 u% B
  ^. _9 |$ K( l3 X/ |3 S# X2 l+ l& ?1) master.wyl.world (Master Node)9 T$ ~0 F% Z8 N$ ]8 U, @3 F
2) node01.wyl.world (Slave Node); q9 G; {4 L/ Q% X. m* K0 _, `4 [
3) node02.wyl.world (Slave Node) 5 w5 w( W/ N- u6 k

, G1 j: `* u# _( Q! l9 v4 f2、下载jdk包
8 B7 V0 ?5 T6 h; _9 W; q! g9 D; L6 [: g
7 N' {; E, D2 C$ G

3 K+ S$ k5 B% B. C$ ^[root@master ~]# curl -LO -H "Cookie: oraclelicense=accept-securebackup-cookie" \
& _) V2 o  P) L- Xhttp://download.oracle.com/otn-pub/java/jdk/8u71-b15/jdk-8u71-linux-x64.rpm
, a2 k5 X/ |9 z. r' f6 _* j4 W4 r" g* S' w6 W9 k  [
安装jdk8 E) W/ K# r& {; A, a! u8 t) X
& ]5 N4 T5 F5 j  Q" A4 x4 @# W4 L" E
5 v; U+ N  k( U' ^$ R( E. K- |
3 E$ P" m- A% K
[root@master ~]# rpm -Uvh jdk-8u71-linux-x64.rpm 8 {9 {- ?* c( T. L, g
Preparing...                ############################## [100%]! P* c5 R( L: m% E
   1:jdk1.8.0_71            ############################## [100%]
. j1 P2 r5 k! `3 E& W$ HUnpacking JAR files...' v9 t' [) }, g- ^* j
        rt.jar...5 ^- E# O9 @/ R" L# i; E- Q- h
        jsse.jar...
, P3 _( q$ }7 u& E0 n7 ^: Z. w        charsets.jar...
7 B& h" q8 a' o! D! D  I: l0 r        tools.jar...
- g+ H* O6 M- t, }& B( y% |8 h        localedata.jar..." G; F- l, \- v+ ~7 }  |' B
        jfxrt.jar...% y* l/ m" Q8 |  P' B2 ]' `
( H& P2 I# J6 k
3、更改环境变量
0 f  Q$ {' F+ @/ ~/ G- z, m( `7 ~
1 ^* R& f" J5 E8 n3 m- R! |# `# I: z3 r

8 }3 A1 z0 q! j! @: k" W[root@master ~]# vi /etc/profile; B5 O, ?+ v- K# s; y( C) D
# 加在末尾5 R1 l6 T# e0 Z* w
export JAVA_HOME=/usr/java/default
; z2 ^% Y4 ^7 Q' D3 a2 Jexport PATH=$PATH:$JAVA_HOME/bin
& ]- c+ O3 J/ C7 |export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar. {2 Z) `9 e" R, C) v

3 G! C. x  S4 w" e% y4、应用环境变量0 [+ p2 ?1 @# a$ h3 W  S& ?
5 b( w: @, {: B$ Q; o) D& J& ?- h
: Y" T0 R0 E) I& j1 a5 V$ ]
, C2 Y' x9 {. V! Y, ^
[root@master ~]# source /etc/profile1- h& K( u) Q; w6 b
9 }9 c6 N3 D0 ?! e; J1 p2 z4 [" [
5、如果系统之前安装过其他版本的jdk,需要更改默认配置
  X( m$ u% u5 N0 Z7 l: k  M$ B
7 H8 B- y8 s# y' x- \3 M! w( w% ?. ^8 `0 ]% G
9 T, Q7 F5 u& t/ b
[root@master ~]# alternatives --config java , K( s; _* x" L- C4 U
8 P% ^; t  d0 O# e% ]; X0 p
There are 2 programs which provide 'java'.
/ W: r9 w1 t  j9 o
7 H0 Q  l+ H6 L  Selection    Command- `( {9 H) Q: a
-----------------------------------------------
: _0 J3 c! ^. s" U* C4 _. [8 ?*+ 1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java; g: b4 e/ I* c
   2           /usr/java/jdk1.8.0_71/jre/bin/java
+ @- U; `+ k. r
( v+ M  Q$ A5 ^2 V; Y: @4 W选择最新的0 E+ U/ I# l2 i  G' C% t" b4 J
Enter to keep the current selection[+], or type selection number: 2
! R# c8 r( `  b& q4 N7 y  V
' R) Y/ {* w6 c" ]; ^! b6、写入一个测试程序
3 s0 r) M! o+ q7 c
2 A, q& b1 x7 G( ~  Y' s* _( z% Q' r5 X1 p5 {  a( F) i* I
. V0 a; F7 Q# R( @$ T2 Z! d
[root@master ~]# vi day.java
. O0 x" w) Z6 A: F2 L import java.util.Calendar;
( h3 P% g$ B9 V+ p$ L. d7 R% A* B5 @. N: C( p, E
class day {: \4 h' F, y; N' K& k1 c9 a
    public static void main(String[] args) {
" y' m. g. \. t7 X+ m' V9 l  g        Calendar cal = Calendar.getInstance();5 I. b4 u2 U$ ]! K; P* q8 w
        int year = cal.get(Calendar.YEAR);: K, n  R* O9 t! D
        int month = cal.get(Calendar.MONTH) + 1;8 q; X" ~6 E0 ~' c8 p  y9 V6 f
        int day = cal.get(Calendar.DATE);) _; X; P1 t  N4 [7 ]3 T4 p$ L. f" @/ y
        int hour = cal.get(Calendar.HOUR_OF_DAY);/ k: i0 h# f! r1 |9 J+ X; ~! Y
        int minute = cal.get(Calendar.MINUTE);, C) S" P* y) K8 x0 Y( l8 w
        System.out.println(year + "/" + month + "/" + day + " " + hour + ":" + minute);
# H# z5 h7 Y1 G7 |  E( ^    }
3 Z. O3 n6 S- `# d}' w) M% u% t# v- h+ _  G  y4 m
5 h# G" Q4 ^- p+ l
7、编译* p6 ~9 X# Z! t# s* J$ ?( Y
, d: w( Q! c# q! f6 J5 m
! M" l6 w3 }8 F/ T( b2 p
, r; F0 N2 R; ]9 a1 u2 `  `
[root@master ~]# javac day.java
0 t. H( _* d, D/ t( K; O+ A2 ~( P' J! I  Q4 ]
8、执行
1 n9 x3 `6 M; y* C. B, e  A/ L  v( H1 g2 o& I
  x: V/ t+ F! x) f+ q

2 n; ]) H, Z9 n: b4 @# f' e[root@master ~]# java day/ @% R- O6 V+ I+ W, |' C' j
2015/3/16 20:309 ?% H+ t6 ]5 l
5 Q$ F( V. G% H' [/ ?6 R9 D4 s3 Y. P
二、安装hadoop 5 ~* R& F# a* n/ c2 h
1、在各个节点上创建用户,并设置密码
: u: _2 ?% f; l2 h) S
* E5 J% g, z" p! Q
! Z0 R9 E" L) r  g' w
$ n; m+ z. w8 Z1 J& n) D* U[root@master ~]# useradd -d /usr/hadoop hadoop 0 ^2 w$ @0 M- }4 L( q. S' |# I# @* G
[root@master ~]# chmod 755 /usr/hadoop
9 C  I7 K1 g- k* T" N3 ?9 U( }: `[root@master ~]# passwd hadoop
2 S5 `4 s) K  r1 fChanging password for user hadoop.4 E5 y+ Z% r7 P) Z/ r9 c- b0 }
New password:3 @5 O2 x* e2 Q8 \6 b+ x5 _' L
Retype new password:
; V: B* L# y# l; J- Z0 Q* n; Gpasswd: all authentication tokens updated successfully., m' B0 Q  y, s
; M2 G7 X# L  x+ Y' l$ S
2、通过hadoop用户登录到master节点上,生成秘钥,并拷贝到其他节点上
4 d, r6 _/ U3 {8 f" r生成秘钥* B% v2 p8 s4 N& }( R
  h" b* u& B& n) J" o
3 |* Y8 ~. r5 U2 M, ]% e+ i

( o; ^6 z" T' O# R[hadoop@master ~]$ ssh-keygen ! G" A2 B: ^1 D
Generating public/private rsa key pair.
( z4 e% ?" V( m4 S. l$ A1 G; zEnter file in which to save the key (/usr/hadoop/.ssh/id_rsa):
9 I4 F2 f! w7 v5 i. K" ZCreated directory '/usr/hadoop/.ssh'.
% {  G; S) Q3 }3 B) lEnter passphrase (empty for no passphrase):
; e9 h: Z, J7 G0 j- nEnter same passphrase again:; a$ B. Z, I$ i
Your identification has been saved in /usr/hadoop/.ssh/id_rsa.
7 C+ z+ r' {( e% Q! }9 zYour public key has been saved in /usr/hadoop/.ssh/id_rsa.pub.
* y( R6 @5 a: `The key fingerprint is:5 S; f% h. w7 @/ a3 F/ ]
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hadoop@master.wyl.world
' F9 A. _3 k6 N9 g1 v. z6 l* T: @The key's randomart image is:
! I+ V/ H; u6 D0 @( ~4 h
- L* Y7 ?+ `! G. g* @5 N* X. b3、发送到本机
8 |' O  S! {/ ~  h6 f
( d3 P) k0 K, z  }7 m$ G* S
, c: W' Q3 l% z0 `# F, |, J6 I- q/ W/ }
[hadoop@master ~]$ ssh-copy-id localhost
- ?1 S1 p; _* D7 j0 _, M) Y
+ J* J" U1 H( V0 I4、分别拷贝到node节点& K, v2 \! U. @0 t/ t
7 k2 s1 d( e4 C

/ q& _5 h' @  O, T
2 x# L# ?* m# f3 V5 O* Y, v[hadoop@master ~]$ ssh-copy-id node01.wyl.world
, O' A# t! _9 p, U" f+ o[hadoop@master ~]$ ssh-copy-id node02.wyl.world ( W1 s5 ?* o4 L: b' p$ w( M
% ~- W$ n! }5 M
5、通过hadoop用户在各个节点上安装hadoop
: }; j# v- m: Z可以通过下面路径下载最新的安装代码
' f# l  u! g) t/ p
- r+ B0 v2 M; q6 m, U: r
. h8 g+ F8 ^9 V: g6 a0 [* l4 Z. W5 F
https://hadoop.apache.org/releases.html' ~% @4 d! D/ Q
' T: S" H5 H' b: s% d  W/ U
下载安装包) `4 Q! d' F# ?/ d" @

0 E2 ?/ Z' A, b
3 ^% f0 c/ B, K. K2 V" v8 D5 @# i5 Q) k* q# I
[hadoop@master ~]$ curl -O http://ftp.jaist.ac.jp/pub/apach ... hadoop-2.7.3.tar.gz
8 U+ ~* v5 s" C0 n9 v) B0 Y6 `! k4 f! D: X2 A4 ~: `
解压安装包: E2 F9 ~2 p1 G' @: B" ~
3 J! k* B8 n/ I" r" ^3 G
" g, e- J: S( x; }9 z+ i& i6 b, q
0 y6 c+ W* w4 Q/ q8 Z5 W9 F6 v
[hadoop@master ~]$ tar zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop --strip-components 1
5 N2 w8 I' b8 j& U3 ?+ X7 q# G, P! k' K* [
写入系统变量' j8 K: u  N- L$ V* Z( ^8 B

6 x8 \  T6 L. B" U4 t( {/ H: n5 }/ e( {0 K+ g- I
$ I3 p, g2 Z: s4 Q! j8 B
[hadoop@master ~]$ vi ~/.bash_profile/ n/ v9 E. a3 L/ J
# 加在末尾
' y1 k2 E/ @0 ?export HADOOP_HOME=/usr/hadoop
& E7 B9 m% H5 Q9 ^1 mexport HADOOP_COMMON_HOME=$HADOOP_HOME
' M6 h& o) z2 @. h5 R2 Q  `export HADOOP_HDFS_HOME=$HADOOP_HOME4 ^2 s/ F; M3 k; h7 `; O
export HADOOP_MAPRED_HOME=$HADOOP_HOME, g8 [- @- T! r" e+ u
export HADOOP_YARN_HOME=$HADOOP_HOME
1 r( J( m: I+ E7 L# J# ?export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"- Y/ V* W5 Z7 a! h! I$ Q
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native0 f$ M) \: N7 b2 H: m0 P  \  Y5 l( a! x
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
3 n9 l( x' _' |" [8 ?( E0 r0 R" @$ F0 Y
应用系统变量
- L# g9 R' H. J' u0 x' q1 U
6 c' z1 u; q1 u, d8 g! K# t, x# l4 H. B6 @

% |$ I. B0 F5 M9 n[hadoop@master ~]$ source ~/.bash_profile
, ~6 P. o) L: W" g0 w/ n& e" \* u  K4 `( x0 g
6、通过hadoop用户在master节点上配置hadoop
5 y9 o6 ?0 ~: g: g创建目录
. w: m/ w( T/ d: m5 J) o2 H& {% E* S$ u" ~- U- k8 r
6 k+ T% W1 d3 H# q. q, w% O
. d: w- o& l1 m. X( E
[hadoop@master ~]$ mkdir ~/datanode
/ t9 W" ?; t' x, `[hadoop@master ~]$ ssh node01.wyl.world "mkdir ~/datanode"
' G' y5 R; A6 |4 P" l" X9 J  ~[hadoop@master ~]$ ssh node02.wyl.world "mkdir ~/datanode"+ U1 O9 ~. D5 L, y3 t# B

0 Q9 F, B+ a4 C% Z7、修改~/etc/hadoop/hdfs-site.xml4 i% ]; d, G6 ^6 j2 @' ^2 ^, k

4 V/ R' f, F' j* f5 Y: k4 Y( F* H9 a
6 U) a/ Q. r: l# ]* m4 p. ~: B' Q; m0 V5 A
在 <configuration> - </configuration> 之间加入如下内容
- d2 T  f% H- ^9 \) e- h4 r<configuration>( n: _# q: b1 C! }3 Q
  <property>% ~0 x4 |% r) n& N
    <name>dfs.replication</name>
( k6 B  [4 P- V    <value>2</value>1 S# {9 ?# O9 B' Z. t/ |9 E( G
  </property>$ k) F* {7 n5 B9 ?- E5 E
  <property>
% ?  o5 L; |& p5 s) Q8 `    <name>dfs.datanode.data.dir</name>& s$ A- I, Q" J' r& l
    <value>file:///usr/hadoop/datanode</value>
9 ]: N. T* }6 |. W2 \! U  </property>
' e, _4 ]. V+ l( U</configuration>/ i- _* r: S. w
8 f) r! Y) q# N  t0 t
8、拷贝到其他节点上0 M2 w( G0 L+ q$ V: }

' G5 t, b! w7 B/ G* C' n
+ S' ^) L) p' g% u2 B3 m. z  q" c- G' i6 W
[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node01.wyl.world:~/etc/hadoop/
! J+ ]0 j! _; p9 |. Z4 N% g[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node02.wyl.world:~/etc/hadoop/
3 h; _) k1 h5 X. a5 Z% ]( `
& o# l6 S, B6 B" c( {" I9、修改~/etc/hadoop/core-site.xml
( c2 w- g3 K3 O8 @6 |, v# r+ d* H$ Z# k: J
$ R: v% Z, g0 ?# J9 f

& N' }6 y# p6 n5 d在 <configuration> - </configuration> 之间加入如下内容, z4 A) a8 \3 Y0 r" a# j+ v9 k, O
<configuration>
& H% f7 m% b8 i2 n8 a  <property>: q0 W0 ^7 t9 S! a
    <name>fs.defaultFS</name>
9 h( d6 n  l1 e+ W    <value>hdfs://master.wyl.world:9000/</value>
# S& d% l* W# _. a* [5 D0 `7 J  </property>
+ T. _. S5 j- M1 S, C1 f1 [0 z</configuration>- ?$ P. D. b! r, u2 g% b
: _! b" D' s/ [3 Z( ^
10、拷贝到其他节点上
% M$ z5 F8 Y9 j% h# J
: C& n2 v; A$ e, |0 ~1 R0 n9 }: [- p. O
! O. F# T4 W5 x7 l' h4 c
[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node01.wyl.world:~/etc/hadoop/
% X4 ]9 d; E  [( e8 I[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node02.wyl.world:~/etc/hadoop/ 6 x( P- G! O0 W. J( }3 W3 Z
[hadoop@master ~]$ sed -i -e 's/\${JAVA_HOME}/\/usr\/java\/default/' ~/etc/hadoop/hadoop-env.sh
$ n! G: a+ a2 D[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node01.wyl.world:~/etc/hadoop/ . O2 ~1 [8 ]+ n, T% \; K- O
[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node02.wyl.world:~/etc/hadoop/
3 L" {( V7 L  t2 T& o0 U4 A8 d9 L[hadoop@master ~]$ mkdir ~/namenode
- U6 S8 J9 _/ ]3 s6 m7 B" d" q0 }$ M6 o& ]" @
11、修改~/etc/hadoop/hdfs-site.xml& X, L) n% e& {& l2 \# {  T, e; U
0 T: g3 K8 z! L5 J* j+ A# M
& y- }# R/ f6 i7 b' N6 ~, M3 S: I
# |3 I7 ~# q8 e3 G3 q: c. |, p! V% K1 t
在 <configuration> - </configuration> 之间加入如下内容
% l$ t6 n) v& k5 \' P3 |2 e1 c<configuration>9 O6 e! V4 l1 d3 P% \# s
  <property>
7 T, b. O# y+ a% s$ J: d: v    <name>dfs.namenode.name.dir</name>/ r, l. S9 O" \  N0 R9 i
    <value>file:///usr/hadoop/namenode</value>
4 b) C8 R, L: g9 d0 G& W: f( I4 e  </property>6 y2 N& K5 x7 N( {
</configuration>- l* O  Z) [' |5 \

- M* ]8 W1 U8 W" f4 L3 ^% t12、创建~/etc/hadoop/hdfs-site.xml并写入
9 z0 ]% B3 U7 L( q* O  I9 v6 d; H. e
# f9 P& |  Q/ Z7 s7 X# create new7 X8 I9 g4 O5 t( N1 ^$ R" \) h
<configuration>$ v) K* C. N' {' K7 C! p5 h4 ?5 i  F
  <property>
0 y6 ?) X6 z+ ?. L! f    <name>mapreduce.framework.name</name>3 l- B( O1 j6 T# D( v
    <value>yarn</value>
3 e' \6 Q$ O" X5 H3 i) F  </property>, q$ Q' ]* L9 }/ h
</configuration>7 N# T7 _4 A8 H, J- m2 a- N" b
, W6 B6 l0 s9 U3 c
13、配置~/etc/hadoop/yarn-site.xml
& h7 V- x& E2 `0 M; o1 f* W. D4 d. j% ^$ |# O6 Q+ R
' X9 C6 I& l% v$ t$ q0 O
( J9 G4 E1 U$ L, h" |
在 <configuration> - </configuration> 之间新增如下内容, M8 z! ^' V3 d; {, O* _* L2 D
<configuration>
; G" z) K$ T( j- x  <property>& X" w3 A6 _( }4 g' ~
    <name>yarn.resourcemanager.hostname</name>
9 Z, U. Y. T, |- X9 d% j% K: E, R% H    <value>master.wyl.world</value>2 R6 D1 A, P7 a! D* p
  </property>0 r! [/ g. i% F( j
  <property>
( ?1 r) ^8 Z/ V' x  J    <name>yarn.nodemanager.hostname</name># a: D# {$ p9 Y! T3 [) f
    <value>master.wyl.world</value>
) G9 b. k  G! S4 Y2 k5 n- a9 V  </property>, M5 r9 f2 r* p
  <property>
) d2 p4 b# k- P% `/ U    <name>yarn.nodemanager.aux-services</name>
7 J8 \% Z( ?& I- k" }    <value>mapreduce_shuffle</value>/ q* L  w* A: C3 P5 ]7 Z/ z7 W
  </property>
/ w1 p" s0 u' r# ?9 q</configuration>
- U7 ?( S3 ]! Q  U. x% M4 |$ d  ?/ q/ {7 r/ R5 c
14、在~/etc/hadoop/slaves写入各个节点信息
* t2 V9 s1 d" t% k3 G0 w
: _+ d" B. |8 _; j, T  v#添加所有节点信息,并删除localhost
) \  V6 S9 O3 y/ _: _: [4 _master.wyl.world" K/ H3 f- z4 v. R; A+ C0 C
node01.wyl.world
! Z1 n: ~4 E0 ?. F" Znode02.wyl.world& l/ N; u" \( P) |

) H8 I+ X9 ]! S* E: X' \8 K15、格式化namenode并启动hadoop服务 , T4 Z! W- j/ e2 H* I4 x' ^
格式化节点, V. S# X6 o5 j' L8 P5 B
2 e  k# @1 |3 k. q* T5 ?1 r
7 [8 K8 S$ n, Z3 M) ^$ J
8 k7 o. ]! t4 c' L
[hadoop@master ~]$ hdfs namenode -format 3 h5 p" Z/ _! P" _7 _
15/07/28 19:58:14 INFO namenode.NameNode: STARTUP_MSG:
! y; C( _3 x' }0 r/ Q; \: V! A" r/************************************************************
7 H4 t- e2 ?, L0 C  }" {$ xSTARTUP_MSG: Starting NameNode
3 W/ }+ _/ O6 s5 RSTARTUP_MSG:   host = master.wyl.world/10.0.0.308 H1 h# T& u7 K! G( p; m  @
STARTUP_MSG:   args = [-format]
( W, i: O# k2 X4 I/ ^) @6 BSTARTUP_MSG:   version = 2.7.3
! ]$ {8 a9 M4 E; ]- N) E9 j! J9 e5 [- q% B, o.....
- O1 u0 d' _- B7 }.....
( H% q9 I5 c% l; L$ T: K% ]15/07/28 19:58:17 INFO namenode.NameNode: SHUTDOWN_MSG:5 H6 n6 q* w; E. w5 `; J
/************************************************************
" h! X4 J$ E; q1 G, E$ o( a( o. xSHUTDOWN_MSG: Shutting down NameNode at master.wyl.world/10.0.0.301 `3 S+ t, o4 |) {2 Z
************************************************************/0 D9 C6 d) V  ~3 E
! M) i# r2 y: g' W, S9 @
启动dfs
4 P2 K# o' K# Z) J" A9 Z
# Q  a$ A, G/ C' i+ I! n2 G& a
; J4 c+ e4 V  `0 s9 i2 R; T5 s9 a4 U' A3 |) I: A9 u; C7 l) M# ~
[hadoop@master ~]$ start-dfs.sh
5 d9 E4 n! x" v% _Starting namenodes on [master.wyl.world]# K* f" D' ]( [, b, l8 k
master.wyl.world: starting namenode, logging to /usr/hadoop/logs/hadoop-hadoop-namenode-master.wyl.world.out
  N! [  i" m/ O, g* Vmaster.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-master.wyl.world.out" ?3 b" X2 g, s: r: q  w$ r
node02.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node02.wyl.world.out( Y/ @) U  C7 ^& v
node01.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node01.wyl.world.out
- W( F8 }% L( G: xStarting secondary namenodes [0.0.0.0]& D2 B& X, S2 N0 Q- ]/ a
0.0.0.0: starting secondarynamenode, logging to /usr/hadoop/logs/hadoop-hadoop-secondarynamenode-master.wyl.world.out7 o( v8 Z0 e8 ^0 T: B

9 D& z& ?" ?4 p: Q% I7 R% H  x4 Z启动yarn
) y8 c1 K# c; u7 _9 @. x% g
7 M3 n& E6 K3 i! @" ]1 o7 w4 q3 e/ e0 D- v8 H/ Y. _4 v

0 z- c$ [* g, h; F: n6 X, Q! I8 L; J[hadoop@master ~]$ start-yarn.sh 8 b% w  r$ a' D) n4 `# @8 r$ C
starting yarn daemons: }4 Z9 r! ~" b/ `5 T2 }- H
starting resourcemanager, logging to /usr/hadoop/logs/yarn-hadoop-resourcemanager-master.wyl.world.out
7 A9 Y* [7 ?6 Q1 U" W% T' V, Qmaster.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-master.wyl.world.out
! @1 @5 g$ g4 K  wnode02.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node02.wyl.world.out9 Z: b: _) }) g9 f
node01.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node01.wyl.world.out& g' ]5 R9 b. Q; G. _7 F5 `* F1 w

9 i' V" v* s" N) V16、查看服务状态,正常如下,如异常,请返回检查配置+ H4 `  H, T1 I

* f6 z5 f* B8 z. I, n& e) Z$ y, B# [( N8 w! X; a) a, m8 o
! ~' G- a5 L! b, G' t
[hadoop@master ~]$ jps
0 G: s6 z5 N7 U- I" J2130 NameNode
& y4 e' X" o* d: k2437 SecondaryNameNode
& x! C: p% \+ r) g2598 ResourceManager: i) J6 C6 s% l# D* i
2710 NodeManager: {& p& [; A( T- b
3001 Jps- \/ {+ k; S! \; q5 z6 k) n& E
2267 DataNode" z& v# Y# d/ W6 e; B% _

) A) w; ^( I2 W, [0 Z17、创建目录4 O. k- {3 s3 P" [6 \

) g1 M  y2 a6 B3 G' ^3 Y: l6 j8 [) @; j( h7 z1 N
, u5 h+ O3 I6 ^
[hadoop@master ~]$ hdfs dfs -mkdir /test
  x1 ^2 ~: t; B2 i6 i9 L) V# Q9 L, W  {1 ?/ p; o2 ~' }4 ]
18、拷贝一个文件到/test! w$ q) d- }6 O8 _& @- L
# D4 B& l) p. u7 c
/ b* e9 E. E* _1 ^5 V* m
0 [" G; @: [0 K- L
[hadoop@master ~]$ hdfs dfs -copyFromLocal ~/NOTICE.txt /test
' Q6 o) d6 g1 d5 ]" [& F7 T- W
6 I. B; A- u; G9 }19、展示文件内容( g  {  i( i9 f) L
# {. c1 u9 z1 o$ s* w; b( T1 z

  V1 m3 {" [: p& }1 `: i, o) J1 D6 w+ ~
[hadoop@master ~]$ hdfs dfs -cat /test/NOTICE.txt ; B; A3 A8 r. b$ Q$ V
This product includes software developed by The Apache Software  I& |* N/ |6 c5 ^" Q) G! x: o
Foundation (http://www.apache.org/).
9 f( C( Y  P( [
1 k% ^0 Q9 ~6 d% ]" i: X8 [20、执行程序
. y6 `% v8 E! D0 F; e* S% o8 B; W7 w' P* d2 A# c$ h4 Z' u

2 Z  U* _+ ^9 k. |2 t, N' e- C4 @& h. O
[hadoop@master ~]$ hadoop jar ~/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/NOTICE.txt /output01
( P; S3 }5 B& V+ E1 @' b15/07/28 19:28:47 INFO client.RMProxy: Connecting to ResourceManager at master.wyl.world/10.0.0.30:8032
: k" u" q. h$ d/ A6 n* y5 n7 d15/07/28 19:28:48 INFO input.FileInputFormat: Total input paths to process : 1
3 ~1 ^* A% C2 Z% O& q$ ^15/07/28 19:28:48 INFO mapreduce.JobSubmitter: number of splits:1
+ p" H6 N$ Q! q3 l1 Z$ n* W! K.....% V" V* y& V6 \9 B/ o
.....8 T) D# M4 Z2 H; v
- I2 _1 L- G; O' Y' k" ~
21、查看结果, J3 p% E+ i5 T/ a; x* D2 p
; |5 h" p9 z) d% U, Y
9 Q1 L' f* p  K+ u+ f) b
/ k) B. ?, m5 {- t6 U
[hadoop@master ~]$ hdfs dfs -ls /output01 8 c+ C; K  F/ z4 D3 f' i5 z4 ~0 [
Found 2 items0 z9 m" |/ w2 d% |
-rw-r--r--   2 hadoop supergroup      0 2015-07-29 14:29 /output01/_SUCCESS; z! g) l3 K+ ?- h6 {. ^; Z! L$ C+ y
-rw-r--r--   2 hadoop supergroup    123 2015-07-29 14:29 /output01/part-r-00000+ l& G" @  Y- ]% S' s& o

- l7 M2 G3 ?( u  f22、显示文件结果
( ?$ |  h- Y4 \% v1 v" c& c0 M7 ~1 A! S- Y7 p
& Y3 R0 _) R6 r0 b( Q4 [
5 Z5 l) r8 |  I
[hadoop@master ~]$ hdfs dfs -cat /output01/part-r-00000
1 P2 V# e2 O: f" @3 T(http://www.apache.org/).       1
$ @& N5 p. u7 E& e$ l. G/ }% K. EApache          1
7 s* h0 T! @. I% e# }Foundation      1
9 B# q0 o4 ?: p! l/ lSoftware        1
. q* J: Y0 ]. V5 b' NThe             1
5 X. ^5 _8 j: D9 c$ R* uThis            1/ D& u' ?. H4 Q
by              12 S5 Q$ t. l5 u# V; A: Q+ W
developed       1
' h( H) H. Z& P9 eincludes        12 t& i' y7 [$ b2 \
product         14 g4 }' t" {; G! Z
software        1: W1 Z/ w* D) Z1 G9 i

/ `# P( o) e, b; f* x查看集群概要
8 R' I$ C6 i, H6 Zhttp://(server’s hostname or IP address):50070
( n- u( {+ n+ X! A2 ]( `- \! s4 D  0 y) E: B+ A- O3 E6 l
集群详细信息 5 a; g2 i$ F' D4 v: \

) N/ w% L" Y# {- q" Y1 R$ Ghttp://(server’s hostname or IP address):8088/ 4 J0 K0 C) ~# @/ O5 k3 [+ P

9 H% b- O% g! S7 A& W/ `/ I
7 v' Z) ~; r& G9 r0 y. S$ U
  @; S: Z! C$ c. A4 g3 ]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:12:34 | 显示全部楼层
目的
本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。

# e! X/ Z/ g+ L2 E! ]( G先决条件
  • 确保在你集群中的每个节点上都安装了所有必需软件。
  • 获取Hadoop软件包。0 `8 }, G( o8 p6 ~' Y
# C, N% B. T8 e+ _
安装
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode作为TaskTracker。这些机器是slaves
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。
( y7 Q! ^8 z6 c
配置
接下来的几节描述了如何配置Hadoop集群。
配置文件
对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
  • hadoop-default.xml - 只读的默认配置。
  • hadoop-site.xml - 集群特有的配置。' W0 @9 [& ?- k  w7 M7 o1 ]
要了解更多关于这些配置文件如何影响Hadoop框架的细节,请看这里
此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。
集群配置
要配置Hadoop集群,你需要设置Hadoop守护进程的运行环境和Hadoop守护进程的运行参数
Hadoop守护进程指NameNode/DataNode 和JobTracker/TaskTracker。
配置Hadoop守护进程的运行环境
管理员可在conf/hadoop-env.sh脚本内对Hadoop守护进程的运行环境做特别指定。
至少,你得设定JAVA_HOME使之在每一远端节点上都被正确设置。
管理员可以通过配置选项HADOOP_*_OPTS来分别配置各个守护进程。 下表是可以配置的选项。
守护进程
配置选项
NameNodeHADOOP_NAMENODE_OPTS
DataNodeHADOOP_DATANODE_OPTS
SecondaryNamenodeHADOOP_SECONDARYNAMENODE_OPTS
JobTrackerHADOOP_JOBTRACKER_OPTS
TaskTrackerHADOOP_TASKTRACKER_OPTS
例如,配置Namenode时,为了使其能够并行回收垃圾(parallelGC), 要把下面的代码加入到hadoop-env.sh :5 {2 X% w9 |" c/ U4 h. F# C
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}") {: S1 L3 o7 R4 ?" x( _
其它可定制的常用参数还包括:
  • HADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
  • HADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB
    , s6 k5 N7 e6 \! F; h
配置Hadoop守护进程的运行参数
这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。
参数
取值
备注
fs.default.nameNameNode的URI。hdfs://主机名/
mapred.job.trackerJobTracker的主机(或者IP)和端口。主机:端口
dfs.name.dirNameNode持久存储名字空间及事务日志的本地文件系统路径。当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
dfs.data.dirDataNode存放块数据的本地文件系统路径,逗号分割的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
mapred.system.dirMap/Reduce框架存储系统文件的HDFS路径。比如/hadoop/mapred/system/这个路径是默认文件系统(HDFS)下的路径, 须从服务器和客户端上均可访问。
mapred.local.dir本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。多路径有助于利用磁盘i/o。
mapred.tasktracker.{map|reduce}.tasks.maximum某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。默认为2(2个map和2个reduce),可依据硬件情况更改。
dfs.hosts/dfs.hosts.exclude许可/拒绝DataNode列表。如有必要,用这个文件控制许可的datanode列表。
mapred.hosts/mapred.hosts.exclude许可/拒绝TaskTracker列表。如有必要,用这个文件控制许可的TaskTracker列表。
通常,上述参数被标记为 final 以确保它们不被用户应用更改。
现实世界的集群配置
这节罗列在大规模集群上运行sort基准测试(benchmark)时使用到的一些非缺省配置。
  • 运行sort900的一些非缺省配置值,sort900即在900个节点的集群上对9TB的数据进行排序:
    参数
    取值
    备注
    dfs.block.size134217728针对大文件系统,HDFS的块大小取128MB。
    dfs.namenode.handler.count40启动更多的NameNode服务线程去处理来自大量DataNode的RPC请求。
    mapred.reduce.parallel.copies20reduce启动更多的并行拷贝器以获取大量map的输出。
    mapred.child.java.opts-Xmx512M为map/reduce子虚拟机使用更大的堆。
    fs.inmemory.size.mb200为reduce阶段合并map输出所需的内存文件系统分配更多的内存。
    io.sort.factor100文件排序时更多的流将同时被归并。
    io.sort.mb200提高排序时的内存上限。
    io.file.buffer.size131072SequenceFile中用到的读/写缓存大小。
  • 运行sort1400和sort2000时需要更新的配置,即在1400个节点上对14TB的数据进行排序和在2000个节点上对20TB的数据进行排序:
    参数
    取值
    备注
    mapred.job.tracker.handler.count60启用更多的JobTracker服务线程去处理来自大量TaskTracker的RPC请求。
    mapred.reduce.parallel.copies50
    tasktracker.http.threads50为TaskTracker的Http服务启用更多的工作线程。reduce通过Http服务获取map的中间输出。
    mapred.child.java.opts-Xmx1024M使用更大的堆用于maps/reduces的子虚拟机
    0 e* _) s/ r- D+ |7 n9 C( s
Slaves
通常,你选择集群中的一台机器作为NameNode,另外一台不同的机器作为JobTracker。余下的机器即作为DataNode又作为TaskTracker,这些被称之为slaves
在conf/slaves文件中列出所有slave的主机名或者IP地址,一行一个。
日志
Hadoop使用Apache log4j来记录日志,它由Apache Commons Logging框架来实现。编辑conf/log4j.properties文件可以改变Hadoop守护进程的日志配置(日志格式等)。
历史日志
作业的历史文件集中存放在hadoop.job.history.location,这个也可以是在分布式文件系统下的路径,其默认值为${HADOOP_LOG_DIR}/history。jobtracker的web UI上有历史日志的web UI链接。
历史文件在用户指定的目录hadoop.job.history.user.location也会记录一份,这个配置的缺省值为作业的输出目录。这些文件被存放在指定路径下的“_logs/history/”目录中。因此,默认情况下日志文件会在“mapred.output.dir/_logs/history/”下。如果将hadoop.job.history.user.location指定为值none,系统将不再记录此日志。
用户可使用以下命令在指定路径下查看历史日志汇总
0 a: z0 v4 a# q. x: E9 F" E2 Z$ bin/hadoop job -history output-dir
1 _8 ^7 a" |( b$ c' q这条命令会显示作业的细节信息,失败和终止的任务细节。' i7 G: t" K! i$ a" |! z' P6 x
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
2 u; ^! ~& ?! ?; G9 q4 W" Y7 n2 O$ bin/hadoop job -history all output-dir8 ^/ @5 C3 K( M5 A
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。
& S& ^% C: c1 |& I; |2 f  D( v
Hadoop的机架感知
HDFS和Map/Reduce的组件是能够感知机架的。
NameNode和JobTracker通过调用管理员配置模块中的APIresolve来获取集群里每个slave的机架id。该API将slave的DNS名称(或者IP地址)转换成机架id。使用哪个模块是通过配置项topology.node.switch.mapping.impl来指定的。模块的默认实现会调用topology.script.file.name配置项指定的一个的脚本/命令。 如果topology.script.file.name未被设置,对于所有传入的IP地址,模块会返回/default-rack作为机架id。在Map/Reduce部分还有一个额外的配置项mapred.cache.task.levels,该参数决定cache的级数(在网络拓扑中)。例如,如果默认值是2,会建立两级的cache- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
  w- x( Z- p1 K5 Y) Q8 T
启动Hadoop
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
格式化一个新的分布式文件系统:" a0 {% l8 }; s( B! _  `# c
$ bin/hadoop namenode -format
在分配的NameNode上,运行下面的命令启动HDFS:6 ]6 q, P8 n9 v% p* |- P
$ bin/start-dfs.sh
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
在分配的JobTracker上,运行下面的命令启动Map/Reduce:8 u; h( ?; u6 @# q, J1 ?
$ bin/start-mapred.sh
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。

+ B6 `, \# I# X, r停止Hadoop
在分配的NameNode上,执行下面的命令停止HDFS:* K: B6 x/ [) g) |: m* a
$ bin/stop-dfs.sh
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
在分配的JobTracker上,运行下面的命令停止Map/Reduce:2 T1 W$ a% S; Q0 l( @: `, C6 C
$ bin/stop-mapred.sh: t% `5 b% X% f4 H7 u
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。
. \# B5 B1 F/ W. k' w
9 h4 z# j2 z8 `1 P3 ]* L( `) f, r7 u

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:12:46 | 显示全部楼层
目的
; y7 M& j% }$ i* c. ?5 l本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
" V3 `3 l! V; n3 x9 n
5 c) W, S" y+ K6 C如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。% ?% w2 F6 a: g3 K% G3 N$ R

: W" d# R, X. U% Y7 v5 [先决条件
2 y# u. |( D1 O  H8 e2 F! N确保在你集群中的每个节点上都安装了所有必需软件。
8 `+ a8 Z! O& {获取Hadoop软件包。
$ L1 l, p' [$ q  A$ [* G% b安装
( ?* j% Y; K9 ^- M安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。) D, F9 d, z0 Y2 j0 B9 D

. \3 v: d, N- \通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。
% T1 E0 |' y, l5 D5 Y& B9 s6 {* u: t6 a8 ~) @8 P
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。
. }( Y. N1 p* E; |/ n1 Y
9 {1 P9 O/ J" E0 A配置- _3 F9 P! {" H: K* k6 a
接下来的几节描述了如何配置Hadoop集群。
  S' [( d% E! F- ?& a
7 H# W* }, \& `配置文件
4 I$ S. _& H0 L, a# X对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
4 K$ m$ q% \  r! k+ }2 i8 @4 R; [1 `' c
hadoop-default.xml - 只读的默认配置。
; c; n" M) X: v' R; Whadoop-site.xml - 集群特有的配置。
( `! j* {- a, z要了解更多关于这些配置文件如何影响Hadoop框架的细节,请看这里。
0 L& ?1 x! a$ W. Z, R, I) D2 ]
, v2 d/ N8 Y( }" W此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。, D7 `7 W: B8 T0 Y3 t; V
+ y" P% C. k; Y1 r
集群配置! u( y7 A1 @6 z9 t
要配置Hadoop集群,你需要设置Hadoop守护进程的运行环境和Hadoop守护进程的运行参数。
& @8 K5 @' d1 k% D0 b
9 @- R9 }7 J1 ?- c% S, i, iHadoop守护进程指NameNode/DataNode 和JobTracker/TaskTracker。& R9 u5 V- U/ |  E( l( a

' l6 n, N% q: S( ]: q配置Hadoop守护进程的运行环境: a4 i# M* ]! z/ X, j  l2 h
管理员可在conf/hadoop-env.sh脚本内对Hadoop守护进程的运行环境做特别指定。( ^& n" p1 n; s% z! ^- V3 n9 {  t

( |  b7 s# j# P& B& ^+ z; w" |+ h至少,你得设定JAVA_HOME使之在每一远端节点上都被正确设置。; Q, C2 `7 s0 F6 v1 Q( ]% @2 I

4 U2 G; w- c/ i: R1 r& I管理员可以通过配置选项HADOOP_*_OPTS来分别配置各个守护进程。 下表是可以配置的选项。4 Z) U/ `- _5 x( |; `9 b

: u8 ^# }. D6 a. P) |1 x6 a- b守护进程        配置选项( k* q2 k# w( D! V/ c% v9 p
NameNode        HADOOP_NAMENODE_OPTS0 T9 t& c) K7 u- U: W2 A1 c
DataNode        HADOOP_DATANODE_OPTS" S- v$ V; D: P. T* |
SecondaryNamenode        HADOOP_SECONDARYNAMENODE_OPTS
  H. q% H1 Q: X0 ^7 @. K( E6 BJobTracker        HADOOP_JOBTRACKER_OPTS! {0 t, }2 u* C7 `: x7 ~
TaskTracker        HADOOP_TASKTRACKER_OPTS
, M! d9 f3 A# u" \! K/ x( A例如,配置Namenode时,为了使其能够并行回收垃圾(parallelGC), 要把下面的代码加入到hadoop-env.sh :
- y  J! f7 w0 O+ Sexport HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"
, q2 d' [# Y% D2 i( N其它可定制的常用参数还包括:
6 y( |, Y  z' ]4 b
$ W  t4 X! Q7 F8 Y) m- mHADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
( Y) k5 K- K. m' b: AHADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB。# [  z* e: K' U- c
配置Hadoop守护进程的运行参数
4 {+ N9 J- X" n. B! f& S这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。& x+ s5 Z0 Y8 u. p) o+ O; F

% i/ f* W4 p6 F: v* ]0 s参数        取值        备注# l( x, O5 C3 I
fs.default.name        NameNode的URI。        hdfs://主机名/
2 i2 h2 ~  d9 Q  K  h' Umapred.job.tracker        JobTracker的主机(或者IP)和端口。        主机:端口。
3 c6 @' l1 M8 C* W+ j7 Ndfs.name.dir        NameNode持久存储名字空间及事务日志的本地文件系统路径。        当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
7 D7 b( q8 z/ E7 h7 o. W) idfs.data.dir        DataNode存放块数据的本地文件系统路径,逗号分割的列表。        当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。& z( B6 @; I* A5 j; |
mapred.system.dir        Map/Reduce框架存储系统文件的HDFS路径。比如/hadoop/mapred/system/。        这个路径是默认文件系统(HDFS)下的路径, 须从服务器和客户端上均可访问。
. h4 K+ {6 m4 d9 {9 ?mapred.local.dir        本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。        多路径有助于利用磁盘i/o。1 q! ~4 }( Z2 i3 a: d: a" _1 i  ?$ R4 s
mapred.tasktracker.{map|reduce}.tasks.maximum        某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。        默认为2(2个map和2个reduce),可依据硬件情况更改。  v* g2 c; w. p8 d) g; a5 s4 Y
dfs.hosts/dfs.hosts.exclude        许可/拒绝DataNode列表。        如有必要,用这个文件控制许可的datanode列表。
+ |, z0 y7 Z1 }& `mapred.hosts/mapred.hosts.exclude        许可/拒绝TaskTracker列表。        如有必要,用这个文件控制许可的TaskTracker列表。
- Z8 N- T# J$ T" |1 A, O通常,上述参数被标记为 final 以确保它们不被用户应用更改。+ d2 i0 p, }6 g# A
& Y6 v5 S2 }4 c- q2 q( g, V
现实世界的集群配置
# l4 r$ U. _! }# v" k这节罗列在大规模集群上运行sort基准测试(benchmark)时使用到的一些非缺省配置。/ N  K2 [' o3 }3 E# ?+ p
% e4 A3 k! _; c0 g
运行sort900的一些非缺省配置值,sort900即在900个节点的集群上对9TB的数据进行排序:
1 R% N$ z7 a8 b% T0 x5 x9 t) I  r8 k% _, z0 g: }" _- y+ b
参数        取值        备注7 X; H: P& E. O; r; q
dfs.block.size        134217728        针对大文件系统,HDFS的块大小取128MB。
% I7 S5 A2 P7 F/ f* cdfs.namenode.handler.count        40        启动更多的NameNode服务线程去处理来自大量DataNode的RPC请求。& s/ a+ X* R2 u, @+ j
mapred.reduce.parallel.copies        20        reduce启动更多的并行拷贝器以获取大量map的输出。
9 L6 ]8 v( q# dmapred.child.java.opts        -Xmx512M        为map/reduce子虚拟机使用更大的堆。
& r. e( y. ^$ [5 S4 W& hfs.inmemory.size.mb        200        为reduce阶段合并map输出所需的内存文件系统分配更多的内存。
  G5 r% `9 y! y5 Mio.sort.factor        100        文件排序时更多的流将同时被归并。. T: u% v. x6 ]$ E+ G
io.sort.mb        200        提高排序时的内存上限。  p0 r& }) h$ P2 s
io.file.buffer.size        131072        SequenceFile中用到的读/写缓存大小。$ h0 q) M5 c* ]" \! M( b2 Z6 A
运行sort1400和sort2000时需要更新的配置,即在1400个节点上对14TB的数据进行排序和在2000个节点上对20TB的数据进行排序:+ H6 C: y7 Y8 D& `2 R4 `0 n0 \6 X1 t

/ {7 x3 I0 T1 y6 p2 L. Y, ^参数        取值        备注
. v2 P& A% t% G- kmapred.job.tracker.handler.count        60        启用更多的JobTracker服务线程去处理来自大量TaskTracker的RPC请求。3 a1 o1 m) ~) i3 B: i4 @
mapred.reduce.parallel.copies        50        $ n! g' A: ^  G
tasktracker.http.threads        50        为TaskTracker的Http服务启用更多的工作线程。reduce通过Http服务获取map的中间输出。: }% d0 T- N5 D( x9 B* V
mapred.child.java.opts        -Xmx1024M        使用更大的堆用于maps/reduces的子虚拟机+ s6 D, m) |; F" ]
Slaves# @. m! |. r2 \! E! `7 g
通常,你选择集群中的一台机器作为NameNode,另外一台不同的机器作为JobTracker。余下的机器即作为DataNode又作为TaskTracker,这些被称之为slaves。' R: c, n. j" I
4 ~7 o8 i# z5 p1 u- O# m. e3 z; p
在conf/slaves文件中列出所有slave的主机名或者IP地址,一行一个。
1 I! Y( E$ l. _, |
& g# W2 a, [  D3 f4 b日志
* L* E& w% w5 U3 S" t, cHadoop使用Apache log4j来记录日志,它由Apache Commons Logging框架来实现。编辑conf/log4j.properties文件可以改变Hadoop守护进程的日志配置(日志格式等)。
6 W$ L# G7 n6 ^8 E4 u5 ^3 n( F6 J5 ]( u/ M/ f: O# @! A4 _
历史日志0 j' B) M% M: Q' d: m' y+ [/ r
作业的历史文件集中存放在hadoop.job.history.location,这个也可以是在分布式文件系统下的路径,其默认值为${HADOOP_LOG_DIR}/history。jobtracker的web UI上有历史日志的web UI链接。
) Z* Z0 F: N7 U0 S; s% }7 ^$ y# u7 I% S  U
历史文件在用户指定的目录hadoop.job.history.user.location也会记录一份,这个配置的缺省值为作业的输出目录。这些文件被存放在指定路径下的“_logs/history/”目录中。因此,默认情况下日志文件会在“mapred.output.dir/_logs/history/”下。如果将hadoop.job.history.user.location指定为值none,系统将不再记录此日志。
" P9 X1 o6 p* `) e4 ]& }. y  \) p) P, T# V
用户可使用以下命令在指定路径下查看历史日志汇总
9 l. M  l/ B  d# i+ v1 X+ e( f) N$ bin/hadoop job -history output-dir* I. f/ x# i4 w* o0 t7 m4 l
这条命令会显示作业的细节信息,失败和终止的任务细节。( p0 Y& r, S8 ^! R+ ]% ?
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看4 L* S2 k3 h  m8 ^3 {! k  P9 ~
$ bin/hadoop job -history all output-dir! I; K: d* `2 I: p; }! i
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。" }8 _4 }( W6 \3 \! U3 X: |

( C1 A( N, |+ Z; a% eHadoop的机架感知' Y8 ]# n  w& `7 G
HDFS和Map/Reduce的组件是能够感知机架的。4 C" G# q% Q1 T( z

) ?2 L' |6 D- C1 j. _8 B: YNameNode和JobTracker通过调用管理员配置模块中的APIresolve来获取集群里每个slave的机架id。该API将slave的DNS名称(或者IP地址)转换成机架id。使用哪个模块是通过配置项topology.node.switch.mapping.impl来指定的。模块的默认实现会调用topology.script.file.name配置项指定的一个的脚本/命令。 如果topology.script.file.name未被设置,对于所有传入的IP地址,模块会返回/default-rack作为机架id。在Map/Reduce部分还有一个额外的配置项mapred.cache.task.levels,该参数决定cache的级数(在网络拓扑中)。例如,如果默认值是2,会建立两级的cache- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
! \# Z$ ]4 D$ t; V9 f* m& Y2 M& _, ?6 |) P8 `8 Q+ N0 o* J) z
启动Hadoop* Z0 f6 A& @, {
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。) m* k, `$ |. ]7 f; X
! ^1 n) i* n( ]$ X  x! s+ p
格式化一个新的分布式文件系统:
4 s" [8 m" [# V& v4 x$ bin/hadoop namenode -format
8 H1 j( r, F9 k) T6 f. z) ?5 s  F" a0 g% s* W
在分配的NameNode上,运行下面的命令启动HDFS:9 g7 Q! A# _! f
$ bin/start-dfs.sh% p# |) a; S1 L' H' J

  K+ \8 b4 J. ~9 Rbin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
/ H4 G. y# [, h. ^; H6 Q; {% B! v% k& g/ L; M4 m4 e& t
在分配的JobTracker上,运行下面的命令启动Map/Reduce:
1 L4 S2 c9 S' \5 p% T3 q, F$ bin/start-mapred.sh: t/ _- l& u+ Z) z
4 l* v5 l  c* Z
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
, F+ D& q( g& W& m- _, N. l" j6 C1 D7 u7 w# \; ~+ ]
停止Hadoop! {1 [' y- A/ b: X4 F8 x4 c) Q
在分配的NameNode上,执行下面的命令停止HDFS:
- n+ H9 r4 j5 |' n# u$ bin/stop-dfs.sh
7 z! j/ n2 S$ O( U& s$ r
! {7 q7 p7 [9 @; f; rbin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。' y! j3 u3 r% @: v
3 |! y3 w& d5 X+ p$ M: {' q5 s
在分配的JobTracker上,运行下面的命令停止Map/Reduce:7 p0 a5 {* ?+ G# k
$ bin/stop-mapred.sh
+ o% u% b8 B( L4 g" L# _) e8 C2 lbin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。
4 G: I  P) A3 r, p. m) v; K1 ~9 R  K- p# C4 H, {' S$ e

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:13:57 | 显示全部楼层
Hadoop伪分布式环境搭建) h6 }: _0 t( u! V. \. }4 w
4 E6 O% s3 h: \) u( _1 y
      (1)三种模式/ o! y9 @: C5 ^; M  t/ X3 {$ x, F

! F: d6 ^- G+ @9 a; |; ?) y              Local (Standalone) Mode  本地模式:不使用HDFS文件系统,使用本地文件系统,程序员调试用;! r  H5 r, V5 m0 J+ o  w8 R
( D8 ~! i" t' V2 b2 L
              Pseudo-Distributed Mode  伪分布式模式:单节点,一台机器,使用HDFS文件系统,程序员调试用;5 {' @+ N/ n) J
6 l8 c+ m: ~: ~- K
              Fully-Distributed Mode  完全分布式模式:真实生产环境用,集群。  ]- l4 d/ |: T5 W

; u* g9 F% u9 E7 E+ o      (2)解压JDK
' U, L' Q; R, ^/ [2 r0 ]$ o
! n5 }: L1 q; k5 S5 N              $ tar  -zxf  jdk-7u67-linux-x64.tar.gz  -C  /opt/modules/
2 s+ s+ U0 M, F0 [. X" w2 [+ P6 V/ E
              配置环境变量4 J; U% B; h" e

2 {+ G4 @- ~+ Q& Y# J              #JAVA_HOME
3 V5 I. d" v5 {( z) ?               export JAVA_HOME=/opt/modules/jdk1.7.0_67; K1 i  G1 }2 l7 v- @  F
               export PATH=$PATH:$JAVA_HOME/bin$ {5 s' G% k- G: q

6 A, j* R* x9 M- m% W# E; l, @      (3)解压Hadoop5 F5 v1 d8 q$ v* m% \. ^8 j! x

: _$ ~3 v* E. T8 r5 z* l, J              $ tar -zxf hadoop-2.5.0.tar.gz -C /opt/modules/
9 h4 M4 l1 O- z! Z; r! @
) R2 @+ e/ K* r8 ~      (4)建议:删除rm -rf /opt/modules/hadoop-2.5.0/share/doc/,里面是英文文档,没有作用
' H( T/ x5 ]5 y0 B
. [% v  {" Z* P# ^7 U      (5)配置过程7 a! p* h; C( p
! k! l4 ^: N. O" i& y7 g, X
              <1>hadoop-env.sh、mapred-env.sh、yarn-env.sh指定Java的安装路径
$ Z: {6 o& F& Y7 b! p4 n                      export JAVA_HOME=/opt/modules/jdk1.7.0_67
( k3 G: B( q  Y6 @1 u5 z7 j( n) U! Z- d
              <2>core-site.xml,指定namenode所在机器位置及交互端口号,另外也是指定使用的是HDFS文件系统
) b+ f. M# \0 j6 m                      <property>6 @  u( @% y% }& N8 F/ _
                             <name>fs.defaultFS</name>
, {! t; e, J4 z5 }                             <value>hdfs://hadoop-senior.ibeifeng.com:8020</value>9 O/ N& @7 A: v. c" ~$ p' E
                      </property>
! ~3 x, I( M9 n2 T
; s: }) c$ o1 s, J, [" d              <3>hdfs-site.xml,指定副本数个数; C4 |3 M# c/ c' N  W! }
                      <property>; U& N, O: _" x, {+ ]! {7 ^# |0 y
                             <name>dfs.replication</name>- |4 X9 @" r$ g. {2 M- {8 P# y6 I3 v3 j
                             <value>1</value>
$ G6 o6 _6 R4 l# @. I! ?                      </property>: N% ^' Z& Q5 z! Q+ b
( F! i" ]/ [' B# m; u1 J" @
              <4>core-site.xml,更改Hadoop默认的临时目录位置,用于存放块文件和元数据文件
+ G/ b% M% k- L1 F! B                      <property>' A5 Z$ P! z1 \$ A! v
                            <name>hadoop.tmp.dir</name>2 s; Q1 j: p+ m! E% p2 [
                            <value>/opt/modules/hadoop-2.5.0/data/tmp</value>* ^* {9 X) n* {3 q9 O# v
                      </property>6 P! |/ {, U9 p( w- j
$ K0 V8 C/ w8 F1 `# B
              <5>slaves,指定从节点位置(主机名),包括datanode和nodemanager
; r. |! K7 R" U# \4 _" _; G% F' l( c* o4 G  L: q0 z4 n
              <6>格式化namenode,对于元数据进行初始化,否则无法读取元数据
: T0 \* |, q7 }4 u: k2 I6 [/ x& d, q% Q0 ?) Z1 `( g
                     bin/hdfs namenode -format0 s2 S2 T7 _8 u7 r! U0 K
0 T5 W2 q. W" `( S4 V: ]
             <7>更改mapred-site.xml文件名称,指定MR运行在yarn上7 j" {4 k) G* {# {$ w' U; O$ u
                     <property>
" G4 d5 g! d* J- A) ^                             <name>mapreduce.framework.name</name>% {# n7 }% I7 q, {5 p, x, y0 j
                             <value>yarn</value>  x* [) l' d& D
                     </property>( H0 J6 v4 S, _

. c7 ^9 F* b' X2 B* I' N            <8>yarn-site.xml: G- T2 S/ _* V8 ^3 Y
                     <property>8 {/ h+ I7 p- m0 A5 O/ H7 G6 v
                          <name>yarn.nodemanager.aux-services</name>/ d3 U0 d' W) L9 c  t" R3 X  ^
                          <value>mapreduce_shuffle</value>. S! A8 T: o) O+ k
                     </property>
) d6 D% _/ h/ M) B                     <property>; X, w- r- ?/ R1 b$ {3 e1 }7 p
                          <name>yarn.resourcemanager.hostname</name>! T4 F& O' W6 k# H* n1 B  o. H7 j
                          <value>hadoop-senior.ibeifeng.com</value>0 }9 D* A- Z7 r) r' h" U3 \
                     </property>
( J, J! U6 ^4 H, ?
* v0 l' `2 |8 r4 W/ F1 X0 r( |, p: o            <9>yarn外部管理界面端口号:8088( k1 {& {( k: s- G

/ q) j8 J& e: B  r: G. Z5 i                  HDFS外部管理界面端口号:50070
- [; o. M; a. Q$ U) y
( ^8 p, v" G- Q6 ]1 J2 q                  secondarynamenode外部管理界面端口号:50090
: \5 f& a# ]: X# {6 A% S9 s5 ~- h6 u! R: q# v1 N* [2 J
7、组件启动; o2 G) r( j/ {! n+ N

% ]+ u) {- V, A$ X( o- W      启动namenode:! @; f+ e+ ^3 N+ O) M" r: d2 O

! }; w* |7 {8 B! B: J& P/ Q8 I      sbin/hadoop-daemon.sh start namenode
9 j8 D/ y8 p0 i* ~% M& L9 P8 R* U
3 o5 H4 j% o% n& {! |8 W) W$ k      启动datanode:5 c4 U" {: X0 Z
) K; J  v* l9 \* U' h
      sbin/hadoop-daemon.sh start datanode
( D, Z/ R7 |: V# i; Z: E  K$ v8 G# U% Q' k; U5 X
      启动resourcemanager:! L' u5 e+ ^- e5 O; P

1 o$ W: o5 \2 b      sbin/yarn-daemon.sh start resourcemanager
" l/ _, s$ E# n$ a0 l
5 p6 p/ i6 L. X! n# g1 p6 a      启动nodemanager:
- t5 O! O# M2 g4 d: |( J7 V. z' v2 Z2 E) K
      sbin/yarn-daemon.sh start nodemanager
$ S$ l+ s. ]0 \! m9 A+ ?
, E1 C% |; W4 d3 d8、日志, T3 j) |$ E3 ~
+ A8 u0 w) _3 ~8 k. E2 r2 \% ~
      日志文件:分析日志文件的格式.log和.out
9 l& F1 D2 u7 e) O
5 F0 H+ ?: [$ j0 v  X7 Q      .log:通过log4j记录的,记录大部分应用程序的日志信息: U! ?. c/ M6 `* u" Q# b

7 V9 r2 |/ A! j% J      .out:记录标准输出和标准错误日志,少量记录* U, ?% R$ j! U. a- b) W

' D2 d, U( ^% ]      日志文件的命名规则:【框架名称-用户名-进程名-主机名.日志格式后缀】
# R4 P. o- O; }. C0 D% Y- i
- P% Q- n+ \7 e1 e      出错一定要学会看日志,看错误信息,看.log的日志
7 m7 b6 o4 _3 h2 @
0 R, B9 I% N( w7 }# [5 ?9、Hadoop自带历史服务器
4 Z2 \$ I5 |8 R( R9 D# D" q+ b0 z) A; w2 ]: m
     配置:mapred-site.xml4 d- {; l- ?6 a3 s

9 L( k7 N  T5 ?" A+ o+ ~     <property>
  B% T+ e# C* l. h9 h( y                 <name>mapreduce.jobhistory.address</name>
9 x) ~, I) m  g, m; b                 <value>hadoop-senior.ibeifeng.com:10020</value>
1 q& i7 }5 \4 F$ Y$ _2 X/ `, d         </property>, V$ X% y9 W' q7 b/ U
         <property>
9 \. L1 p/ ]5 `# O# s) u1 A1 Z                 <name>mapreduce.jobhistory.webapp.address</name>. y: L3 x" W/ f  T* G+ v
                 <value>hadoop-senior.ibeifeng.com:19888</value>
; ?* l: S' y9 B" }* a3 q         </property>- O! v# U& j" T& [$ K) C; Q# t- [* u6 J
& H, {7 E1 r* S9 e- l$ O  @- t/ P
     启动历史服务器:sbin/mr-jobhistory-daemon.sh start historyserver$ N$ ~6 [/ j& n; Y) L4 p) i* O( L

$ q' ^9 I! a; O% g10、日志聚集
4 h# ^/ r+ i3 C9 H* n2 H. y6 V8 m8 U* n0 b9 U. a" v, V* P
      日志聚合是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚合功能需要额外的配置。
8 [$ K9 {- |* y7 V1 P# H- K( ?/ y1 D$ p
       yarn-site.xml
* U3 F# v  O0 `2 e, {0 x% m8 v' c. J' K/ z
        <property>
+ R4 Z6 B8 i% }  K; o                 <name>yarn.log-aggregation-enable</name>% R' b7 y5 j4 e# V) I$ B
                 <value>true</value>% U4 ^2 f2 I* {1 D$ n" S9 O* K
         </property>9 K  I3 K1 W" Z2 ?' N+ v9 x/ u8 l
         <property>7 K' c* \5 {9 t$ F7 C
                 <name>yarn.log-aggregation.retain-seconds</name>  w$ S" r+ J# t- I* z* s) p% M8 y+ t
                 <value>106800</value>
5 J+ M8 k5 w0 c2 @+ C6 ^         </property>) I" c  ~0 z  {: f/ f7 g3 ]: y8 v
  j  j7 S- X' z; c7 k, R5 ]6 a2 L2 }- N
        单位:秒
5 q/ x: a: H( \- |; @. F7 ~2 [+ b. o' j% t+ Q& X
      重启resourcemanager、nodemanager和historyserver:
$ |+ R) b3 ?8 c4 n
+ }6 u2 M8 _+ o      sbin/yarn-daemon.sh stop resourcemanager! R3 p' F0 M5 o  |+ k* m3 n

1 e. o0 Z: U+ i7 E      sbin/yarn-daemon.sh stop nodemanager1 ]- r; K5 z' F- g
/ ]) k8 F2 w# ^6 ^+ ^
      sbin/mr-jobhistory-daemon.sh stop historyserver
+ M% ~" g" Z# O( Y6 D4 ?6 ~4 h+ ~6 {; Y# _/ V. u( [
      sbin/yarn-daemon.sh start resourcemanager  f  O% I0 S% u! y" b& S/ r) L4 n
% N1 l# q7 V+ ?
      sbin/yarn-daemon.sh start nodemanager) @' H6 B- _! D: l6 H: k

5 ]% q6 U' H: x  _1 x      sbin/mr-jobhistory-daemon.sh start historyserver
4 H! W* B+ E+ L) C9 z% L% g; G) l* S
11、HDFS用户权限检查
( q' G) l! d' z; F$ T0 T8 X: R, U5 t; j5 p& C( D
      hdfs-site.xml
/ ]1 y, X2 ~" b8 J% g) n& I7 J& Y8 ~3 M- ^+ }4 O
      <property>  g# Q* B3 r- M, a) Y# Q
                 <name>dfs.permissions.enabled</name>' p* q/ J+ _) Y8 G7 W2 \" _
                 <value>false</name>
- k1 D7 |6 D1 a       </property>
6 W! ]  v+ ^" L) L
# a  Z* k. g" z! Y0 Z      core-site.xml
. ^  j( H* D6 V& {) U, Z0 Y" d3 b9 {& T/ Y
      <property>9 C; z. C' J: I1 K
                 <name>hadoop.http.staticuser.user</name>! h  C- p& S! i9 z/ b/ G+ @4 A7 I
                 <value>beifeng</value>
' Q0 ]5 h- i9 K9 J$ l. T. ^6 b  G       </property>
4 ?1 x# Y& J4 V5 s  @3 _6 u
  {' ~/ r( c0 s( {      重启namenode、datanode、resourcemanager、nodemanager和historyserver:
, w) l3 c' u5 M5 f7 w( o8 \" b' p6 D* b
      sbin/hadoop-daemon.sh stop namenode- M, ^  S5 d( c' @; p4 x

7 u# e- H/ k0 J; o+ a7 l9 a      sbin/hadoop-daemon.sh stop datanode
9 e/ [# ]# _; F  V
, l5 }5 r: B$ T/ X% L  B( S7 c5 n) A      sbin/yarn-daemon.sh stop resourcemanager
. K, E, C$ _5 w8 @1 N& p, H& O3 F( P# F( ~
      sbin/yarn-daemon.sh stop nodemanager4 e$ v* s% i) Y( C2 B3 g" H4 C5 Z
) s3 \' J" f: f1 B: D
      sbin/mr-jobhistory-daemon.sh stop historyserver
+ U" F8 z: a1 L) H% G( _5 a% T# _  A/ N  d$ d" V* ?& W, W$ b; O& C' g. M
      sbin/hadoop-daemon.sh start namenode
& ~5 o  ]/ I) a4 d- N
, D2 J1 U/ L) P) K      sbin/hadoop-daemon.sh start datanode
- ^; w5 y, ^+ @% C1 ^6 S  w( X' W, G  v5 ^  b4 _7 X4 s
      sbin/yarn-daemon.sh start resourcemanager/ D- U& j/ \" s+ x

$ ^2 q  P$ ?/ J5 ?      sbin/yarn-daemon.sh start nodemanager' }. X; N3 r& s* g% w2 F
5 Q" m8 m# d3 S, F5 z6 n
      sbin/mr-jobhistory-daemon.sh start historyserver! h, ?7 S2 _' Q
# W1 B3 X# C& l& g( ]6 d
12、SecondaryNameNode) E+ ~9 f7 E8 P- \( J5 ]! P
9 x1 g9 B6 D& B& ?( T
       NameNode启动后的元数据存放在内存中,启动前的元数据存放在本地文件系统文件中。
$ I, Z2 ^, {; T0 }( M
+ {  K, z  k2 t6 o0 I: i) ]: p       HDFS格式化后生成fsimage镜像文件,其中存放文件系统元数据,NameNode会读取此元数据,并存放在内存中。
1 t- T" K9 J5 e
) U( E4 g) ^1 ?! n2 S5 f0 c       edits文件,编辑日志文件,用于保存用户对于HDFS文件系统的每一步行为操作。
4 e8 Y/ S6 m$ [) q/ f$ H, B% `: v# p* ?1 x4 M
       NameNode启动后,先读取fsimage镜像文件,得到元数据,再读取edits日志文件,数据就不会丢失。0 c4 P) ]2 V. g0 E0 ?$ v  \

6 h& ^* M! ~  n( t+ E" e1 P0 m       SecondaryNameNode用于减少NameNode重启的时间、合并文件,SecondaryNameNode读取两类文件,加载到内存,写到一个新的fsimage镜像文件,然后再生成一个edits编辑日志文件,每隔一段时间将新生成的fsimage和新生成的edits合并成一个fsimage镜像文件,即每隔一段时间获取HDFS元数据的快照,这样NameNode重启只需要读取内存中的fsimage镜像文件即可,读取镜像文件比读取日志文件快很多。
' @( `0 a, h  ]# y$ ?6 r0 v+ i$ P+ @5 O4 g+ r/ @
       hdfs-site.xml( |4 ]3 {. Q5 T& ]3 k  S+ U( j

5 G, z/ o4 s4 c% x$ W$ }4 R0 F, L       <property>% t/ U/ z6 s8 c9 |+ h
                 <name>dfs.namenode.secondary.http-address</name>
! M: v/ U0 {, K# _6 ]                 <value>hadoop-senior.ibeifeng.com:50090</value>7 s; U) c1 e6 s" c& c& S* n
        </property>0 l0 \* H* x1 Z
2 F( N4 d: F" j
       启动命令:$ sbin/hadoop-daemon.sh start secondarynamenode
4 `/ O1 Y8 o7 W! K& B
' T/ S0 C8 @, S+ m1 K13、块文件存放地址; e6 G/ x4 n) i0 S

7 m; o% g/ v) T# i5 O" G! O$ ?      /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-2012260383-192.168.74.128-1516569449179/current/finalized3 D7 v. D5 ~4 ]* l2 C. r/ v5 e
% }1 l* M+ B6 l: @/ O* ^3 k
      镜像文件、日志文件存放地址/ A+ ]$ Q4 ~1 e; n& T$ B; q
& a  b- P) P2 f8 I
      /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current3 j3 C# x. p7 I. Z  z3 f. K
% \! v0 B" I- Y/ |# U
      dfs.blocksize自定义块大小属性(单位字节),在hdfs-site.xml中' S8 L6 m% W( W7 q5 t& [& Q. p4 z

! z3 @2 R1 d& y5 O1 U2 N" F14、SSH免密码登陆
7 ~9 g. t& L7 i+ o8 A- v- [( O( z' |( w, E' N
      使用sbin/start-dfs.sh脚本文件启动namenode、datanode和secondarynamenode时,需要输入用户密码,使用SSH免密码登陆的话,就给用户生成公钥和私钥,用户将自己的公钥储存在远程主机上,将公钥发到需要登陆的服务器,当需要登陆时,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回去,远程主机用事先存储的公钥进行解密,如果解密成功,就证明用户是可信的,直接允许登陆shell,不再要求密码。3 c+ B# c8 I, _9 @2 v9 }) l+ C

5 M/ U  c3 x. F9 h! U      配置SSH免密码登陆:! ~7 E. I! P3 ?

( [8 [4 e( Y/ d% P4 B4 }5 n/ K/ S      cd home/beifeng/.ssh. X) e9 O* ]" ]7 J
8 J8 h8 M/ w+ C# `/ O
      ssh-keygen -t rsa9 h8 r& X7 [9 l

# z2 }1 z' v6 S& X0 S. g$ ~      即生成id_rsa和id_rsa.pub文件,其中id_rsa是私钥,id_rsa.pub是公钥。# O3 \. S8 q0 k) D) i0 f! X

1 C. p! P9 ?2 Q$ z# g1 V* C' n% F: Z      ssh-copy-id hadoop-senior.ibeifeng.com
0 z+ @5 z  b3 w7 {1 m3 p6 y5 J/ u: S( s0 E
      即生成authorized_keys和known_hosts文件,其中authorized_keys是向远程主机发送的用户公钥,known_hosts是记录文件,有记录文件就不需要再输入密码了。( y5 s( y+ _2 H
( ~& N- V$ N8 U9 F! v5 M7 z
15、Hadoop配置常见错误9 a) Q0 G; U. b# J7 \) D

) G$ x% F: T- U2 |* C       <1>不要多次格式化namenode,如需再次格式化,需要先删除data/tmp/下的所有文件。/ e6 Q2 b+ x& z/ Z$ C! m
/ I# Q+ \, f$ j. k; @
       <2>集群ID不一致,即
6 L2 i8 ~# @9 O% `6 m/ ]" m8 M4 f
* R+ J+ F. O0 v             /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current/VERSION
6 p* r$ k/ z  I2 d4 e2 R# h3 Z
/ B. N4 U! e+ I1 a0 z4 J- {             /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/VERSION
. \( m  Q# u6 {: F4 |( @8 W$ X
- V  v  j) j% R/ |1 J             两文件中的clusterID不一致,这是由于多次格式化导致的,解决方法可以如<1>,也可以依据namenode中的clusterID来修改datanode中的clusterID。
" J/ @% S8 e9 B; ^
: F+ g6 `) v, R       <3>端口号被占用,使用netstat -tlun查看。! M: C+ p$ g3 g; w

/ x; Y# W: z2 e( ?8 Z       <4>多用户混用。即/tmp目录下有多个用户的pid,多个用户在各自的环境中启动了同一个进程,造成pid文件冲突。解决方法:将/tmp目录下的.pid文件全部删除,再用一个用户启动进程。
+ U7 I4 s7 m% K, t& \; u5 Y; u2 ?+ n1 {5 n- K9 c- I
16、Hadoop配置文件
) q* H0 E  j$ G$ F* k8 p
  v( m$ h. ~7 X- x. ~3 k      Hadoop配置文件分为默认的和自定义的,每个模块对应一个文件。
- I& y/ C/ W1 k' A
7 h- a1 f( c. F; @# B      系统启动会先加载默认配置文件。默认配置文件存放在jar包中,/opt/modules/hadoop-2.5.0/share/hadoop/common/hadoop-common-2.5.0.jar中存放有core-default.xml,/opt/modules/hadoop-2.5.0/share/hadoop/hdfs/hadoop-hdfs-2.5.0.jar中存放有hdfs-default.xml,/opt/modules/hadoop-2.5.0/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.5.0.jar中存放有mapred-default.xml,/opt/modules/hadoop-2.5.0/share/hadoop/yarn/hadoop-yarn-common-2.5.0.jar中存放有yarn-default.xml。1 h  |7 r7 F, C

  I8 g2 ?% r# c7 W: M. ^7 H       自定义配置文件优先级高于默认配置文件,如果自定义配置文件中有配置,会覆盖默认配置文件中的相应属性。
3 S; a: j  ^5 f3 X
! `5 F6 L# F0 k: T3 Y" u17、安装rz工具! H6 [( o! {# |, Z
  F, |+ I6 i& Q* ]5 }6 G5 k
       切换到root用户后,用yum安装lrzsz。rz工具用于将Windows中的文件上传到虚拟机中,如CentOS中,只能在远程工具中使用,不能在虚拟机中使用。
8 W+ k5 ]4 z% C4 o$ S
: m$ R$ Y# y0 k4 p8 B& ?- ^  U; f4 x      su
) d; h5 ^1 f: `& ~" [* f
0 l0 S" ?) R$ J' o4 |; k3 K      password:
+ V6 x" b( n2 K' d6 \' @8 z4 P9 b" `0 O8 ~8 C
      yum -y install lrzsz
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 03:00 , Processed in 0.018782 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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