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

分布式hadoop【CentOS7】

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-9-26 10:27:20 | 显示全部楼层 |阅读模式
一、安装jdk (各个节点均操作)
. |* f  Q* `. ^  N2 z1、环境准备
& J; I+ Q6 Q/ B7 k9 u: B, H! ]& C+ h. r

* K& w4 A, O  p$ w1 j- s0 n
" ~+ u; p9 t5 T) U, c: A1) master.wyl.world (Master Node)
& [% G1 j4 d; ]$ ^" ~$ E% G2) node01.wyl.world (Slave Node)
* m2 Z  V; y- d4 w3) node02.wyl.world (Slave Node) : B( ]1 M  W% S5 W
' C4 u* N  [# l- _9 d+ ]" U4 A
2、下载jdk包
8 v" X; c" u, F, e4 f6 U: U/ w
( a; A& _3 ]2 |5 n1 T# l& a. z( O; `7 V% E  O
9 P0 S$ y8 w* r1 \: p
[root@master ~]# curl -LO -H "Cookie: oraclelicense=accept-securebackup-cookie" \
+ C, [' O; s) g. g" N# x" J) Hhttp://download.oracle.com/otn-pub/java/jdk/8u71-b15/jdk-8u71-linux-x64.rpm
2 }$ T9 q0 s* ]% u2 h1 e( S1 h- }+ S) J: J' h: C& Q/ s+ `5 x
安装jdk: W! F/ O- F  T# O

5 ]6 `6 I  p" f: Q! j) W
' Y! u4 S5 C8 R2 I8 f; I) o" O; C4 H7 g: D
[root@master ~]# rpm -Uvh jdk-8u71-linux-x64.rpm ( `1 X9 l" b- c( j
Preparing...                ############################## [100%]+ |$ c* E2 |, [" \* c! N) A0 o; j
   1:jdk1.8.0_71            ############################## [100%]
& F1 ]4 p/ u8 a9 y- G3 F; w/ D: A# \' iUnpacking JAR files...0 ]2 c% w9 g- _! J6 _5 U2 l. ?
        rt.jar...
+ ^5 x( @. R/ p8 A; S7 x        jsse.jar...# t! P3 i6 X  s* m( i( l
        charsets.jar.../ j" Y- E" V) \
        tools.jar...
* P6 D* L" ], {3 c1 E! ]  e1 V+ U0 m        localedata.jar...# r+ _, W7 g. V: s2 \
        jfxrt.jar...( L9 a/ Z% q# {
5 V  @0 s. C& ?- r9 S6 p
3、更改环境变量3 d  \2 j% b% k$ V7 Q- L
% }# K- I' V# ~5 F6 d; n

; t, ~1 u+ B, o; C7 s
5 U% S% u5 e: ^* [# b* r7 `1 U[root@master ~]# vi /etc/profile
& d9 K$ T, }! V7 [# 加在末尾: R& l2 C5 b) e& r0 m* d- h
export JAVA_HOME=/usr/java/default0 b% H# f+ ?0 f- b6 `- }
export PATH=$PATH:$JAVA_HOME/bin, O4 u* s; B8 @' o# n
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
( E# n  F" ^) Y$ {3 x' _8 y5 n: e( V' [: Z0 U
4、应用环境变量
% E: G  Z" e0 b/ `" v( x) R  E5 X/ Y4 k# v* w6 m, Y

( Q* S8 }  U3 Q: J$ K/ f1 _+ {' Q+ w* U8 `
[root@master ~]# source /etc/profile1
9 l. \' z* L+ f. i) W* S# z( R1 I) ^# w; e
5、如果系统之前安装过其他版本的jdk,需要更改默认配置
( H/ c" D: [: y/ \; w3 R7 U3 g3 I9 q
7 e' A1 k5 f5 X* O# J) Y

. x  G: l" p& @7 Q[root@master ~]# alternatives --config java 2 P/ d7 q" [  T0 d/ S0 m
( R3 q! U& I3 q4 L' m$ M# D% C
There are 2 programs which provide 'java'.
# `0 x4 F3 D. |8 u8 d  O2 b+ c/ M/ Y4 a2 B2 c5 d
  Selection    Command
) C, b9 k% v# c5 V3 s-----------------------------------------------
3 G# S: A' S9 r- ]; o, r% i6 l*+ 1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java
! o& e5 [# }% y& ?. X& ]   2           /usr/java/jdk1.8.0_71/jre/bin/java# d. i2 X$ b) S5 l

9 m1 r% ~' ~# V- Z& `选择最新的7 m$ c$ r9 u. @; {6 z, q& U
Enter to keep the current selection[+], or type selection number: 2
  X; N# f' T5 V. K3 @0 b, ^1 h
8 e# Z9 N7 Y3 B' j4 w6、写入一个测试程序
, V5 d3 P/ ?& A1 a3 G  w8 F6 q  e- s$ e# g
% d+ g. V% H0 F- U

0 v5 }% ?- B  Z6 P[root@master ~]# vi day.java
% Q! G4 e2 Y- a! s import java.util.Calendar;
6 Z0 k' M+ D3 X' p# W3 z0 n) C3 ^0 w0 ], ^) B: X' ]
class day {! o& v5 u& F' Y/ b. r# T/ X9 a
    public static void main(String[] args) {
' d7 Q7 {5 j% D( l        Calendar cal = Calendar.getInstance();
0 e" ^  @4 J* q4 Y" }) \  }6 j' h% l) O        int year = cal.get(Calendar.YEAR);
2 {" K7 |0 ~8 O4 ]) D) l' [        int month = cal.get(Calendar.MONTH) + 1;
" u9 D8 N  I5 I9 P9 q4 c* s        int day = cal.get(Calendar.DATE);
/ h5 k9 V# q% z& B5 U2 l( J6 K        int hour = cal.get(Calendar.HOUR_OF_DAY);. y. e' M+ f) ]3 G$ _5 t8 L
        int minute = cal.get(Calendar.MINUTE);
* L0 b$ G* S3 G" y4 B- p: z; j9 b        System.out.println(year + "/" + month + "/" + day + " " + hour + ":" + minute);
. s- V( b9 g4 A5 C- ^    }# N& l( k3 }& k' `6 G2 C
}2 V1 s5 a& q" S) S6 C, B& Z
8 M" L* z$ D5 F! _" p
7、编译
. ?! _% |9 {3 r4 K) }
$ Q$ a9 O' F) K+ M
$ G- D" U3 _4 {* \8 C0 G& I( c1 L1 R& N4 J0 v* a5 M
[root@master ~]# javac day.java  }/ E4 D" k3 E+ d
  Z$ A9 n0 }. E# O' V4 j3 C
8、执行
1 c, l* i5 g% F1 o: S3 C' T2 V, R
5 x' a& D# ]. v8 D  J3 b! d  e$ k1 r% q# A4 c, ~
+ K3 Z7 ^) g2 e. k5 M" {" A
[root@master ~]# java day
7 ~" x/ ^& C1 e2 Q2015/3/16 20:30
* i) ]8 t( D( y# A0 P% O; y- J$ t4 ?
二、安装hadoop
  ~: j) C: I! y# L% \+ w6 y1、在各个节点上创建用户,并设置密码7 v% C6 k- {9 f4 Y$ Z

( ~( u) E- W. t9 O& O  L
4 D, p- x4 I, e
* I6 p! `1 i! c[root@master ~]# useradd -d /usr/hadoop hadoop 3 k7 N. o1 k/ p
[root@master ~]# chmod 755 /usr/hadoop
0 F& ~% D3 f8 \* ]: a[root@master ~]# passwd hadoop ) {$ v* x) P/ D( `# ]1 i3 Q
Changing password for user hadoop.- D- O" B8 Z7 Y% Q- R& F
New password:
, {/ X/ W8 V6 kRetype new password:1 {- k" P* @( t  _
passwd: all authentication tokens updated successfully.2 @% [1 O" W9 S5 ?; m2 n
/ \! M; w2 K- c$ b# r% H
2、通过hadoop用户登录到master节点上,生成秘钥,并拷贝到其他节点上
7 ~/ O- f1 j6 @/ B4 a生成秘钥
+ u9 A. ]. R7 c4 S
- e# W' z) C7 O% M1 g" ]7 P7 V- [9 M

* [8 S2 e1 b- x" |& o2 W[hadoop@master ~]$ ssh-keygen : {9 X5 Z# u$ w! D" E1 }$ [
Generating public/private rsa key pair.
/ U" J1 }! x1 B$ c* L  }$ XEnter file in which to save the key (/usr/hadoop/.ssh/id_rsa):
. v% O' h% |# J* Y- ?2 rCreated directory '/usr/hadoop/.ssh'.0 r- {4 ^2 |" K
Enter passphrase (empty for no passphrase):( b" G* z3 O  }9 [2 ^) i
Enter same passphrase again:/ ~/ O1 P6 O+ ]
Your identification has been saved in /usr/hadoop/.ssh/id_rsa.& E; {5 q) O  ~) _- A7 O" |$ t& F
Your public key has been saved in /usr/hadoop/.ssh/id_rsa.pub.
6 J; \5 R) e8 a0 d. C2 n+ F- vThe key fingerprint is:
) s8 @7 N, s* l" L( H& fxx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hadoop@master.wyl.world% p; q) L; g! q) x, V
The key's randomart image is:
" B! b) E- v( I5 }  R7 P: v- W0 J3 B( ]6 S  ?% ]* b3 F. f; {
3、发送到本机
1 e3 u+ y% x- d- u' K9 R/ g  [$ ~+ O# O9 J2 i6 }
+ o1 p) E8 T8 I" A
( k9 E/ j3 [3 w6 N
[hadoop@master ~]$ ssh-copy-id localhost
, `) s2 W' y( H' k( {2 Q* n% }- \$ {
4、分别拷贝到node节点
- ^8 }5 P- e2 I' W0 l- {/ d% ^* a
- |6 d1 ^) j" B. i* d5 l$ }+ t, r9 k2 Y# ^6 a7 x* W

3 _7 C& {  ?- W& Y[hadoop@master ~]$ ssh-copy-id node01.wyl.world
! J; ]  {- m$ \# X- U5 I[hadoop@master ~]$ ssh-copy-id node02.wyl.world
* f- }7 b, W: h0 D0 j/ K2 f
* G" X+ r+ ]# i6 O1 x6 Q! c7 Q5、通过hadoop用户在各个节点上安装hadoop 6 R4 D5 M& b  |( s3 s6 n6 S! x
可以通过下面路径下载最新的安装代码2 a9 }7 ~" u6 @/ m5 I
  v3 i1 I( w) t1 P9 i$ i

! f% O# j# M% Y4 T5 ^& c1 J& H3 B0 {9 O. Y% ^4 I/ j7 I
https://hadoop.apache.org/releases.html
4 K8 ?, s" @. G5 {' d( H% O( r' Z" ]0 i+ Q, J- E! U
下载安装包
' v$ o* x/ `2 U$ Z; ^0 g1 `, o( _' a# }# b) O# c+ x

0 E) }- S1 K* T) f9 J3 S& t; ?! h$ H+ I9 W9 f
[hadoop@master ~]$ curl -O http://ftp.jaist.ac.jp/pub/apach ... hadoop-2.7.3.tar.gz
3 j& M- g4 t% S7 z" u
9 A& n+ c4 n4 X( R  M2 V" J9 s解压安装包
$ Y" F$ q4 s: p! s$ @
1 F6 L; l( B- ^9 U( q" o8 ^9 @: l6 E* J" u* F6 E) ?* }5 S
- t, j7 R$ Z& N: R( Z5 z
[hadoop@master ~]$ tar zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop --strip-components 1
& K, V! ~7 n. D! \. K. h) i
: ~& a+ I) P2 j: M: \写入系统变量# H& V) @5 C# c
/ v& F9 U' K+ A+ a; B; B* E3 s* ]
! W) k+ v- W) t8 P; X; p

. o4 ?8 [9 I- c) K8 w: Z[hadoop@master ~]$ vi ~/.bash_profile1 w$ v7 e2 y$ \2 I- O6 n7 b& a
# 加在末尾
, i" F+ K; H0 i0 D5 Iexport HADOOP_HOME=/usr/hadoop# C( R: t# [" K& M) }* W
export HADOOP_COMMON_HOME=$HADOOP_HOME( p8 i7 u& L$ J- m* D; z# `
export HADOOP_HDFS_HOME=$HADOOP_HOME3 _: |' R% O- W3 e. n
export HADOOP_MAPRED_HOME=$HADOOP_HOME
3 O. A, G0 {# j( z$ `$ A. H5 Wexport HADOOP_YARN_HOME=$HADOOP_HOME
( ]! p( i8 k+ s( N4 U1 S, dexport HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"9 D- l. ^0 r* U) {( R, G
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
. k' O0 j7 ^: I" t" P$ i" c0 Q& Rexport PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin, d' w. a9 d" O) f9 {) O

, `* I  c' h+ w. N应用系统变量0 Y! l0 u3 B" D' ^% C

3 _+ A7 U" x! v+ h  G! }' I" K- x
$ o) i( G2 J2 B
- w; x: A0 z# {; m. E: {[hadoop@master ~]$ source ~/.bash_profile 8 {4 w; r, f- Y+ V; h- F! O

& K# ^3 t* n$ F4 |/ w6、通过hadoop用户在master节点上配置hadoop
1 W9 w9 c3 K0 h) \7 B& l创建目录$ ^9 T7 o5 p" H6 G$ ^

4 V! g) L- Q, b! T& u5 `/ K7 u* S( h7 g5 Z$ i

. |  t0 N5 O! F% p- v( w$ o[hadoop@master ~]$ mkdir ~/datanode
, R4 a% V9 S0 d' s' m+ i: z[hadoop@master ~]$ ssh node01.wyl.world "mkdir ~/datanode" # H, b: @! M/ Z) ]8 `1 o
[hadoop@master ~]$ ssh node02.wyl.world "mkdir ~/datanode"
  `7 x2 \6 b4 T( x) J; X3 ~8 }! Y5 n; x/ ?" U( f$ N& P
7、修改~/etc/hadoop/hdfs-site.xml
# k9 E  R) S% I, _2 b% k
+ @8 e( Y: {3 C; ?; u8 x' g+ N- z& I9 e6 w( M) S# I
' X9 F( F. ?/ A- D% d: Q! p
在 <configuration> - </configuration> 之间加入如下内容/ V. K% l% q+ E) y0 I# @4 ^! C
<configuration>
) O7 r% Q# X3 i- P  <property>5 [0 @6 z& h" X: k* r8 U, b
    <name>dfs.replication</name>8 n' d7 B- c( h
    <value>2</value>, [9 D& }; \% f8 {- \; u
  </property>
9 P/ a9 n5 @4 I$ n6 ]) [9 x  <property>" u4 h# @9 n! x/ y7 F
    <name>dfs.datanode.data.dir</name>
! F1 O# K5 e. U2 _0 W" d& t4 R    <value>file:///usr/hadoop/datanode</value>" f8 ^0 ^9 V; [+ F7 z
  </property># R% b  \, B6 h2 e5 _7 H9 w
</configuration>
  N8 b5 @. J+ C: J( ~
) `8 i7 H& _1 B! r  Q8、拷贝到其他节点上  r7 H; [3 s# v% w8 z

% ^- L6 X! H; H' L4 X  L" j) N3 Y% ?' \

8 ~# u. j7 _1 x, _2 s! i+ a[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node01.wyl.world:~/etc/hadoop/
' p- V6 D! K- b, C0 L  @[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node02.wyl.world:~/etc/hadoop/
/ Q0 `* I% [( P! q% }) o8 e' E- |' P+ L5 s
9、修改~/etc/hadoop/core-site.xml1 e2 u, e! m- i( B" |+ A, Y

7 L1 H) L: R* O9 |# F2 x3 e0 ?2 p4 r

5 l' x6 O; `; z% |在 <configuration> - </configuration> 之间加入如下内容
/ v7 s- b2 B( {<configuration>
2 G1 `4 o/ H$ u- w: A" A1 _6 T  <property>+ a! }2 D! P# I. E: H+ l
    <name>fs.defaultFS</name>
* M+ d' u( _- `( S. R% {+ G    <value>hdfs://master.wyl.world:9000/</value>- c# G1 h% h& H$ J5 W/ s
  </property>
5 ?3 O/ z* t5 h</configuration>
# Q. w% V( h- s7 V" F1 m) v; P0 J( x) x3 |
10、拷贝到其他节点上0 {, |0 R8 H- U  f4 _, V) M9 {8 d
: [; k9 B# f, |+ j' k2 z5 C

$ o5 \0 }$ a2 I* v6 d
0 n" e4 g0 i3 L0 F- [: `# }[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node01.wyl.world:~/etc/hadoop/ , Q7 _' [4 e- i, e: a7 X2 d
[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node02.wyl.world:~/etc/hadoop/
+ C4 d' r% D  D, `" r5 V[hadoop@master ~]$ sed -i -e 's/\${JAVA_HOME}/\/usr\/java\/default/' ~/etc/hadoop/hadoop-env.sh / q: `8 X  w* Q, A3 N
[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node01.wyl.world:~/etc/hadoop/ $ z6 j2 S/ ^1 r6 M- E- i/ F
[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node02.wyl.world:~/etc/hadoop/$ p- }3 O! w4 @
[hadoop@master ~]$ mkdir ~/namenode , V5 m! Z5 D* @9 d4 R

/ y! L0 R8 B( Y, T1 o& b11、修改~/etc/hadoop/hdfs-site.xml
: g# x% |3 m+ Q5 K
/ d: P4 D; L* ]4 |4 o5 K1 T. [  F" \
+ w0 }7 F3 g( T$ W3 V
. x# @9 Q! ^* c, _, _- Y在 <configuration> - </configuration> 之间加入如下内容
- b8 L+ Q" g6 C( ]$ \3 c) z<configuration>
3 K9 q: H& y9 z; P) f  <property>
# {5 O' m0 Z8 Y2 o- W    <name>dfs.namenode.name.dir</name>
- S5 \: \) N2 ?. Q' r    <value>file:///usr/hadoop/namenode</value>' |: b) W% @  N/ Z* g4 ?
  </property>
! }+ Q: a3 M: C</configuration>
! o8 E1 S# r! m  f: p9 H: X4 B8 l' d+ K  t  [
12、创建~/etc/hadoop/hdfs-site.xml并写入
6 o6 J" Y! ?' Y) V. |7 C+ B- {8 j: X$ _2 O
# create new
' v# @9 d5 V! X<configuration>! m1 x& H7 w$ l/ W/ v& [0 ?* B) G
  <property>  s5 E$ ^: C, C+ u3 V
    <name>mapreduce.framework.name</name>
0 a9 F6 f+ A) W- m    <value>yarn</value>% n4 z% `" m* {' e& o" z  ]  M( C0 ^2 F
  </property>
1 f' Y6 a* O( Z# ?$ |</configuration>' M1 K, h; Y% q

5 v0 a% ]5 J/ a/ J3 L2 R' k13、配置~/etc/hadoop/yarn-site.xml4 J; L* ]0 Q* g: s+ C/ b

9 u# c1 N. ~1 v1 T1 z& w' v( d: k0 L3 w: \
$ C  z6 J1 C$ F4 N  y3 G& o' j! \1 v
在 <configuration> - </configuration> 之间新增如下内容7 b6 R, P" `2 c! d
<configuration>7 F2 H, b, l# Z2 v
  <property>% d* L( i( i4 |- p/ S- Y; |
    <name>yarn.resourcemanager.hostname</name>
7 V& n- C% i4 Z( ^2 j  K    <value>master.wyl.world</value>
% ^, ?. |  M; c5 h. ^  </property>- n, X- J9 F# A1 G* ~* u
  <property>$ _$ H) r" l3 T. O( \
    <name>yarn.nodemanager.hostname</name>
, K; D5 w" ]: E- A% W6 [    <value>master.wyl.world</value>; p+ p. q8 ^4 ?: l+ p, s( k
  </property>% Z7 n1 Y4 l/ G) i2 S# U
  <property># a% H$ J, Z* ]
    <name>yarn.nodemanager.aux-services</name>
* H3 s' G' g( q    <value>mapreduce_shuffle</value>
0 p0 n7 E6 g( V: k: v4 v  {' ]  </property>
) d3 |. m, W  t( k+ F4 ~$ \# O( M+ x/ H</configuration>
- n, \4 P& |6 a/ T: r( \3 ^  k7 K5 S: b" S
14、在~/etc/hadoop/slaves写入各个节点信息
( ]9 m- T. b* e- e) C8 K
7 y+ U4 u% J  P, N3 A3 v#添加所有节点信息,并删除localhost
2 }+ P' R1 c3 c+ `& C  A9 N- smaster.wyl.world
8 [5 E' ^5 N1 v% D1 @7 k* Snode01.wyl.world
4 M# V/ R3 g& K8 B( nnode02.wyl.world
* n( f/ m& k5 j/ I+ v6 Q6 `' ]5 ?+ W$ [! N( U" N) f; E! d
15、格式化namenode并启动hadoop服务 : g: Y  F7 R" _, c
格式化节点
* N' G$ m- H" q% J9 p$ D" ]9 m) t$ i! B+ @/ J4 e+ n

. b) G' p7 X7 _+ Y9 a$ s: E. D- s% \6 ?. f9 o8 i
[hadoop@master ~]$ hdfs namenode -format , _! Q% r4 E: u
15/07/28 19:58:14 INFO namenode.NameNode: STARTUP_MSG:
1 {+ H% b/ s$ ^- O0 Q5 I2 E; l/************************************************************
8 l6 o7 d# D$ \; \STARTUP_MSG: Starting NameNode
3 N4 \, S# M7 b# k) d  H0 h1 bSTARTUP_MSG:   host = master.wyl.world/10.0.0.307 |8 d5 L6 W. A( b6 T
STARTUP_MSG:   args = [-format]1 M% U- f4 r* N( [  h" i" z0 P. f  b$ @- L0 {
STARTUP_MSG:   version = 2.7.3
( D2 [# T9 y# p5 u4 l1 y  c.....
( q% y6 x% {- G. [. I4 S6 o.....
) L+ J$ y$ q; o6 m0 N) D# j15/07/28 19:58:17 INFO namenode.NameNode: SHUTDOWN_MSG:
. p1 C) m! X9 Y/************************************************************) B. S* f: o2 C; {& r) F7 n# v" }: O) p
SHUTDOWN_MSG: Shutting down NameNode at master.wyl.world/10.0.0.30
7 x( w2 a0 ?  n+ O8 F& q! v6 u! ?( W; |************************************************************/
1 m+ a& f5 q! m( }+ N7 L
# a* q6 j- m! m启动dfs7 `) s1 |1 w+ T. X3 Q5 {  a- S5 x
. a4 B: R3 E2 w' P
5 }& ~9 ~- \& y, T
+ ]: b$ \# q: U8 g7 h2 o: v, C6 S! z
[hadoop@master ~]$ start-dfs.sh 7 ]( }& d! `3 H% D
Starting namenodes on [master.wyl.world]
, g6 d( i  V  _! K( a" Umaster.wyl.world: starting namenode, logging to /usr/hadoop/logs/hadoop-hadoop-namenode-master.wyl.world.out  |0 s6 R9 k8 q- @$ D8 B6 j3 @. U' _
master.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-master.wyl.world.out0 W2 C* x" M6 I+ z2 p$ \: s
node02.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node02.wyl.world.out3 Z- g: ^  L4 {' C# I; R! j$ w
node01.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node01.wyl.world.out6 a& V( m7 ^, L" {
Starting secondary namenodes [0.0.0.0]9 L( A: D3 U1 _( v" H- ?
0.0.0.0: starting secondarynamenode, logging to /usr/hadoop/logs/hadoop-hadoop-secondarynamenode-master.wyl.world.out
3 @+ T& i/ T( Y
" E- c5 M9 z. _; Z启动yarn: e- s- Y( ^6 k+ u

$ i  _& I9 e; R0 P0 _+ k. L: [! D( a; Y( y* J0 g5 M9 i; g

3 f# \% L" g% a: S; n+ q9 v[hadoop@master ~]$ start-yarn.sh
8 d' e" V& V* M# g+ Rstarting yarn daemons
5 @4 ~3 p  Q. X0 X" Q! ustarting resourcemanager, logging to /usr/hadoop/logs/yarn-hadoop-resourcemanager-master.wyl.world.out5 E/ o7 `& {8 w1 i9 e, h2 I: x
master.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-master.wyl.world.out
  I# s& ]9 d2 G4 Anode02.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node02.wyl.world.out
& F! `+ B9 o2 V1 d* u9 c0 Tnode01.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node01.wyl.world.out6 r/ ]* ~7 T$ c1 s: q0 D
: y" y2 O2 l$ C* w
16、查看服务状态,正常如下,如异常,请返回检查配置
9 C: a1 e: U3 w+ f3 E6 _: u7 t- q' ~+ d! c0 h/ o* F' y5 Y9 a

9 t8 Z  ]+ N9 m9 y& z* R+ s# w+ l  w9 W' m* \& g' s  E
[hadoop@master ~]$ jps $ P0 J# B. y% j( L3 ]
2130 NameNode+ |* P1 h( n% d: z: d; X
2437 SecondaryNameNode& p- @( A8 t, t0 O" s7 W& f( [
2598 ResourceManager. M" m; k  d/ F/ T- X; n2 Z/ O& h
2710 NodeManager
) F' \) W6 t8 n8 w- m/ k6 S3001 Jps1 k, r" P" x. l+ ~; X' p
2267 DataNode  Q- R2 K- ^7 G0 M
: i) ], \/ F7 J. b( s  t
17、创建目录
3 w8 Q) P& i; k
/ s( g3 [+ O. p1 Q+ l. i
' t$ L3 q: o: b1 q; i
! b9 A' P/ R- R[hadoop@master ~]$ hdfs dfs -mkdir /test
) M+ ]8 T. C" [$ O9 u; @2 V$ o1 t, u' F7 k- A
18、拷贝一个文件到/test
" E+ Z6 ^: D4 f- t
  _4 V2 [: K. P. P! c# i3 w( c7 _0 @; J( m  f3 D  L

: W+ y$ y* t$ Q& R9 ^8 `0 K  M  x[hadoop@master ~]$ hdfs dfs -copyFromLocal ~/NOTICE.txt /test
, _+ V" v2 _* _4 x! L6 G& L' W- [% \( k* M" H6 J7 I
19、展示文件内容6 Y- J9 j1 z6 ~- ~

3 B6 {7 c8 \" d+ S/ J: t
) P' C) |' \0 _0 K. _( L/ e4 K+ Y/ s/ |1 n: ?' j2 Q, i8 z4 f5 _# r
[hadoop@master ~]$ hdfs dfs -cat /test/NOTICE.txt / W: W( g2 |" W8 D5 y: c* [
This product includes software developed by The Apache Software- X( [. C: i$ q; E1 c. C
Foundation (http://www.apache.org/).
( s. Y* V# c* Q/ S# U
. o$ @# p7 y4 m20、执行程序) o3 k! C8 U" }/ G

! p" y1 A$ R) P" {- d/ x
0 [; H8 @2 g* O+ C% d9 y: y4 |
5 v3 T  T! `- l2 }( i3 t% \[hadoop@master ~]$ hadoop jar ~/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/NOTICE.txt /output01
5 P4 Q' K9 l" Y: r15/07/28 19:28:47 INFO client.RMProxy: Connecting to ResourceManager at master.wyl.world/10.0.0.30:80327 I  O; }. |+ I" j  n# U
15/07/28 19:28:48 INFO input.FileInputFormat: Total input paths to process : 1. F% g" _4 z: ~7 o
15/07/28 19:28:48 INFO mapreduce.JobSubmitter: number of splits:1' O' r2 Q) ]& D* ?
.....* Q: V' |6 m$ a) q0 ~/ `% Z
.....
: n$ m1 \7 S' a, g. @9 A  d1 @% S. g3 f& g) \
21、查看结果. N) |3 S$ |% D9 X4 F& S

( q0 y+ f" u) E" H) ~* B, @3 G7 q! O$ a5 H4 H/ d% G
! y) {2 @4 [2 \  x: p; H) l
[hadoop@master ~]$ hdfs dfs -ls /output01
% }1 h, V2 J1 W0 n; O( N8 EFound 2 items, f- m9 X" v: _: R+ f2 H
-rw-r--r--   2 hadoop supergroup      0 2015-07-29 14:29 /output01/_SUCCESS
3 n, ^  _+ {! E5 F, [* m* T& I# f1 H-rw-r--r--   2 hadoop supergroup    123 2015-07-29 14:29 /output01/part-r-000007 z( d2 ]  P6 M; f' U

$ y, A5 ~4 f1 D$ k5 b+ ^1 g1 x22、显示文件结果
8 [* F( k# G  B- j# e5 m% H% ~3 H: n( F' b* T

. ~' O: d/ b3 ?; q; V. f3 Q; h: A  V4 u
[hadoop@master ~]$ hdfs dfs -cat /output01/part-r-00000
) b, H% p* c: a(http://www.apache.org/).       1
& a$ z& d' U+ ^6 A* ]Apache          1
3 v6 n, s+ R% Y0 x8 K2 x9 hFoundation      1
/ K- V4 I) I- tSoftware        1
) q+ h8 j; L6 ^The             1, j& l/ s- E5 ^* ~" k: X& G
This            1
2 v" i) Q, f) t+ kby              1% j# o9 h% L! D- U: m
developed       1
% T! G) r# Y) k$ }, P& y5 R7 uincludes        1
( J1 }  C% x4 e* a9 [1 w2 z$ zproduct         1, Z; q  s9 J  E1 C. r2 n: x9 @
software        1
6 Q% b. s$ C) K1 h$ m1 }1 ]: {( U  i5 l  `
查看集群概要
# k) v% P- i# k. M' fhttp://(server’s hostname or IP address):50070 ( @/ [$ _! q$ O7 ^5 C
  ( ?& }/ T; I& v  r2 |
集群详细信息
% p% b7 }: j0 b1 v6 D
  F2 [$ S: C- ]) @http://(server’s hostname or IP address):8088/ # Y9 o& D0 t* f# h5 D* t0 _1 _

, T, X0 U4 v' Z+ g' Y/ L" a8 l( F6 J# y  l7 _/ H' V$ Z) H2 Y

& u6 r  J' F* Z$ L

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:12:34 | 显示全部楼层
目的
本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。
$ G# x  u* l1 @, ^% @
先决条件
  • 确保在你集群中的每个节点上都安装了所有必需软件。
  • 获取Hadoop软件包。
    ! u- _+ H3 c5 d0 t; _. Q- ?: ?8 S* U

% ?) u. a3 p. q/ |安装
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode作为TaskTracker。这些机器是slaves
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。

* M* p. W# i; _$ t9 O配置
接下来的几节描述了如何配置Hadoop集群。
配置文件
对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
  • hadoop-default.xml - 只读的默认配置。
  • hadoop-site.xml - 集群特有的配置。
    - R, D" L  ^) T8 [( F
要了解更多关于这些配置文件如何影响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 :3 p. X) ~1 j! v3 `4 U
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"  a3 s$ U* g" Y' H: I8 I5 R( m
其它可定制的常用参数还包括:
  • HADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
  • HADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB" x0 R" I8 Q8 y- _, B" M9 c  i5 P  ~
配置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的子虚拟机
    3 S% x) z+ A) ?' {/ y# @" Y
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,系统将不再记录此日志。
用户可使用以下命令在指定路径下查看历史日志汇总
6 g) [3 t7 \6 I$ bin/hadoop job -history output-dir: _) o4 Y0 q2 ?4 }
这条命令会显示作业的细节信息,失败和终止的任务细节。- q  N; z" l  _
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
5 Y8 \. }7 j1 }/ I% Z7 G; F$ bin/hadoop job -history all output-dir
7 ^, F  Y# {* r( B
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。
+ |- b5 G% k2 X6 F$ h" W  T
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- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
. A) G+ M9 r  B* k& t) e6 ?
启动Hadoop
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
格式化一个新的分布式文件系统:
: Z7 L9 X4 h( t$ E$ bin/hadoop namenode -format
在分配的NameNode上,运行下面的命令启动HDFS:7 @' c' r/ R! L: p: s
$ bin/start-dfs.sh
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
在分配的JobTracker上,运行下面的命令启动Map/Reduce:& r. r$ v0 z3 c, z' K1 G  M
$ bin/start-mapred.sh
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
3 F0 P/ B- V. L" k" S( V. S
停止Hadoop
在分配的NameNode上,执行下面的命令停止HDFS:4 U; v+ `) ]9 r
$ bin/stop-dfs.sh
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
在分配的JobTracker上,运行下面的命令停止Map/Reduce:
: s( Y; ~$ }2 O% ]' f8 O$ j$ bin/stop-mapred.sh( G* d2 d1 j' [& G. ?- k# Q
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。
# J7 E- z2 L, R" g2 q3 R  [: i6 E% f) D

$ C9 r2 W* n6 G, s  {2 g) O+ y2 }/ N

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:12:46 | 显示全部楼层
目的
+ j3 y2 c. C6 d; {  h. E本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
. ]1 R  o  M. E& P# f* L; I( k: a. ~5 v1 S/ Q0 k4 K! D  A
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。
/ U3 c$ x# Z4 t1 o  U/ J, K
; Z6 E' A& J' Q0 y8 f9 Z* u; B先决条件5 A( ~5 E3 ]- }" S
确保在你集群中的每个节点上都安装了所有必需软件。
( F/ P% F/ ~. U8 K获取Hadoop软件包。% R; Q5 _" O$ R. R$ ?- q3 F% Q  p, F
安装
4 G' Q* j4 {+ Z9 S' P安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
' z* {" V' P0 Z! {3 h6 A# r; W( Z7 Z5 {% x& m7 v$ o
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。8 |2 |( s7 [% e; [% @+ I' C  Q
; Q8 O' y* P5 o6 h) ?6 q/ g- j
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。7 u, ~9 M6 g* |8 {" ~/ v

5 @8 ?7 b" ?: v# G配置
* p- G: j& D4 ?& l( I接下来的几节描述了如何配置Hadoop集群。
1 _6 @+ v$ H2 a6 Q2 |; [) ~& B, j. q, ]) ^. P: W* p4 M6 ]) m
配置文件
1 }/ V& e# o" \6 s# }对Hadoop的配置通过conf/目录下的两个重要配置文件完成:* n1 o* j. B" {! n5 s

2 L' A' @& [9 K, ]7 B) xhadoop-default.xml - 只读的默认配置。
1 F# r. v, C; F3 h+ j, f0 Ohadoop-site.xml - 集群特有的配置。1 k; b1 D9 p. u- R" u! V6 t
要了解更多关于这些配置文件如何影响Hadoop框架的细节,请看这里。
: P* y% X4 N9 p4 E# h) b; u9 _; j# E7 K2 l2 O) N% X
此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。3 Y; a( ^) w5 v/ M8 D

7 o5 _# O, R9 F" Y" u集群配置. T3 x0 O; J+ ^# }
要配置Hadoop集群,你需要设置Hadoop守护进程的运行环境和Hadoop守护进程的运行参数。* z0 e4 R; F. D& F  ^  M
4 [+ E6 j3 O% j) w
Hadoop守护进程指NameNode/DataNode 和JobTracker/TaskTracker。5 ^0 f3 q) z" L. q0 D
5 M$ N- M( {0 H3 X0 u
配置Hadoop守护进程的运行环境
( R, p' g: ~9 o* j; h管理员可在conf/hadoop-env.sh脚本内对Hadoop守护进程的运行环境做特别指定。
( h3 a; P( E) a0 H+ u. i) P& X0 f0 l  L
至少,你得设定JAVA_HOME使之在每一远端节点上都被正确设置。2 Q* B3 S) ~: j7 S
0 \$ ~$ ]4 a& ^* J# \. q; }
管理员可以通过配置选项HADOOP_*_OPTS来分别配置各个守护进程。 下表是可以配置的选项。
/ q; Z1 p; ^8 U2 }
5 S6 D6 v/ U! ?+ e/ k! O守护进程        配置选项8 Q, o( r7 C5 b6 C9 T
NameNode        HADOOP_NAMENODE_OPTS; G1 Y6 ?- }3 }1 X$ @
DataNode        HADOOP_DATANODE_OPTS
9 P; ^/ q% P0 k) _& O8 OSecondaryNamenode        HADOOP_SECONDARYNAMENODE_OPTS
, ?- N0 h; F4 @: h3 |( T7 {JobTracker        HADOOP_JOBTRACKER_OPTS/ U- {0 s7 H4 M( R% J
TaskTracker        HADOOP_TASKTRACKER_OPTS
; o5 X9 L8 K, \+ Y5 l5 q例如,配置Namenode时,为了使其能够并行回收垃圾(parallelGC), 要把下面的代码加入到hadoop-env.sh :$ g. x, I4 D2 q( p: u: f8 V& ~
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"  O; p& D7 K7 z4 k- E
其它可定制的常用参数还包括:
2 l* L. f* Q3 L0 i. w3 q' N/ M8 Z# Q2 T8 q
HADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
/ j! f) d+ N+ _; d" @( m3 gHADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB。8 B- M8 h" F& q) n* B
配置Hadoop守护进程的运行参数
7 G! k; M6 m* S: C2 X  w+ d/ L这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。0 O2 k8 I" @9 c( E, a6 v; ~
% S. n2 G; [! A- z5 U
参数        取值        备注! Z4 d! J( l- T6 ]0 U
fs.default.name        NameNode的URI。        hdfs://主机名/
- [0 l0 G! m8 z- R$ {' d9 A7 r. x1 Qmapred.job.tracker        JobTracker的主机(或者IP)和端口。        主机:端口。
( J9 X) I$ W, B! Cdfs.name.dir        NameNode持久存储名字空间及事务日志的本地文件系统路径。        当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
& b/ j" I6 X* K1 r3 i' Gdfs.data.dir        DataNode存放块数据的本地文件系统路径,逗号分割的列表。        当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。$ @. N! B. }' ]2 _/ E
mapred.system.dir        Map/Reduce框架存储系统文件的HDFS路径。比如/hadoop/mapred/system/。        这个路径是默认文件系统(HDFS)下的路径, 须从服务器和客户端上均可访问。8 R. X  \% b- _  x( k6 [
mapred.local.dir        本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。        多路径有助于利用磁盘i/o。
6 P- \( I% l$ D6 Q+ a; k4 K% p0 ^mapred.tasktracker.{map|reduce}.tasks.maximum        某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。        默认为2(2个map和2个reduce),可依据硬件情况更改。
' c1 Y* T+ y2 g" U9 cdfs.hosts/dfs.hosts.exclude        许可/拒绝DataNode列表。        如有必要,用这个文件控制许可的datanode列表。2 _# U% l3 u! N9 [
mapred.hosts/mapred.hosts.exclude        许可/拒绝TaskTracker列表。        如有必要,用这个文件控制许可的TaskTracker列表。1 t* C) m0 j1 {; g5 }# t+ d( }1 c+ E
通常,上述参数被标记为 final 以确保它们不被用户应用更改。, J% S& d' F# g# p$ [9 g. S
* B0 s6 F  s- j2 ]/ J8 U; t
现实世界的集群配置' B4 a2 Y& M8 t$ g+ D
这节罗列在大规模集群上运行sort基准测试(benchmark)时使用到的一些非缺省配置。  r0 j. ]% h' _

9 X* \. {. Z, c" z1 t运行sort900的一些非缺省配置值,sort900即在900个节点的集群上对9TB的数据进行排序:2 w% x6 t/ m; ?; \3 P
9 A8 m1 T' J& a; M! L1 |
参数        取值        备注2 N! B; z$ |* r. R
dfs.block.size        134217728        针对大文件系统,HDFS的块大小取128MB。- C, I" P3 W* [/ {+ J& n
dfs.namenode.handler.count        40        启动更多的NameNode服务线程去处理来自大量DataNode的RPC请求。9 I$ F( H0 N/ t5 i( G8 c' p5 K, W/ K
mapred.reduce.parallel.copies        20        reduce启动更多的并行拷贝器以获取大量map的输出。
, C0 M$ S6 X3 L' T/ Xmapred.child.java.opts        -Xmx512M        为map/reduce子虚拟机使用更大的堆。8 I' t6 \  p% h; c- U# ~
fs.inmemory.size.mb        200        为reduce阶段合并map输出所需的内存文件系统分配更多的内存。5 l$ ]* J4 P9 Q; D5 o' [1 C' X
io.sort.factor        100        文件排序时更多的流将同时被归并。
  A9 ?3 X+ i' E# u5 P/ _io.sort.mb        200        提高排序时的内存上限。
6 N2 z- X- K- r4 c1 i5 w1 `io.file.buffer.size        131072        SequenceFile中用到的读/写缓存大小。
, H  |: P* A( h: d# b% S2 T运行sort1400和sort2000时需要更新的配置,即在1400个节点上对14TB的数据进行排序和在2000个节点上对20TB的数据进行排序:
' X; A1 Z4 R5 b: q! F) Q: W
( |+ K8 L5 A$ V$ e/ u: e参数        取值        备注
- R( `) l! Z! G% L& o6 Bmapred.job.tracker.handler.count        60        启用更多的JobTracker服务线程去处理来自大量TaskTracker的RPC请求。& M8 s5 T% p/ z1 B
mapred.reduce.parallel.copies        50       
8 G% M0 p! W* q7 A% Q/ Qtasktracker.http.threads        50        为TaskTracker的Http服务启用更多的工作线程。reduce通过Http服务获取map的中间输出。  e0 _3 r6 C! w7 n0 n
mapred.child.java.opts        -Xmx1024M        使用更大的堆用于maps/reduces的子虚拟机, j/ }$ v; p' E$ I8 @
Slaves
* x& ^5 Q5 V* z通常,你选择集群中的一台机器作为NameNode,另外一台不同的机器作为JobTracker。余下的机器即作为DataNode又作为TaskTracker,这些被称之为slaves。+ E: _& w1 l7 Q* D, M0 O( Y

; I* A9 q- S+ e* q在conf/slaves文件中列出所有slave的主机名或者IP地址,一行一个。7 S6 U( A7 Z$ ]9 s; }' n
3 K" f* M7 \; n
日志
0 ^9 q( n/ B1 H2 H) \+ o+ N8 l. [Hadoop使用Apache log4j来记录日志,它由Apache Commons Logging框架来实现。编辑conf/log4j.properties文件可以改变Hadoop守护进程的日志配置(日志格式等)。: n  h5 X# _4 }6 t% {+ t: A

- L4 z: V! u2 H2 J0 V5 f, V历史日志
: u7 l8 t; }8 X0 W. F! ~% f& }作业的历史文件集中存放在hadoop.job.history.location,这个也可以是在分布式文件系统下的路径,其默认值为${HADOOP_LOG_DIR}/history。jobtracker的web UI上有历史日志的web UI链接。
: ~. W0 {. m1 M/ F% r7 _6 a; z" A6 Z. C+ V- G' M
历史文件在用户指定的目录hadoop.job.history.user.location也会记录一份,这个配置的缺省值为作业的输出目录。这些文件被存放在指定路径下的“_logs/history/”目录中。因此,默认情况下日志文件会在“mapred.output.dir/_logs/history/”下。如果将hadoop.job.history.user.location指定为值none,系统将不再记录此日志。' y+ y. |- K: F
' [, c9 b2 b5 p3 d
用户可使用以下命令在指定路径下查看历史日志汇总' Z% X+ r: T- L1 |& e, S( s/ O
$ bin/hadoop job -history output-dir7 k5 H: T" F6 g1 D5 x
这条命令会显示作业的细节信息,失败和终止的任务细节。* Q' Q1 K8 p! y# x: J. ?+ @
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看( `% F  v: S( I
$ bin/hadoop job -history all output-dir
5 J) [1 e6 O5 ], p1 N一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。
& A6 L' F( D+ e: ^8 T% g( m- V& D: w4 q, O) m
Hadoop的机架感知
: L) ?+ l1 R, x' H8 F: Y! n) aHDFS和Map/Reduce的组件是能够感知机架的。
. o3 i  |5 @+ Y. S
2 H+ U. o7 s( i3 T4 p# J2 DNameNode和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- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
) A) A) n0 M/ ]- v4 j& r1 u2 {1 A) F8 H' h, z
启动Hadoop
' ]* n& h, H  q4 F启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。* g( P$ c/ Z+ B$ P

( X2 _/ I, V: D, Y& a5 ]9 H格式化一个新的分布式文件系统:/ S* S+ h  v% d+ [) }
$ bin/hadoop namenode -format
$ l( \& l; U2 W! ]; E$ G7 d- ~
1 ]2 l" q9 s' ^- W- H0 r8 p在分配的NameNode上,运行下面的命令启动HDFS:) q% ^! O$ c6 l  E9 @
$ bin/start-dfs.sh
3 g* H9 G' q" O' b* n; g) L1 {: Y( E  X& n3 x9 w
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
5 B5 E. Q  s+ J$ Q  c
: F/ B( S. C9 Z* X. _: E/ P在分配的JobTracker上,运行下面的命令启动Map/Reduce:( [1 m9 V' s: G7 T6 h
$ bin/start-mapred.sh
" e/ r! x* u+ K+ v; m- t0 f* J& L1 N2 _. Z: V* A
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
9 `, Z$ e1 U3 d4 I( u' d) C& u6 ?+ w9 p
停止Hadoop
: Q0 n& {8 }/ _8 `. e3 K在分配的NameNode上,执行下面的命令停止HDFS:- z( ~+ o: m) ]$ v
$ bin/stop-dfs.sh
* s0 k5 D1 ?: K3 k1 S) v' Y) ^4 Y( R7 Y2 U- Z" z( l+ I
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
  j8 ^% `: d0 m) ^
8 g9 B& o% O0 U) X8 h  Y" B在分配的JobTracker上,运行下面的命令停止Map/Reduce:4 ^( c6 [. g9 @" c' n
$ bin/stop-mapred.sh0 B0 N# R+ Y2 n. _( F' c: B' P
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。9 R; x& L/ X' Y+ A4 T! g2 g

/ u& }3 }4 b8 G0 \. j, K

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:13:57 | 显示全部楼层
Hadoop伪分布式环境搭建
+ z& _* t3 _, V1 i5 ~' J4 @3 W9 _4 w9 n9 n2 K, p, z3 ^
      (1)三种模式
; m- M, {- [( |4 @, k7 `$ M3 u7 }' i5 S  B% V
              Local (Standalone) Mode  本地模式:不使用HDFS文件系统,使用本地文件系统,程序员调试用;
- [$ X. c6 P4 J2 x
% L! q* |0 A9 D- Q( N              Pseudo-Distributed Mode  伪分布式模式:单节点,一台机器,使用HDFS文件系统,程序员调试用;
5 d# m- h( g7 J# f/ D* B( W1 {# ]9 P4 `) x( E
              Fully-Distributed Mode  完全分布式模式:真实生产环境用,集群。& ~+ p% G  _+ n- z3 r/ w0 |

2 Z; W5 f" B; Z; o( d) l3 t, E      (2)解压JDK# d2 |" p; E! E

, O; W) r" d5 s5 _8 o              $ tar  -zxf  jdk-7u67-linux-x64.tar.gz  -C  /opt/modules/" J# g9 p# d# O4 ^( Y5 }) q
" x8 X7 H: A; `& H5 C' a. z
              配置环境变量
: o# v/ v# z3 p! ?# S5 C; p: u' z4 a5 g: j
              #JAVA_HOME
* J5 }2 e$ C* V  k, h4 ^+ \% M               export JAVA_HOME=/opt/modules/jdk1.7.0_67
* Z7 l* o; F8 x) V+ W1 u/ ?               export PATH=$PATH:$JAVA_HOME/bin& k4 u9 p9 `8 I$ k
  R& k: ?: o" H  [0 o% X. Z, ]) s
      (3)解压Hadoop1 h0 _: h4 j5 q# R% V
5 B$ O' `  T2 j$ K; |' i4 K$ \  E) e
              $ tar -zxf hadoop-2.5.0.tar.gz -C /opt/modules/
8 c, l# h, b; K, l: a# D6 N% U. f% I& E6 N8 P
      (4)建议:删除rm -rf /opt/modules/hadoop-2.5.0/share/doc/,里面是英文文档,没有作用3 A* ^' Z" I0 }

1 F) `# U; C2 c8 @+ D  X      (5)配置过程
" B9 c5 _( r! g3 C% J9 J
; E$ K+ P" C+ B: }# V; d              <1>hadoop-env.sh、mapred-env.sh、yarn-env.sh指定Java的安装路径
  m' I, V( _9 G  n; S+ }+ N                      export JAVA_HOME=/opt/modules/jdk1.7.0_674 }! D, G& y* Y! `5 g

( `6 S* q4 r! V: z: o              <2>core-site.xml,指定namenode所在机器位置及交互端口号,另外也是指定使用的是HDFS文件系统% p) e: `& f5 P2 t' D7 A2 d0 v
                      <property>
* I- X2 j5 s. T- U: W$ P                             <name>fs.defaultFS</name>  E: D3 w/ v3 h* F7 q. s- I
                             <value>hdfs://hadoop-senior.ibeifeng.com:8020</value># V: Z" c8 k2 t
                      </property>
. V# M0 T* ]: N9 R0 Q: @1 s0 W* @6 k0 a4 `1 |. e
              <3>hdfs-site.xml,指定副本数个数) a' |( Z% A* B8 F! W
                      <property>+ }% R: l$ ~1 m. A& K
                             <name>dfs.replication</name>* Z# I* G4 i$ E5 D" ^2 S( `
                             <value>1</value>  n& R, }( }( q0 m/ b
                      </property>
- G& w5 z' E) b1 [. ^! M6 ]6 z# ?5 \' _. W6 y
              <4>core-site.xml,更改Hadoop默认的临时目录位置,用于存放块文件和元数据文件
1 q1 K8 y5 M: e" M                      <property>
) Q. X& g3 A' m2 @) F5 r                            <name>hadoop.tmp.dir</name>9 ~. D5 e  d+ c+ i) r/ l7 v! }
                            <value>/opt/modules/hadoop-2.5.0/data/tmp</value>7 S8 p; ~" _7 T2 j. X( j
                      </property>; \: U) y, h  P0 c' D0 i
' @* {- e. O1 s
              <5>slaves,指定从节点位置(主机名),包括datanode和nodemanager
2 e/ i' a; v0 y& H" @! J' {
" X4 W9 q4 ~1 L8 ^  @1 u3 }$ N              <6>格式化namenode,对于元数据进行初始化,否则无法读取元数据+ s; T/ e; }2 h0 ~- w
- b6 Z$ M2 m, l% R  }! \
                     bin/hdfs namenode -format
% @; m- h/ P1 X4 ^: o- F6 D* p6 K
5 f7 v( R; P) Q9 `             <7>更改mapred-site.xml文件名称,指定MR运行在yarn上
- B7 g1 I- P6 Z2 r+ P                     <property>
: I4 l3 ]- y8 q2 t: S                             <name>mapreduce.framework.name</name>& h- g2 m) Q0 U8 f6 C0 {8 S. @8 a
                             <value>yarn</value>: d0 X7 s3 w; z1 E
                     </property>
0 b, T$ e3 D* D
1 r: h) ?6 F0 K            <8>yarn-site.xml2 B. j# a" B( e& b7 |  m
                     <property>
! t/ N, C% k% B! V8 v2 T& j) u                          <name>yarn.nodemanager.aux-services</name>" r4 M9 v8 t3 J! S
                          <value>mapreduce_shuffle</value>
% {( Z9 ^9 Q; d; h                     </property>
* f( b; D6 a  {                     <property>( p' M7 H% M7 `4 H! Y
                          <name>yarn.resourcemanager.hostname</name>3 m! g( s0 O1 q1 @% J
                          <value>hadoop-senior.ibeifeng.com</value>
  U+ [1 t# `$ q+ d* @# k' c+ p                     </property>
; b9 X$ o  B  P
0 `8 }0 l: `4 C8 r- l            <9>yarn外部管理界面端口号:8088
6 b1 K- D) T) B7 u
# D1 a6 t8 |: n! a/ {                  HDFS外部管理界面端口号:50070  c2 V& A3 C$ R% \5 l
! j0 j4 u: Z8 l  M* h8 U
                  secondarynamenode外部管理界面端口号:50090& B  {0 @1 h( w  d2 r% [% f

5 i1 T6 X3 d4 n( T" j7、组件启动
& P$ {: n5 g3 ], J
. p) u1 u% x' f9 W  [      启动namenode:
- g" `# S6 V, s; J6 F3 u/ n) o% Z; L& A# Q6 W- i/ O
      sbin/hadoop-daemon.sh start namenode
& G6 o. ^: P  i) q! x( A3 K$ B* I! ^# W) b$ K
      启动datanode:
1 B+ U7 o6 B: G" d4 D. `1 V
' C% e! I/ ~' V" G5 n2 `# p- L& w5 @& V2 F      sbin/hadoop-daemon.sh start datanode
: a$ v7 B$ R3 L8 G& ?/ N3 y, S- q, s  Y& U
      启动resourcemanager:
. q0 G) N: _. C- M' i/ `
, C5 ]. @5 Z& _+ p* l      sbin/yarn-daemon.sh start resourcemanager
+ M8 e5 Z$ c( w% _# Y5 U4 t. ~# n& x; V1 b7 K
      启动nodemanager:
, f3 L& _/ y: W: M1 e
+ h7 x: X. A2 s$ l% {      sbin/yarn-daemon.sh start nodemanager
. \4 u3 u" i$ V; K* s) C; D. S, a7 F6 J& n/ v# R
8、日志
5 P1 R& y  R7 U/ Z! H, m5 K& }
$ ?% A+ m: u  _/ T5 i      日志文件:分析日志文件的格式.log和.out
9 X* {* @# j. U  [+ e" W  O
) q; M( s4 q' v$ f& W5 |  [      .log:通过log4j记录的,记录大部分应用程序的日志信息, f: a8 v. b- C

5 ^/ Z7 @# }% l% v      .out:记录标准输出和标准错误日志,少量记录5 l: _) K: X% {, q
: X3 G3 I2 M1 m  v
      日志文件的命名规则:【框架名称-用户名-进程名-主机名.日志格式后缀】* D+ M7 E0 `% r. N( V

8 j; v/ t5 F0 Q$ ~. g" m* R      出错一定要学会看日志,看错误信息,看.log的日志  ~! u/ b3 ]! ?: T
5 }0 K/ g' B* r/ [- W
9、Hadoop自带历史服务器
7 p8 \/ }/ L4 O% h+ ]9 C% H, \; }7 c0 _: Q, X3 q& u' ~
     配置:mapred-site.xml" w& Q& t7 y! f1 d4 `9 k0 j

9 U& n: C# c6 a# x     <property>- W  ^! X" x& g! x1 _2 F
                 <name>mapreduce.jobhistory.address</name>
2 n7 D& ]$ m: ]0 Y# {' o                 <value>hadoop-senior.ibeifeng.com:10020</value>
' L1 P( ?% O5 k! t5 B5 L9 Q         </property>. v- p. q' x1 f# {
         <property>
  P7 @6 E  f& s0 S5 q3 F                 <name>mapreduce.jobhistory.webapp.address</name>4 `1 K* Z, L1 _* I: N* W
                 <value>hadoop-senior.ibeifeng.com:19888</value>$ d; c% R' K0 A1 a* |
         </property>" s! f$ R+ {& c  k) m5 y( d
( }0 E, d: G. ^' n6 F
     启动历史服务器:sbin/mr-jobhistory-daemon.sh start historyserver" c$ P! z# @/ a
9 P6 j$ c( g+ q1 L
10、日志聚集
: y2 R7 |6 n1 n. E% u' Y& g- x
3 h% y4 w/ n# {: p  i9 {      日志聚合是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚合功能需要额外的配置。6 H% `; `: T7 {$ ~2 |) Y: i- V) m" h

7 }4 x4 ]# N, f1 L# w6 ]9 o$ `       yarn-site.xml
5 _" H$ |) Q$ F  p2 B
& I1 p9 D1 P$ g. B        <property>% H5 j$ r5 A0 T- p4 q! U8 {
                 <name>yarn.log-aggregation-enable</name>
3 o: s% T0 c- d; o! o                 <value>true</value>
$ t4 W3 ^4 E8 `5 j         </property>
3 Q5 K# `) ~  c- ~- c         <property>1 w* T% h! M6 K% E. k  o3 N
                 <name>yarn.log-aggregation.retain-seconds</name>
: h; J; }; x! b7 v7 e+ _                 <value>106800</value>- P0 i6 v- c$ E! `# @4 [+ q
         </property>0 S% b& m5 V3 M* P' K

' w/ o$ d- t$ f# |9 G+ P        单位:秒
. {1 c) O; I+ E5 |0 k1 ^8 x' a: q' d: O) ?
      重启resourcemanager、nodemanager和historyserver:
+ M( S) T+ L# P1 q3 X% P: D1 t- L$ Q
      sbin/yarn-daemon.sh stop resourcemanager! X2 b$ ]' W" o2 l- c  M

9 w, ]3 b8 s+ e5 b4 X      sbin/yarn-daemon.sh stop nodemanager
2 v' G" j8 _8 I* m5 \2 L3 V
) z! u, A$ \& S" e+ T1 {      sbin/mr-jobhistory-daemon.sh stop historyserver" w7 Y- P, D& ^7 ^  }: f3 j
' A& _; F# B5 E  |" Z; Z% b5 W
      sbin/yarn-daemon.sh start resourcemanager
9 p- L, o* a* F# C* G" w+ _# `3 l- F) k, Y
: f8 i/ K- d1 j# y% V      sbin/yarn-daemon.sh start nodemanager0 D$ o% _' o; x$ ?1 w" \
- U9 r5 H6 R, Y: P' k# b
      sbin/mr-jobhistory-daemon.sh start historyserver0 d- \9 s* d' a/ i# }

" b  V  ^$ u1 y1 ]: F( K# R' e2 o) C11、HDFS用户权限检查
: S/ @' ]) K8 [* ~0 G7 z6 D0 H; V; j9 ^; K
      hdfs-site.xml
" y  V& L6 p3 P* P2 g) Q: f6 {- l2 k/ t; w5 {! k
      <property>
3 S! ~! @+ f* j6 O1 t                 <name>dfs.permissions.enabled</name>
) G" @! n5 \  @3 Y; _" z3 E                 <value>false</name>+ g2 N1 B  y- x  ^3 S# |( Q$ I; x
       </property>
9 X4 j7 l& X% s, H- v6 z
7 E3 _2 A* Q# d      core-site.xml& Z2 W  _  K4 R, i6 d0 \% L

0 ?( V: w/ |9 u8 Z! g$ F+ Y      <property>
; [8 _+ W( X- ~$ z                 <name>hadoop.http.staticuser.user</name>9 G1 q8 c, I* |7 ?( C0 @
                 <value>beifeng</value>
$ I& c( j: W  T( t: S1 v0 X       </property>
0 w! n5 f; H3 x. e6 Q
4 Q. f) ^! D  f9 i5 B. S      重启namenode、datanode、resourcemanager、nodemanager和historyserver:
4 U# n, c& R5 M5 V4 _/ j) r* L3 i5 r- G. p
      sbin/hadoop-daemon.sh stop namenode
2 R( s, K. t9 C
% {. J0 K# p! ?  ^" n      sbin/hadoop-daemon.sh stop datanode
* t4 t9 ]* ]) }+ _; h5 Z) x' ^/ s# l: B( z, x7 A' Z
      sbin/yarn-daemon.sh stop resourcemanager9 o5 F' c1 H% u) Z4 P9 t* A, x  E

1 x( j0 s6 A0 d$ v% g7 u      sbin/yarn-daemon.sh stop nodemanager# z6 q9 v* [! _
& E7 c/ e% F8 q8 d+ R" P& z
      sbin/mr-jobhistory-daemon.sh stop historyserver
7 e2 t4 v% v+ C7 f$ j
$ \) W. d4 |& m2 F! C      sbin/hadoop-daemon.sh start namenode
0 l. a* e$ k/ {6 g
1 B7 `# {9 A" ?, q5 B( K( S      sbin/hadoop-daemon.sh start datanode7 p( S6 s  W* M# [1 n3 u+ h
/ k+ p& Z( z" H. c: O4 U/ h2 T* i
      sbin/yarn-daemon.sh start resourcemanager7 E) J9 w6 d. t9 b3 j5 B! u# ]

0 y8 T: F* K2 C9 O2 Y" i      sbin/yarn-daemon.sh start nodemanager/ D7 B4 s2 o3 J& G$ d
9 d8 `$ |/ o( o; p2 m
      sbin/mr-jobhistory-daemon.sh start historyserver
! B  M. u2 ?1 G; r+ O1 ?, s+ W/ r: w% }. z% i( a9 Z
12、SecondaryNameNode8 y9 _8 ?5 H% A" H; K- x1 v
$ a2 g" Y- T1 g+ k( A2 l
       NameNode启动后的元数据存放在内存中,启动前的元数据存放在本地文件系统文件中。2 q3 P6 J3 j+ r5 b' `+ X; d1 I2 _
) d" m2 {: I& E1 `1 L/ E
       HDFS格式化后生成fsimage镜像文件,其中存放文件系统元数据,NameNode会读取此元数据,并存放在内存中。
* Q* C8 Q9 t' `8 M$ k+ V" O/ r  f+ r) C6 o# P% Q7 R4 S4 B, C
       edits文件,编辑日志文件,用于保存用户对于HDFS文件系统的每一步行为操作。- w2 L1 N/ }5 J4 u+ G
3 A7 _: f: H* C- l! i6 o8 m
       NameNode启动后,先读取fsimage镜像文件,得到元数据,再读取edits日志文件,数据就不会丢失。% D( f9 D5 M3 `

3 R1 _" `/ A6 Q( D' d       SecondaryNameNode用于减少NameNode重启的时间、合并文件,SecondaryNameNode读取两类文件,加载到内存,写到一个新的fsimage镜像文件,然后再生成一个edits编辑日志文件,每隔一段时间将新生成的fsimage和新生成的edits合并成一个fsimage镜像文件,即每隔一段时间获取HDFS元数据的快照,这样NameNode重启只需要读取内存中的fsimage镜像文件即可,读取镜像文件比读取日志文件快很多。0 ^2 h: B# C6 U, y8 w8 D6 K, v

+ A; {  H1 w& V# r+ a( G- Q       hdfs-site.xml; p) Z% p& u4 ~  w# e9 M& ]
4 F; j6 ~! j* C- I
       <property>; [: B2 V1 i! ]  x$ w
                 <name>dfs.namenode.secondary.http-address</name>: C) f4 {% K& h; b) d% h
                 <value>hadoop-senior.ibeifeng.com:50090</value>" J: `0 A0 p5 R  u/ g) x
        </property>  ^; x( u2 g# N5 {, j7 @

3 ^/ \, r2 p" i* a2 j) }5 A       启动命令:$ sbin/hadoop-daemon.sh start secondarynamenode6 W4 @4 S" y9 m9 A" \% P
0 C1 h* `" G$ q  j4 h
13、块文件存放地址+ i; P1 v8 a# ?& _/ U& A7 T; }

9 ~. y3 P) D6 D. q( l( ~      /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-2012260383-192.168.74.128-1516569449179/current/finalized
; F! B9 Y& Y" k3 y/ R4 m! k
5 U5 }* S4 g0 D! [; V: o# n/ G+ p      镜像文件、日志文件存放地址
9 P1 q9 q/ G" f( I+ E+ O6 H( L# T
0 p, T; [+ A$ p/ r3 A      /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current
, g4 U, Q: O1 I0 r5 ^" _* {% n* C3 h! u
      dfs.blocksize自定义块大小属性(单位字节),在hdfs-site.xml中5 V* c3 x/ N9 i3 G! L/ U) h  q

- L+ S4 L) v) L3 u. N$ `, _14、SSH免密码登陆
4 T+ Z+ x! r. q. b6 _7 \% _% ?
      使用sbin/start-dfs.sh脚本文件启动namenode、datanode和secondarynamenode时,需要输入用户密码,使用SSH免密码登陆的话,就给用户生成公钥和私钥,用户将自己的公钥储存在远程主机上,将公钥发到需要登陆的服务器,当需要登陆时,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回去,远程主机用事先存储的公钥进行解密,如果解密成功,就证明用户是可信的,直接允许登陆shell,不再要求密码。5 ~3 K1 }: c' Y0 O  N6 j

$ I, g" ~9 m+ I, K$ T2 z      配置SSH免密码登陆:3 O2 a5 N) b3 \  t* R

" y8 {7 `& i7 U8 I! q# {8 B# U      cd home/beifeng/.ssh% r0 |% \: c8 T1 f0 D! t

. L' t$ x6 k6 z      ssh-keygen -t rsa) I3 e& A4 T& A& x/ R% B
2 x9 _2 x. N; l
      即生成id_rsa和id_rsa.pub文件,其中id_rsa是私钥,id_rsa.pub是公钥。
% h. R. _7 I8 R  B8 I) e5 n
* j! @5 y; J) k, B* y. p# q0 \# M      ssh-copy-id hadoop-senior.ibeifeng.com( I8 B7 K, k3 l7 y

- ^0 r/ }+ R: v/ {! A* o' _' U      即生成authorized_keys和known_hosts文件,其中authorized_keys是向远程主机发送的用户公钥,known_hosts是记录文件,有记录文件就不需要再输入密码了。
6 }, c! B. u- M: F2 Y  F  Z( q+ m/ x7 [
15、Hadoop配置常见错误
8 a0 ~+ H6 I& x! b/ Z. r, N$ Q9 [0 O' x0 i( M8 I8 u
       <1>不要多次格式化namenode,如需再次格式化,需要先删除data/tmp/下的所有文件。* _" x- O7 ]0 h; l- ^- r1 l) s

% h: y' g7 K" ~$ g0 v& b7 r       <2>集群ID不一致,即
. Z$ t5 w( d' I5 C: t: W, K
9 p2 g1 u& L1 M8 }6 c% U2 J             /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current/VERSION
9 n; |# Z( y* d$ q- C7 S, C. t0 k: \3 y6 W5 W
             /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/VERSION
/ k5 C8 M8 F" l! m) q/ a# |& h7 @) V; E% p# w$ @( g9 M
             两文件中的clusterID不一致,这是由于多次格式化导致的,解决方法可以如<1>,也可以依据namenode中的clusterID来修改datanode中的clusterID。
3 @" l3 F! a9 g" {7 i' `8 w
  ~4 u$ H: A' s% U! }       <3>端口号被占用,使用netstat -tlun查看。. ]5 ?) r, }5 m& F9 V
$ I- ?5 m6 H8 n& Z1 T* ?( g& N# U
       <4>多用户混用。即/tmp目录下有多个用户的pid,多个用户在各自的环境中启动了同一个进程,造成pid文件冲突。解决方法:将/tmp目录下的.pid文件全部删除,再用一个用户启动进程。0 r- t& t# X( p0 t: c: E" a

4 |4 m1 w2 b0 g5 t+ J1 \16、Hadoop配置文件
( H1 E) G8 T/ l3 d4 ~5 I" s7 l( T& T; g3 l
      Hadoop配置文件分为默认的和自定义的,每个模块对应一个文件。
, r: \3 A0 ^( J4 o$ y" l
: b) L  D$ a  Y+ W4 @      系统启动会先加载默认配置文件。默认配置文件存放在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。+ J1 b3 y# X2 j% h/ _. i% [# D% s
$ b2 G9 D' l& Z& g  o; X& a
       自定义配置文件优先级高于默认配置文件,如果自定义配置文件中有配置,会覆盖默认配置文件中的相应属性。
$ r+ L% y2 Z9 x2 h% F1 T0 R  u* f2 g% F- |+ q& L2 Q9 J: q* m! ~4 N
17、安装rz工具
6 w  x& K5 X; E9 Q) E- K  w% H/ L; |: s% `& H' g
       切换到root用户后,用yum安装lrzsz。rz工具用于将Windows中的文件上传到虚拟机中,如CentOS中,只能在远程工具中使用,不能在虚拟机中使用。1 o) f. a: c" K# z

5 A/ X9 r. k% i* [) h2 A      su
/ D) z5 t) N5 K6 z) {# }* U
/ C6 E* G9 A8 ]8 K3 g4 b      password:
* M" P5 \' V- L+ |. P5 M6 Z. c2 g8 V
      yum -y install lrzsz
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:55 , Processed in 0.025282 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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