易陆发现互联网技术论坛

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

分布式hadoop【CentOS7】

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

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

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

x
一、安装jdk (各个节点均操作)
" @" q0 T8 o) [3 z3 _1、环境准备% F1 j) ^! V* t7 c; q

* l+ A0 F+ d- a& J* A* d7 w$ R2 Z) K3 n

- u0 w  J1 S# ~" \1) master.wyl.world (Master Node)
' f' u" s- L( d8 ]$ o9 _& E2) node01.wyl.world (Slave Node)0 [* H2 a- g' Y2 x! b
3) node02.wyl.world (Slave Node)
2 p: D8 m2 G9 E; d
0 |! N- C) [% |, _# c2、下载jdk包8 T% q* C" q1 W
. a( W' F+ J, d' |" b  O
8 w; S% E* Y6 V) T7 z

# I3 m: ^" _& R[root@master ~]# curl -LO -H "Cookie: oraclelicense=accept-securebackup-cookie" \' u* C: R/ ?( ^+ q* N3 J
http://download.oracle.com/otn-pub/java/jdk/8u71-b15/jdk-8u71-linux-x64.rpm
) e4 s9 M3 }; d# H+ V2 W
! Z, G! U8 G/ f7 H7 D4 w, {安装jdk/ ^& k; }1 K+ f1 X7 ~! [+ n! _
7 T# D. `# _7 c  V" C

4 f2 D1 ^* |( [. q- g6 v& Y9 \2 G
4 Q( \; O( w" S! P6 [- z$ E# P7 a5 S[root@master ~]# rpm -Uvh jdk-8u71-linux-x64.rpm ; r1 C' i# n- c
Preparing...                ############################## [100%]
! D/ a8 W( N* L   1:jdk1.8.0_71            ############################## [100%]
' }$ }  f( B5 \' A' V: D# z5 m/ aUnpacking JAR files...
" D* ^+ [9 W1 L" Z        rt.jar...
1 |% ?) i/ w- M" l% _        jsse.jar...; I3 g  f( y3 c5 X2 }3 n7 {
        charsets.jar...# _7 n9 N; i( V8 ]
        tools.jar...
. b( }9 o9 w5 y3 X- E' ~$ j        localedata.jar...1 l6 B8 ?6 F$ \* m/ Q+ X  c: P
        jfxrt.jar...
; D- ^6 T2 ^  z+ j
& m8 H/ p: b( ]( o8 X1 x& Q6 @4 V" J3、更改环境变量
$ O- H; [7 _$ ~& n8 g! j; _* G2 t$ S$ U

/ _+ x, m3 P1 p# I' H  r; J& l: R' M4 c$ F5 g5 q8 T
[root@master ~]# vi /etc/profile
2 P$ D8 G" m  \4 s# 加在末尾
3 L6 O; D2 r" X$ f3 l$ Rexport JAVA_HOME=/usr/java/default  L2 A, q# s4 q2 W+ J9 W7 }
export PATH=$PATH:$JAVA_HOME/bin
7 B* ]* A; @7 Iexport CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' l1 t7 \2 O. @* U) R3 G

9 f5 b+ b; {+ Z2 P- R4、应用环境变量
' o  v% `" j4 _3 }8 ?
* ^! I( M0 |! [0 A% b& m
5 ?9 C* S1 D/ z1 O
: o: B$ R) f% E; V! d[root@master ~]# source /etc/profile19 _; w' V6 D* A- X

+ M6 h$ n# n; F7 t% U5、如果系统之前安装过其他版本的jdk,需要更改默认配置3 j5 V6 Z! o! N; A# R

  M2 u4 g- G& {
% p( ?- n$ k  n8 m3 L, L/ o; a; n! x: K  N  J
[root@master ~]# alternatives --config java . j3 ~  z( H; `. Z/ t+ ~

* O0 ?0 ], s7 e; ~1 W* a# R: Y2 iThere are 2 programs which provide 'java'.
5 K1 h& e9 x- s, F7 [8 o4 O) W
: h: i1 S2 \! Y. I( o) r# B, q5 Q  Selection    Command6 c" P0 M5 K2 f8 H
-----------------------------------------------0 S* Q  u" Q8 v& I) _, f
*+ 1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java; L# e+ n4 K! P9 D- `+ J
   2           /usr/java/jdk1.8.0_71/jre/bin/java
# H+ L2 W  n, S1 C" O% M
. X1 C0 W4 R. E( `' U选择最新的
& t0 `8 D9 s5 Y4 wEnter to keep the current selection[+], or type selection number: 2. i& X: e* M; R6 [2 B( x- H
! L1 V8 @* \" y/ v1 S
6、写入一个测试程序
: O! ?: j9 T2 \) w
3 D" `, E/ M! n5 R3 G
9 k: n" R* N( S& H! g( r" D
% O# c' ~+ L+ N: p, v5 b- P4 ?3 Q+ Y) g[root@master ~]# vi day.java
5 {! T$ A# a; h" |6 I import java.util.Calendar;, a) ~/ b, }$ ~" |
7 @( B9 m& A( I0 p
class day {- Z& |$ U' y8 {3 A! Q  O
    public static void main(String[] args) {
" p2 g8 ^" }6 h  e5 q; `        Calendar cal = Calendar.getInstance();9 s9 c# E4 d$ z
        int year = cal.get(Calendar.YEAR);" i% @7 L& ?" i( b, Z! ?) l
        int month = cal.get(Calendar.MONTH) + 1;
3 ^0 }' E( K0 Q        int day = cal.get(Calendar.DATE);
' H7 S, X" j4 a- O% w2 b& a& i        int hour = cal.get(Calendar.HOUR_OF_DAY);
9 i( i7 n: U. g2 y3 L5 C/ v1 h# X        int minute = cal.get(Calendar.MINUTE);
: J- ?) ~* s, M, k8 M* S. T8 V        System.out.println(year + "/" + month + "/" + day + " " + hour + ":" + minute);& C1 S9 D" ]2 @
    }
% D& N; ?1 t# R7 o- G}
5 x! W; I. x) C" [, S% H9 ~3 N. h
; y; I7 ]1 Z; h7、编译
$ x, Z6 V6 P* q1 F; z- n- x. D8 f9 V4 O3 @! ]
) B% ?2 o# l' n+ j. l/ a
) v/ I7 I7 B, {3 \
[root@master ~]# javac day.java
; t2 Y, w, J* U* e4 U- B/ ~) x, y3 K" v1 q* ^6 c" G
8、执行2 }3 ]- L  _. X* Y0 _& ]+ ]

" i8 t: z2 f; A) t- ?* Q
- T9 b* b9 n* k6 u5 `7 ]; k! z. ]! A
[root@master ~]# java day
9 i3 @; g- ^+ ?, U% v/ x' ?+ B, r2015/3/16 20:30
- L) m6 [; ]/ @7 A2 D  O, K7 ]
# X6 P& o5 J0 }1 a二、安装hadoop   z: {9 f  L6 B" a
1、在各个节点上创建用户,并设置密码& V/ P% m- w) g0 l( C& z

, H, @$ E  F/ B' E
8 d; C: e/ F4 O" z1 E% U' W  K* a1 c2 ?1 t# l
[root@master ~]# useradd -d /usr/hadoop hadoop
9 Y- Z3 k# X7 l4 }3 p- \, `/ C[root@master ~]# chmod 755 /usr/hadoop
* F$ D' X& t& U7 o) {2 k[root@master ~]# passwd hadoop
* [# Z- o, O7 g/ L% D9 `+ _( DChanging password for user hadoop.
; `+ C) Z0 m) w9 V5 ENew password:
* O4 D3 A" H- I4 s2 m+ z3 B' dRetype new password:
, L0 I. n3 [  j. r+ upasswd: all authentication tokens updated successfully.
) i# P9 \: Y6 b) U
6 B5 T6 \4 E: I$ A2、通过hadoop用户登录到master节点上,生成秘钥,并拷贝到其他节点上
' n  \; q2 d' e8 a生成秘钥) \1 \" y3 N  L. `* J

% ]0 k; l6 K* E1 v, c; l0 @9 Y% m/ ], J% A
* V. w& J% V' x( B& R6 T; \
[hadoop@master ~]$ ssh-keygen ) A. A) _" \6 g* Q
Generating public/private rsa key pair.
: a1 |! t" y9 v# D- v+ UEnter file in which to save the key (/usr/hadoop/.ssh/id_rsa):) U" u0 x, }# ^9 C, c1 y
Created directory '/usr/hadoop/.ssh'.2 R+ f- ~, }3 D4 j% F% t
Enter passphrase (empty for no passphrase):' S4 d9 R: L& I
Enter same passphrase again:6 \/ G9 H2 I% q9 ^8 h/ k
Your identification has been saved in /usr/hadoop/.ssh/id_rsa.+ B8 [0 f' K* O3 V( ?; }+ c2 J$ ]9 ]
Your public key has been saved in /usr/hadoop/.ssh/id_rsa.pub.
- e, e5 s$ W" s% qThe key fingerprint is:
6 {4 S. N3 \- O$ M- z' \xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hadoop@master.wyl.world$ I, U- O8 b2 T8 m# v- i  m
The key's randomart image is:$ I1 X$ q+ Q% r3 A: R  d# D

& D! f1 u. ~* v+ a3、发送到本机
9 a# n- ?; q) L/ S# L
7 k# |2 w& x$ l' a' I( i5 ?
" {. [: e4 T$ s; ~& p4 a" E- }0 t/ e
[hadoop@master ~]$ ssh-copy-id localhost
% S  b5 b! J- S
" x: M3 W4 u0 H8 \8 n2 N4、分别拷贝到node节点
+ o, t5 U8 h( g7 f, e5 Y
* P6 Y7 s( V5 X  F% v' l8 q6 p7 g+ |" G8 |% K( U9 S; q0 U" h

& n. F! |1 B* B1 \# F4 K; C4 m0 b[hadoop@master ~]$ ssh-copy-id node01.wyl.world
4 g7 x! l  e  D4 j  s  M  ^* G[hadoop@master ~]$ ssh-copy-id node02.wyl.world
' H; M: h0 V5 F8 K" k+ l8 o8 m) C/ i$ @+ G" P
5、通过hadoop用户在各个节点上安装hadoop - ]# P8 B: _, v' ~" t( C4 F  f& I1 s
可以通过下面路径下载最新的安装代码' \+ A/ G% a9 r& T( P
1 V3 h0 I# z# X

/ Q: M4 e( u9 w- e- f+ T: Z" o
: i" Y8 Q6 S( b$ qhttps://hadoop.apache.org/releases.html
! E/ E6 }' O' K4 H: p' D! A8 e- ], l0 x# E& l
下载安装包5 s$ E1 a3 k5 y
3 _% n) E% y- q' Q

3 S' H. B2 s: P' e  I1 J
/ F- R$ i! Z! |% n/ ~4 {! t1 r# U[hadoop@master ~]$ curl -O http://ftp.jaist.ac.jp/pub/apach ... hadoop-2.7.3.tar.gz
+ n" P; O" x9 [0 _1 r  u1 G- I; `5 e& Z# {
解压安装包
; P1 {7 q/ m% R/ n4 l! p3 h
1 l; W. m3 @# Y  a/ V; X. n1 `" }& y2 s0 U  e( \5 ?/ h
0 s& o3 M& q- P% F% {& d1 y
[hadoop@master ~]$ tar zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop --strip-components 1
$ P  {5 V% J( J; T, f- u' m" r  f
/ ^) ^6 Q$ Y! u6 g" ]* h2 p1 V写入系统变量; S+ z$ b$ Y( J' q# p* p
. C- M. x0 D- m7 J
# ~1 c# i! ?, a$ r' d6 b: P/ u, x( l3 w1 c
$ I1 \. H/ b( i. D8 c7 S
[hadoop@master ~]$ vi ~/.bash_profile* Y6 ?9 l( }2 M
# 加在末尾2 w$ }" J' l; m% C
export HADOOP_HOME=/usr/hadoop# u, m3 f( T9 `
export HADOOP_COMMON_HOME=$HADOOP_HOME' ]; ?! P2 P, h. f3 j0 n& K2 w
export HADOOP_HDFS_HOME=$HADOOP_HOME/ l. _( B$ \" {( S
export HADOOP_MAPRED_HOME=$HADOOP_HOME
6 z; }2 P! _+ g* l" Fexport HADOOP_YARN_HOME=$HADOOP_HOME
( f# [* p7 ?" P7 oexport HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
" x! Y$ z+ R0 r3 G  _export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native, C9 w9 n7 m; j! i% y1 D& k: H
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
+ k  B' M& x1 l% F) Y5 F0 L& p6 E, g; b
应用系统变量
# E! J6 u; G- B  a- e9 [
/ K1 O" ^& Y5 A# g. i: T4 L. Z) Q- H! ^: D
3 ?( m- g8 f* @  t% n. u
[hadoop@master ~]$ source ~/.bash_profile ( o& p+ d& T6 t
& U) ^+ L4 e$ r/ }
6、通过hadoop用户在master节点上配置hadoop ; K# e4 f; J& ?" I
创建目录1 R- x5 @( m( f! H" h

; `, t# c' j/ S4 [  i( M; S8 j  l9 e/ E
) K6 C( l8 j9 |5 h$ G+ ^' c6 |
[hadoop@master ~]$ mkdir ~/datanode # g: c9 ^* d) S. U. k$ ?
[hadoop@master ~]$ ssh node01.wyl.world "mkdir ~/datanode"
3 T/ ^* Y% E3 ?# \: x- y[hadoop@master ~]$ ssh node02.wyl.world "mkdir ~/datanode"7 h6 j" E3 J$ y$ K5 A8 @$ K6 T

. ^7 P% U( \: Y8 j0 y4 M$ _7、修改~/etc/hadoop/hdfs-site.xml  q: ?2 g! c! K% k+ q7 S$ Y

' x% j# D! y* `0 v1 s( X
) v* S' I' T0 Q1 a& h- l7 J. A0 y
在 <configuration> - </configuration> 之间加入如下内容' v0 K) g8 u  S. ]! t
<configuration>
% A9 x6 h: P2 a6 e5 V# c: Y  <property>
2 k" d: F  E* O* o, \" L    <name>dfs.replication</name>! l9 [* B' p4 M- v  d2 \9 W3 T
    <value>2</value>
# u' G2 s1 t2 y, t4 o% H0 h  </property>
4 h/ S& E8 \  y& h- V0 M# |+ x6 I  <property>
$ g# }9 ~& o% b9 ]8 N4 X/ Q8 ]  S    <name>dfs.datanode.data.dir</name>6 I/ `5 y  B; Z9 H& M
    <value>file:///usr/hadoop/datanode</value>* o0 ~4 K4 T# d7 S0 _5 \" {
  </property>$ W2 S# S& y4 q/ E& ^" `+ \: J1 I0 Q
</configuration>
4 a# `$ A( r/ a4 M5 n1 v3 J7 |. q7 ]8 E9 f# u0 \+ D( j& q9 ?
8、拷贝到其他节点上
" Q, Z# Z' N# w; G" @/ n; d" r+ J0 t) @
* v7 C- G' Y( E

8 X" c1 ~# X* x# K[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node01.wyl.world:~/etc/hadoop/
# C  r3 V6 D, C) x[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node02.wyl.world:~/etc/hadoop/ 7 g+ }/ l) K, W: H

, y7 i6 ^9 w6 i( V1 |3 z9、修改~/etc/hadoop/core-site.xml
+ q$ c- b. y0 b* `
6 ^1 r% p/ t8 C8 a* g; o, \+ N) M2 z

0 i# @) t+ d9 y: E7 a在 <configuration> - </configuration> 之间加入如下内容+ ^# W. ^6 k. f$ @. `. s8 q
<configuration>- j$ w6 [; H1 k# [& Q
  <property>( j9 U+ T# n9 {, ]
    <name>fs.defaultFS</name>& ^- n9 W: ^6 g5 g
    <value>hdfs://master.wyl.world:9000/</value>
; q! W8 z1 n+ ^0 X% |2 c& h  </property>* x/ ~4 N: s* _/ ]* ]3 b- \
</configuration>
5 W. q* q8 w% b. j1 W7 V. n$ j4 w) q- R4 P& X$ i6 r) T
10、拷贝到其他节点上% {2 w4 G6 x# [% w2 F
- `' n7 q6 J# W% K5 C1 i* I
( _) v( [0 s3 @4 Q: q5 J
# N$ K8 V4 O/ O' J4 |1 f1 z7 }
[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node01.wyl.world:~/etc/hadoop/ + R9 ^: Y# x; _
[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node02.wyl.world:~/etc/hadoop/ 8 v; e% n! \$ T
[hadoop@master ~]$ sed -i -e 's/\${JAVA_HOME}/\/usr\/java\/default/' ~/etc/hadoop/hadoop-env.sh 5 [1 j# \4 l" J7 @/ T$ Q9 B
[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node01.wyl.world:~/etc/hadoop/
/ ]! H5 S1 C2 H0 \: X[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node02.wyl.world:~/etc/hadoop/
0 B" D. K5 {& v[hadoop@master ~]$ mkdir ~/namenode ' L( J- Q; A( u/ f9 Y; H7 c* L0 d
4 p+ Q6 ?. B- Y: j' n' i8 A) _* |
11、修改~/etc/hadoop/hdfs-site.xml
4 k0 i7 {* U. V2 }- E9 f/ b8 _9 }, c5 ^  U. u8 k

- m! L* m( ^3 V; L5 W1 M  P# m+ C8 |/ C* d' ]
在 <configuration> - </configuration> 之间加入如下内容9 K2 V' w8 E. C: _  \
<configuration>, Y5 }  L1 ~5 |/ p, P- Q& Z- D
  <property>
/ X+ f2 @1 C- t8 b% ~" w  u    <name>dfs.namenode.name.dir</name>
' ?( F2 o7 n0 [0 `# _& s, b    <value>file:///usr/hadoop/namenode</value>% ?# Z; L0 E$ `' ^8 f8 W
  </property>
# {" Y% O' x7 X# O' r( h; B3 Z</configuration>  ^1 ]4 v2 y0 O) `
  b& b( V3 ^2 ~3 R# }' U! l
12、创建~/etc/hadoop/hdfs-site.xml并写入
& d# U+ E8 J! ]1 W6 W6 j2 }  i( l  o/ j- c/ O1 O
# create new
/ Y/ j+ g+ b: L  E  t4 j<configuration>
7 k3 N5 b" R0 Q- z1 a2 {0 V: U) S1 g) ~  <property>
, A1 x9 T( D, B! c: p    <name>mapreduce.framework.name</name>
  @6 c; H& ]# W* F! p% |$ i    <value>yarn</value>% J7 f% c3 S6 x; u
  </property>. x) G+ c& x/ h
</configuration>
( \* I, c& A! m+ R& A
& o: `7 }1 ?) G, ?( f/ |( w6 ~13、配置~/etc/hadoop/yarn-site.xml3 U) Y$ m7 r7 J/ F
9 t. K1 q. e+ J% d" y6 w4 p
9 G( C* G$ m% y: [
  O$ g3 N4 n/ A$ j0 a7 B7 `: z
在 <configuration> - </configuration> 之间新增如下内容
% U) P! c; O+ D, m, T+ J<configuration>
. ]8 R5 z% Y5 \9 j3 l  <property>* t  f- W. r0 m
    <name>yarn.resourcemanager.hostname</name>
/ [/ e# b; M! i6 o0 f* e4 c2 G; j    <value>master.wyl.world</value>' k( ?/ q: }( Z# ^% i% N4 m! |; f
  </property>$ E1 C1 C1 S) T
  <property>
, B. ^. M) R) X6 ^6 u    <name>yarn.nodemanager.hostname</name>
6 [" g% v; h: M/ ~; L/ M    <value>master.wyl.world</value>9 A9 y+ t! {3 j6 v- e8 l# {$ i  F
  </property>
) h$ L+ e: {  ^' T  <property>
: k0 X, D" f$ P# @5 M' O: O7 r    <name>yarn.nodemanager.aux-services</name>% m+ }% S3 N5 F0 r- E% g# o* E
    <value>mapreduce_shuffle</value>
* s9 P& I1 F& x) `+ V  </property>
9 o/ P' I( D/ x</configuration>
( Z( P1 ~/ Y# Z( k8 |2 G, w' C
" C8 `  y; ^& ]7 ~6 ?  o5 `14、在~/etc/hadoop/slaves写入各个节点信息
6 E3 Z, J  e( y
1 Z7 Q# S+ X7 {' e" m* H1 N8 y#添加所有节点信息,并删除localhost
6 {# R/ f; U* Wmaster.wyl.world
6 x4 q. j4 ^: \3 k$ e3 f8 fnode01.wyl.world
8 v5 a& |' A8 S* Lnode02.wyl.world
1 j1 X# e* a7 A9 @! ^+ |2 T) M$ e. \. O1 ?/ R' k; d
15、格式化namenode并启动hadoop服务
4 X5 u% L) S7 l格式化节点
, J9 R/ M9 ~) i: Z, Z; T1 n$ U! j; A4 }3 {  {9 X' i% J

; J! v& t& P/ P% P$ s, D6 w8 X, D: _" i% s
[hadoop@master ~]$ hdfs namenode -format
6 t3 v! @* r  @) g15/07/28 19:58:14 INFO namenode.NameNode: STARTUP_MSG:% k0 G5 a6 ~1 N  f0 y
/************************************************************6 m8 D/ _( a4 V  }$ Z3 q! b6 H
STARTUP_MSG: Starting NameNode- ?0 \7 t- h* c" e/ \/ r$ B
STARTUP_MSG:   host = master.wyl.world/10.0.0.30; y: O. I% @) Q, U9 l9 Z
STARTUP_MSG:   args = [-format]
6 E; O7 l  i' Z9 s7 t  }STARTUP_MSG:   version = 2.7.3
: O# b0 Q" r) e; @, t- U2 P( a.....0 P' N) d  {$ h& H
.....9 ~& f3 g# z8 k; _8 E; v# P% l
15/07/28 19:58:17 INFO namenode.NameNode: SHUTDOWN_MSG:; a3 E' y5 N) M, a! z. r4 n
/************************************************************8 b/ a- G2 X/ h3 X& B7 k: W7 y& M
SHUTDOWN_MSG: Shutting down NameNode at master.wyl.world/10.0.0.30, i, @3 x2 W) ~% U# E
************************************************************/1 F* ^( j7 |( X7 n# s9 A2 @
. |( \. q$ `. a1 e9 V. O
启动dfs& w) h6 m9 \3 b1 s3 t

+ x& f3 F- Y  x2 J$ Q3 w
( ]* ?8 a, y! V. J: Q; I+ ]5 O) v; m& D( J, G" Z+ u" y, a  Y) r
[hadoop@master ~]$ start-dfs.sh   M6 G5 P6 H2 |& @" X1 d
Starting namenodes on [master.wyl.world]9 i- A# ?! |# t% M9 `8 Y9 D" e
master.wyl.world: starting namenode, logging to /usr/hadoop/logs/hadoop-hadoop-namenode-master.wyl.world.out
; v7 Y/ d1 G6 w) J1 `master.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-master.wyl.world.out
5 I+ u4 V8 `$ k1 d! q0 X2 L6 Snode02.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node02.wyl.world.out
  v# W  @. m( i. M8 I- tnode01.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node01.wyl.world.out+ E) }. \7 e/ j* T3 r/ a. O
Starting secondary namenodes [0.0.0.0]
) `/ l6 {& {) Z+ O3 R$ c0.0.0.0: starting secondarynamenode, logging to /usr/hadoop/logs/hadoop-hadoop-secondarynamenode-master.wyl.world.out1 _4 [7 `' l/ p8 j: {
# C+ n6 A4 q) t4 H# O
启动yarn
$ @% X1 O, R/ {/ K: b+ o! }9 I+ y3 B$ j+ X

+ p3 i  i& C1 H8 z5 X
/ A( a' [& i2 F2 j' j8 l[hadoop@master ~]$ start-yarn.sh 2 c% T% O- j, {# Q' ?5 p: S
starting yarn daemons
" n4 T: s1 C* X) {( s  p- E" nstarting resourcemanager, logging to /usr/hadoop/logs/yarn-hadoop-resourcemanager-master.wyl.world.out8 s$ W8 ~" x5 S* d3 W# V! `4 y( P
master.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-master.wyl.world.out
* d4 u# ?% j4 t( cnode02.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node02.wyl.world.out
6 c' Z( i1 Z) Nnode01.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node01.wyl.world.out2 }, \  e  _7 |; A: |  I
- C9 U$ ^3 n( p! h- t
16、查看服务状态,正常如下,如异常,请返回检查配置
8 u" ]2 y4 L2 y7 h( j/ V
' j0 G% B0 [& u
' [& s0 |0 b* i6 Q2 K4 i  M% P. I' o) w. p3 h: w
[hadoop@master ~]$ jps 1 D( ^5 h8 T+ k, F* G% h
2130 NameNode
+ Q  _. u* p% b2437 SecondaryNameNode( p- `6 W% O. E: l4 n
2598 ResourceManager
, K, o7 q& C3 K4 _; c- G% o2 `; E2710 NodeManager! r/ |* i9 x8 E, r) V0 o
3001 Jps$ x4 K& p  A2 {# c$ s  K5 y% R
2267 DataNode
3 g9 g7 t: V. s: x6 I$ }$ Y% W7 ^
: e0 I8 z, A2 a; N1 J* l- }17、创建目录6 y; i5 g6 E3 C; O
: e$ a, C' I% J) p8 B. n

  O  u( O3 Z( ^1 f- Z) Q
7 F; X8 |8 r" T2 Q  u[hadoop@master ~]$ hdfs dfs -mkdir /test. G9 X& `- D3 V0 G" f5 C
# ~9 ~" g* S. i5 s
18、拷贝一个文件到/test' i/ _5 K2 T; s2 {9 S7 g, D

0 n; g2 r9 q5 D4 _$ S, f& l, h4 d& ]9 d
" \- k9 L" m7 F3 l: K# ~% ?
[hadoop@master ~]$ hdfs dfs -copyFromLocal ~/NOTICE.txt /test& o: P; {1 r9 n, N  S( E/ M* u
0 y. Z' y: o8 A+ x
19、展示文件内容
0 V! O% w2 I) c  S
9 s3 P9 j1 U4 ?+ O- L! C5 B0 K1 ?8 p! |

& A- |# F! a& H[hadoop@master ~]$ hdfs dfs -cat /test/NOTICE.txt
% J. N2 {; @+ O9 X, T+ ]This product includes software developed by The Apache Software
! M' z/ \& m+ x0 S" Y  N( v4 fFoundation (http://www.apache.org/).
# U6 A& o' N6 [1 M+ R8 t
" u6 @4 ^7 e0 Z! o+ d' h20、执行程序
, y: d' u' X, e2 z+ T& ^) x: ]) [5 O
+ i$ c% n4 b% J  X$ X. }
1 g) D9 {0 M6 B
[hadoop@master ~]$ hadoop jar ~/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/NOTICE.txt /output01
# Z- s0 P* @+ x% `8 u0 |; j- P15/07/28 19:28:47 INFO client.RMProxy: Connecting to ResourceManager at master.wyl.world/10.0.0.30:8032. Q5 |% t% A( b7 h5 h
15/07/28 19:28:48 INFO input.FileInputFormat: Total input paths to process : 1
3 g3 M% e( R7 ~* C. }* m# b15/07/28 19:28:48 INFO mapreduce.JobSubmitter: number of splits:1
: G$ S( p% ]% r: u6 ^, o1 R.....
  P; O1 t0 K& i" o, F.....  P( X- C* g8 i% P

) X2 y5 s! F4 W7 C21、查看结果5 R; x5 W; e3 k9 h. N, }

  z; ?( L/ f  i6 K' H+ M. ]- u$ j; e: G, g2 N" v, U3 W* i. l

! S1 T2 I5 p' X+ _; f1 C! b[hadoop@master ~]$ hdfs dfs -ls /output01
2 C+ W* Y- ?! b* }Found 2 items2 ^5 o! {' `" l. w/ i
-rw-r--r--   2 hadoop supergroup      0 2015-07-29 14:29 /output01/_SUCCESS
* G) C6 D5 {: n0 h& {9 w-rw-r--r--   2 hadoop supergroup    123 2015-07-29 14:29 /output01/part-r-00000) r( n- U' L7 ~

# C# C$ T) j; E8 u) X+ g22、显示文件结果3 c# c; ]6 c) g2 N" v

" h  q* V. G3 `  z& u
# @1 B& P( c9 q' o/ N6 d, j- h  p: A+ L* W) a& y6 }
[hadoop@master ~]$ hdfs dfs -cat /output01/part-r-00000 ( ^; [, o1 N# X% K/ a9 u
(http://www.apache.org/).       1
/ i6 c; w/ C2 u& i- lApache          1
5 |+ R1 \9 P: {( WFoundation      1
9 r/ h2 s8 _' hSoftware        1
/ R5 y' M; j# FThe             1" T: v6 A+ J: {; P* i$ ?0 |) p
This            1  Q& i* M. o* Z4 Y% B$ p
by              1
7 R6 w( W- p0 h6 L% x0 b% ^developed       1, h% z. C4 t. y# e4 i
includes        1. F, f1 V1 ?7 W2 L# N6 w& C1 ^
product         1, m* P; W, E7 e7 x( L# m- L% Q
software        1
" O+ T* f, Y1 S0 H" L* r* Q+ ]& C) t( `, \6 M$ i$ S2 @
查看集群概要 4 d% q- u  l: \; M, \
http://(server’s hostname or IP address):50070
% l% v( ]5 o3 l0 s* p7 g. J  % \! [+ g% m# b+ P8 P. f2 d5 N
集群详细信息
1 a. x& c/ x8 `- R" Q; _7 t: @! f4 x
http://(server’s hostname or IP address):8088/ ' K1 H1 a+ N" \" U

6 _4 ]) W; K. m: x% |: g& Y0 n5 {, Z9 k% k9 d
- l) X- P6 O  d  X) y9 P
 楼主| 发表于 2022-11-7 11:12:34 | 显示全部楼层
目的
本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。

( ^) R* g5 H  a: ~9 j& E8 y- G! U先决条件
  • 确保在你集群中的每个节点上都安装了所有必需软件。
  • 获取Hadoop软件包。
    3 i5 [" T. M# X% L. z2 g6 L

( U) i- o1 j$ g6 F" v  E: M' E  R: j安装
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode作为TaskTracker。这些机器是slaves
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。

3 M/ E" X8 P. |9 e7 f5 p1 x配置
接下来的几节描述了如何配置Hadoop集群。
配置文件
对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
  • hadoop-default.xml - 只读的默认配置。
  • hadoop-site.xml - 集群特有的配置。
    2 [) B) ~1 g9 A
要了解更多关于这些配置文件如何影响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 :6 \3 f  f$ U+ H% {8 M
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"" m& y$ f2 ?7 |" J. i/ ^, ^2 D: O
其它可定制的常用参数还包括:
  • HADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
  • HADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB
    ! O/ A: _& a6 l; B/ a& S
配置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的子虚拟机
    2 {8 [2 }4 m2 ]# x2 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,系统将不再记录此日志。
用户可使用以下命令在指定路径下查看历史日志汇总
7 n! F/ s7 ?4 L8 a1 @8 `; X$ bin/hadoop job -history output-dir
# g8 w9 |# a# E, [- ~; A这条命令会显示作业的细节信息,失败和终止的任务细节。( }1 e) |: K' }* H
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
" N+ y/ X4 e! v# e# F$ bin/hadoop job -history all output-dir
% g( J2 x1 s! ?
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。
- R' h$ A" ?: x- w/ w% R& X
Hadoop的机架感知
HDFS和Map/Reduce的组件是能够感知机架的。
NameNode和JobTracker通过调用管理员配置模块中的APIresolve来获取集群里每个slave的机架id。该API将slave的DNS名称(或者IP地址)转换成机架id。使用哪个模块是通过配置项topology.node.switch.mapping.impl来指定的。模块的默认实现会调用topology.script.file.name配置项指定的一个的脚本/命令。 如果topology.script.file.name未被设置,对于所有传入的IP地址,模块会返回/default-rack作为机架id。在Map/Reduce部分还有一个额外的配置项mapred.cache.task.levels,该参数决定cache的级数(在网络拓扑中)。例如,如果默认值是2,会建立两级的cache- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
( l2 c' [1 ~5 U- N" L# Z5 f
启动Hadoop
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
格式化一个新的分布式文件系统:- P6 x; Z* u5 i+ `/ i  Z
$ bin/hadoop namenode -format
在分配的NameNode上,运行下面的命令启动HDFS:& j" x6 s7 O, W4 a6 b
$ bin/start-dfs.sh
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
在分配的JobTracker上,运行下面的命令启动Map/Reduce:+ @: D9 S/ i' a" e  l# o5 a7 r  U6 B* |
$ bin/start-mapred.sh
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。

& ~* J" L0 V+ S停止Hadoop
在分配的NameNode上,执行下面的命令停止HDFS:
( X6 T% d8 b: A' q9 ^, H& }$ bin/stop-dfs.sh
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
在分配的JobTracker上,运行下面的命令停止Map/Reduce:
. A; c* C+ R7 e0 q2 e$ bin/stop-mapred.sh" i# X+ w) M4 n
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。

* J0 f6 h" y! ~. a, {1 l" b' R9 ]- C$ P/ M; S7 V& ?! o* J
 楼主| 发表于 2022-11-7 11:12:46 | 显示全部楼层
目的
* d. Y# P$ W: ^+ U+ c本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
; o* P9 L( F7 F' X$ X" N
5 m% U% B5 ^/ h8 d" g: r; D, _, k如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。
1 ?# \+ K: w1 m6 a; d/ H
/ H; F1 c+ q# W6 b0 x先决条件( i" x1 S+ D7 i, _
确保在你集群中的每个节点上都安装了所有必需软件。- [( D' h' O' W( f+ ~* j/ h6 i
获取Hadoop软件包。4 Y2 G9 H1 Q$ u. c
安装
7 m# k# O* w- k! M( q安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。* N7 R+ X" S# `4 M8 C2 d4 p
8 J8 |3 _2 g' r% ?
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。5 c3 u2 |: ?' E) K. U

1 I: O/ Z% w2 o- g* i2 z我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。0 ^) |& j3 }( S# |. ]) W

/ i; W# s. [1 g配置' O, O1 a8 F. C9 o3 t
接下来的几节描述了如何配置Hadoop集群。
( b5 b2 p" M3 q5 t: W4 t4 f
2 ]; L5 P' m# y9 u2 N配置文件+ g. t( r/ w; L: Z9 h! N
对Hadoop的配置通过conf/目录下的两个重要配置文件完成:* @1 L; q" Q* y( L2 Z8 V5 q

" x% N5 P* a$ v6 E+ |8 [) ?4 Whadoop-default.xml - 只读的默认配置。
9 S8 r; P; X7 I6 Q7 B2 R0 Chadoop-site.xml - 集群特有的配置。
3 P+ ]- g' y, e+ X1 g6 _要了解更多关于这些配置文件如何影响Hadoop框架的细节,请看这里。
3 N+ E  E$ K( I
' G# c+ j6 I3 C7 w8 X此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。" v/ k: Q) v% O5 C5 r5 b4 L
4 u; o8 K( C3 |0 C( o8 O
集群配置
/ W  ~/ g+ b/ K要配置Hadoop集群,你需要设置Hadoop守护进程的运行环境和Hadoop守护进程的运行参数。+ G! n2 n$ `" q, L

% t* @1 `% B9 `$ n6 }8 Y. C$ @  lHadoop守护进程指NameNode/DataNode 和JobTracker/TaskTracker。8 q2 `; J+ X/ m! k8 R
8 K/ e& H! j6 V$ T# o8 j* D$ {
配置Hadoop守护进程的运行环境9 J8 z  U3 J, G8 T( D. _
管理员可在conf/hadoop-env.sh脚本内对Hadoop守护进程的运行环境做特别指定。! L+ F# P1 _: [& z, G# K+ h! [

- \, m& u4 o5 `) W" e6 W' Z至少,你得设定JAVA_HOME使之在每一远端节点上都被正确设置。
3 o7 w. ~! X: Z; `5 L) q& m0 `* @! E; t8 x, b& y- g
管理员可以通过配置选项HADOOP_*_OPTS来分别配置各个守护进程。 下表是可以配置的选项。# b3 ]. G& m: W/ I& K. k
6 k( A  R: v* H. L, b
守护进程        配置选项, @, G& }; q2 K4 X0 w
NameNode        HADOOP_NAMENODE_OPTS
: D: v* D9 {2 mDataNode        HADOOP_DATANODE_OPTS
& g- {5 J. s7 k8 M7 e. `( z' DSecondaryNamenode        HADOOP_SECONDARYNAMENODE_OPTS3 r, K, M2 Z% B8 B$ \. S: w
JobTracker        HADOOP_JOBTRACKER_OPTS
. T5 m7 C# X5 E6 K! fTaskTracker        HADOOP_TASKTRACKER_OPTS/ X9 t! d8 z# W( ?- o
例如,配置Namenode时,为了使其能够并行回收垃圾(parallelGC), 要把下面的代码加入到hadoop-env.sh :! d( \* R6 g5 i
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"! `; W- e% L4 A: l1 f# Y1 Z' h
其它可定制的常用参数还包括:% p& G2 r* v1 w
- z/ v# d  o' }! a
HADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
: Y+ F: O8 M. s! U$ E0 lHADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB。
) y1 x# q1 A4 U# E$ I配置Hadoop守护进程的运行参数9 W% e% {- J# H4 Y6 p+ K7 C. X
这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。
# i' a7 Y3 v0 q0 a7 c" k
- s6 |; v( V1 i* L参数        取值        备注7 G' o8 [+ y8 c+ R8 ^
fs.default.name        NameNode的URI。        hdfs://主机名/, _$ y) V6 ^. N2 ~" I: m
mapred.job.tracker        JobTracker的主机(或者IP)和端口。        主机:端口。
' I- ]0 {7 R- J5 t8 J5 rdfs.name.dir        NameNode持久存储名字空间及事务日志的本地文件系统路径。        当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。$ p( r! _- [4 h9 r% W& K. d
dfs.data.dir        DataNode存放块数据的本地文件系统路径,逗号分割的列表。        当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
4 Q) v  Q' C, Q1 o8 F' imapred.system.dir        Map/Reduce框架存储系统文件的HDFS路径。比如/hadoop/mapred/system/。        这个路径是默认文件系统(HDFS)下的路径, 须从服务器和客户端上均可访问。
% b. p, F3 e- s8 E7 m& umapred.local.dir        本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。        多路径有助于利用磁盘i/o。# n3 d! T) S! B. B( I- T
mapred.tasktracker.{map|reduce}.tasks.maximum        某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。        默认为2(2个map和2个reduce),可依据硬件情况更改。
# _  T3 D: K" p4 H# Y3 u. t9 mdfs.hosts/dfs.hosts.exclude        许可/拒绝DataNode列表。        如有必要,用这个文件控制许可的datanode列表。
6 g" f4 S+ Z; r( Rmapred.hosts/mapred.hosts.exclude        许可/拒绝TaskTracker列表。        如有必要,用这个文件控制许可的TaskTracker列表。
+ i/ K% s: a  A  ]( G+ {4 l通常,上述参数被标记为 final 以确保它们不被用户应用更改。
8 D. x  o9 n( d) d0 n
# s/ c. {. h" J2 Y3 w现实世界的集群配置* I6 C" s" I4 n5 T
这节罗列在大规模集群上运行sort基准测试(benchmark)时使用到的一些非缺省配置。
9 ]% G; j6 A& h* A8 P! ^0 ]
3 J- m5 f6 j* [# @8 x- [2 C运行sort900的一些非缺省配置值,sort900即在900个节点的集群上对9TB的数据进行排序:4 S$ Y* j- \6 \& H

; T, b. C$ v* U6 r参数        取值        备注
/ D% h/ a$ t# x4 ~/ j* E9 Xdfs.block.size        134217728        针对大文件系统,HDFS的块大小取128MB。
. N$ ~( A- ?2 L  k: d' m& xdfs.namenode.handler.count        40        启动更多的NameNode服务线程去处理来自大量DataNode的RPC请求。( [+ F9 H8 M$ @1 R/ L( k4 u
mapred.reduce.parallel.copies        20        reduce启动更多的并行拷贝器以获取大量map的输出。- Q( N* _+ S1 Q# l8 E; r7 |
mapred.child.java.opts        -Xmx512M        为map/reduce子虚拟机使用更大的堆。
$ b) K$ U% n: i$ |* T" ~fs.inmemory.size.mb        200        为reduce阶段合并map输出所需的内存文件系统分配更多的内存。
' z9 T/ `) u3 A' Rio.sort.factor        100        文件排序时更多的流将同时被归并。3 Z6 F( ^( T' u; j, f7 j
io.sort.mb        200        提高排序时的内存上限。2 C$ C& ?+ {) B* v/ T7 R
io.file.buffer.size        131072        SequenceFile中用到的读/写缓存大小。2 A3 a/ _0 [% N" @: z
运行sort1400和sort2000时需要更新的配置,即在1400个节点上对14TB的数据进行排序和在2000个节点上对20TB的数据进行排序:
% D/ c  G2 M0 A2 H
# r- f& i- V, U  {8 h, T参数        取值        备注. u  c( @3 W' @! E# f5 {* L+ I
mapred.job.tracker.handler.count        60        启用更多的JobTracker服务线程去处理来自大量TaskTracker的RPC请求。
$ t5 }' \$ E% L* Vmapred.reduce.parallel.copies        50       
! N1 ]6 Z  I  R3 O; p, ]- Btasktracker.http.threads        50        为TaskTracker的Http服务启用更多的工作线程。reduce通过Http服务获取map的中间输出。+ j4 q! U: L7 q0 T, n
mapred.child.java.opts        -Xmx1024M        使用更大的堆用于maps/reduces的子虚拟机# D# j8 Z* ~* p# Q
Slaves
7 U/ [1 B4 M8 S) F$ w通常,你选择集群中的一台机器作为NameNode,另外一台不同的机器作为JobTracker。余下的机器即作为DataNode又作为TaskTracker,这些被称之为slaves。7 d. B/ S( C' M: {  t3 t. e

) t4 @, ^- o/ y5 [在conf/slaves文件中列出所有slave的主机名或者IP地址,一行一个。
. i5 L3 `. C& J* K0 N" W7 K% Z$ n+ G8 x. K/ O9 g* P/ C
日志8 v9 ?: Y" J- K. T! s5 |& D: M' k9 l
Hadoop使用Apache log4j来记录日志,它由Apache Commons Logging框架来实现。编辑conf/log4j.properties文件可以改变Hadoop守护进程的日志配置(日志格式等)。  y0 I3 @  A" w& l

, d: \# Z& z4 O3 h5 R" [. |1 F历史日志" V" ~: c  n/ k/ C/ W( j
作业的历史文件集中存放在hadoop.job.history.location,这个也可以是在分布式文件系统下的路径,其默认值为${HADOOP_LOG_DIR}/history。jobtracker的web UI上有历史日志的web UI链接。) q! \0 g$ K1 r) M

  Q9 X$ b" c, G7 B4 G% p历史文件在用户指定的目录hadoop.job.history.user.location也会记录一份,这个配置的缺省值为作业的输出目录。这些文件被存放在指定路径下的“_logs/history/”目录中。因此,默认情况下日志文件会在“mapred.output.dir/_logs/history/”下。如果将hadoop.job.history.user.location指定为值none,系统将不再记录此日志。
, U1 z/ X0 V. f/ x% g! z  J/ u% `+ s1 W% N
用户可使用以下命令在指定路径下查看历史日志汇总+ e1 M, X1 g6 v7 l. z
$ bin/hadoop job -history output-dir
( M9 S; s  |4 ^, y7 ?1 _这条命令会显示作业的细节信息,失败和终止的任务细节。% [6 v1 ?$ m4 Z% t# q# n* W8 X
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看% [3 ]* d1 Q2 B1 }* @4 Q
$ bin/hadoop job -history all output-dir+ J; T- Z  h, Z2 a  v
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。
, M: m& X7 b9 ~( M( l2 a5 c$ p& X+ _* u7 [3 x) \
Hadoop的机架感知& y# |4 j: b* r( \  C$ y0 H1 [; @
HDFS和Map/Reduce的组件是能够感知机架的。
' k4 g/ W- ~) x6 [+ A2 R
( N" A. O+ X. f4 Z8 B* C# gNameNode和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- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
$ V* A7 {% [/ v2 s
. n$ E" }$ D  z# P' N3 ?* O启动Hadoop( y" i* P2 U0 Y8 v1 s& h
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
; i8 Z) L) g1 v: M( G& R7 {
# [- |4 f- ]1 w& n% M格式化一个新的分布式文件系统:4 H6 a& H: n7 C3 f. P
$ bin/hadoop namenode -format1 V9 `" B( |; u" A
5 O' u- ?! @( C/ x2 v; j
在分配的NameNode上,运行下面的命令启动HDFS:
' s7 l1 H! l! D7 Y0 U$ bin/start-dfs.sh6 P  I' I' D$ u( D0 A
  I3 C- Q, Q& Q% G( O: L. k# n5 M
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。- u, |9 I+ C9 G' z/ A, N

, s2 M: x* |& i% ~! M3 Z在分配的JobTracker上,运行下面的命令启动Map/Reduce:& F1 x% [' q# V+ d4 k/ w4 z' \
$ bin/start-mapred.sh- |. W" G" O# t' w  b* w% u  l

2 s  `3 V( ]2 g3 @$ p7 d. xbin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
7 Q8 J& q( }' E9 w" f! n8 z6 x; _( F
停止Hadoop
. d) g6 i) M* q6 F4 @0 N" y在分配的NameNode上,执行下面的命令停止HDFS:
) _" Z& z7 x# ^! E$ bin/stop-dfs.sh
( n- d2 N; k. T" }1 ?- ]; l. [& e& }" o4 s# g- B- n1 A
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。  U+ C: U+ Z! k3 m! S. @
( y- `6 ~! ^; l6 Q  J# K
在分配的JobTracker上,运行下面的命令停止Map/Reduce:, U* M/ ^  m- [, w+ e/ t
$ bin/stop-mapred.sh, i9 x6 O' p) S* u  h( z
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。
; R) H9 ^: Y/ u- }, X0 }- U% Z0 ^) N# x1 t, T( A/ m0 @
 楼主| 发表于 2022-11-7 11:13:57 | 显示全部楼层
Hadoop伪分布式环境搭建* ~$ ^( g9 C& }- D: J
: l  P  T. S- M5 h
      (1)三种模式% D' O; @3 M5 {% a" `( J
: n9 {" |% W  c4 ?* O$ L, T
              Local (Standalone) Mode  本地模式:不使用HDFS文件系统,使用本地文件系统,程序员调试用;. Q& Q/ e% M3 r' y- j: d9 M
4 q2 T6 ?( E9 C1 E+ e- d
              Pseudo-Distributed Mode  伪分布式模式:单节点,一台机器,使用HDFS文件系统,程序员调试用;
5 I+ ?7 g0 c# v, K4 u4 q2 g. j; Q  u$ ]* v' B/ S& f+ v
              Fully-Distributed Mode  完全分布式模式:真实生产环境用,集群。
% a5 a# N% w( q
: b- C" ]. h; C0 Q5 ?! f' z9 d) [      (2)解压JDK" m. X7 i, W" b* ~& d8 g
; C7 R8 r3 F+ {$ w4 v% f4 r) E: c1 r- t
              $ tar  -zxf  jdk-7u67-linux-x64.tar.gz  -C  /opt/modules/) u8 P4 w8 |. a8 }! d7 S  i* g

  Y! A# M' _+ s4 T5 i8 T              配置环境变量
* \& x1 b* O) b0 x; \, y0 i$ ~$ k( b0 u  _& `" A* N
              #JAVA_HOME1 B  A3 G7 I- p3 `4 R4 R
               export JAVA_HOME=/opt/modules/jdk1.7.0_67, [, `# g/ b  r2 S! M5 X: F. ?
               export PATH=$PATH:$JAVA_HOME/bin
- [6 F* N8 p! n) ?! a, o0 J; Z6 S6 _1 x/ G, `; g
      (3)解压Hadoop0 W4 I; E- L5 s$ A) d  Z: K

: m5 U; C! J( {$ L. l9 ~4 s              $ tar -zxf hadoop-2.5.0.tar.gz -C /opt/modules/& T6 R( Q! m; _+ M9 F  x9 u) q

- z% u% N! V1 H2 A3 ~! g  b* b      (4)建议:删除rm -rf /opt/modules/hadoop-2.5.0/share/doc/,里面是英文文档,没有作用
& E6 ]$ y5 k: F( F9 ~  X, ^) b* ?
  t: d& |/ E, P) v3 p$ E7 r      (5)配置过程
* @. B& j9 C5 s# A5 z: W7 X; o2 S5 J  e8 Y3 O
              <1>hadoop-env.sh、mapred-env.sh、yarn-env.sh指定Java的安装路径
$ P  `! A) M1 W7 X2 G                      export JAVA_HOME=/opt/modules/jdk1.7.0_67
& q/ N. c% W7 @9 r! q
* k  F8 A2 w+ N6 J$ v( h' _, j              <2>core-site.xml,指定namenode所在机器位置及交互端口号,另外也是指定使用的是HDFS文件系统# A' ?+ k: b: K) l+ j4 n
                      <property>) f  }: A1 [. d% J# ]* ?; X
                             <name>fs.defaultFS</name>" V1 N) @9 k1 @. R. y  `$ e
                             <value>hdfs://hadoop-senior.ibeifeng.com:8020</value>
) J! E5 ?9 r) Y- j5 E                      </property>: X9 Z! u; X( f6 e- @
" m) y/ H, M% u# |, W" }7 l
              <3>hdfs-site.xml,指定副本数个数% ^; ?( K) ~, E2 f3 e, E
                      <property>; R& Y3 N. J) v; n# N4 `# Q" f' ~+ J
                             <name>dfs.replication</name>
( W" e( M* A0 e! P. ^                             <value>1</value>3 w9 E  X8 I) {$ w2 z3 f7 R  t
                      </property>
; m$ `; d+ I1 w' l2 ]; K! n
* Y* ~* m2 f  f5 j4 b" }              <4>core-site.xml,更改Hadoop默认的临时目录位置,用于存放块文件和元数据文件" O$ L. z+ v6 [3 f2 W, d7 Q
                      <property>
- Z  q* V" L9 H4 e' e/ t                            <name>hadoop.tmp.dir</name>0 N& Z( x5 r- l( N) G
                            <value>/opt/modules/hadoop-2.5.0/data/tmp</value>) i7 o1 i# m% b6 {
                      </property>$ u  b8 t. ]1 `- B( ~
2 L; S1 C* N8 S$ Q
              <5>slaves,指定从节点位置(主机名),包括datanode和nodemanager9 x, }8 K$ D" V

, u# H5 O( @7 u& e) z( y2 p$ ^" k              <6>格式化namenode,对于元数据进行初始化,否则无法读取元数据
' j% X9 z& y; g; ~
+ `0 M& ?; i1 w5 y7 J5 e                     bin/hdfs namenode -format
3 `! L" W, ^" {6 F: F
2 i. U6 l( ?$ b' a             <7>更改mapred-site.xml文件名称,指定MR运行在yarn上
, K. b1 c) W4 S7 I+ V                     <property>% E1 m# Z  x! m' s7 m6 |
                             <name>mapreduce.framework.name</name>6 e  K8 l" X- }& B, j2 G& Q
                             <value>yarn</value>
" j2 R  _/ q2 K) R/ D                     </property>
* \2 [# w9 r/ [# \1 `# W7 p9 P) H# t9 k; A9 U1 l9 R: P
            <8>yarn-site.xml
9 t6 H4 `1 A9 M! H1 Y                     <property>8 J$ ?" O7 r4 J8 P
                          <name>yarn.nodemanager.aux-services</name>$ w, A, o7 b: |( M
                          <value>mapreduce_shuffle</value>
! d. g0 r6 _  T; L9 a                     </property>
% G7 c- d* u7 L5 h9 E                     <property># m6 s4 J: q; w8 K9 G5 s4 U3 h( N
                          <name>yarn.resourcemanager.hostname</name>: a* H4 Y# w+ A2 S# u2 Y' s
                          <value>hadoop-senior.ibeifeng.com</value>
, u' ^6 v/ E9 ^3 v+ g/ Z                     </property>
% z& _$ s! F5 G& ^! u- V
% m% o0 R% n8 X3 o$ }4 o            <9>yarn外部管理界面端口号:8088* u: t- T" O% n' V+ x- m5 b! Q# D

" L8 l& A0 g) Q4 C1 {                  HDFS外部管理界面端口号:50070- f/ c( n+ z$ V: I( w) L

# X$ s1 X* W+ w: B' ~: u7 Z                  secondarynamenode外部管理界面端口号:50090* ^" P/ m% ^8 G2 T7 E

4 O+ T  m# b: K7、组件启动0 O8 @. P9 B% i) _& H  b

/ ]% P: K, d1 [3 ^) `8 K      启动namenode:2 |2 C6 ~1 K( E, {& W, h% ]0 h

6 b- n' ^. w) w- }$ e2 a$ Z: E      sbin/hadoop-daemon.sh start namenode
2 j9 _4 ?; y' p2 |
/ G9 f  b. p  w      启动datanode:
" H* Y7 I. m* w# I( g. h7 T( @" g
      sbin/hadoop-daemon.sh start datanode
0 v7 u2 O( p2 T- A
2 Q6 {0 ]8 h! T6 N' d      启动resourcemanager:
5 c- V7 ?, b) x9 t. r) U$ P3 P0 \! c' U' U5 R1 U9 L/ r3 A7 j) r9 _
      sbin/yarn-daemon.sh start resourcemanager
+ e& t- @' m8 L* W
* W% L. X2 n9 U2 u" r      启动nodemanager:
9 m3 s/ x# a3 A
" q0 A; w# e& {      sbin/yarn-daemon.sh start nodemanager, i* m6 @+ X* @+ q
* e# J! n$ \8 I3 j2 B* p; S
8、日志
% o+ u2 _1 R/ t! _
' v, o; A8 s" j2 b3 T      日志文件:分析日志文件的格式.log和.out
( ]6 k2 r" d$ V2 H$ O  P9 Y6 a. u; t# m) r# n1 G( _
      .log:通过log4j记录的,记录大部分应用程序的日志信息
1 G* ?7 S, Z! a: z2 @+ D0 @; F/ e. P; N  G# B
      .out:记录标准输出和标准错误日志,少量记录% {% t# `/ ]5 z  H* r6 p! `
/ y* {! }9 ~  w2 D
      日志文件的命名规则:【框架名称-用户名-进程名-主机名.日志格式后缀】$ H7 W! m2 C/ L1 x( P; Z
0 A1 f% Z$ \. z$ Q9 s
      出错一定要学会看日志,看错误信息,看.log的日志
, K% ?9 q+ ~. A7 \- s2 z5 j$ k0 x" ]! C
9、Hadoop自带历史服务器0 H3 g! `, @: @5 t

2 n  a6 ?' a1 T8 X9 u6 Q2 r( y: ^* F     配置:mapred-site.xml# Y! E- {: @1 z2 n# |# {
/ Z& T! Q' Q9 T5 P" R( D
     <property>* Z" L0 f* ~& z5 u8 s/ ]( D
                 <name>mapreduce.jobhistory.address</name>
% F+ n9 w) \8 ^0 }# J                 <value>hadoop-senior.ibeifeng.com:10020</value>
" p' @: l+ o! j+ N# }; ^         </property>
# b) V+ s/ o2 _1 ?5 `0 I# C         <property>! f4 `2 D' z( y
                 <name>mapreduce.jobhistory.webapp.address</name>- X0 }3 [$ }. b. s
                 <value>hadoop-senior.ibeifeng.com:19888</value>/ `, y+ h. y7 v
         </property>8 c* ?8 b7 [& g, g2 A

' E6 F* q! }6 c     启动历史服务器:sbin/mr-jobhistory-daemon.sh start historyserver* C, u+ C& M% l# i2 |
8 U5 p  P4 r1 f# e  x
10、日志聚集! e! F, e/ N, r! I' @" O

8 h# o4 H2 j! w5 C      日志聚合是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚合功能需要额外的配置。
! _4 r' O9 t4 l. K, u2 s( k4 g4 C  i$ e/ ~
       yarn-site.xml
- N3 r7 b/ ?/ V7 w( `$ f6 v+ R
1 Y* a/ C' d% v& s8 i3 R( W; k1 u        <property>
2 [# f2 I: O6 l# O                 <name>yarn.log-aggregation-enable</name>. I: Q) P% n! k; Z5 e" U9 w% b
                 <value>true</value>
+ F# f  Z$ o) v. ]7 N         </property>
, K$ @7 R7 H% ^" V' u' E         <property>
) H% l2 E4 Y' h9 r6 h: I% f4 _                 <name>yarn.log-aggregation.retain-seconds</name>
) Y# c: m0 C' K9 U0 s% I+ e4 v                 <value>106800</value>
+ |5 J) J7 N; V+ G( E' u% K5 S% a8 I         </property>
0 m+ L1 c/ j: R) i- E
- F# I$ J! Z+ H" \( d        单位:秒
) j' W, _% K" ~4 b% k" E9 ~4 F# V7 H- e  k. Z! U' K5 X
      重启resourcemanager、nodemanager和historyserver:* g9 V! J, W9 S: x$ U) Y; m* l1 f
3 y8 U7 {( S1 ]% y: i( I" |  p
      sbin/yarn-daemon.sh stop resourcemanager/ u; F, T) @+ }- H" N/ f, ~
% F+ ?% a+ Z6 g) ]- J) ?
      sbin/yarn-daemon.sh stop nodemanager
4 V  ?. @% V& t
/ Q) f. [- J# p; r' h0 v+ [      sbin/mr-jobhistory-daemon.sh stop historyserver% D$ W9 S; S2 s

3 C6 d/ L& p1 d, p! ^1 u# a      sbin/yarn-daemon.sh start resourcemanager8 e  h; p8 q  v1 f& y
4 K! y* I9 @& O) v8 y
      sbin/yarn-daemon.sh start nodemanager
8 v/ ?( {3 ^. @( N2 @2 `. Y$ h% J  d7 I, n( N7 z  h
      sbin/mr-jobhistory-daemon.sh start historyserver
1 [& _  W' C3 w5 m2 l0 Z+ ]& k3 Y* Y* P
11、HDFS用户权限检查- O/ n& M. @* `8 G8 q+ y& r

& o; W6 K9 ~+ G$ S1 V% T" U' z$ Y      hdfs-site.xml% U4 V0 g/ F+ o

' i  @2 U  c* Y5 n/ s      <property>
3 f0 z( c- P9 K! Y3 Q! D) X                 <name>dfs.permissions.enabled</name>* o' F4 t0 u# v) q4 I4 Y
                 <value>false</name>3 W$ p1 [1 {6 M( k# {- L  a
       </property>! Z( }2 \8 S# t& m3 v( l
' g( x0 W# s% n! [1 k/ Y$ f5 l
      core-site.xml
) P) {0 G/ t! S! c& d: B* q% X& K7 U
      <property>- Q- Y' h4 E8 c6 q" m8 l( L
                 <name>hadoop.http.staticuser.user</name>% C+ A$ _8 g( R/ n1 L3 z
                 <value>beifeng</value>
8 w, m* M2 g- I2 j3 [       </property>
$ Z4 c: s: D: O' C* Z# e7 P
# Z0 x7 ^! `6 V9 c1 J7 @# e      重启namenode、datanode、resourcemanager、nodemanager和historyserver:
: j$ q' h; T& b% }0 e" L; A% {/ s$ L$ i8 w) k
      sbin/hadoop-daemon.sh stop namenode' H0 K( ^& W& e7 h8 D3 L, s$ \

$ U  C" g6 Q' \2 N& G      sbin/hadoop-daemon.sh stop datanode& d9 c% }! N6 K6 L, p- O, y/ h- A, O
% U. w8 P1 x1 L9 V# {* f
      sbin/yarn-daemon.sh stop resourcemanager. s0 ]% e# Y2 m& I+ i! b( [2 K

! c/ \: ^/ r* I      sbin/yarn-daemon.sh stop nodemanager
6 I- T1 ~+ @7 ^' x
- r: C3 ]5 G1 |( A0 n      sbin/mr-jobhistory-daemon.sh stop historyserver
+ i2 L# V+ R" u3 [5 {
) X9 y/ f. V) W7 {' p* c+ e$ y      sbin/hadoop-daemon.sh start namenode( Y6 Z0 s% u* @8 B2 ~1 E

! x- I, }* p, m      sbin/hadoop-daemon.sh start datanode
- ?# v0 r! L. _1 _% Z4 y) K$ O- N* r. U$ k& c" t
      sbin/yarn-daemon.sh start resourcemanager
" b, ^* K5 y4 [+ X6 T4 C" N9 [9 E, |
      sbin/yarn-daemon.sh start nodemanager3 ]1 M9 y% H3 e  S, n! D
' V/ p5 t) A% M6 Z5 f- ~
      sbin/mr-jobhistory-daemon.sh start historyserver- o1 y) D* b4 ^5 y7 |

" x) A2 t! _& W7 \0 N7 k12、SecondaryNameNode
$ F2 x: }; l& \3 E1 d, k8 ~
8 ]& `& q3 R% x* L       NameNode启动后的元数据存放在内存中,启动前的元数据存放在本地文件系统文件中。4 Q6 }, z9 I3 O8 q/ E1 n
& }* X) _; s/ s. `
       HDFS格式化后生成fsimage镜像文件,其中存放文件系统元数据,NameNode会读取此元数据,并存放在内存中。- n. M; T$ Z. d1 n) K
$ a" k( L7 x, x6 _* q2 s
       edits文件,编辑日志文件,用于保存用户对于HDFS文件系统的每一步行为操作。' |$ g+ b2 x$ l% v  V5 h/ f

0 ~& k9 t4 ~  K' M       NameNode启动后,先读取fsimage镜像文件,得到元数据,再读取edits日志文件,数据就不会丢失。8 ]7 T: Z! P4 [+ Z/ y* Y8 a9 s  W
3 n4 F  y: T$ E$ Z6 X  Q3 V' F% @4 [
       SecondaryNameNode用于减少NameNode重启的时间、合并文件,SecondaryNameNode读取两类文件,加载到内存,写到一个新的fsimage镜像文件,然后再生成一个edits编辑日志文件,每隔一段时间将新生成的fsimage和新生成的edits合并成一个fsimage镜像文件,即每隔一段时间获取HDFS元数据的快照,这样NameNode重启只需要读取内存中的fsimage镜像文件即可,读取镜像文件比读取日志文件快很多。3 I% U0 ~' Y7 t" o' R' ^: Y

9 Z- _1 o+ H8 O- [0 N% g! y$ r       hdfs-site.xml  H' b! {# g4 j: c" H
* B4 I$ E* P# H5 k- l
       <property>
, Z3 X4 \! W) t) I2 G% _3 A                 <name>dfs.namenode.secondary.http-address</name>
/ b; j4 {/ r/ }+ y$ n0 u9 _                 <value>hadoop-senior.ibeifeng.com:50090</value>( x0 u1 e, j1 Y
        </property>/ y  j) \8 M$ \* ~6 r% p0 E

4 y+ l! V& q/ V       启动命令:$ sbin/hadoop-daemon.sh start secondarynamenode. h2 i- f6 T8 Y. h8 h( V" J
# Z9 b7 b/ ^0 G: W3 q5 k
13、块文件存放地址
/ G9 p$ g( j  [
  E3 K- @( s6 e% u      /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-2012260383-192.168.74.128-1516569449179/current/finalized5 i! ^2 Y6 I# C1 {: B" Y
! z! K2 [) \, m
      镜像文件、日志文件存放地址
( }0 d, ^5 {# V- o  F8 F
! q2 {0 n& j+ J      /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current
/ d' G: }3 ^8 ?3 |( I$ v; A# ~
$ E1 K/ n4 T6 N% p$ O, {2 n      dfs.blocksize自定义块大小属性(单位字节),在hdfs-site.xml中3 o* S9 B7 X: S$ {+ I/ W

- E0 S6 }! Q: Y- u3 v14、SSH免密码登陆3 r- I& H2 @6 y" [
6 Z% }4 u! Z5 `/ G. W
      使用sbin/start-dfs.sh脚本文件启动namenode、datanode和secondarynamenode时,需要输入用户密码,使用SSH免密码登陆的话,就给用户生成公钥和私钥,用户将自己的公钥储存在远程主机上,将公钥发到需要登陆的服务器,当需要登陆时,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回去,远程主机用事先存储的公钥进行解密,如果解密成功,就证明用户是可信的,直接允许登陆shell,不再要求密码。
3 P" V/ G6 ]: ~0 h4 }
6 ]8 B2 _/ V- K4 D      配置SSH免密码登陆:2 r9 _$ T; {5 A. h" l( s% r! z1 v

+ J3 K/ W; p+ t/ J      cd home/beifeng/.ssh( U3 M8 B# ?3 ?. m+ t
) o' Q4 f$ |- I! ]0 V
      ssh-keygen -t rsa
' e2 k1 V# j, P9 \- G! {9 e' S7 ~1 ^$ q9 ^' F" V' K
      即生成id_rsa和id_rsa.pub文件,其中id_rsa是私钥,id_rsa.pub是公钥。$ }* E( C; B6 c6 @' o$ j

2 {1 ?/ @. Y1 Y/ C$ a, g6 W      ssh-copy-id hadoop-senior.ibeifeng.com
; M, d; t( K1 q) w8 t! _9 D% U: j. N2 s# ^' V# V; h
      即生成authorized_keys和known_hosts文件,其中authorized_keys是向远程主机发送的用户公钥,known_hosts是记录文件,有记录文件就不需要再输入密码了。
3 \1 n- a0 y$ Z& E1 S  }$ G* F; y: d2 x' R
15、Hadoop配置常见错误
3 L8 v  c) k7 s" t$ S0 E1 h+ G8 \* R, C" |5 j' R
       <1>不要多次格式化namenode,如需再次格式化,需要先删除data/tmp/下的所有文件。8 t2 ]! K/ ]4 F6 M5 a! Z/ T
% A; ?2 W* V- a. O; y
       <2>集群ID不一致,即
, O( E$ [2 x5 M
: v9 L# q3 U8 g             /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current/VERSION7 t% ^4 u9 {/ D
. H6 x: B* U( w# K6 ?$ n
             /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/VERSION
% h& ^/ O! `% m8 E. d$ L, N5 U; j. ]! O$ E0 _: k
             两文件中的clusterID不一致,这是由于多次格式化导致的,解决方法可以如<1>,也可以依据namenode中的clusterID来修改datanode中的clusterID。6 {; c$ Q  U! s9 l, V! n3 V  M

: H1 E7 ]) a6 b8 E       <3>端口号被占用,使用netstat -tlun查看。2 x/ G- y3 }. [$ Y* i& `; W) w

, `4 A9 c' C, |% ]       <4>多用户混用。即/tmp目录下有多个用户的pid,多个用户在各自的环境中启动了同一个进程,造成pid文件冲突。解决方法:将/tmp目录下的.pid文件全部删除,再用一个用户启动进程。) [- h' o4 U" A! W
/ g( v& f+ W8 N) }: F; F4 Z/ C! M+ Z5 {
16、Hadoop配置文件9 h  H7 y  a* n/ e/ r" d; A+ k
9 l5 s4 ]% o9 H. z& i- J% O
      Hadoop配置文件分为默认的和自定义的,每个模块对应一个文件。/ _% j: m% J; o
: e! `. M3 _5 O2 W6 n% B& f
      系统启动会先加载默认配置文件。默认配置文件存放在jar包中,/opt/modules/hadoop-2.5.0/share/hadoop/common/hadoop-common-2.5.0.jar中存放有core-default.xml,/opt/modules/hadoop-2.5.0/share/hadoop/hdfs/hadoop-hdfs-2.5.0.jar中存放有hdfs-default.xml,/opt/modules/hadoop-2.5.0/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.5.0.jar中存放有mapred-default.xml,/opt/modules/hadoop-2.5.0/share/hadoop/yarn/hadoop-yarn-common-2.5.0.jar中存放有yarn-default.xml。1 F) a3 D$ ~7 u
  i3 F7 L: d( h- r7 b7 j+ J
       自定义配置文件优先级高于默认配置文件,如果自定义配置文件中有配置,会覆盖默认配置文件中的相应属性。
3 S9 z; I$ d) g1 l: I  D9 C7 Y; [3 {$ ^; j8 u- ]5 _4 E
17、安装rz工具* p7 h  q0 W$ M5 w2 l* N
4 K, |2 _9 M" x  K
       切换到root用户后,用yum安装lrzsz。rz工具用于将Windows中的文件上传到虚拟机中,如CentOS中,只能在远程工具中使用,不能在虚拟机中使用。
& h0 \) c1 B" @. c% x% Q/ j
& d; o( R$ a: Z1 ^      su* o- c" I4 J' P1 Q0 s
) a" j6 l* a) L/ W) V" m7 m
      password:
% V& ^7 o% P: G! v
( X- B/ u6 P2 m' h4 N7 V      yum -y install lrzsz
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

GMT+8, 2026-4-9 00:03 , Processed in 0.063406 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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