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

分布式hadoop【CentOS7】

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-9-26 10:27:20 | 显示全部楼层 |阅读模式
一、安装jdk (各个节点均操作)
) r! R1 \: T2 H$ P1、环境准备
9 L/ [( v. w  ?& R) ~) i' \" U) M! D: a( A& I
  B  Q( r8 d- \+ j+ _% |7 I
6 l; r" [- s+ e% b/ Y1 D, U
1) master.wyl.world (Master Node)
6 F0 f" y( O1 P6 _3 J# Z  M, q2) node01.wyl.world (Slave Node)+ O3 [  N# h5 m% _7 @, X; X
3) node02.wyl.world (Slave Node) ; s3 \6 B$ g3 _  ^9 T) H. I

, G* w' T  D. j* K( r1 S2、下载jdk包
! i4 k- ^) O6 V# k5 U
# B( B# ^7 Q4 w7 Z& g1 U7 L. D# g6 @' V. W
. C# [! v0 f7 b  R5 {, O
[root@master ~]# curl -LO -H "Cookie: oraclelicense=accept-securebackup-cookie" \
- y  ?3 p4 L9 Lhttp://download.oracle.com/otn-pub/java/jdk/8u71-b15/jdk-8u71-linux-x64.rpm; F9 k) k5 F# d# ^* p% e

3 }) c* C, Y& k1 O7 z3 x安装jdk  `8 @  M1 k/ J9 W" S

7 B; j: g  c& ^+ _: _  T4 o
1 |$ A* {8 r0 j6 M9 ^5 V% G
4 ?" k2 o9 ?7 n: B' V+ z4 m, s, `[root@master ~]# rpm -Uvh jdk-8u71-linux-x64.rpm ) g7 i; w/ i, U2 [/ P
Preparing...                ############################## [100%]  l2 n) m/ m/ F; x; y
   1:jdk1.8.0_71            ############################## [100%]4 H8 [; S: ?5 z4 a- k! u% f. q
Unpacking JAR files.../ q) }: n$ Q! w4 }
        rt.jar...
: f$ q# f, j/ E0 F' ]; V+ b        jsse.jar...
, K* L* y2 ]* d, h) K        charsets.jar...5 Z  B) o, J+ R9 L  x3 C  M
        tools.jar...# q) ^; y8 ]: M! g& H- X
        localedata.jar...
, X: i& d8 _3 \7 c5 u! U3 {1 B        jfxrt.jar...& x4 P( ~9 o) S3 d6 p/ e! G; r! i

7 h. n% L( k' q4 x, U3、更改环境变量
" I6 @- P8 O% D6 K; k7 Z* y
0 f7 Z4 D# O( ]" ]
1 T2 f# L4 w5 G0 G; g- W5 h8 v
[root@master ~]# vi /etc/profile7 `& i' F7 D( ?0 G  @
# 加在末尾+ _9 T* r6 U- I7 C! P  r4 M8 z% z8 t6 i
export JAVA_HOME=/usr/java/default( i" W8 p% D3 l
export PATH=$PATH:$JAVA_HOME/bin
4 h- W* I5 y) z0 k( m/ Lexport CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
# [% g) L8 M$ G: g  |3 L9 s8 r; Q8 u
/ }! M) w1 K+ ?% }) I) @4、应用环境变量* b( H7 h# G! r
: e/ Z* P: @7 R0 l5 p# U
" {" u8 s+ t4 n

2 z7 M5 O" G5 K( o; t/ n* Y! }' T$ K[root@master ~]# source /etc/profile1
+ r, K# W1 }# d% B  v% n9 j0 v; ~$ I
" x! G" c! n9 C# F! l) r. q$ ?5、如果系统之前安装过其他版本的jdk,需要更改默认配置. L  ^3 s3 J9 X. G: H7 I$ @

" R: H9 _, d5 k) ~
+ k) {3 Q% R  @9 `" X6 ~3 J5 a' s; x
7 z( L8 A6 R! d& {0 l- _4 L[root@master ~]# alternatives --config java
" U: c0 }& ?% _! {+ o
" p) _+ d7 ?" Y2 `There are 2 programs which provide 'java'.
3 r; `$ n% S2 [/ U) t& M! w+ b3 Y% }% o2 [
  Selection    Command
& W0 T* Q4 g: Z; d4 O-----------------------------------------------7 q& ^1 D: F) I. j4 B; [
*+ 1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java3 e, W( T2 r3 u. p- ]
   2           /usr/java/jdk1.8.0_71/jre/bin/java
7 p/ r+ O5 a; u( C$ |3 R% i) K2 K/ o  O' T0 f' \# `9 A( _
选择最新的) D0 Q$ J' [6 l# M7 I5 c* [* D
Enter to keep the current selection[+], or type selection number: 2% u* _% y' a2 L: m! C* A

# M) v" [% d- T4 E  R6、写入一个测试程序
& X* {: L0 m7 n! @+ F) \& G4 B: N$ c7 X0 @- l5 g2 M

$ Y6 b  s( d) O& ^6 D' d0 i/ P% u1 [
[root@master ~]# vi day.java0 x1 [1 B+ S5 F- u+ w! ?1 b
import java.util.Calendar;' `% l2 C' u2 o3 N  L

2 L/ W9 n/ Y9 U9 L4 V, E: ~& s& dclass day {$ X7 f6 z+ `2 c: U& H9 F4 V& S5 ^+ H# k
    public static void main(String[] args) {
" C( w* W6 l# R' S& v- b        Calendar cal = Calendar.getInstance();- K! D  d9 \+ ]  s
        int year = cal.get(Calendar.YEAR);
9 u+ W" p2 `+ L+ d& C- M; z        int month = cal.get(Calendar.MONTH) + 1;
7 g9 O0 w2 K- W# H$ P( W& ?        int day = cal.get(Calendar.DATE);
# q9 r* L- Q& V        int hour = cal.get(Calendar.HOUR_OF_DAY);
& R7 `( \: q6 S7 V  A9 s, V        int minute = cal.get(Calendar.MINUTE);
) w& m: q, O. m4 C  T8 c( Z- q        System.out.println(year + "/" + month + "/" + day + " " + hour + ":" + minute);
( R+ }! J2 A% E# J) V% g7 U. L  H    }
/ P( f6 v; L3 P! Q, K}. H2 J6 G$ G2 w* U7 `2 O" Z
' j6 l+ [7 H7 D
7、编译6 ?) B9 R" o' z/ e
) ?4 E  a( [; v, l: v
7 T; ^* f# x$ R4 U1 y' d
+ ^& J, q" g" `% U2 z+ U
[root@master ~]# javac day.java- E* z2 @" B; t

! v2 h0 c" g# H( r4 a8、执行
+ U0 I( D0 t! C  t6 y/ _. s& Z0 X$ @6 k
" g" `* f  _. d* r4 H- B
) R3 u& z, U. u+ T1 U$ z3 u
[root@master ~]# java day
  \, Z  Y  h' X6 A( ?9 o2015/3/16 20:30
, u) l, e, z! D) w- R
" M% ?- X( y% G  |$ f  [# j2 _二、安装hadoop , }1 m# ~' x# q) A2 R1 R
1、在各个节点上创建用户,并设置密码: Q4 @" \& l8 o& i. `  |

7 F9 I. h8 {7 z6 U7 J7 O
4 T- l8 r. Y! ~  v; j; R
' t4 e. z1 F0 m[root@master ~]# useradd -d /usr/hadoop hadoop . f! y, N* }& b
[root@master ~]# chmod 755 /usr/hadoop
8 q. y. ]# u+ `5 x- x% p/ k4 h* Z[root@master ~]# passwd hadoop
5 O0 a7 Q; b+ ^- Z. TChanging password for user hadoop.0 n! D* ~/ z3 k( Z2 U" Y1 _
New password:% ~" q7 R7 N* {$ S, `# g+ c# }8 P
Retype new password:
; Z' I' d0 n/ N) s% Dpasswd: all authentication tokens updated successfully.
: W$ R" P' _( U8 w  V' y5 u! m- `* J$ l( \5 Q3 C+ Y) v
2、通过hadoop用户登录到master节点上,生成秘钥,并拷贝到其他节点上 ) a3 ?) V) O/ x: T
生成秘钥( G1 y! N" R0 c  l. d

) t# I9 s9 X6 E9 b- ^, Z3 N# M/ b3 d. u' b6 f3 A
/ @5 q  e* C0 Q
[hadoop@master ~]$ ssh-keygen ( ?/ d8 K& j- l4 {( V1 o
Generating public/private rsa key pair.
. F3 z! e) f; ?. A7 m  B; t4 j- dEnter file in which to save the key (/usr/hadoop/.ssh/id_rsa):
( Q  t- B. g" z# ?7 c1 K1 ~' r  wCreated directory '/usr/hadoop/.ssh'.( [- C' z! ~2 K1 F5 R5 O+ F
Enter passphrase (empty for no passphrase):
$ q0 f! Y) Z1 S6 X) BEnter same passphrase again:: V) Q) d$ E1 e
Your identification has been saved in /usr/hadoop/.ssh/id_rsa.& Q; e* Z+ p) h1 i- Q9 L
Your public key has been saved in /usr/hadoop/.ssh/id_rsa.pub.
. I3 o! z) l1 Z6 O& R3 RThe key fingerprint is:
9 g; a; x$ [0 x9 ~- }: g2 h. fxx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hadoop@master.wyl.world
3 P3 d. C( ~" T( O) G* IThe key's randomart image is:# U1 V7 X. A. T( E- g
3 i+ h  |4 k6 G6 O# @
3、发送到本机  m1 l7 _9 |5 s/ G, `
, m8 u8 B. e5 ^6 H4 s0 U

, d* s" H; q9 q+ ^; J7 w
  S% _& S, m1 V1 M[hadoop@master ~]$ ssh-copy-id localhost 7 Q1 G% v+ q) H. ?9 p: A
# S  W: ?* t$ `+ Z5 Y
4、分别拷贝到node节点
- |4 R5 e, [- `3 S! }- u9 y* W; a& e7 V  d

: }/ v3 P+ _5 x1 p% \1 i. {4 ?0 E7 U
[hadoop@master ~]$ ssh-copy-id node01.wyl.world
5 K* ]! S) N/ f% X" I% X* ?[hadoop@master ~]$ ssh-copy-id node02.wyl.world " S$ r+ t  C+ k3 p! P

: I2 L: A# B7 ?9 O! n* L5、通过hadoop用户在各个节点上安装hadoop
5 J& c0 }* v5 y% J/ o可以通过下面路径下载最新的安装代码
4 ]% L7 b* W4 C( r; O- b3 Z2 M) V( b
* I0 c8 B2 ^0 J* \% e

/ U# x9 R1 E* [6 _. b, ^9 whttps://hadoop.apache.org/releases.html5 K* y/ R+ p" d" m: R* C5 z
$ A- P- Z1 t' w8 n; v+ @7 g
下载安装包
4 \% @6 U2 m8 c# E5 F6 v3 v7 v
; D4 ~& G/ J: X2 N0 U7 b0 h+ s6 M/ n  {5 n& i" s

. P, x2 C6 k6 Y4 d% _3 [1 |[hadoop@master ~]$ curl -O http://ftp.jaist.ac.jp/pub/apach ... hadoop-2.7.3.tar.gz " i6 q5 w. ?+ Z. I( c
' T/ q- y6 O4 @
解压安装包2 ?& f8 e! X- Q9 m2 d

- Z8 M4 [$ I0 l* T% D  r
* B  c# l/ X3 e! T0 M& j/ n. f9 O" I# x* k/ B+ G: B' ^
[hadoop@master ~]$ tar zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop --strip-components 1
6 o% g! w6 Q. @% g4 B; C2 L
7 F. z2 J; u# P" T& [写入系统变量( W& y; {5 \- a: K0 I) P! A) E
4 {7 {6 ]$ S* N2 _3 P

7 C) h6 J7 l  B- _' `6 G5 c% T2 ?6 e6 e# Z, U
[hadoop@master ~]$ vi ~/.bash_profile7 U# x, Z8 u5 F9 V" C* s
# 加在末尾
' b% |& u8 T( Y0 t. Pexport HADOOP_HOME=/usr/hadoop+ w. C2 U4 J, k) Y
export HADOOP_COMMON_HOME=$HADOOP_HOME  E( y! v7 @0 ], h8 F
export HADOOP_HDFS_HOME=$HADOOP_HOME
2 R& V5 I, Y& uexport HADOOP_MAPRED_HOME=$HADOOP_HOME* o! S' p  `; ^: D8 _1 S# h
export HADOOP_YARN_HOME=$HADOOP_HOME/ d' m, V$ J9 A5 |
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"; R; U' F! E- ^+ C
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native! N0 E/ K2 w& ~; e4 V' x9 S& p' w
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin0 P, ]$ A! o$ u- D
/ S! ?! s  A$ r5 j  B2 u# Q
应用系统变量/ [/ b+ n' _. Y" u0 d5 u9 m

& v- g* V/ T( g( v! v: {8 m  ^( M3 L7 y
2 z. U0 R0 S: M# F, [
[hadoop@master ~]$ source ~/.bash_profile : S1 s8 g! C9 K" t
$ V& |2 a: _3 b: v8 q
6、通过hadoop用户在master节点上配置hadoop 3 k- p9 m' T" U6 i. i; h
创建目录
) r4 p! P9 Z8 T4 |4 M. ]8 h8 D& |
8 d# M. _3 f, F: i
2 A+ ~1 L; V! P2 h6 s
' w$ Q2 d- _0 F' z4 ?[hadoop@master ~]$ mkdir ~/datanode
8 g: F& @& N8 M) q9 V[hadoop@master ~]$ ssh node01.wyl.world "mkdir ~/datanode" : `4 R2 g9 p# Y8 f8 v0 p
[hadoop@master ~]$ ssh node02.wyl.world "mkdir ~/datanode"
$ B3 i. D% g. O4 n, ~
4 M( V0 Q) \5 ]  V' X7、修改~/etc/hadoop/hdfs-site.xml/ q2 E$ }5 i0 f9 o

9 @7 e; X" Y1 }) J/ s
1 E! f3 z5 g0 `0 Y! [" J( ]0 n) Q! {
+ Z. [/ [0 M7 P3 m. ?在 <configuration> - </configuration> 之间加入如下内容8 A7 {0 Y( A6 j2 y/ D4 I; s4 e
<configuration>4 D+ _  I  K) x  u8 P' v0 S
  <property>
0 `" v; ^% Z4 E# n    <name>dfs.replication</name>6 d. a5 @. M1 A0 B5 L! R
    <value>2</value>
! L/ f  j& M- t  i% ?  </property>
/ }; B, }* |$ S/ e. @+ G2 y; M  <property>* C4 a4 f7 t" |" S  ?
    <name>dfs.datanode.data.dir</name>
9 Y4 L. |* n3 ^    <value>file:///usr/hadoop/datanode</value>
% _1 @: `% x6 Y$ e3 O. ~  </property>7 a0 q/ T% e) d4 V9 N
</configuration>! E/ d4 M' N# M/ z) p
+ H0 u# n# W8 k0 _; R3 R; D
8、拷贝到其他节点上
0 P7 a7 u- {' j- n" N) ?
4 ]* }# [/ `, j# H/ ~4 C, _6 N, T8 G7 U3 {+ F/ q( K
! a) S" b! \; n7 N, @
[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node01.wyl.world:~/etc/hadoop/
- a( G, U: a/ s[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node02.wyl.world:~/etc/hadoop/
5 a2 r+ |# d: `0 ?
3 B6 w$ C5 P3 l9、修改~/etc/hadoop/core-site.xml
# f' _+ z8 x5 f. y, m  R; @; e
3 h3 V; O* p% I7 X
- X6 p' k3 \9 e/ G" ]0 D* X" a9 m( t+ A+ b5 a5 \# v) G
在 <configuration> - </configuration> 之间加入如下内容$ F  ]9 f; B# i4 `6 K" \! \
<configuration>
3 e! ]% W* ^+ v  <property>
0 }6 X9 a3 E9 N* Q8 ~9 m    <name>fs.defaultFS</name>
4 i/ W+ ?; _8 J) d    <value>hdfs://master.wyl.world:9000/</value>. T8 q7 M8 z8 P' V& r
  </property>& z7 g6 R) j) g0 p0 J. E$ _
</configuration># o, _5 ?6 W  b; s

4 |' e; R4 F7 y10、拷贝到其他节点上
& b. U7 ?" G- Q8 s9 ^! c5 h# ]% w( u1 A1 n) l; T: {0 p! L+ }  r

* K" I1 H$ n5 B7 x+ ~6 g- `3 _& D5 e0 K( Q9 k# z
[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node01.wyl.world:~/etc/hadoop/ , m+ B1 G3 e( x2 ~& k, T
[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node02.wyl.world:~/etc/hadoop/
; u/ q  ?3 }- I  p  P3 W[hadoop@master ~]$ sed -i -e 's/\${JAVA_HOME}/\/usr\/java\/default/' ~/etc/hadoop/hadoop-env.sh
+ B! p$ i) G3 k8 o2 T, m[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node01.wyl.world:~/etc/hadoop/ 1 R) f" l4 m8 j! c# L# I
[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node02.wyl.world:~/etc/hadoop/
6 c$ i, |  f( }3 }* J4 h% Y2 W[hadoop@master ~]$ mkdir ~/namenode   q  f, k1 k* H+ B- P; a1 }
8 y2 u7 L. o" Z8 n# }
11、修改~/etc/hadoop/hdfs-site.xml
4 X0 {9 _8 `% ^- C, W9 i+ a* j  @7 K3 ?. s, N9 _* e

  q( f4 j2 O8 ~( x8 p  C9 ?6 N7 k; [6 n  B+ U' z4 ^5 T# A  y( }- a. p
在 <configuration> - </configuration> 之间加入如下内容
/ B. u. E! @' x9 ^7 V<configuration>
+ H1 A8 @  m& [! T0 j$ x  <property>/ C( A& I' T( Q" G$ R: P
    <name>dfs.namenode.name.dir</name>1 M4 S% Y, w3 s
    <value>file:///usr/hadoop/namenode</value>7 J4 G+ F) ^+ Q) s* [
  </property>
# S3 f- I; ?4 ?</configuration>) \% L; A/ R5 T6 g' ]  m

( n) j2 x* K( `4 y( M4 B# K* _( w12、创建~/etc/hadoop/hdfs-site.xml并写入( V# [/ @' n6 m; j

* R* M0 {$ a, |3 G# create new6 Q: B  Z7 k$ \- M$ Z9 q& v" t. R
<configuration>) j  c  u' U+ ^8 |4 q7 k
  <property>
4 {' w9 a' n; M    <name>mapreduce.framework.name</name>2 t( I$ E' ~9 ]6 a6 Z# J( N2 {0 H* g
    <value>yarn</value>7 H. L& ~7 [6 N" A
  </property># N0 ]1 K' s, h( a
</configuration>3 T" ^, `% L4 J1 I: A
+ y) ~& c$ x3 i0 p0 `) h' m
13、配置~/etc/hadoop/yarn-site.xml
0 _# V- O' d6 Y1 V+ t9 X" D9 q1 ?# [" j3 `  {& O) G. n

8 f7 P) g* f2 S) X+ T% z/ t8 f6 {! n
在 <configuration> - </configuration> 之间新增如下内容
# C, H( ?8 e. e, [# B! O<configuration>
: o& Y) d' ~" @8 H. N- x  <property>1 `( \3 {4 ]+ h, y$ i$ `
    <name>yarn.resourcemanager.hostname</name>
' \5 t- A  [* k8 C    <value>master.wyl.world</value>. ?7 a. r$ c+ P, _
  </property>1 U( j3 \& p4 b7 M
  <property>3 g3 C3 Z" K1 b; {
    <name>yarn.nodemanager.hostname</name>, q4 I- g8 ~& a/ g. h6 W' a" [8 w
    <value>master.wyl.world</value>
5 T: z1 C+ ?# ]/ }! }0 F  </property>
4 e8 L# [" a3 a3 D  <property>: l  `$ I- c2 Y5 Q
    <name>yarn.nodemanager.aux-services</name>
4 U3 \! Q8 M9 ]; C1 Z. Q& X' o    <value>mapreduce_shuffle</value>
, E3 U/ L0 F. @  </property>3 U: k4 \) w. D/ r
</configuration>
  U0 H3 R/ ^5 e: V8 V4 O, s1 ^( ]5 t% g* d# f# [+ m2 v3 q6 K
14、在~/etc/hadoop/slaves写入各个节点信息
. O- M6 Y/ m) N; W, j" l  C5 T
: v* ?' B5 K" n( b#添加所有节点信息,并删除localhost
0 x: Q7 W% ?* umaster.wyl.world+ c  e7 R% N- [9 \; R# M1 t4 W
node01.wyl.world
, L" ]6 N1 U3 ]; e& N/ m4 Z* Bnode02.wyl.world
9 `3 ?* @3 t* R6 [' U$ [4 A# A" X
; }9 g6 k$ P8 Q4 ?15、格式化namenode并启动hadoop服务
6 \  V2 d8 U- w5 S$ o格式化节点! m2 o$ o: I7 L: K' c0 P$ s
8 K- Y- d9 @) c! i4 w) [
" p6 Y* {$ D5 a# T. T
( h/ `; r* `- M& a+ ^3 d) G
[hadoop@master ~]$ hdfs namenode -format 2 N/ Q5 n# ?  |- d0 t6 c
15/07/28 19:58:14 INFO namenode.NameNode: STARTUP_MSG:
3 F  j; d  g% H/************************************************************
! A3 B* D6 m" p4 e3 e# P6 K/ ESTARTUP_MSG: Starting NameNode
# t9 J5 l% c0 q4 l! Q- bSTARTUP_MSG:   host = master.wyl.world/10.0.0.30, g9 P' f* G5 e" C( @- d
STARTUP_MSG:   args = [-format]0 _, Z4 E2 q9 \7 ]. w; K
STARTUP_MSG:   version = 2.7.3
  ?0 Q$ P$ s* i: z6 j& k) G) V.....! e8 J, Y  e' s! j* [5 a8 ~
.....
1 I; o" ^' p5 U$ ?15/07/28 19:58:17 INFO namenode.NameNode: SHUTDOWN_MSG:
2 I  i* v9 z' e& u9 k- P/************************************************************
5 S$ V& c: Q2 K5 dSHUTDOWN_MSG: Shutting down NameNode at master.wyl.world/10.0.0.30) U6 G& t% a' w* w( |$ p$ ?
************************************************************/5 O9 j) r0 O: ~3 h' m& ~0 V
. {4 ~+ F, y* M! N
启动dfs
7 j6 |$ w9 [, Y5 ]" s3 E- T# ^- D" ?

& L- ^8 w7 g9 q* E; G* P% B/ t/ d
' h+ S; L4 `9 q2 D% a- }4 n! t[hadoop@master ~]$ start-dfs.sh
) F! l( T+ ?- w( @7 eStarting namenodes on [master.wyl.world]
2 I3 R1 r$ f! W/ p& q2 J# Kmaster.wyl.world: starting namenode, logging to /usr/hadoop/logs/hadoop-hadoop-namenode-master.wyl.world.out* s) j* T4 V( I7 Q% [9 k; j
master.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-master.wyl.world.out3 r% q) D: \8 R! E
node02.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node02.wyl.world.out
$ D: @4 E. T! g+ w- I) hnode01.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node01.wyl.world.out
1 u. _9 _! c, T' G$ dStarting secondary namenodes [0.0.0.0]# E3 G, Q4 P4 o$ j4 ~/ v+ R
0.0.0.0: starting secondarynamenode, logging to /usr/hadoop/logs/hadoop-hadoop-secondarynamenode-master.wyl.world.out
6 e9 t5 ^2 V7 r! I  J% X" v$ L8 @, H8 I  x" y, x& |6 L
启动yarn
3 V9 b- i3 p$ B& h, B0 S
; s2 E( E6 E. i! T5 Q* ]. J" P- ~) S3 O9 k# H3 X. }0 U0 A7 ~' z
( O! ]# r/ _0 X' i+ \/ L; T4 a
[hadoop@master ~]$ start-yarn.sh
* ?8 \: `2 r& ]  a( A$ ?starting yarn daemons( Z: \1 q# a4 l3 P& k# E
starting resourcemanager, logging to /usr/hadoop/logs/yarn-hadoop-resourcemanager-master.wyl.world.out
, r; S  z3 L6 t/ }master.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-master.wyl.world.out5 F9 M% a6 C* `+ I
node02.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node02.wyl.world.out' l9 e  k/ T* [; C& C
node01.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node01.wyl.world.out; a$ R, S1 p. [% J+ w1 w) j

& I; L1 }' o: W16、查看服务状态,正常如下,如异常,请返回检查配置3 [( T/ Z! ^& I3 y+ c
& e. g' J7 F& E3 }! }' |

7 H5 G% Q, j3 i/ _9 i) o% Q0 D; Y% s# `! W
[hadoop@master ~]$ jps
; C% |. a3 G. r/ o" C6 w. D0 p3 O! L2130 NameNode
# Z# q4 C6 x5 @. Y4 U; b2437 SecondaryNameNode3 Y$ {% W; c' x7 w/ a8 J3 L
2598 ResourceManager0 u+ l* V7 ~' x2 E  I" W3 f2 m
2710 NodeManager9 r( o4 N0 ~' E" E; k, D. |
3001 Jps4 v4 k2 ?- |" N% |2 b6 P% b
2267 DataNode
8 ]% \- |/ p+ ?, C
+ y1 W& s% l+ d+ T4 u* w( a# m17、创建目录
$ |8 H% Z$ m! _5 t$ i' B& V7 Z+ h% F. O; k

. l( Q7 [8 C/ A0 R+ Y! r) p+ D8 o9 N3 P
[hadoop@master ~]$ hdfs dfs -mkdir /test  O2 x, l! E) c: i9 l" h) @( r

! [$ T8 R  g4 S5 y' A18、拷贝一个文件到/test6 F& ^1 b8 A1 t
7 u7 F& `& l9 t

& D, ?6 D9 ^' s. C$ Y
2 n* ]. |4 [: M[hadoop@master ~]$ hdfs dfs -copyFromLocal ~/NOTICE.txt /test( g2 l& X0 ^. g) U" X
9 M+ s9 B( y6 I& O
19、展示文件内容
' z) G  D  z0 @& a2 _1 S4 H3 c& O5 o. _: W+ I% V
1 `( _( W7 ^+ _2 \; x3 V$ v

2 D) h1 y# u) f[hadoop@master ~]$ hdfs dfs -cat /test/NOTICE.txt $ w! S' }  ^/ r1 n) q. o0 ^# Q
This product includes software developed by The Apache Software6 h- p6 M/ H1 {! Z
Foundation (http://www.apache.org/).% g5 b0 I6 [' v0 A7 `
9 F1 n, I0 B, u/ R2 o' J
20、执行程序( o9 H6 j- k3 C( P- N$ Y( {) f
5 u4 r3 B/ b0 w

! S2 {  Z0 s' R9 [# `* e- J  S1 x) E
[hadoop@master ~]$ hadoop jar ~/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/NOTICE.txt /output01
# I9 [" |+ j3 g15/07/28 19:28:47 INFO client.RMProxy: Connecting to ResourceManager at master.wyl.world/10.0.0.30:8032, Z1 n+ n" _7 h+ S( X; _. R* N
15/07/28 19:28:48 INFO input.FileInputFormat: Total input paths to process : 1% j% R9 j$ r2 i1 g1 [$ {6 k+ l
15/07/28 19:28:48 INFO mapreduce.JobSubmitter: number of splits:1
* f4 W8 o% D8 B8 [, n; F3 s" L.....; F/ ~. N! T- |  m* G% z
.....: @  m: a: P+ Z6 T
! D: B  G! ]1 K! M9 a  }
21、查看结果
' k  \0 w: [9 H2 D
- D/ E7 h2 U: g( q& u. e; y6 A9 `& x* |% B8 }8 d! Q) S0 w
) g( z2 G# n0 }* p
[hadoop@master ~]$ hdfs dfs -ls /output01
. T# `3 K+ Z$ u$ w6 ~Found 2 items- V0 Q2 h7 }- w, N
-rw-r--r--   2 hadoop supergroup      0 2015-07-29 14:29 /output01/_SUCCESS: ~3 c( d) U6 X  E9 I6 I4 y1 n
-rw-r--r--   2 hadoop supergroup    123 2015-07-29 14:29 /output01/part-r-00000/ J  \  y* d: I

& `  m- Z+ W8 q22、显示文件结果
: y4 A2 q8 D2 q; Q# T" s* g- m( v  U1 k4 |5 t! V
7 ]6 _( l# V" m0 o8 }
0 i, P1 N( @$ G& W
[hadoop@master ~]$ hdfs dfs -cat /output01/part-r-00000 6 V' U3 a2 T: Q' h" o% ?! u
(http://www.apache.org/).       1
5 T9 K% l( G- j5 K# }; d# X( _3 ]5 lApache          1
' h; {7 N  _8 P# X" O7 n: CFoundation      1$ J! V) @! t) o/ n) ]" Y: V5 H
Software        1
( c6 E+ o0 d* eThe             10 ?1 W, C5 H$ ]8 C( e
This            1) x, }% `& {7 x4 s5 ?: s, p3 C$ d
by              1
$ b. v7 l9 {' hdeveloped       1
) }$ _) j3 o) `includes        1) I- w% O0 W0 J! Z) Z& r; |
product         1! ^% c: c# [; [5 N( b& V
software        16 m! O; c6 B( @; @0 Y1 R. M
2 Q4 [4 K: m% y' I8 j( I
查看集群概要
- M" b5 p9 B( Q; f' Ohttp://(server’s hostname or IP address):50070 : X$ P8 k8 @8 `; ]) ]- i/ M7 M, t5 v/ W
  
8 G6 M7 R2 x* n. r集群详细信息 6 C% e' ~! j+ l$ X. M

3 l+ o1 [- O" x+ f: ihttp://(server’s hostname or IP address):8088/
0 n/ d3 V$ x$ g9 G7 h0 C8 M
. B  l2 V& Y2 d+ [
( ~: U! x0 }0 u0 i9 ~
- L* C& ?% C, f( z5 o) l

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:12:34 | 显示全部楼层
目的
本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。
" N4 u: F  T' I
先决条件
  • 确保在你集群中的每个节点上都安装了所有必需软件。
  • 获取Hadoop软件包。5 m) ~6 Q1 y) l  Z

0 Y5 Q& M& ?5 C& ^$ i3 |安装
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode作为TaskTracker。这些机器是slaves
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。

5 a! y  l! [! K1 o6 }. U5 g* ?配置
接下来的几节描述了如何配置Hadoop集群。
配置文件
对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
  • hadoop-default.xml - 只读的默认配置。
  • hadoop-site.xml - 集群特有的配置。5 d% O3 F* a$ Z( w
要了解更多关于这些配置文件如何影响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 :
) c; l3 K- c" Iexport HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}". e1 y$ S2 u& K! e! t( D0 N9 d
其它可定制的常用参数还包括:
  • HADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
  • HADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB' b  m& z* O0 N% t+ P  N/ K& l* g6 l
配置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 Z$ G+ `+ K. u* w
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,系统将不再记录此日志。
用户可使用以下命令在指定路径下查看历史日志汇总
* e. a! ]. E5 C5 R# z5 z9 I$ bin/hadoop job -history output-dir
  W( B! C7 a, M) c" C; [% K这条命令会显示作业的细节信息,失败和终止的任务细节。; J$ k+ z4 u, o, c% \8 c% P) G$ K2 d) c
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看6 A* `) t5 P- ]" N0 ~) L
$ bin/hadoop job -history all output-dir
9 A# u, V  g  [4 d. H
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。

% [1 Z: e1 x+ b% X. u: j& oHadoop的机架感知
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- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
" I7 [& h: ]  _0 _8 B( @7 H
启动Hadoop
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
格式化一个新的分布式文件系统:* u* C: g+ x* U8 _- l
$ bin/hadoop namenode -format
在分配的NameNode上,运行下面的命令启动HDFS:
8 D( S: }  ]+ q# q- s$ bin/start-dfs.sh
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
在分配的JobTracker上,运行下面的命令启动Map/Reduce:
* C3 z: p; Q, J4 p* P; ^$ bin/start-mapred.sh
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
/ Q( m" o- o+ b0 g
停止Hadoop
在分配的NameNode上,执行下面的命令停止HDFS:7 V5 _! I( C% x, S: }1 t
$ bin/stop-dfs.sh
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
在分配的JobTracker上,运行下面的命令停止Map/Reduce:- O2 S7 N6 z! o3 u8 r
$ bin/stop-mapred.sh$ b) v) N7 R. Q( L' [
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。

0 X; E% ]$ ]. A4 G5 u( y$ O2 j1 A3 B! p% ]* Z, U. M

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:12:46 | 显示全部楼层
目的% `4 \5 ~: a: T
本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。2 G. G. b0 Y) ?" E7 P- Q

% I: ]' |/ M8 N; j: }如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。; V- p1 C7 B* v8 x

2 f+ ^( j; k% g; [$ J! z2 ]先决条件
1 H/ q! e; S4 f确保在你集群中的每个节点上都安装了所有必需软件。
% K+ `1 }8 N, `! k" }( V( W获取Hadoop软件包。6 H& }9 L+ `  D+ ^$ ]  U  P5 o
安装2 L. N* ]. ?2 a( b9 Y, ~3 s
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
3 Q, P& P/ ~0 Y4 C+ U; H. h2 j# K$ i$ W
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。/ |. K! M% L6 H

* ]1 P- A, N. y, ?. K5 `我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。
  F% B3 `% D0 F
. x9 B1 L! C7 [$ z3 |3 E- A4 s配置
% W* n' i& v$ e' H3 e接下来的几节描述了如何配置Hadoop集群。
6 J$ U( I  a# y( w# Q/ ?/ B: ]8 H: i: o8 T4 Y& S
配置文件, b( a- V8 Y4 X: I+ b; ?' a
对Hadoop的配置通过conf/目录下的两个重要配置文件完成:: c4 T& Y9 Y! Z6 _$ N! d3 n, y
+ h6 `) b4 i! q& [3 {+ I- a3 q
hadoop-default.xml - 只读的默认配置。
% e6 n/ v: p2 Lhadoop-site.xml - 集群特有的配置。7 E- z, R7 p1 ^3 ]
要了解更多关于这些配置文件如何影响Hadoop框架的细节,请看这里。. V! k/ U+ D3 @6 n
9 p" Y9 k5 l! x5 I" k, _# S
此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。
7 H9 q' i5 r! C* H. E4 w4 D9 z$ h5 K; f8 E' O2 x
集群配置
* g: ^0 g$ `# g( @要配置Hadoop集群,你需要设置Hadoop守护进程的运行环境和Hadoop守护进程的运行参数。5 G9 t* G) t! \: V7 C: U
. z# R9 q9 R( U  v& w( |$ D* M: Z% B3 _
Hadoop守护进程指NameNode/DataNode 和JobTracker/TaskTracker。3 n& G, e. C* ^, P

8 _5 `6 v$ g/ n) o配置Hadoop守护进程的运行环境! N3 _# F8 Y, W" g! W
管理员可在conf/hadoop-env.sh脚本内对Hadoop守护进程的运行环境做特别指定。) J( ?) f* p+ Y+ X; M' F0 b& X
. p; v" ?8 M) v9 b+ ]+ g
至少,你得设定JAVA_HOME使之在每一远端节点上都被正确设置。
' j& Q2 z  _8 X- E! w. j: l7 O/ Z' y% [* N& G  t$ \/ d& ]
管理员可以通过配置选项HADOOP_*_OPTS来分别配置各个守护进程。 下表是可以配置的选项。
3 f$ {" o4 w* Z+ \2 Y# W# }+ e% r5 H- [" t" G; J/ d- Q: I
守护进程        配置选项
) q% G+ X$ Z% E6 CNameNode        HADOOP_NAMENODE_OPTS
5 c+ e* U! k9 P7 W3 J. j& ~  XDataNode        HADOOP_DATANODE_OPTS
2 k) t" X8 p6 n9 p  W2 jSecondaryNamenode        HADOOP_SECONDARYNAMENODE_OPTS
; F* P+ Q) T+ f0 q  z) [: Y$ _3 V: fJobTracker        HADOOP_JOBTRACKER_OPTS  W& Z" I" ~% c( B* J9 h
TaskTracker        HADOOP_TASKTRACKER_OPTS/ G2 {' v! }7 b5 v% {
例如,配置Namenode时,为了使其能够并行回收垃圾(parallelGC), 要把下面的代码加入到hadoop-env.sh :7 z5 z1 o/ Y/ h! q
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"
$ W6 J7 S$ \/ N5 G其它可定制的常用参数还包括:( i3 o7 a6 r6 ?
8 j3 F  o" I- |3 z3 h8 J& E
HADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。. K5 B- M8 ]$ |' o  W) @
HADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB。8 W( S# ?$ M- A3 N! m" n
配置Hadoop守护进程的运行参数
  q7 j) c( y$ Z/ ^7 p! @3 b; k  S这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。
5 [# G: s: A( w* E& a; J* N# Z% b9 k* n; j  p
参数        取值        备注( N% u0 h0 F0 i/ U: ~+ q6 n: Q1 [
fs.default.name        NameNode的URI。        hdfs://主机名/+ k4 B) h% e9 ~& d$ |9 ]
mapred.job.tracker        JobTracker的主机(或者IP)和端口。        主机:端口。
: \! W6 D7 ]' G4 Fdfs.name.dir        NameNode持久存储名字空间及事务日志的本地文件系统路径。        当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。" C& s* O6 ?  X' l
dfs.data.dir        DataNode存放块数据的本地文件系统路径,逗号分割的列表。        当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
1 T3 ?% a5 Y3 R0 p. D, l- ?mapred.system.dir        Map/Reduce框架存储系统文件的HDFS路径。比如/hadoop/mapred/system/。        这个路径是默认文件系统(HDFS)下的路径, 须从服务器和客户端上均可访问。
  T3 t8 e+ j4 Z' P8 Pmapred.local.dir        本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。        多路径有助于利用磁盘i/o。
/ L4 p. u! A; H# a0 M& X+ qmapred.tasktracker.{map|reduce}.tasks.maximum        某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。        默认为2(2个map和2个reduce),可依据硬件情况更改。
! c- u( l6 Y" p# ?% T9 i4 ydfs.hosts/dfs.hosts.exclude        许可/拒绝DataNode列表。        如有必要,用这个文件控制许可的datanode列表。
* X' o; m0 \( D3 x( g: ?2 Qmapred.hosts/mapred.hosts.exclude        许可/拒绝TaskTracker列表。        如有必要,用这个文件控制许可的TaskTracker列表。
9 y7 g: B7 _( `6 x: Y7 B  z通常,上述参数被标记为 final 以确保它们不被用户应用更改。
- g- L" \- s) k4 ^
5 b2 O4 S1 A; p3 z现实世界的集群配置
. _. o1 |" a- n1 q# s; U. X这节罗列在大规模集群上运行sort基准测试(benchmark)时使用到的一些非缺省配置。2 t7 v& v; L, i9 \! e- C" t& K

& d# h2 t. T; U  a( M运行sort900的一些非缺省配置值,sort900即在900个节点的集群上对9TB的数据进行排序:6 I9 A6 B0 |- M; Y/ B

) e8 b7 A/ A6 o5 `! B- F参数        取值        备注4 m& N+ j+ ]# a6 e2 {  r
dfs.block.size        134217728        针对大文件系统,HDFS的块大小取128MB。
9 z6 N# A% q) |! z2 b/ N  ], idfs.namenode.handler.count        40        启动更多的NameNode服务线程去处理来自大量DataNode的RPC请求。" _: Q. S5 P' M9 s1 L5 P0 y3 {
mapred.reduce.parallel.copies        20        reduce启动更多的并行拷贝器以获取大量map的输出。
' j4 u. L9 Q1 d; H3 l; I/ s4 ~mapred.child.java.opts        -Xmx512M        为map/reduce子虚拟机使用更大的堆。" b/ o$ \& e# k4 n
fs.inmemory.size.mb        200        为reduce阶段合并map输出所需的内存文件系统分配更多的内存。
! z- N' [% r" P) y# }) d0 i0 Lio.sort.factor        100        文件排序时更多的流将同时被归并。
& |) [$ n5 \( k$ l1 I; e5 C# ]5 aio.sort.mb        200        提高排序时的内存上限。
4 K' s9 m, S( Y. g8 f' @io.file.buffer.size        131072        SequenceFile中用到的读/写缓存大小。6 U( S& m- c6 M& S! z8 ~- H
运行sort1400和sort2000时需要更新的配置,即在1400个节点上对14TB的数据进行排序和在2000个节点上对20TB的数据进行排序:
2 e( x3 t+ L' z4 V% B9 Y# w8 k# C
参数        取值        备注
' f2 V! S$ l6 p4 C' y; `mapred.job.tracker.handler.count        60        启用更多的JobTracker服务线程去处理来自大量TaskTracker的RPC请求。( u/ V, z8 q7 o% H$ D
mapred.reduce.parallel.copies        50       
1 Q4 K( `5 V) q5 X3 Atasktracker.http.threads        50        为TaskTracker的Http服务启用更多的工作线程。reduce通过Http服务获取map的中间输出。% K# `1 m3 M: ]( ^2 Y+ o, l2 W2 S
mapred.child.java.opts        -Xmx1024M        使用更大的堆用于maps/reduces的子虚拟机6 [; ]% D, j3 E1 c$ M0 w3 j
Slaves. J, B( u! l8 f! H+ ?0 C1 a
通常,你选择集群中的一台机器作为NameNode,另外一台不同的机器作为JobTracker。余下的机器即作为DataNode又作为TaskTracker,这些被称之为slaves。1 U; B( K& u5 [# d& J* l, i5 h
( c. ^" N  _0 a' R1 L
在conf/slaves文件中列出所有slave的主机名或者IP地址,一行一个。
+ u8 [5 Q$ t" I2 j/ ?
- m7 \; v9 A$ I( l; C9 b日志
( ?6 T" U4 Z- C3 ?# z9 V* x7 ?* ~Hadoop使用Apache log4j来记录日志,它由Apache Commons Logging框架来实现。编辑conf/log4j.properties文件可以改变Hadoop守护进程的日志配置(日志格式等)。, d# p# ?; C& z* g% q6 H; M

, P+ K% Z1 p, Y: V  b4 s历史日志( k8 j5 U+ N# q! \' V! k2 j6 A
作业的历史文件集中存放在hadoop.job.history.location,这个也可以是在分布式文件系统下的路径,其默认值为${HADOOP_LOG_DIR}/history。jobtracker的web UI上有历史日志的web UI链接。
( Q" @+ x" i' Y* w2 ^0 d8 I7 J6 Q' z, i2 |. B2 Z
历史文件在用户指定的目录hadoop.job.history.user.location也会记录一份,这个配置的缺省值为作业的输出目录。这些文件被存放在指定路径下的“_logs/history/”目录中。因此,默认情况下日志文件会在“mapred.output.dir/_logs/history/”下。如果将hadoop.job.history.user.location指定为值none,系统将不再记录此日志。5 _: r/ S/ I1 p# |

0 o% ]/ F% U! m& F用户可使用以下命令在指定路径下查看历史日志汇总, j. \4 n' K9 i$ I
$ bin/hadoop job -history output-dir
) E* b' L4 K6 B$ _; [这条命令会显示作业的细节信息,失败和终止的任务细节。
( d0 m7 z2 s7 d2 L0 v关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
- R' }  o- m, @/ Y6 y; k+ X$ bin/hadoop job -history all output-dir
/ x, P( e* {" m. b一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。. s* x) t* h" E* V+ c8 B
4 d! O- f! x% A+ I" B( Y- p
Hadoop的机架感知
- i% v7 c, S3 dHDFS和Map/Reduce的组件是能够感知机架的。
9 n/ C) `2 S; E2 e3 F( f
6 u$ ?3 |# V/ @0 H/ B% m$ E  KNameNode和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- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
* N2 r) D7 T, ?  B0 K4 i2 [8 D! W% O" Q
启动Hadoop
0 `& x9 R; {2 B启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
5 \- _3 u' s' f% ?& n1 U5 |
4 B" v- Y1 z4 T$ S: d) a. ~格式化一个新的分布式文件系统:: }- W+ M/ A  n1 v
$ bin/hadoop namenode -format
8 z0 h( \' E( d( ]6 K$ p* F8 q$ S' z; }4 a: i
在分配的NameNode上,运行下面的命令启动HDFS:6 I/ R1 u1 e* Z8 o) [, q0 I9 |$ M
$ bin/start-dfs.sh
- o, c/ }2 K: r9 G
! I/ V/ u1 i4 ~. n+ H; N4 tbin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
- i. t" @, {+ z0 E! U6 x  \6 T0 u4 f+ E
在分配的JobTracker上,运行下面的命令启动Map/Reduce:- v* A8 o- \' p2 I0 U
$ bin/start-mapred.sh
: T2 ~) W0 O. W% \! Y2 B6 j% V* ~1 S, |4 F  K
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
( D1 K& a3 H1 k2 A0 k7 Z. I9 G* u7 ?5 I4 Z) w6 |5 i4 Y
停止Hadoop4 c, X% U5 L0 V
在分配的NameNode上,执行下面的命令停止HDFS:+ \8 W( K8 Z9 r9 f" l' S8 `7 X' Z
$ bin/stop-dfs.sh$ `! \4 Z4 J$ ]# I& _6 z4 b/ a
* r0 S$ h7 C- T
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。4 C. X. M8 O" q' i
! s. z2 T, e$ B4 m7 m0 m0 v
在分配的JobTracker上,运行下面的命令停止Map/Reduce:
5 {7 g& p6 W  Z5 |* K+ F7 E5 D$ bin/stop-mapred.sh4 n& ?+ h5 F2 R( X
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。+ l* e8 ?/ ]. a# C0 d7 s* m9 Z5 |  P
5 `! E/ [2 J3 A' \& ^

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:13:57 | 显示全部楼层
Hadoop伪分布式环境搭建9 a' m2 N: |8 q
1 ]6 x! l: @6 J% q8 F6 s
      (1)三种模式: L" }9 [9 G! m

& _: `/ Q3 d/ J+ N( C, `  B, P              Local (Standalone) Mode  本地模式:不使用HDFS文件系统,使用本地文件系统,程序员调试用;
: P8 M( t- s2 ~% r1 ^6 s+ G+ b- e5 I: ?  c9 {) ?. e! G1 A
              Pseudo-Distributed Mode  伪分布式模式:单节点,一台机器,使用HDFS文件系统,程序员调试用;
0 Y# W+ @" n' @: Y8 k$ Z" A3 @% h
              Fully-Distributed Mode  完全分布式模式:真实生产环境用,集群。1 {  e1 h. X5 s! F) V  E
8 ]; s6 A, }& `$ g5 r7 b
      (2)解压JDK4 u# ~- {: t! G4 K3 `. M! k
; f4 N0 K7 g& [, M$ z5 m
              $ tar  -zxf  jdk-7u67-linux-x64.tar.gz  -C  /opt/modules/! I; t" r4 H: U7 G4 a9 L- w
. j5 P2 j; q8 s& B
              配置环境变量) W4 E# ?+ r' a: _- j$ x

, V! X# [# h0 f& d              #JAVA_HOME- k4 ]) s9 j1 n9 i4 l9 H( l
               export JAVA_HOME=/opt/modules/jdk1.7.0_67
1 O8 ]2 k6 Z7 d; B4 z  I               export PATH=$PATH:$JAVA_HOME/bin. p0 j2 X4 |5 n( t3 T* n

) y3 k% c% A: h- T6 D1 a      (3)解压Hadoop
: O/ e5 d/ r' r- Z( J( U) V
# Q/ G; ^, |) Y3 W              $ tar -zxf hadoop-2.5.0.tar.gz -C /opt/modules/
: }3 q  e1 j$ W' n! v
. I6 Z# k6 [9 G# Q      (4)建议:删除rm -rf /opt/modules/hadoop-2.5.0/share/doc/,里面是英文文档,没有作用
& _8 t* @8 M$ [$ c- U7 j
/ A; m4 {& f* w. ^5 f% w7 `* v$ a! g      (5)配置过程
0 r8 K' s5 _9 l, [  {1 z  o) v
$ ~6 F6 K! s+ F              <1>hadoop-env.sh、mapred-env.sh、yarn-env.sh指定Java的安装路径4 u5 v$ g  u2 U( @
                      export JAVA_HOME=/opt/modules/jdk1.7.0_67
1 g" l5 F1 ?+ e: T6 k& @% Y+ K, u) I' g
# G- P# W0 n. G6 C7 v              <2>core-site.xml,指定namenode所在机器位置及交互端口号,另外也是指定使用的是HDFS文件系统' O5 s$ D$ M. J& p. R2 z
                      <property>/ B6 f( }$ ?" i' |5 D: z
                             <name>fs.defaultFS</name>
$ q- P$ P6 q" n% l  P: U                             <value>hdfs://hadoop-senior.ibeifeng.com:8020</value>$ |3 o8 d4 Z; \9 r
                      </property>
3 B1 v% z# G' \! G/ J
% b- i* z" r$ i- `& z/ n              <3>hdfs-site.xml,指定副本数个数
& b# X2 F* h8 k. M  b                      <property>1 w* j; q0 D5 j; v& x9 o7 i0 w
                             <name>dfs.replication</name>4 R7 z8 D/ @+ M4 \6 I& `
                             <value>1</value>0 l+ `* G; @: k( {' U) c8 J
                      </property>5 B+ B( L; ?4 }
& T. ]  }) A( ]- H9 B
              <4>core-site.xml,更改Hadoop默认的临时目录位置,用于存放块文件和元数据文件. ~( Q! O, C6 R6 |+ a
                      <property>$ M; T9 f* Z9 i) f5 e
                            <name>hadoop.tmp.dir</name>0 e- ]! f5 n4 N& P1 o0 R
                            <value>/opt/modules/hadoop-2.5.0/data/tmp</value>2 J6 I1 b! v4 u0 J' V# |/ o
                      </property>. h) n( _5 ]' D$ D5 [3 C
) N1 B' _2 B7 Z$ C# Z
              <5>slaves,指定从节点位置(主机名),包括datanode和nodemanager! I% l7 m; ]! q& H
0 P- E' t' N: Z: q
              <6>格式化namenode,对于元数据进行初始化,否则无法读取元数据
8 V4 g8 a: Z0 a+ K  H) i8 C
3 N4 c, y! [6 r" [: p( M                     bin/hdfs namenode -format1 W! h, B6 o& z& k) x

$ V2 J  [% V3 g6 q# u* n2 |- N, W             <7>更改mapred-site.xml文件名称,指定MR运行在yarn上  w% L* {2 R- q; v* d& G+ M
                     <property>
0 W* R9 n  ?5 ]8 i# C                             <name>mapreduce.framework.name</name>
, R1 F  E4 k% n" e3 f! H2 i* `                             <value>yarn</value>
' ~' O: m1 c* H3 q# y                     </property>+ g% L+ L6 c# t$ _" M

7 ~# t4 `, [. L) p! T            <8>yarn-site.xml$ j+ b, O+ ~4 L" V0 c# l5 \/ b. t
                     <property>/ H) L3 Y' X/ b6 p7 t5 ?9 Y
                          <name>yarn.nodemanager.aux-services</name>' M0 ?, `9 [. f
                          <value>mapreduce_shuffle</value>: O5 N) o! Q/ T
                     </property>
2 H) \3 ~( q0 f; X& \                     <property>
3 N+ ?) o7 h# h7 h% v                          <name>yarn.resourcemanager.hostname</name>% s2 X# A+ B/ S' Y" H
                          <value>hadoop-senior.ibeifeng.com</value>
/ v7 E# w3 }" r8 a' ~! _  P7 v, t                     </property>
  K: s4 y" ^. E5 P9 z4 O7 m1 {+ S9 e; ~6 \7 B) j8 p% J
            <9>yarn外部管理界面端口号:8088
4 Y, A1 e; v8 l: p
* C: ^' n/ Z7 H                  HDFS外部管理界面端口号:50070: W+ @0 B, d) i: P" D9 F
1 f  ?/ A$ s2 E- X! j
                  secondarynamenode外部管理界面端口号:50090" o3 |  V+ {" T* }

) v8 |- ]  z% v3 I4 W7、组件启动) A' t$ Z* ]& P" x; A
, }* F" o4 P9 @( V' I8 f/ f: K
      启动namenode:$ `5 N( e) a) a. \6 |

/ K& o3 H; b. b# I      sbin/hadoop-daemon.sh start namenode& b" ], R( Q$ Y, R1 U7 t

4 O, X" ^1 S6 I( \. y: w- w      启动datanode:. q8 t7 o7 z4 T/ w7 }/ `
. X4 a, b, H. ?3 R# G4 J$ @( m, x
      sbin/hadoop-daemon.sh start datanode
" s9 i/ c8 q' |# C8 P9 T1 n: u6 S- m( E4 u' V) s
      启动resourcemanager:3 {7 b3 S4 v  t, t

+ g, {; t* c7 Q# [3 N' H2 m) ^* A      sbin/yarn-daemon.sh start resourcemanager
3 p! u9 z( q' g1 U* b6 _9 s6 D: h- o$ \8 l2 u8 @, ~' h
      启动nodemanager:
2 r& R: k1 z9 P' b6 @5 G
5 U% c3 W# ~2 N" y( j( I' D$ `      sbin/yarn-daemon.sh start nodemanager
* O7 k9 V$ L5 F- X
4 I$ M5 z2 q+ o8 W- O8、日志
& g, o; S9 [# d3 d
7 Y& i# p" u8 E. ?) g* B      日志文件:分析日志文件的格式.log和.out
: A- b1 [9 r8 d& A$ D( Y( u5 _- t5 U$ V! ~6 S4 G; V
      .log:通过log4j记录的,记录大部分应用程序的日志信息7 x" u) v" n- U" X

9 S" e; {$ t2 A& l      .out:记录标准输出和标准错误日志,少量记录: w0 q4 W2 ]' J- K# e+ K
# q2 B9 H" J9 Z. i" B6 d
      日志文件的命名规则:【框架名称-用户名-进程名-主机名.日志格式后缀】0 ^1 \2 H& o" }6 U9 d- R) a

3 x, f/ |% k) X% @! Z3 ]      出错一定要学会看日志,看错误信息,看.log的日志
& R! E# d3 C, U6 `  O! E
! E1 d+ b5 [3 N" l" S$ A" {9、Hadoop自带历史服务器
+ ?4 H* m! q3 J' j# X3 E5 h- c- S7 a: _: J6 r: }. |( P
     配置:mapred-site.xml
6 x" F1 L6 m7 W0 j5 R; m/ q+ J2 V8 x) L" y' z; N. t* N
     <property>
+ Z/ s; Y3 t. A- Y. y' S. ]                 <name>mapreduce.jobhistory.address</name>3 P5 z" V  t! |/ @& R+ C8 s
                 <value>hadoop-senior.ibeifeng.com:10020</value>
$ T+ t! [' L0 M: [! x) s         </property>
8 T$ D. \) M8 M1 ~7 w6 I         <property>  c* {! N  o# k$ I; f/ R2 j- x
                 <name>mapreduce.jobhistory.webapp.address</name>- S0 T5 \% ?3 _0 \5 {- Q& c5 [
                 <value>hadoop-senior.ibeifeng.com:19888</value>
5 t2 f! t  m4 a; y6 x9 j         </property>; H8 n  g4 S. {* [4 @! h% X

  P- a& h1 J* b0 G" {     启动历史服务器:sbin/mr-jobhistory-daemon.sh start historyserver
' \0 L7 Z- x% `% C0 K$ J3 T! a$ A1 i! W
10、日志聚集1 u% M" x: S$ ]4 u
7 }' _0 \! H6 x
      日志聚合是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚合功能需要额外的配置。
, u8 Y, S% ]6 Y: \* W; z5 t6 L. l/ ~" H- o; e; y- R
       yarn-site.xml  }7 x7 |: N2 X0 p
* v+ h9 v: t' d# x, ?
        <property>
$ T4 r& \9 z: h$ W7 a; v( c# v' J, U                 <name>yarn.log-aggregation-enable</name>
7 Z# P! {; `8 n" |  s                 <value>true</value>
$ {$ J7 R: n" e  J0 W& j         </property>2 y; g' u6 {- E" S: a1 K
         <property>
7 n( Y1 E6 j. t                 <name>yarn.log-aggregation.retain-seconds</name>0 j! T0 a4 L$ e0 s  [9 q
                 <value>106800</value>: s, f1 V0 V6 D
         </property>8 f" `' S* g% A2 G: o8 n

4 X1 K% h4 c) E# G, |        单位:秒
. U1 ]2 C/ \' s; B4 P
! M0 }+ [/ s' g7 y& _      重启resourcemanager、nodemanager和historyserver:: k& [. s6 ^* z5 D. i1 X# W: B

8 v7 M3 K/ }, H  _+ O( n! \      sbin/yarn-daemon.sh stop resourcemanager8 b" G& Y( W" s5 L- k; L

! o1 K" k- x( Z& |: ]- F      sbin/yarn-daemon.sh stop nodemanager5 Y2 Q3 a9 e6 C6 G9 ]) I6 G0 [
( N1 ]* `- c' I) o$ E4 g
      sbin/mr-jobhistory-daemon.sh stop historyserver! n) |$ ]3 i* h1 R3 V3 _- V, T
2 r# r* B3 s) B, f3 j
      sbin/yarn-daemon.sh start resourcemanager6 t( z3 Y6 v3 {. g% k) u; ^
( I, a2 E# H- l/ J3 F5 J
      sbin/yarn-daemon.sh start nodemanager
7 |, x; Z; x" F- y. _8 e6 W6 h9 Q; i/ F1 {
      sbin/mr-jobhistory-daemon.sh start historyserver
! N+ t( k( t; P. V2 {6 Z; K/ h' J* T$ \1 I* C. O4 o2 ~! s
11、HDFS用户权限检查
8 o- M' y% ^3 {8 J2 |( {( P6 |/ _8 Y" B9 |1 Q, v! a1 ?5 S' ?
      hdfs-site.xml+ V7 N& d: _; ^$ ~

/ _; W) c7 w7 J- p5 y/ K      <property>
2 A9 H2 S2 }2 {" ?5 x                 <name>dfs.permissions.enabled</name>0 |/ n  L% }5 w, ^/ t
                 <value>false</name>9 Z" }" i# d' A8 o0 X4 f
       </property>) z, S/ `' K! G7 |8 P9 n

+ Z# d+ s7 h6 w7 O      core-site.xml) `% g  S1 Z% z0 g. D
! R7 t9 ~  k8 e* _3 \, Z) Y
      <property>
$ ?3 `" C4 y( v. O- }                 <name>hadoop.http.staticuser.user</name>  i  u3 h. c1 ?6 G  i
                 <value>beifeng</value>
, D& _; W- L& k0 ]% o0 |1 s       </property>6 X) s2 Z5 Z( e* t3 t
8 W/ l0 Z5 }. Z, P
      重启namenode、datanode、resourcemanager、nodemanager和historyserver:
1 L" C$ z$ v. M: H* q; X- Y* `( \4 x) x- `) Z
      sbin/hadoop-daemon.sh stop namenode& J  J) T/ z, o, P- r7 q$ c7 C' @: |

! q5 l  d5 {( u      sbin/hadoop-daemon.sh stop datanode' p$ k6 E* t. C; Y; w

1 H4 M5 j. n' ~$ J3 F$ V      sbin/yarn-daemon.sh stop resourcemanager
/ p8 J( j7 T) p5 n' ~. M' Y) X+ Q& }4 ?; N+ C
      sbin/yarn-daemon.sh stop nodemanager
$ V) t- o, O  R) e1 x9 }4 l# W- b1 |( W
      sbin/mr-jobhistory-daemon.sh stop historyserver: @5 r4 D$ T& V: O$ z  b0 u
, z' I0 l) o% {1 F! }, c+ W
      sbin/hadoop-daemon.sh start namenode
# ]4 D" y  V6 p' J0 U& p
' n6 [8 N9 g9 @      sbin/hadoop-daemon.sh start datanode
) _" D; }5 y7 T; V: e" a5 o$ x) H- \3 G, @8 h/ x+ X5 g
      sbin/yarn-daemon.sh start resourcemanager
  ?0 N, l0 c% f5 O: u( K/ |; {* u) Y. b0 v& G; R, ]
      sbin/yarn-daemon.sh start nodemanager
" c2 j% U9 h* V" T9 L
& R; J& Q3 f6 I) Z      sbin/mr-jobhistory-daemon.sh start historyserver6 J. i5 {' L+ y: y
# h5 p' |- w# i1 G
12、SecondaryNameNode  w) z5 K$ Y4 y2 k: F1 I+ w& c+ s
. x- p) O+ Q$ T8 t+ h
       NameNode启动后的元数据存放在内存中,启动前的元数据存放在本地文件系统文件中。
1 ]3 a, G% [% j9 n3 T6 P4 m1 w& o, d
       HDFS格式化后生成fsimage镜像文件,其中存放文件系统元数据,NameNode会读取此元数据,并存放在内存中。1 \% h, y6 ]4 y

3 h; A3 c6 F' |8 l       edits文件,编辑日志文件,用于保存用户对于HDFS文件系统的每一步行为操作。
, W; A! [% X! {: L4 [, K2 o: \; j' Z' m  ]7 i8 k
       NameNode启动后,先读取fsimage镜像文件,得到元数据,再读取edits日志文件,数据就不会丢失。% K6 i! D! w* z4 b* N
1 K( r- o; d- V) J. ]5 c
       SecondaryNameNode用于减少NameNode重启的时间、合并文件,SecondaryNameNode读取两类文件,加载到内存,写到一个新的fsimage镜像文件,然后再生成一个edits编辑日志文件,每隔一段时间将新生成的fsimage和新生成的edits合并成一个fsimage镜像文件,即每隔一段时间获取HDFS元数据的快照,这样NameNode重启只需要读取内存中的fsimage镜像文件即可,读取镜像文件比读取日志文件快很多。" x( i8 M( t9 ^- O' U: q, H2 H
: e$ s( T" G8 x/ \
       hdfs-site.xml2 O0 V0 ?, T1 _7 ^/ V. n
7 C! k( q8 j' k0 z
       <property>  s+ H5 t$ ^8 l
                 <name>dfs.namenode.secondary.http-address</name>
2 A- K4 ?6 Q0 P! F! y                 <value>hadoop-senior.ibeifeng.com:50090</value>0 l1 Z& k$ L0 y0 g9 c# L! A
        </property>: t( j# k+ s4 }" S

9 u0 z# c+ e9 l1 ?. a( y, n       启动命令:$ sbin/hadoop-daemon.sh start secondarynamenode
/ }' {) p+ s4 A4 d% v% D& `
+ Z! I. f6 g- e& B13、块文件存放地址
) N3 l7 G' \3 s/ a3 V
8 v7 s, x4 n9 C7 n4 B0 U% a. m      /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-2012260383-192.168.74.128-1516569449179/current/finalized' x4 o- ^4 s$ }" H
! F1 {8 w  ~* v
      镜像文件、日志文件存放地址
, b* ]! Y. {' G. l/ u
/ ^" W1 Z! ^5 b+ a      /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current0 A" B& ~% p0 q' c
$ h( e2 l( H, |" P
      dfs.blocksize自定义块大小属性(单位字节),在hdfs-site.xml中( D. X, B* c' ~. i6 V8 g6 J# J
. l( g2 m+ p$ x; e
14、SSH免密码登陆9 I( ^) ]$ w' b" K

4 p6 A/ Z7 e0 b  D: {% s* @! f# ?# ^      使用sbin/start-dfs.sh脚本文件启动namenode、datanode和secondarynamenode时,需要输入用户密码,使用SSH免密码登陆的话,就给用户生成公钥和私钥,用户将自己的公钥储存在远程主机上,将公钥发到需要登陆的服务器,当需要登陆时,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回去,远程主机用事先存储的公钥进行解密,如果解密成功,就证明用户是可信的,直接允许登陆shell,不再要求密码。
" S" Z8 X/ x  P% x9 ?2 [( o5 Z* _
; H0 |9 }4 X& C8 \2 H7 b9 }      配置SSH免密码登陆:
0 O: P) w( `+ F7 H! p3 Y, H  C
8 u# \+ g& Y# B6 m. h8 `      cd home/beifeng/.ssh8 W* }  K: k( Z* s3 `
) B; V* P& w$ \! }
      ssh-keygen -t rsa
$ `3 h% W8 U% Q* x" x
6 `; O0 ]. s( R! j; E7 M' g" n! }      即生成id_rsa和id_rsa.pub文件,其中id_rsa是私钥,id_rsa.pub是公钥。* |$ M/ Q' C0 a! l0 I1 F# B5 J8 p

- y6 ~& F" r+ e% R# P  W. [1 k      ssh-copy-id hadoop-senior.ibeifeng.com
% t: T+ P. h6 u1 g* X; A. [
( H0 @! r6 D: j      即生成authorized_keys和known_hosts文件,其中authorized_keys是向远程主机发送的用户公钥,known_hosts是记录文件,有记录文件就不需要再输入密码了。2 U  @" b0 M3 S: X
8 r* o+ [6 h( Y/ p4 }2 Q1 m
15、Hadoop配置常见错误% D. Y) C7 U, `* N6 n: _; n. F$ U
! H& j1 K/ p; h. |. f/ U: n! J
       <1>不要多次格式化namenode,如需再次格式化,需要先删除data/tmp/下的所有文件。6 h' P: S( S2 {7 h

% \4 F3 G2 p) ]* i. v       <2>集群ID不一致,即( [0 q# L+ N+ S5 N
1 _7 {& \- p5 j; V
             /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current/VERSION5 r% v( b, F4 ]
5 }0 e9 ?+ m( d0 v  {
             /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/VERSION' O" u2 A/ k: n( z7 F0 R  K
7 a/ T5 L0 n5 N( g& n' a6 D
             两文件中的clusterID不一致,这是由于多次格式化导致的,解决方法可以如<1>,也可以依据namenode中的clusterID来修改datanode中的clusterID。
# ^' f: o* s7 G9 S- y4 k5 b& i
4 j2 y/ F/ l" C( Q) g5 M       <3>端口号被占用,使用netstat -tlun查看。$ D/ |2 l# q4 g

9 a: _9 J+ C! y$ N$ L4 R! G- C( n' B% W       <4>多用户混用。即/tmp目录下有多个用户的pid,多个用户在各自的环境中启动了同一个进程,造成pid文件冲突。解决方法:将/tmp目录下的.pid文件全部删除,再用一个用户启动进程。
6 J# W. m  ^9 }1 j" E
0 g7 ?& v0 U9 d; T16、Hadoop配置文件
1 i+ t& t. ~" d2 p
+ n; l( M4 C/ ]  H# F; J      Hadoop配置文件分为默认的和自定义的,每个模块对应一个文件。" U- I8 P# p% I) d+ r7 C

# F* T' y1 {, w0 c; D. x/ S      系统启动会先加载默认配置文件。默认配置文件存放在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。
' K6 W  P! s* l: R2 |# l2 C, w! }+ w. \
       自定义配置文件优先级高于默认配置文件,如果自定义配置文件中有配置,会覆盖默认配置文件中的相应属性。
! K9 E2 p) A/ \: D' @. Z! V* A; n6 ~
17、安装rz工具% r" y: a: Q1 w8 R6 X! _- V

/ }* N% D! O7 z% u' p: u, m       切换到root用户后,用yum安装lrzsz。rz工具用于将Windows中的文件上传到虚拟机中,如CentOS中,只能在远程工具中使用,不能在虚拟机中使用。
: ~, p/ Z# \$ ~* q$ t# t0 {5 {# f' v; E% i! C$ R5 j
      su& ?5 H2 ^+ \4 ?
" G, v' o! n+ o% }& _- a4 k2 K
      password:/ `: F& `; c1 ^1 H: o" t$ C

2 w- L) J/ Y) ?5 Z0 ]      yum -y install lrzsz
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 03:04 , Processed in 0.024165 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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