易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 4591|回复: 3
收起左侧

分布式hadoop【CentOS7】

[复制链接]
发表于 2018-9-26 10:27:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
一、安装jdk (各个节点均操作)
- [, a) N# Z) [5 N% E1、环境准备( M- m  E# T8 B( s
2 e3 g' x3 g  e  g
* Q& O; D$ Z) a$ r1 B/ Q
# m; m/ R4 ^5 s
1) master.wyl.world (Master Node)0 j9 _1 l# e7 h$ z9 r
2) node01.wyl.world (Slave Node)
1 v4 y6 i. T! S! R8 y3) node02.wyl.world (Slave Node)
3 e' h8 Q, R. v2 u. f9 K. G* \/ P+ S3 p& d1 I
2、下载jdk包
$ Z; G  F9 t$ B
, E5 M) I% U- l8 S3 ?* y$ r0 q. \# o; J+ s$ T! r( C: Q

% n' ]3 k$ ]* _, `3 {[root@master ~]# curl -LO -H "Cookie: oraclelicense=accept-securebackup-cookie" \
/ _! l. A& _3 C3 D/ W" ahttp://download.oracle.com/otn-pub/java/jdk/8u71-b15/jdk-8u71-linux-x64.rpm
% ?9 @' ?5 O5 S
( e! V" `' u6 `3 C( O安装jdk: U+ \$ \! C9 j1 A1 o; A

' f2 R$ J1 @! i/ J
. L2 w' X0 K6 }( X+ a* V0 u0 I' ?" a7 z: z% j
[root@master ~]# rpm -Uvh jdk-8u71-linux-x64.rpm . O; z6 Y4 i% _) G' U; V
Preparing...                ############################## [100%]
% M& n$ K6 n9 s5 w7 C3 Q8 {   1:jdk1.8.0_71            ############################## [100%]
& h& r1 T8 B+ L+ [' [Unpacking JAR files...
2 W5 g; u5 @/ h. j$ h        rt.jar...  b; ^+ P) K6 R6 q. E
        jsse.jar...
; s6 o( j/ j2 q6 |        charsets.jar...
6 E2 \# e; ]% K' z, f        tools.jar...
- u3 M8 {) Z7 P2 {+ u" v/ z+ |1 t        localedata.jar...
& @" |+ @, o) Y/ [3 W; e        jfxrt.jar...
. Y" L0 i; Q* `" Z
9 Y5 u0 ]% T. r  v8 @: ]3 P4 B3、更改环境变量9 y/ q+ Y0 M5 _/ |4 [. `

  }( `5 ^6 `3 A/ U
. E/ z/ h; @- E; [& z( _
- h% r0 P+ }: \* a$ r$ R% G8 O[root@master ~]# vi /etc/profile4 x$ Z. i2 l/ B4 {0 Q
# 加在末尾" G$ ], v: F( F5 _2 g
export JAVA_HOME=/usr/java/default& }- }7 u$ o$ r1 L8 k
export PATH=$PATH:$JAVA_HOME/bin
, C' Q0 `: u( `. qexport CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar, u/ m* \2 h6 x" X: O4 [

8 o* F; U! v  K0 q! c4、应用环境变量9 k3 ^* }& O" i/ }+ [0 T( J

  n7 ~1 M  f  k7 b. N4 G+ H( e- c# z

$ m' ^$ j" v* `, t2 r/ K; y[root@master ~]# source /etc/profile1
6 d" }" J1 p, Y9 g0 a; B3 z) C
& D* A/ B0 k& s( w+ b/ r5、如果系统之前安装过其他版本的jdk,需要更改默认配置7 M& O- k5 u3 p" I/ K
9 ]8 W3 M" x7 {* \0 k6 E& w% E% v& o

/ P* J3 B5 H) S+ L
% {$ `! k, b5 i. p9 P[root@master ~]# alternatives --config java 3 Q3 c  e- U! [. ^/ Z; u. F' R
7 ^( A3 x# D2 y5 ~8 z- H$ Y
There are 2 programs which provide 'java'.7 |1 _' O  p- A) O2 B  w" Q: D
# o0 I; ~# s" j' Y7 V  n5 k
  Selection    Command
. \0 B* f: D% r5 Z6 r( j-----------------------------------------------1 Z7 H; M, J/ X* q
*+ 1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java, G- }5 t$ k! U4 i) G- ]4 @2 U3 A
   2           /usr/java/jdk1.8.0_71/jre/bin/java
7 g' K: ?! v5 F" Y2 ?9 V4 A
( m2 N2 `% O, e9 S选择最新的
6 D' U8 A+ a  _Enter to keep the current selection[+], or type selection number: 2, @! y1 V, B& L3 g5 y6 v' m0 u* l

1 M( G5 y" S  K6 a, x3 @5 A' I8 O; i6、写入一个测试程序2 i8 V& D' V0 q, j  ~
8 r& ~8 d+ n, z6 X8 X

6 y- B- x. P* m8 R6 o4 S' B/ N' M" b4 c' w2 ?9 Q) o; w
[root@master ~]# vi day.java
/ c1 V9 M0 n) b- i% i6 u* d( _ import java.util.Calendar;
4 c2 }$ D0 Q) F1 T# K: o" r; A
2 F5 C2 B0 Z! _$ ?class day {! }) `: X- G6 r2 K
    public static void main(String[] args) {
/ Z" [0 D5 O/ u# Y        Calendar cal = Calendar.getInstance();3 o( o1 p& P  H/ r5 ^# m( w0 D
        int year = cal.get(Calendar.YEAR);
5 a1 W( I8 H3 f1 c        int month = cal.get(Calendar.MONTH) + 1;
% E8 G* z' @2 o        int day = cal.get(Calendar.DATE);
% V: s8 T' \3 [, T; u4 `3 S( N  y        int hour = cal.get(Calendar.HOUR_OF_DAY);
3 m- g: W9 K- u0 N0 G* i% D        int minute = cal.get(Calendar.MINUTE);
, N7 u$ f* M4 ?8 l! h5 o. ]        System.out.println(year + "/" + month + "/" + day + " " + hour + ":" + minute);
0 A* m8 u+ s3 E/ ]- |    }9 p( y3 b; T5 ?) ?4 N; ~
}9 c. {0 M: d% V) g. `# t! I
2 A/ l$ l; h+ m$ K7 U
7、编译
& ~: ~4 y; E! o6 c7 c1 N) G
& T$ o; n  ?* G
& t1 ^3 h) e9 T2 J$ j1 H1 k. s: F. r/ E5 _7 ~6 z& r3 r
[root@master ~]# javac day.java
; t/ [  _& M8 L5 R* w4 A2 R
* ?+ v* v1 Y( ?/ b  Y8、执行
* X! t' [; w( s  z% k7 K: u+ ^7 r
1 V: K# v, D0 l. M2 D1 ^) q& f3 T' n7 u3 ^6 O1 z
6 j! U  x; A  s$ p" U
[root@master ~]# java day# r' b( A* ]1 T  A/ h' g) l6 k9 a
2015/3/16 20:30
2 W& j% Q; T# I. H! H% {) J9 h  y+ [* i8 U
二、安装hadoop 9 x. J9 ^% C6 y0 i$ `
1、在各个节点上创建用户,并设置密码: J* V7 I9 a$ m

( G: _( l% q' [; @! o8 q9 g) a; |2 Z& X0 P

  X& x# z- p* y7 W: X$ ][root@master ~]# useradd -d /usr/hadoop hadoop
; V) V8 p8 |: W8 l' w" j[root@master ~]# chmod 755 /usr/hadoop
) W5 g: I: \4 |0 m, O[root@master ~]# passwd hadoop 7 s+ X8 P# ]$ E( r  I, X
Changing password for user hadoop.  m9 u+ b8 V. G: o! w8 Q  J3 E& K
New password:
5 H  d, s7 |/ `$ GRetype new password:
4 r+ L/ h5 M+ U" o# H. l. n/ Vpasswd: all authentication tokens updated successfully.
6 z, L9 x8 q# g
; v( s. a& V# q% V0 o2 n2、通过hadoop用户登录到master节点上,生成秘钥,并拷贝到其他节点上 8 r& k% x0 h3 V$ X9 G
生成秘钥$ p( R( ]! d9 ]: z- E1 j3 T2 Y
2 a, Y( b4 b; l0 T8 K

) b# C5 q+ m/ w. A7 P' V3 K1 {9 u- Z9 D0 i- N  d) g/ b& T: ^
[hadoop@master ~]$ ssh-keygen " j' \3 ?, l4 f( t; a1 ~. e
Generating public/private rsa key pair.. u4 }1 A) g* A1 [1 l
Enter file in which to save the key (/usr/hadoop/.ssh/id_rsa):' x2 X! ^; b3 x9 Q1 w
Created directory '/usr/hadoop/.ssh'.% a# Z4 N% T& z- x+ D: c
Enter passphrase (empty for no passphrase):! Y; n4 F: c& a9 H, S
Enter same passphrase again:
) ^# H& o3 j. [Your identification has been saved in /usr/hadoop/.ssh/id_rsa.) b# G3 T8 i% _3 f, g, G
Your public key has been saved in /usr/hadoop/.ssh/id_rsa.pub.
" V1 ^4 T# Z9 C- x3 QThe key fingerprint is:/ M4 t5 ^; a1 g/ p% a! j
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hadoop@master.wyl.world
6 `/ R0 F5 V  m$ \6 iThe key's randomart image is:
6 a( p: @& |4 d6 a4 W" F
" j& k) V9 Y! m8 {3、发送到本机9 D6 }( q( A) I
2 Z$ `& k( Y& E7 t

9 R; m+ D- W1 P4 f: b" e, J/ i0 K, l4 P- I( d
[hadoop@master ~]$ ssh-copy-id localhost + E6 b7 ^* ~5 R1 H  q

5 ~3 N5 l' \  ]3 s7 ?0 @4、分别拷贝到node节点3 a, ^2 ^. Q  t- r6 }7 v3 D
& e, j% g+ ?; @* A
$ z6 f& p( o3 s* j+ I

! R' S1 u* A9 |# x! O; N3 M[hadoop@master ~]$ ssh-copy-id node01.wyl.world
9 X) I' V* `3 ~7 }  ]9 r[hadoop@master ~]$ ssh-copy-id node02.wyl.world
& f/ c8 ~& O6 E+ e3 g+ z* {$ M5 z. R/ t7 h, F* X  N" J- Q. V
5、通过hadoop用户在各个节点上安装hadoop
9 n5 i  S2 k# R可以通过下面路径下载最新的安装代码; d) y+ s. S& f) ^9 b' o, U
) V! `: ^* Y: ?

' u- }2 B% d3 ~; L" D
' }1 x2 i: \: [https://hadoop.apache.org/releases.html, R4 c& m8 t" ]2 i) t

$ V- Z4 W/ H% U下载安装包9 m+ P6 t6 G; X7 e
$ _' k' J# t$ x
4 e3 n, A+ I5 ]

5 r7 G) C" I9 }[hadoop@master ~]$ curl -O http://ftp.jaist.ac.jp/pub/apach ... hadoop-2.7.3.tar.gz 3 \5 c& ~! Q- R3 J4 T: ]

8 z9 [# R% V5 ]4 Y2 A解压安装包. F) \. s' o0 u8 x7 {0 H

; D4 O; q/ E& g% Q
/ i. M4 U* }; t& b' b) s+ Y) d+ [) x  N' w0 D3 p
[hadoop@master ~]$ tar zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop --strip-components 1
1 g4 X# N' f" R; f; d6 _( f, ?/ J5 C% E# `# g8 ]8 i" j
写入系统变量
5 e: o' `9 j( A1 g& p! \6 m" I1 z% U4 C6 A2 H- f
3 _1 |9 j) U. B% l5 m6 y

$ x, P, x. U- a3 H4 _[hadoop@master ~]$ vi ~/.bash_profile
1 q! V9 d2 h. M6 O1 n# 加在末尾
% S0 m( p# |& H  P$ |4 E0 Cexport HADOOP_HOME=/usr/hadoop
9 j( B, B6 X/ m8 y4 P+ Dexport HADOOP_COMMON_HOME=$HADOOP_HOME& K) H$ `/ Z6 y$ P$ k5 c
export HADOOP_HDFS_HOME=$HADOOP_HOME$ v) w% F9 @7 m3 z
export HADOOP_MAPRED_HOME=$HADOOP_HOME
6 P7 u$ P! @6 i' mexport HADOOP_YARN_HOME=$HADOOP_HOME* ~' ?$ g- \7 y9 a* \  l
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"2 T2 f9 w; _- i: @& k
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
9 X4 e  u' [% C/ zexport PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin5 C1 {$ @8 b6 ?- O: U
, p4 A/ ^' \2 g6 c/ O" R$ ^6 K
应用系统变量9 c/ e# j+ \+ t& U: f/ P8 H
% d: I/ \) Z" a) Q: {. g- _

- x& r2 Y5 K2 g1 |5 b
- V6 ~3 [% y, D* C! _[hadoop@master ~]$ source ~/.bash_profile
1 v0 k5 i* J$ w1 w7 w- Y3 s  `
; h" h% m. q3 s: w3 o, @& e6、通过hadoop用户在master节点上配置hadoop
) D2 K1 N$ a/ b: F! @7 ]创建目录4 Q- h  I& W6 s0 `/ M. m9 P) I
0 }7 b" J: ]. ~( O0 z7 p, x
3 a+ W# t3 `4 o4 A

2 v& O$ v3 }  ][hadoop@master ~]$ mkdir ~/datanode 3 l. d4 ~: e3 I) v3 k! a: i
[hadoop@master ~]$ ssh node01.wyl.world "mkdir ~/datanode"
' l7 G0 Z, C% R0 {& T[hadoop@master ~]$ ssh node02.wyl.world "mkdir ~/datanode"# M4 ~. _6 \- F+ \+ |+ B9 J
1 q  d  K5 n* b2 p3 w
7、修改~/etc/hadoop/hdfs-site.xml
0 H" ?0 i# z8 W  Q4 y( l* A% ?
# Q" z. ?+ q# A8 `& P8 a$ V
! }; @" b! |, y( E( B! @+ W) p
, N5 y% O* c+ f  t1 Z/ `在 <configuration> - </configuration> 之间加入如下内容
- F% }* c& i% z<configuration>1 ?9 Z# R/ x" a  ^% P  C5 a, z# J
  <property>9 d9 I9 }7 N' P" j/ a( a% Q, _
    <name>dfs.replication</name>
+ M+ w6 k# D- ~3 a7 r  D9 u    <value>2</value>+ S  |/ a1 a8 x$ ]
  </property>, D' y  K8 d* g( U. V7 i
  <property>
: V  N" H( e/ Q! @' P* r    <name>dfs.datanode.data.dir</name>  ~0 q% A# c7 V' y% e" Y1 |+ N
    <value>file:///usr/hadoop/datanode</value>
+ \" q. J1 M' m' \9 R  </property>. X2 C& O% C+ m( D
</configuration>. X  u, I/ k  O) ^9 D4 P
% e" B& ~$ C& X+ |4 G6 i
8、拷贝到其他节点上4 H( o2 r* H% h; F& X$ W7 ~
# O  _5 \5 F& I

  d" |' [  w1 T! k& ^" Z1 f# y9 F; g9 p5 r* F& V, F5 P& }
[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node01.wyl.world:~/etc/hadoop/ $ o" }4 W4 Z) `6 e0 L* B& T
[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node02.wyl.world:~/etc/hadoop/ 3 T: P" @6 a2 B3 l& Q3 }

. {8 _& X7 k, q# M0 \; E# b9、修改~/etc/hadoop/core-site.xml$ G: A8 h/ `/ S8 X; u. N

; a; M8 J8 ]3 W6 a
, @5 H( c3 V: |/ B8 w0 }; B/ p! {/ t8 @6 _6 M, Q3 x: i
在 <configuration> - </configuration> 之间加入如下内容4 D4 r. [) q6 B
<configuration>* f, o+ e  L) q6 s. h
  <property>, a3 @; b0 A1 Q0 ]6 E) \( h
    <name>fs.defaultFS</name>
( g  Y' \: N0 r6 H! ^7 t, g; Q& H0 i    <value>hdfs://master.wyl.world:9000/</value>
+ W% Y8 p- n" |$ c( V$ W/ P  </property>
# Z! s2 |2 j& z, c2 E. P  B. U- E! u</configuration>
( t' X1 D/ D: [( {" E+ K' s
% r( Z2 z, }# x" k  t10、拷贝到其他节点上1 s+ r" W! @% {- O( ?
& y# a1 x0 r" z: W4 O" B
& A" Y2 Z) t5 z8 c
: I2 ?. Q# b& U5 [5 B
[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node01.wyl.world:~/etc/hadoop/
( q- T  P5 B$ h0 g  z4 _[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node02.wyl.world:~/etc/hadoop/ ) s" M" k+ m: [9 z+ \  @
[hadoop@master ~]$ sed -i -e 's/\${JAVA_HOME}/\/usr\/java\/default/' ~/etc/hadoop/hadoop-env.sh & {* `0 ]( m8 u
[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node01.wyl.world:~/etc/hadoop/ , ~- M! z5 N  c9 T" w9 [9 j
[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node02.wyl.world:~/etc/hadoop/- y/ c2 O% D$ k+ C9 s4 m. C5 N' M8 D
[hadoop@master ~]$ mkdir ~/namenode : W2 k, ?) g$ c# v" r

$ n: [0 u" k. [11、修改~/etc/hadoop/hdfs-site.xml
* W) G$ j2 r+ }
3 I- G3 s5 r1 u7 Y3 D5 I
$ ?: Y' b: y, \8 j; Y+ O
' m* T( u& ]( }7 G8 \在 <configuration> - </configuration> 之间加入如下内容
4 p" m4 q3 l6 i<configuration>! _' U) v1 y& m" {; C5 j1 |8 p# P
  <property>7 M3 X" E+ D7 A* B- W! I; T
    <name>dfs.namenode.name.dir</name>
; a9 S/ J+ Q; {% ?& z. p( P    <value>file:///usr/hadoop/namenode</value>2 }5 A4 W. k( b$ S6 G
  </property>
8 l% X* }* R/ i</configuration>) r" E7 f" l; K' C8 @3 c
6 Q4 y3 D! J  L+ ]
12、创建~/etc/hadoop/hdfs-site.xml并写入
1 A; f1 C7 V+ M
. j; G* T1 Q8 }. T8 C# create new
! b9 [& ~' b" P1 D5 S<configuration>& t3 W" ~6 r2 Q  q  J+ d
  <property>
, X  G; @* Y; j! W2 x    <name>mapreduce.framework.name</name>
% j7 ]7 m, Z/ ^# y8 x    <value>yarn</value>
$ d; o7 e% y/ H" C) c: O  </property>8 D8 p( o( S, B1 X7 c
</configuration>
, B7 K/ ~) f& k* l! t, u+ [& ?  ]" M" T" b$ t
13、配置~/etc/hadoop/yarn-site.xml% Y- h# v; O. N: P: q2 }! l
; B" e6 e' S$ S
5 O% @3 B$ b9 \3 m& Q! ]. p4 z

* q4 n) ]" U' x8 ^在 <configuration> - </configuration> 之间新增如下内容3 j$ w' [& E7 F
<configuration>
* }& n1 ^2 b3 M  <property>5 c  {9 p! W2 F" k: x
    <name>yarn.resourcemanager.hostname</name>2 T3 G0 u) W3 a+ {  k# }6 r
    <value>master.wyl.world</value>/ x6 Q6 C. M$ ~2 y* B5 z5 Z7 g
  </property>
; O, x' Z5 Q$ }7 [0 {  <property>; F/ y# p% Y# e( r  ?  M
    <name>yarn.nodemanager.hostname</name>
1 z0 m! S/ w. n& ]% r$ q    <value>master.wyl.world</value>( J9 R* O& H7 l- c& `: p  K
  </property>9 W) |& r$ c9 ^4 u, r  y3 C
  <property>& P# x4 D+ {! S4 t8 c& t. Z
    <name>yarn.nodemanager.aux-services</name>/ H, P0 g; }) d4 t. U: ?
    <value>mapreduce_shuffle</value>8 {7 z8 a- l/ Q
  </property>1 u& `! s( H( [9 y5 _3 _( e
</configuration>
. ~3 @4 B. T" Y& K9 s7 t/ U& R  p0 z) F
14、在~/etc/hadoop/slaves写入各个节点信息
0 F! w' @/ W6 p: m  A* z
. a; P+ r/ @, r# G+ `. h#添加所有节点信息,并删除localhost
- W7 N! ]3 }2 [9 H9 s6 gmaster.wyl.world
8 O; k/ f/ X; E2 y0 W) Cnode01.wyl.world
) }" J: P! L% l3 R) `" N# \6 wnode02.wyl.world
6 U# @4 W2 x# B7 N3 F7 {1 T, I
0 ?1 M! w6 @/ f$ m15、格式化namenode并启动hadoop服务
0 a! f, M& h% L8 m( d" h2 [格式化节点' W8 A6 B6 s. _' Q; c: B
% R. X' y* i9 a  Z, G" X. ?
  a$ v' }8 a; G4 Q+ `, b5 H
7 j8 \6 D- u6 g
[hadoop@master ~]$ hdfs namenode -format   K3 O6 g; E' S3 l! z6 a
15/07/28 19:58:14 INFO namenode.NameNode: STARTUP_MSG:2 [1 s8 l0 k% E( O( d2 m
/************************************************************
' N  g; R8 T+ R  n0 `  o) iSTARTUP_MSG: Starting NameNode
/ r5 q, P5 V( m2 RSTARTUP_MSG:   host = master.wyl.world/10.0.0.30) P& ?  W- I+ U: s3 i0 S
STARTUP_MSG:   args = [-format]: U- ]5 P+ t' _7 f( C$ s1 i
STARTUP_MSG:   version = 2.7.3% e8 X: S3 p) [
.....7 R4 Z* u$ `+ M+ D, X/ P
.....
3 z7 j- S. S6 K15/07/28 19:58:17 INFO namenode.NameNode: SHUTDOWN_MSG:4 \6 ]& g3 O* R
/************************************************************
; s0 L4 E9 M9 _9 `; uSHUTDOWN_MSG: Shutting down NameNode at master.wyl.world/10.0.0.304 J' ^8 i9 w8 G1 u5 ~7 q7 o
************************************************************/
  r, T6 v( s9 K& F* _1 l3 K% m! {. @8 ~
启动dfs
$ J  O/ i$ p3 w5 j) P8 Z' l( I. f, F5 j* u$ G' Y5 Q& w+ U# E

6 K/ P2 Q+ `: @6 R- ~
! l" h, \# t7 R1 w* F3 M; b" s& g0 x[hadoop@master ~]$ start-dfs.sh
( k/ ?3 h$ ^1 D' t+ {Starting namenodes on [master.wyl.world]
; w: b6 J2 s9 d! mmaster.wyl.world: starting namenode, logging to /usr/hadoop/logs/hadoop-hadoop-namenode-master.wyl.world.out0 [, t, [% {9 G( b* h" c# z! L
master.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-master.wyl.world.out
7 h. M# l4 F" ~& N: F2 ~. W* p8 z& ~, Knode02.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node02.wyl.world.out& O% ?( z& L0 }
node01.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node01.wyl.world.out& }1 U! y9 b+ h( b$ s4 T
Starting secondary namenodes [0.0.0.0]
# Q! W3 k/ q, b5 _4 Q4 T0.0.0.0: starting secondarynamenode, logging to /usr/hadoop/logs/hadoop-hadoop-secondarynamenode-master.wyl.world.out
% j9 o+ d5 H# o8 [+ Q
6 X. x0 s! V) o! \- c  S启动yarn
9 l3 v! L0 O2 b! A3 l
/ D% }5 Y: C" q6 M7 v( k( s) F  W9 b

' E' p7 q' O4 K9 V[hadoop@master ~]$ start-yarn.sh
3 }7 K- r$ K5 _# r1 b* v7 Dstarting yarn daemons2 J; g5 N& S! o' c3 C
starting resourcemanager, logging to /usr/hadoop/logs/yarn-hadoop-resourcemanager-master.wyl.world.out# v5 v4 f7 P: O& y1 ^. H1 Y; A
master.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-master.wyl.world.out' w8 H; n$ R2 ^" ]# y
node02.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node02.wyl.world.out
6 g. g/ Z: ~8 G! o# o+ x( V/ Pnode01.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node01.wyl.world.out
' t7 c0 n  h  t2 M6 Q* T1 f- I, w
; u6 b* C, r2 q16、查看服务状态,正常如下,如异常,请返回检查配置- u! B8 q! k  }7 _: n' G2 Y# U

4 D- D& L# z5 J9 h  m" d% C7 s' ?/ ]9 n$ j8 `0 w  Z0 r7 q
& O3 \. v/ C. o, j, C; T
[hadoop@master ~]$ jps
# B& \( B( h! X4 U: b" S; j2130 NameNode4 N$ k9 F1 u7 r: K' n7 U  D6 C
2437 SecondaryNameNode
0 z1 F9 d/ R1 f7 r$ p: l" m) o2598 ResourceManager
+ A- B. `) I( i7 h9 f: u2710 NodeManager
& O% c* ~# K# z4 _* w( F3001 Jps
2 y7 L, b0 t+ E2267 DataNode
: `. X7 B9 T5 c4 E" r7 c$ q* U6 S2 H+ o3 Y3 `
17、创建目录
% I- O% H0 V1 O) g4 f$ O+ G5 S8 {! p1 W( _( `

8 _* L. R4 X# A7 e: y' c8 V: R* e7 D8 H; g: E, S7 ~
[hadoop@master ~]$ hdfs dfs -mkdir /test; C9 K* d! j& X2 I& ?$ b

; U8 U& C! J$ v6 X0 F2 a! {18、拷贝一个文件到/test8 V! Y' A/ \# ?
# Q2 i' F& G- q- m5 \: m

, m, M3 Z% D% x6 u" j; L# n& J! h) I# w6 s: z
[hadoop@master ~]$ hdfs dfs -copyFromLocal ~/NOTICE.txt /test. G: a) h8 [8 m3 `" \6 y, p) R( u
. W1 d. C; [: k9 \
19、展示文件内容
- b& E. P  y! g# j3 Z+ f
& G$ X5 k4 C# G$ U  p! X% d  A9 p- m6 |; F
& _  `# H0 w8 S2 w9 R7 C
[hadoop@master ~]$ hdfs dfs -cat /test/NOTICE.txt
& e: n4 r% O* g, TThis product includes software developed by The Apache Software
4 s/ g0 \1 \7 Q/ ZFoundation (http://www.apache.org/).
( Z: K: \7 G+ n" g$ }8 B6 ]/ j7 G% r' m# ~  k
20、执行程序7 ?9 m6 e' h+ \3 H0 t# I
1 F% M( ]/ p5 _8 E

, e  z  o3 f7 c, a* r& ~/ s5 K8 B4 g8 B( \/ j, O
[hadoop@master ~]$ hadoop jar ~/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/NOTICE.txt /output01 7 [1 _3 P" Q% `3 `- D* L4 O& e
15/07/28 19:28:47 INFO client.RMProxy: Connecting to ResourceManager at master.wyl.world/10.0.0.30:8032! `0 Z- @; O8 C6 P3 G  L; W2 D
15/07/28 19:28:48 INFO input.FileInputFormat: Total input paths to process : 1. p7 I) z- H9 f* F  ]
15/07/28 19:28:48 INFO mapreduce.JobSubmitter: number of splits:1
: o6 _4 ]4 Y' k* `( Z2 }$ Y.....
9 Y1 \7 h/ a& f) j( Q9 @7 {( O.....
0 M0 ]8 K  G+ e) r& S0 q1 M0 D
7 I! `. b, k* _4 m  A21、查看结果0 s) V  L# n3 O( ~7 Y4 x
  l6 T2 [9 Z$ q9 s, q# S( N6 G, C
0 @; b, v: F7 x/ F
) F2 Z) q- s. Z$ q& A
[hadoop@master ~]$ hdfs dfs -ls /output01   k: b: {7 D* \1 U
Found 2 items( @, D2 c4 ]5 s0 g4 }
-rw-r--r--   2 hadoop supergroup      0 2015-07-29 14:29 /output01/_SUCCESS8 t7 Q8 U) U8 A: v
-rw-r--r--   2 hadoop supergroup    123 2015-07-29 14:29 /output01/part-r-00000- f! o% z2 O4 z4 J
+ ?& ]* }9 i  z& T: B  I
22、显示文件结果  ^0 ~, [8 }) Y3 S2 b
; O- K' A$ b4 r3 X3 Y1 a3 u

4 M& |! v+ [& W6 J0 a
; \. d  W! C% F4 G+ }% V[hadoop@master ~]$ hdfs dfs -cat /output01/part-r-00000
. w3 w& V: S3 @! x* u(http://www.apache.org/).       1
; w; r0 F0 R" f- p. _Apache          13 D0 S; `( s7 P
Foundation      1) B0 H4 A. J/ O& u+ D$ M
Software        16 K  X* l+ w- E* n9 E1 F- a; k
The             1
$ f  n4 z0 _7 ?& l# v- cThis            1
; D/ O% `) e  j- w) k# {by              16 L% v2 _, ^! q& D
developed       1; c2 e. s6 L; |+ ^& r; E9 H4 j% v$ `
includes        1
, w+ K9 y0 l+ a8 C) g/ gproduct         1
! c- C0 H2 H2 I( T' _  d8 N* Tsoftware        12 x1 X$ f. N; ]

5 k6 R- H( H2 I* @# @: `查看集群概要 $ v7 A. L- U+ ^; P* q. l
http://(server’s hostname or IP address):50070 ) [1 P# C% n( m. G
  6 H3 C/ o( h0 a( |9 r- x
集群详细信息 ) ]1 R  u4 M8 ?' O# c+ r8 C

3 ~7 v- K  Z# ahttp://(server’s hostname or IP address):8088/ * A& C: b( a- L1 H
* v2 h* H- `: @0 K+ Q$ \
9 f+ \+ a9 k+ L7 p) y8 v
# I1 X& A! r/ r7 O, j
 楼主| 发表于 2022-11-7 11:12:34 | 显示全部楼层
目的
本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。
9 X$ V) i( I/ V3 [
先决条件
  • 确保在你集群中的每个节点上都安装了所有必需软件。
  • 获取Hadoop软件包。: m- g$ c5 |: A' Q0 u

) ?& c) ]+ ^8 F7 p% @安装
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode作为TaskTracker。这些机器是slaves
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。
6 X. k3 _3 v7 _2 @5 S8 h# O
配置
接下来的几节描述了如何配置Hadoop集群。
配置文件
对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
  • hadoop-default.xml - 只读的默认配置。
  • hadoop-site.xml - 集群特有的配置。4 Y6 p; k, E( F# b, G6 q' m' \
要了解更多关于这些配置文件如何影响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 :
. t6 \1 Z) V# R- Qexport HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"% D6 F0 w3 ^1 ]
其它可定制的常用参数还包括:
  • HADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
  • HADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB* p1 e* y. ^" K2 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的子虚拟机
    9 V' r# \7 |" u  Q7 \
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,系统将不再记录此日志。
用户可使用以下命令在指定路径下查看历史日志汇总4 Q% q% _0 d/ v* r& T
$ bin/hadoop job -history output-dir
( _. F! R; o+ o4 [0 o这条命令会显示作业的细节信息,失败和终止的任务细节。
. ?  \' X6 o9 i8 @  f关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
, w- A* P/ N! u  H9 U& L3 p$ bin/hadoop job -history all output-dir
" B4 T8 y& t7 i
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。

7 x) h  k4 p; U) |/ g4 hHadoop的机架感知
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- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。

+ N1 V, n* D, K% D4 e启动Hadoop
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
格式化一个新的分布式文件系统:
" Z. a7 T- j/ T$ bin/hadoop namenode -format
在分配的NameNode上,运行下面的命令启动HDFS:. x+ p! y3 x% \9 i$ b
$ bin/start-dfs.sh
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
在分配的JobTracker上,运行下面的命令启动Map/Reduce:: a1 C5 v* D- W1 h, c8 Q
$ bin/start-mapred.sh
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。

$ e0 s* m. M% Z5 n) i+ c' ]停止Hadoop
在分配的NameNode上,执行下面的命令停止HDFS:" L- x! J- \" ?# T
$ bin/stop-dfs.sh
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
在分配的JobTracker上,运行下面的命令停止Map/Reduce:& m' R# l! ^+ @( c0 U# v
$ bin/stop-mapred.sh
/ x9 E+ P3 Y4 ^! O; f/ r. x$ j
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。
! u* w! T- a* g
. |( Y$ o! O) {, _0 M5 q. B9 ^8 |
 楼主| 发表于 2022-11-7 11:12:46 | 显示全部楼层
目的" Y, ^* T" W: ]3 v. i1 D
本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
: f! S2 S1 W, Q+ ], ~& l$ i( w5 D: ~' {, {6 Z
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。
3 P: r- ]1 ^# e) A
2 i; a2 a' D) O- \+ D3 ?2 D先决条件
1 N1 F/ m9 A% n7 U& V确保在你集群中的每个节点上都安装了所有必需软件。6 ~) |  `( F/ }* {; y' Y( u% s% N4 W
获取Hadoop软件包。5 W! ^4 m" }* o) b. x5 S: _8 J
安装
/ s0 M; l, J. I安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。$ S+ I& t- A1 O# M' R

# u0 W# ]- h+ ]+ s通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。
/ L. c3 a& E6 w; _1 ]$ ~
* G. F" C, N$ ]7 s/ s% m4 i' m我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。1 t( J7 H. [! e, t4 |7 O
- g8 q1 t( V8 Z" E4 f! X$ V
配置
* Q& I. f/ j- @. b. Z( C接下来的几节描述了如何配置Hadoop集群。7 p# N# j; D5 v3 c% k/ i

- w9 T0 [# T+ R9 ]配置文件
" \0 d0 Q: N- m/ i  [( B& ^8 e: x对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
6 W' E, |2 @& J( k3 F( d3 }2 l9 D% E2 R: N5 Y
hadoop-default.xml - 只读的默认配置。
# `, R7 f# k- ^5 k' Z9 ^/ j  Rhadoop-site.xml - 集群特有的配置。7 F. }- m9 G8 S1 C: {  A/ Y$ b
要了解更多关于这些配置文件如何影响Hadoop框架的细节,请看这里。
9 Z1 L: L8 N- G! C9 u- N: e8 d1 Q+ C
此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。
+ u) H) ~& I  z- G9 g: [& o; b7 S5 a
' a) }8 u# p: a6 i- l集群配置
2 V" [- [8 u" B- t% _3 {要配置Hadoop集群,你需要设置Hadoop守护进程的运行环境和Hadoop守护进程的运行参数。5 e3 ?3 p/ W4 @6 N8 {4 |' S
1 g3 `: F# P  S
Hadoop守护进程指NameNode/DataNode 和JobTracker/TaskTracker。
( t! L  f; r" B) M
* \6 {# b9 u. O% ^. k% j配置Hadoop守护进程的运行环境9 O/ \" o  x  N, w7 U
管理员可在conf/hadoop-env.sh脚本内对Hadoop守护进程的运行环境做特别指定。
: @, v- x/ ?$ o  i* A
+ |- ~, [# J$ I( l1 k0 T& p至少,你得设定JAVA_HOME使之在每一远端节点上都被正确设置。
: G! {7 V, d$ a, R" b' x+ u
4 L% ]. v  M8 ]1 b/ \8 `管理员可以通过配置选项HADOOP_*_OPTS来分别配置各个守护进程。 下表是可以配置的选项。
( _, l! x* j8 N3 q" r# w3 J% ~! D# c8 G" }* A0 Z: ?) M  }, \
守护进程        配置选项7 o  G0 N" e8 e8 v3 r
NameNode        HADOOP_NAMENODE_OPTS
* S0 d: B1 G7 D: _& J; H/ x8 PDataNode        HADOOP_DATANODE_OPTS
$ z  t8 M% o% `1 x2 T. N6 h, d+ SSecondaryNamenode        HADOOP_SECONDARYNAMENODE_OPTS
! A: C9 b9 H- Q) p  D- nJobTracker        HADOOP_JOBTRACKER_OPTS' N3 x- |: q6 V# Q1 `
TaskTracker        HADOOP_TASKTRACKER_OPTS, [( s9 `, ]% M+ n
例如,配置Namenode时,为了使其能够并行回收垃圾(parallelGC), 要把下面的代码加入到hadoop-env.sh :
6 S3 P. q* g7 P$ h1 o8 Vexport HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"
5 z- Y2 b( J6 X( ^) M其它可定制的常用参数还包括:4 O+ f# Y$ V& |* j, Q

# x1 D1 H0 w3 [9 P& |" KHADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。& ^; Z; T/ Y& P# f4 X0 f
HADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB。/ H1 m2 t; C$ _4 j7 R, o6 ~
配置Hadoop守护进程的运行参数
0 n$ X/ s+ |% J# P7 ?- u! C这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。, ]3 F2 G3 u3 Y$ K0 Z. A& b8 Y9 E

: X% o; t/ \. P$ \参数        取值        备注  f, e8 y" a/ p# }4 r
fs.default.name        NameNode的URI。        hdfs://主机名/
$ k& ?; q2 w$ {! k4 G* ]* Q$ Cmapred.job.tracker        JobTracker的主机(或者IP)和端口。        主机:端口。
* J+ [' p. T, Qdfs.name.dir        NameNode持久存储名字空间及事务日志的本地文件系统路径。        当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。3 @0 X  z. l% d& B
dfs.data.dir        DataNode存放块数据的本地文件系统路径,逗号分割的列表。        当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
9 ~8 B. ?% s2 F0 I5 p/ v4 M/ Qmapred.system.dir        Map/Reduce框架存储系统文件的HDFS路径。比如/hadoop/mapred/system/。        这个路径是默认文件系统(HDFS)下的路径, 须从服务器和客户端上均可访问。, X1 d: f; F  z4 _7 Z
mapred.local.dir        本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。        多路径有助于利用磁盘i/o。
6 z1 k6 ]3 @: l+ imapred.tasktracker.{map|reduce}.tasks.maximum        某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。        默认为2(2个map和2个reduce),可依据硬件情况更改。8 R+ i8 n) j# L0 g9 C
dfs.hosts/dfs.hosts.exclude        许可/拒绝DataNode列表。        如有必要,用这个文件控制许可的datanode列表。& i4 ^4 f( k1 ]0 }8 \" e  ?
mapred.hosts/mapred.hosts.exclude        许可/拒绝TaskTracker列表。        如有必要,用这个文件控制许可的TaskTracker列表。
3 d, b- `; L! d$ U通常,上述参数被标记为 final 以确保它们不被用户应用更改。! O, @, T4 s! A7 ]" A" q

6 L2 I) B% I; ?% ~% K* \' y现实世界的集群配置3 [  Z) [2 Z! p5 H: Q6 j$ c
这节罗列在大规模集群上运行sort基准测试(benchmark)时使用到的一些非缺省配置。
* B0 Z* ^0 c" h% T
8 G, ]1 p8 N' ?6 f运行sort900的一些非缺省配置值,sort900即在900个节点的集群上对9TB的数据进行排序:& o' r$ r1 b. x- U- x. [/ q

$ c7 Y3 B" Y+ F9 m+ J参数        取值        备注3 r' H0 ]* h; l' A5 _
dfs.block.size        134217728        针对大文件系统,HDFS的块大小取128MB。
% f* n0 @9 x4 R0 I" B; W$ Idfs.namenode.handler.count        40        启动更多的NameNode服务线程去处理来自大量DataNode的RPC请求。) [/ B/ w, e. X5 y2 N; ~
mapred.reduce.parallel.copies        20        reduce启动更多的并行拷贝器以获取大量map的输出。1 M# \+ E0 o/ x3 _1 m9 M4 Y
mapred.child.java.opts        -Xmx512M        为map/reduce子虚拟机使用更大的堆。
! b  X4 f2 r9 pfs.inmemory.size.mb        200        为reduce阶段合并map输出所需的内存文件系统分配更多的内存。1 j! `& w& N$ P
io.sort.factor        100        文件排序时更多的流将同时被归并。
7 Y# y* E9 l% M7 e$ E0 E+ Vio.sort.mb        200        提高排序时的内存上限。% Z& ~( `. x* d) y6 d
io.file.buffer.size        131072        SequenceFile中用到的读/写缓存大小。4 {$ V' Z! x4 n/ A2 g3 z6 {6 K
运行sort1400和sort2000时需要更新的配置,即在1400个节点上对14TB的数据进行排序和在2000个节点上对20TB的数据进行排序:+ P: R8 |' I3 ?
: Y/ X; @: ^! z0 _( q; Q2 [) x
参数        取值        备注
. {$ x* M: ^( U+ W: _+ T. Cmapred.job.tracker.handler.count        60        启用更多的JobTracker服务线程去处理来自大量TaskTracker的RPC请求。
$ N( R' ~, R4 t' rmapred.reduce.parallel.copies        50       
' h$ k% M* e0 v# J, Btasktracker.http.threads        50        为TaskTracker的Http服务启用更多的工作线程。reduce通过Http服务获取map的中间输出。' k( ~* @  @, j  Y" o% _- `
mapred.child.java.opts        -Xmx1024M        使用更大的堆用于maps/reduces的子虚拟机; [$ x* \9 U( {% q5 |& Z
Slaves& J' F1 k; v+ k8 y# w. h7 c
通常,你选择集群中的一台机器作为NameNode,另外一台不同的机器作为JobTracker。余下的机器即作为DataNode又作为TaskTracker,这些被称之为slaves。
# ]* K' S& G, U1 q$ M% {' w& W
8 r$ J+ z8 M3 {8 [( }; d在conf/slaves文件中列出所有slave的主机名或者IP地址,一行一个。" R5 p8 L0 c' J2 ^8 a, x5 d0 O1 {

4 P7 Z0 b# j9 t/ {日志
9 c( c6 k4 X/ z: |Hadoop使用Apache log4j来记录日志,它由Apache Commons Logging框架来实现。编辑conf/log4j.properties文件可以改变Hadoop守护进程的日志配置(日志格式等)。
/ q, }) x3 W: R, u$ b1 H
$ j4 w8 A& m3 m) T历史日志
% X4 i$ |/ z: n2 p作业的历史文件集中存放在hadoop.job.history.location,这个也可以是在分布式文件系统下的路径,其默认值为${HADOOP_LOG_DIR}/history。jobtracker的web UI上有历史日志的web UI链接。
) {7 J6 h* K- X9 Y3 |! S" A# {2 b6 |, ^
历史文件在用户指定的目录hadoop.job.history.user.location也会记录一份,这个配置的缺省值为作业的输出目录。这些文件被存放在指定路径下的“_logs/history/”目录中。因此,默认情况下日志文件会在“mapred.output.dir/_logs/history/”下。如果将hadoop.job.history.user.location指定为值none,系统将不再记录此日志。
! f/ j$ ~; E9 \+ T' Q5 j1 X3 T6 B& M8 X& V/ O8 j! y' ^
用户可使用以下命令在指定路径下查看历史日志汇总
' l4 z  E* K/ A$ z7 J$ Y$ bin/hadoop job -history output-dir
! p. r* ], b2 ^, w) L$ L这条命令会显示作业的细节信息,失败和终止的任务细节。9 N; ?. `! S% l0 H9 y2 _
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
$ a7 a/ O* w0 t" L$ bin/hadoop job -history all output-dir# e6 w) c3 D7 x" \+ N2 _- ]
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。
# ]- J. ]! K3 g" h. }( a$ s+ ?, P* S2 Y  m3 s0 W! u
Hadoop的机架感知
) A. y" R. W  l0 uHDFS和Map/Reduce的组件是能够感知机架的。+ V3 i/ X( O: T; l

) ^; ^  B- [  |: t1 HNameNode和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- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
, S% k% P; }0 ~& ?2 Q) g4 F" a, q" F% i# C9 ~; j
启动Hadoop  w; Z# B0 L! ]6 R$ \( w( w
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。% F5 W  t9 k: J8 Y. m; C
& l5 l4 V4 h# V1 B0 ?2 x3 \
格式化一个新的分布式文件系统:
+ f1 e% h7 n, d' p& O: ?$ bin/hadoop namenode -format; c9 p9 F$ Y: p) d9 V

+ T% F9 M1 f* c# q( x# A* b1 X在分配的NameNode上,运行下面的命令启动HDFS:
. `4 z2 B. ~6 O0 p9 Y) M% h$ bin/start-dfs.sh
1 O: X5 N  n& h9 r+ u- m6 `0 E4 M3 e$ ^* P& s
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。3 w" D' k, N! E2 I- ?

$ u- J' |6 k( e& T' s9 b* V. H在分配的JobTracker上,运行下面的命令启动Map/Reduce:5 X3 S7 r0 V5 f; ^) N% J
$ bin/start-mapred.sh
3 i8 e# s5 E* e* E' M  b( z, P& m# }( g2 y# P- r! c* p  j
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。5 c& K: E- [6 L3 r
* Z9 i  S+ [( m% v4 S
停止Hadoop
9 j+ g: }; B  h, ]9 X* T- I. f在分配的NameNode上,执行下面的命令停止HDFS:5 q5 q1 j' Y6 K. a/ p; _
$ bin/stop-dfs.sh
$ B$ @( l. v' v; g* U: R. U. q+ C# H  R1 R
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
) Z! Z2 [! o! u% C: N+ }' J- t' |  J
在分配的JobTracker上,运行下面的命令停止Map/Reduce:
$ X6 k$ t6 V  B" ~- C' ]2 j$ bin/stop-mapred.sh
2 e2 Q3 U) o7 H) ~bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。7 I! s7 v6 K  b& P4 p" f$ H" [7 K4 a
. {: A" B6 K. H
 楼主| 发表于 2022-11-7 11:13:57 | 显示全部楼层
Hadoop伪分布式环境搭建* p0 A4 l# o5 a' i* Z; i+ M

( g; Q3 Z+ m4 d      (1)三种模式0 q+ C9 N$ c+ \# i2 y  g4 `) b* l

3 J. c, s8 e; r$ q: H6 z" n$ L5 F              Local (Standalone) Mode  本地模式:不使用HDFS文件系统,使用本地文件系统,程序员调试用;  r+ G2 B7 ^4 ?% V$ g
2 p7 H9 R! O% i% P) H" Y7 s
              Pseudo-Distributed Mode  伪分布式模式:单节点,一台机器,使用HDFS文件系统,程序员调试用;
5 v6 o# N1 t- f9 o
% r2 r0 v, O, @              Fully-Distributed Mode  完全分布式模式:真实生产环境用,集群。
/ S* [) q+ G, y5 r1 S
: K+ P5 [1 x# M3 V  j$ Y      (2)解压JDK
# f' t$ p$ v! p! P5 n' k# U
4 m0 L& o  Y, W& s7 t9 M0 \              $ tar  -zxf  jdk-7u67-linux-x64.tar.gz  -C  /opt/modules/, u0 U" }+ w6 d, G/ C

- E( `( [1 h- j  y; N$ T              配置环境变量, M/ G0 O1 a, u8 v- D8 ^

2 _! l7 U9 t! q" ^! d! k              #JAVA_HOME
% U% A: a6 n) V0 {: ^' O0 O1 Y               export JAVA_HOME=/opt/modules/jdk1.7.0_673 L7 R- R: |  {" A
               export PATH=$PATH:$JAVA_HOME/bin
8 q0 u2 ?' E* i0 F8 {
: m0 p/ E' ]4 {3 c/ L      (3)解压Hadoop
, t% d; z! [) b
* x1 P& z9 G1 b$ E  P              $ tar -zxf hadoop-2.5.0.tar.gz -C /opt/modules/
" `! G4 e) C( I/ L. G
9 {& N% A4 |9 K+ D% J6 t9 G  s' a      (4)建议:删除rm -rf /opt/modules/hadoop-2.5.0/share/doc/,里面是英文文档,没有作用; m* f- Y( V) U' |5 M* C( X; O
+ v3 Z6 J5 ]$ a8 L
      (5)配置过程; m3 u, K8 o* I( n9 W

  z* @9 T- y+ _3 s9 _' z) \              <1>hadoop-env.sh、mapred-env.sh、yarn-env.sh指定Java的安装路径* |" Y$ ~7 ~$ R1 b
                      export JAVA_HOME=/opt/modules/jdk1.7.0_67
6 }+ g8 v& }8 g5 M0 i& E
* J2 R: A$ f1 D; d% S, a              <2>core-site.xml,指定namenode所在机器位置及交互端口号,另外也是指定使用的是HDFS文件系统
$ b5 I9 C' Z; u% Q3 \7 }6 ~                      <property>
* c9 K7 O5 R: {3 r# I# C                             <name>fs.defaultFS</name>
% K& k/ r2 U8 R1 v- {                             <value>hdfs://hadoop-senior.ibeifeng.com:8020</value>
5 X4 I2 b4 B) K$ \: {                      </property>" B6 ]0 g' g+ v" N& z4 K% A

, o" i6 S3 X2 R: w' l              <3>hdfs-site.xml,指定副本数个数4 f4 X/ C  Z& M/ t( R
                      <property>
4 E! g5 g+ E( G5 B                             <name>dfs.replication</name>
6 l+ v  Y. v0 t) M0 F- e$ z                             <value>1</value>
- A, H& N; [- i4 E                      </property>3 u9 l$ t) X8 `% _7 O  a& J3 S( t
  ~: T- |( J/ t$ ^
              <4>core-site.xml,更改Hadoop默认的临时目录位置,用于存放块文件和元数据文件
. D  I$ i2 s% K( t0 g- k/ G                      <property>
" B4 K9 s4 |" k2 g0 G8 T9 {" H$ Y                            <name>hadoop.tmp.dir</name>
" M0 x  q7 J; B, U                            <value>/opt/modules/hadoop-2.5.0/data/tmp</value>: h% r1 s9 f! L4 h4 G" E. q, _& `* b7 E8 y
                      </property>$ X  `  H/ i- A; H
! i) ?& g  c  o% h9 E. w* a4 j0 ]9 A. n
              <5>slaves,指定从节点位置(主机名),包括datanode和nodemanager0 o1 t5 g; U/ t3 m" Y( f
' V3 n" k5 {6 q3 B7 ~  W
              <6>格式化namenode,对于元数据进行初始化,否则无法读取元数据
2 \. ?- |: h1 `) d5 T/ b1 ~
: b# R" O6 m5 O                     bin/hdfs namenode -format2 m, M" t9 C0 @/ ^, f  Z$ \

4 E  Q, L- U" F: |( \             <7>更改mapred-site.xml文件名称,指定MR运行在yarn上
! s, y& F. W% `# E                     <property>  ^. X$ _0 t% d
                             <name>mapreduce.framework.name</name>
$ {1 Z  X. Q) C2 k- Z* {                             <value>yarn</value>
8 J4 s( b" V# y- b0 v                     </property>
/ ?1 Z1 v9 C, j% {/ S8 N: z+ [8 G' ^  `- _/ ?
            <8>yarn-site.xml
* z8 H; X1 b0 ~0 \% X" u                     <property>$ L' g1 P  B$ b
                          <name>yarn.nodemanager.aux-services</name>" ?* v+ {7 |5 _- k2 Z/ \
                          <value>mapreduce_shuffle</value>
# [8 q, E) R% Y) J' x1 a                     </property>
6 W8 b4 }+ y, v- D& C. ~                     <property>0 |4 l# \3 q& g7 q3 x, P7 C4 I
                          <name>yarn.resourcemanager.hostname</name>9 t  P# v& B' Q4 z1 o/ @
                          <value>hadoop-senior.ibeifeng.com</value>  y7 C) U% z8 d- O
                     </property>
6 K) |7 v6 q: C0 x: m; N
$ g3 O8 N; j! O# e; y4 _            <9>yarn外部管理界面端口号:8088
/ u' s2 I: |% Y# t" @$ c4 |3 @  ?  G1 T8 C& V1 h: [2 E. W
                  HDFS外部管理界面端口号:50070( X1 g1 R' Y1 N9 t0 K8 X

: s4 w4 ?' C- O/ @0 P& ^                  secondarynamenode外部管理界面端口号:50090
  s, K# \# S7 C# j/ d+ \, S
9 I- j( D2 B6 z7、组件启动$ Z! O, g3 {. a: l" l0 c

. U7 h3 F7 p+ P0 ~% [      启动namenode:
+ W6 V; Z# t0 ]
- ]% L; O, f$ u1 ?+ J* m- g5 Q      sbin/hadoop-daemon.sh start namenode
: x, B! S" m6 d3 ]7 }) s' ]+ L  B
' B/ n/ C% R& d" J: A! {1 d2 N      启动datanode:
2 l/ p. d8 Z6 Q
# P! Y. y0 r" E4 L  }) l      sbin/hadoop-daemon.sh start datanode
  C' H1 u8 O; ^+ x* `; c  s- L; x+ s2 {: f$ f
      启动resourcemanager:& P: \% L6 ]5 _# |1 L1 r% P2 H
3 i+ f3 B% P9 ?4 V
      sbin/yarn-daemon.sh start resourcemanager5 H( ~4 ]+ Q: F# d$ E/ ~6 m' `
, H7 n$ v6 S8 j/ [- d2 u+ L
      启动nodemanager:8 F7 ^- |3 s6 Z4 c
: E2 M3 @3 U. G3 b7 l' q
      sbin/yarn-daemon.sh start nodemanager  R# {( c* L7 G

' R! [# @3 U5 @, J. A0 q2 T8、日志
6 Z) q- }$ |( y" \+ q4 l6 E, t& d7 }3 l1 U! C4 s( x  Q8 ~
      日志文件:分析日志文件的格式.log和.out$ y7 X% a0 u. A. B3 {* d
2 e9 {0 ^6 h+ L; }
      .log:通过log4j记录的,记录大部分应用程序的日志信息
2 ?: x4 ^" E* f* A! g8 @: Y+ n! R9 c/ [/ f2 i
      .out:记录标准输出和标准错误日志,少量记录
4 ?6 ^6 \- r" p: c1 v9 p! ^& \8 _5 @2 o- V6 m
      日志文件的命名规则:【框架名称-用户名-进程名-主机名.日志格式后缀】
6 x, q3 [% O+ [  k) d# c! Y
3 \6 d' G* G- J, O- E. l5 k      出错一定要学会看日志,看错误信息,看.log的日志
1 P9 X: n3 O5 u2 W1 s
4 z4 z+ Z* p% N" t6 m1 a  k9、Hadoop自带历史服务器% H: z0 M2 T6 D  ^' u
0 E! u/ K, @6 W6 F6 r9 u6 I
     配置:mapred-site.xml
% }: P; d& e. o) b4 b
% e/ ~; C/ o6 S+ F& i     <property>, k) F8 C- ^7 v& j! I5 ]# {) o7 O
                 <name>mapreduce.jobhistory.address</name>" u+ q  Y" C& k! v+ Q" f
                 <value>hadoop-senior.ibeifeng.com:10020</value>/ c# Y# m3 m6 G2 I6 w) B
         </property>* s4 _( R3 k% j
         <property>0 `2 d6 k) [$ h9 A- W  m6 F
                 <name>mapreduce.jobhistory.webapp.address</name>8 z* R2 C7 i1 T% P& x2 A' @
                 <value>hadoop-senior.ibeifeng.com:19888</value>$ s2 `, D8 e3 Y/ c. P
         </property>
( n6 e4 K, I  t& N/ S2 @  T! @, s  F  r7 }5 w$ Y0 Q/ X. B. l
     启动历史服务器:sbin/mr-jobhistory-daemon.sh start historyserver% W& P; f. y( S/ s: K3 P

! Q4 _3 K1 ], r$ h; v$ U10、日志聚集. d/ J' D1 P8 h# `

5 W& Z3 g/ D$ Y1 F5 n* I) x      日志聚合是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚合功能需要额外的配置。9 c: q: F. I" V; S% ]' X8 x# I$ S
+ }$ C- }( @, O
       yarn-site.xml/ P: C! B: a/ g7 e, D7 n

( p1 b7 l; I& ]        <property>
" N2 b( v4 o0 Z1 j+ e                 <name>yarn.log-aggregation-enable</name>
/ a3 q# x( T; k1 r  u                 <value>true</value>
* W' p  K: n4 t# o# N. b         </property>: R7 J( X% t! P! m8 u
         <property>9 E; A5 b! O0 M
                 <name>yarn.log-aggregation.retain-seconds</name>
3 z/ L7 Z8 K% S: d% K8 [                 <value>106800</value>
$ b0 G- I/ Q) U0 _9 M* ^0 R         </property>& k5 W5 R0 o2 Z8 V# o3 E
. h1 E8 B3 x9 Z( x: i. g$ N7 L" J
        单位:秒
& ^! F9 K+ i* w% E. q% P
3 ~! {: Z, [& Y: t! E      重启resourcemanager、nodemanager和historyserver:- T0 T  q* _" @" N: Y; H# ?8 h; Z. Y
- M7 @# h# [! G5 b- a
      sbin/yarn-daemon.sh stop resourcemanager
3 _  g( b4 r: s; j! M% `1 Y; l$ @3 F, |
      sbin/yarn-daemon.sh stop nodemanager2 J! A$ M! ]; D9 Z6 t) F( T

. ^: V, F* E1 r& ]& X5 g* V, t5 d      sbin/mr-jobhistory-daemon.sh stop historyserver4 g( ]' ~* U4 ]
+ Q* c  ~) Q( T
      sbin/yarn-daemon.sh start resourcemanager# G1 {% {, p4 w( A! D7 M

/ M  p. k  T. T% G      sbin/yarn-daemon.sh start nodemanager7 S2 ^0 N" X- |% B# n& V/ Z
# f) e  y/ L) ~9 K
      sbin/mr-jobhistory-daemon.sh start historyserver
2 ]2 y& g8 B/ F: `" p. d$ Z3 C8 g7 C, _
11、HDFS用户权限检查
- T6 w: `* E0 h. U) N2 f+ ]' @5 b" x$ t
      hdfs-site.xml- r, |- ?0 ~1 {& h3 T

& }; n1 z- Q7 c* ]4 I( e( r1 x7 x      <property>$ l  B5 N2 O8 O( Q* X$ M) t
                 <name>dfs.permissions.enabled</name>
. W- q; n& F& B6 H& q                 <value>false</name>- t8 v- `+ E  z& E* o
       </property>; q4 z) m) m2 \# @
; d7 _) l5 L" m
      core-site.xml
$ l) \- l4 j0 ~& E$ C* ?7 r8 `6 G3 Q5 h( [
      <property>
1 v6 g! T$ d  e' A                 <name>hadoop.http.staticuser.user</name>
8 Z' e9 @7 p9 c) M0 {+ }1 r# G                 <value>beifeng</value>" F- t6 B7 R4 u$ i* p2 o
       </property>
+ {- X9 `0 B+ }$ W& k8 U
, s! K' _( d! p2 a      重启namenode、datanode、resourcemanager、nodemanager和historyserver:
# R  t5 v) f& w; Y% `& e; [  ]- _) B- u/ S: E
      sbin/hadoop-daemon.sh stop namenode$ P) M, ^7 q+ s
$ k5 r, y! w/ G2 B: C. I
      sbin/hadoop-daemon.sh stop datanode
3 p' i: }5 J# m) o, y: w6 l) O
5 u4 _+ d( h( f5 |9 {. Y      sbin/yarn-daemon.sh stop resourcemanager
& u! [: O7 M+ b$ b  [2 _8 {  e6 }) J( `, C
      sbin/yarn-daemon.sh stop nodemanager
' m# x% W  u- m4 P5 @: P+ k8 _6 n, L$ h  M9 Q% J- L; F
      sbin/mr-jobhistory-daemon.sh stop historyserver
+ I" a6 C* O. w& m4 H$ i( B
6 l/ P2 T5 i+ S$ I4 z8 A4 v      sbin/hadoop-daemon.sh start namenode
& j( c5 [% T  M9 j) U& Y( R
4 J0 f5 [: N3 E      sbin/hadoop-daemon.sh start datanode8 P3 }% |" X/ C* G, k

1 r1 R( k7 l0 p      sbin/yarn-daemon.sh start resourcemanager, |- H2 o. ~4 h8 ~; B* a8 F
, w/ _0 n, N5 E
      sbin/yarn-daemon.sh start nodemanager  T/ H4 ~4 W8 J6 ~- ~0 R
$ B3 q" H& I$ _: k& ]
      sbin/mr-jobhistory-daemon.sh start historyserver0 p6 f. E( M; y: q
. m% v1 c- p, |  G, \) k7 \5 p
12、SecondaryNameNode* S+ X) M- a+ I# q5 Z, O

6 v$ h+ A7 m& \( l       NameNode启动后的元数据存放在内存中,启动前的元数据存放在本地文件系统文件中。
; a! R( v7 F" X+ j+ M9 Q- b  \
3 o' K& g/ `) X1 u       HDFS格式化后生成fsimage镜像文件,其中存放文件系统元数据,NameNode会读取此元数据,并存放在内存中。' B/ n- b) N$ b1 V! K
/ q* y0 Z# W! h6 Y2 ?
       edits文件,编辑日志文件,用于保存用户对于HDFS文件系统的每一步行为操作。3 t% ^) A  s" t) W9 g) {0 |

) e7 H; s  G' ?/ k       NameNode启动后,先读取fsimage镜像文件,得到元数据,再读取edits日志文件,数据就不会丢失。% _$ V* D9 C# Y* R0 J" a/ ?

4 Y/ R9 u* j5 k1 O2 A6 N5 V       SecondaryNameNode用于减少NameNode重启的时间、合并文件,SecondaryNameNode读取两类文件,加载到内存,写到一个新的fsimage镜像文件,然后再生成一个edits编辑日志文件,每隔一段时间将新生成的fsimage和新生成的edits合并成一个fsimage镜像文件,即每隔一段时间获取HDFS元数据的快照,这样NameNode重启只需要读取内存中的fsimage镜像文件即可,读取镜像文件比读取日志文件快很多。
( @8 q; o# d0 j& S1 y, p
1 A8 T: I2 w! ?       hdfs-site.xml
- I( B. @. d6 @, k, Y
5 X: G- G: O, o& y& v9 p9 _$ ^/ A9 f( y       <property>4 u5 t, B) a) c: D' D
                 <name>dfs.namenode.secondary.http-address</name>' o( S2 J) G$ |8 G
                 <value>hadoop-senior.ibeifeng.com:50090</value>
  |7 G: O# C9 K. M; k5 ~        </property>
: _9 t. C8 i: N/ p5 K% B4 c
; T* h: w9 L2 n4 Y4 w4 E7 J       启动命令:$ sbin/hadoop-daemon.sh start secondarynamenode
# [$ b& V7 C! k3 K8 Q# Q
* E! F; l( b; L+ ~" {* G! v2 Q7 |13、块文件存放地址, M) b( R* {& X1 N
5 [% u1 e' Z( r
      /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-2012260383-192.168.74.128-1516569449179/current/finalized+ s+ g; g% j$ w) ~0 X0 P

, T* L& |3 V, D& e5 f$ s4 z      镜像文件、日志文件存放地址! S- p! ?/ C5 Q7 f9 y. K
, N5 G6 _: e5 H' E
      /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current
9 S- D, j6 R7 H* ?
4 j+ G6 B& k5 P+ C      dfs.blocksize自定义块大小属性(单位字节),在hdfs-site.xml中
+ J$ |# D% ~7 u# }  E# q7 o$ l! d- x
14、SSH免密码登陆
# i+ c) D) A1 H- G) P
( p$ r1 M6 ~1 p2 M. Z$ ^3 n! Z      使用sbin/start-dfs.sh脚本文件启动namenode、datanode和secondarynamenode时,需要输入用户密码,使用SSH免密码登陆的话,就给用户生成公钥和私钥,用户将自己的公钥储存在远程主机上,将公钥发到需要登陆的服务器,当需要登陆时,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回去,远程主机用事先存储的公钥进行解密,如果解密成功,就证明用户是可信的,直接允许登陆shell,不再要求密码。
, i6 C' a' z/ G' n4 P0 r
7 _) [. g* {& z- |: \# t      配置SSH免密码登陆:
4 O' k, R# I" P- f' R0 c7 S6 H; v. L$ G8 z) D
      cd home/beifeng/.ssh
. A4 y6 D$ S( d' f5 N4 \/ V. r" `  o* w  i0 Y# ?$ i
      ssh-keygen -t rsa! e' `4 C+ m  y$ p4 q+ k0 u+ H* Z! {! F

1 X- }9 L" V/ Z: N6 e0 l# A' H      即生成id_rsa和id_rsa.pub文件,其中id_rsa是私钥,id_rsa.pub是公钥。( p2 F. P& w5 [. N8 G# N

9 v8 V0 t  ~1 p* f, w2 j2 b      ssh-copy-id hadoop-senior.ibeifeng.com1 y  h8 r8 `  |7 h# [& r

8 P5 p7 N; N* J3 q" C( l( `+ Y      即生成authorized_keys和known_hosts文件,其中authorized_keys是向远程主机发送的用户公钥,known_hosts是记录文件,有记录文件就不需要再输入密码了。
2 U- Y' `2 j8 B; p% g: A  [  M* D3 ^1 Q4 E* A# S$ \
15、Hadoop配置常见错误" F- |4 n( @& b* Z
* {7 A& S/ j1 Y
       <1>不要多次格式化namenode,如需再次格式化,需要先删除data/tmp/下的所有文件。: n, q3 e9 [! V, i1 P  M7 k  x2 X

+ \8 N! x# D2 H3 n       <2>集群ID不一致,即6 a+ X3 q8 i, f( K7 k8 s
* @' L; Q+ r% l7 X! y  J
             /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current/VERSION
" c, N2 _4 i' j! o
& G' i8 Q5 J# S/ {             /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/VERSION  A0 u5 s" u' h, h  ?+ I0 e
. X* M) y. j' W6 K% K# |% M
             两文件中的clusterID不一致,这是由于多次格式化导致的,解决方法可以如<1>,也可以依据namenode中的clusterID来修改datanode中的clusterID。5 Z% a  D7 g2 L. D  h  h
2 ~, Q# U3 I  E2 ~) q
       <3>端口号被占用,使用netstat -tlun查看。- h/ K, V& k0 B3 G" {. d6 Q6 y

- y% O$ i% z# }$ n6 G4 W( Q  l       <4>多用户混用。即/tmp目录下有多个用户的pid,多个用户在各自的环境中启动了同一个进程,造成pid文件冲突。解决方法:将/tmp目录下的.pid文件全部删除,再用一个用户启动进程。
  y, D+ c2 E3 g) w2 O9 \8 K
# A! j2 _3 B. y7 O7 x* d16、Hadoop配置文件
8 C5 G$ Z/ J3 t. W/ Y2 e+ A: N. F$ R8 B# \  S9 w
      Hadoop配置文件分为默认的和自定义的,每个模块对应一个文件。
) e4 ~! j9 x( T. E/ h
8 w) V% E& Y; R3 v      系统启动会先加载默认配置文件。默认配置文件存放在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。
" Q8 @4 E5 l& d& X7 z" U2 B, _' o* h) \5 i
       自定义配置文件优先级高于默认配置文件,如果自定义配置文件中有配置,会覆盖默认配置文件中的相应属性。
+ k/ Z. }9 K' o
, }& h& d1 D* V/ g17、安装rz工具& f; T9 P6 w$ W* B

" `+ `- {- ?! j+ L0 e" z       切换到root用户后,用yum安装lrzsz。rz工具用于将Windows中的文件上传到虚拟机中,如CentOS中,只能在远程工具中使用,不能在虚拟机中使用。
8 u6 \$ U8 b  n3 l# _
4 E" ~3 r3 G; B0 I# D      su
/ A: Z% W. t& s" X
4 v) `' ?' Z* w9 _, r- k      password:( c% q! @7 P2 u) t' D
) d0 Y$ r+ G+ j& v
      yum -y install lrzsz
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-9 01:12 , Processed in 0.063735 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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