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

分布式hadoop【CentOS7】

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-9-26 10:27:20 | 显示全部楼层 |阅读模式
一、安装jdk (各个节点均操作)
5 N- g& N& T- z5 |& z1、环境准备
  }8 n7 l% k  K  ]* y' g: J4 }4 P6 P  `* u$ O) D# ]
" f4 ]: t) o) h

# O# t) P6 r% k0 L1) master.wyl.world (Master Node)
& v2 B4 e/ ?8 L* ^2) node01.wyl.world (Slave Node)
4 [& V3 h; n( y- H% j& o8 b9 L3) node02.wyl.world (Slave Node) 3 U0 W9 H6 P* R" B& a* |9 P
7 o4 P; e1 |: ]" ^
2、下载jdk包% b, _7 H# ]/ N. S0 b0 I9 r0 Q4 x

' P. a, v$ u% E, a+ i# t  n3 x% _- l2 `

2 c4 [# x# s( C5 M+ ]9 j7 {9 D[root@master ~]# curl -LO -H "Cookie: oraclelicense=accept-securebackup-cookie" \
4 ]5 Z+ L2 o- v' |, Bhttp://download.oracle.com/otn-pub/java/jdk/8u71-b15/jdk-8u71-linux-x64.rpm
& v7 X7 V2 x2 l0 I
6 C, g+ l- e& N安装jdk, B8 k- t) D- o+ f' h5 r; |6 a" J
7 W" Q/ c" ?+ x- j

. y0 |5 Q  c( s9 X0 S
$ n0 Z+ U) z4 @# J% j* r" v  y, H[root@master ~]# rpm -Uvh jdk-8u71-linux-x64.rpm 3 J6 K. o9 P5 j: R, u& S
Preparing...                ############################## [100%]0 `9 l% M! @- [5 X% }
   1:jdk1.8.0_71            ############################## [100%]% z3 e7 O; {7 l# v( G- x$ F1 ^
Unpacking JAR files...: _7 F( `: U' i2 l
        rt.jar...7 p3 Z: V$ L  p3 K! _
        jsse.jar...* W% S; E" M% S2 w. P9 t
        charsets.jar...
  S! ~6 c) o4 {" b9 j5 U        tools.jar...5 w0 f8 v/ X: U: l
        localedata.jar...+ e: C* d- b2 P7 v% u
        jfxrt.jar..., Z! {3 u& @+ W/ k

5 l- S; B' C3 ~$ B' r3、更改环境变量
6 J: i- N' T: I! ~+ K% P( x- [+ ^! s; k

* b3 W) P# y% x  _5 N1 C* T+ z! M  h5 W
[root@master ~]# vi /etc/profile
( @6 u. e- `7 C! A# 加在末尾7 l2 C# i  Z4 P7 p4 s
export JAVA_HOME=/usr/java/default
: Z: ~2 E6 H. n# B1 z8 u( Texport PATH=$PATH:$JAVA_HOME/bin
3 X! W6 s- z. \+ a% Z5 H# _export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
5 ^% d% p' ?$ A& O: x% T3 e- ~0 g. J5 Q) V' D- g! M
4、应用环境变量0 O( G& U: K& z; b

* `' g7 w! I0 L' \* H* t9 U
* m  a  }( L7 [3 W8 s. t: O3 A9 ~3 g2 @$ l4 x/ j! [
[root@master ~]# source /etc/profile13 H1 d6 A; r$ g

. j( z6 |4 F% w% p. Z: E5 o5、如果系统之前安装过其他版本的jdk,需要更改默认配置
* a' S+ \6 T) d# w" u* e# t& P( N
; r% T! a2 d6 c  y% N8 b
' ^: e0 h3 [: P: d/ n' p
1 x6 B# p% ?! i+ x8 S  m[root@master ~]# alternatives --config java   E7 X6 m% d# O' t: H& g) W7 c4 q

8 l$ s4 z% O! h2 RThere are 2 programs which provide 'java'.
$ r4 `( W7 Q. v/ W9 C2 u; [6 Z( S! k; e% P! F
  Selection    Command$ C5 V  \6 Z, A" B
-----------------------------------------------2 Z9 `6 l3 J$ q# f! ^
*+ 1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java
7 }/ a; p6 r! G   2           /usr/java/jdk1.8.0_71/jre/bin/java/ s9 }, C0 C- _; I) z/ `
# d9 J; D* |% U  y3 ?) s/ n6 |
选择最新的
$ D3 t$ l- [- l! b# R: J/ KEnter to keep the current selection[+], or type selection number: 2
  t" A& A; g5 Z& ?5 |2 e' l, W7 G6 @3 x4 C# ]* \) z2 r5 _
6、写入一个测试程序4 c& b0 j2 F- `$ s& V
! G+ [/ w! m. u: a' S
# A0 J, |0 a# U2 a
! G' j* n$ _+ d
[root@master ~]# vi day.java
1 Z. @, A% b0 [4 N import java.util.Calendar;
- B8 y: C: l3 H' E9 M4 _9 R+ H# ]
7 l3 |9 B% o/ j6 n8 x# Y2 hclass day {+ ^8 V7 m. R0 [) k& C
    public static void main(String[] args) {% o% e" ?% M; E  X7 ^
        Calendar cal = Calendar.getInstance();
3 @* H. j% |% U        int year = cal.get(Calendar.YEAR);7 G# Q8 M! v% K( E
        int month = cal.get(Calendar.MONTH) + 1;
. R0 N3 I; ?% M        int day = cal.get(Calendar.DATE);" ]! Q$ l! C+ `0 U0 _1 N; _
        int hour = cal.get(Calendar.HOUR_OF_DAY);8 s' Y+ v2 p1 ]6 ]* H* m. [3 B* U
        int minute = cal.get(Calendar.MINUTE);( t5 y4 O5 e! ^* J, d, D) O6 {5 ^
        System.out.println(year + "/" + month + "/" + day + " " + hour + ":" + minute);
0 @& `  _7 o5 j7 e- Y7 d0 Z) W    }
# N9 k/ I$ s: {& @6 M}, v* ]" y/ i" D  n- |  K

& d1 [- L# l" e3 V7、编译
( b  V0 j. ^' B+ ?1 \: H# j$ U5 ~* [+ H! \. v' b
0 g1 o/ V+ U; f  M, w

# |. ?" ^" I+ r0 k0 j& q, p[root@master ~]# javac day.java6 _4 P1 D* @$ l& L  E5 E

5 T/ p/ a0 a. I! C8、执行9 H  c  i) S0 q$ T( R6 C! u; I* j

' T' B3 M# @( K. U$ d! M: u1 u/ D5 b+ `

) B3 _2 ]9 H/ {- U2 c3 ^[root@master ~]# java day
( L4 z7 W% n, ~* ^4 l. P/ |2015/3/16 20:30- z4 q  n% [  Y5 K
% t/ B/ o6 G+ K( m3 p+ S
二、安装hadoop
5 C, h8 V8 R3 k, u  H  B8 G1、在各个节点上创建用户,并设置密码
0 ^1 A8 T) x& c/ g0 j6 A8 g
( Y& S( y0 p6 v) ^: ^+ E' V. E1 Z( J5 q+ J/ h6 f& P0 \
1 k9 ~1 p% F5 H1 C4 r
[root@master ~]# useradd -d /usr/hadoop hadoop
; ?8 ^  U- P( [( J: H[root@master ~]# chmod 755 /usr/hadoop
# A. M4 u/ f) N& j% Z[root@master ~]# passwd hadoop
' ^: |5 j& h! ~2 ?% qChanging password for user hadoop.
- Q6 A9 |+ h) O7 v( K% U6 {New password:- ]2 P% X9 w  J) V, M* l
Retype new password:- d2 \. u5 c# B6 _) r4 j
passwd: all authentication tokens updated successfully.
) w( N3 J) S. i+ c( V7 T+ y
% ]1 H9 g0 u; Q8 `/ Z# Q2、通过hadoop用户登录到master节点上,生成秘钥,并拷贝到其他节点上
, N/ D0 c" a% k0 T% ?6 U生成秘钥; |/ ?# d4 d0 v3 [; ^
9 V6 z* C+ V& z3 @/ K

8 V. u5 Q5 G& b2 ]& c5 I" |$ N& g% l' n4 q) H5 c* Z& [
[hadoop@master ~]$ ssh-keygen % v+ i5 a' J  g; d" ?
Generating public/private rsa key pair.
' N5 R0 F( Z% J* TEnter file in which to save the key (/usr/hadoop/.ssh/id_rsa):
( Y1 o( s. x2 P3 Y3 q& {Created directory '/usr/hadoop/.ssh'.4 R. t* W* |3 p
Enter passphrase (empty for no passphrase):
5 C. {6 B2 }3 v& U( V. vEnter same passphrase again:
' |8 B+ O3 _4 FYour identification has been saved in /usr/hadoop/.ssh/id_rsa.
) `# g, G% ^6 N0 Z; q% ^Your public key has been saved in /usr/hadoop/.ssh/id_rsa.pub.
% B' X. \* R6 o( \) mThe key fingerprint is:
6 w( i+ E8 O2 {" `4 k- g& a1 Q( ?2 Sxx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hadoop@master.wyl.world
9 {5 e1 Q+ X: T7 I5 @( Y4 ^0 M* JThe key's randomart image is:
: v( ]  k0 V' y' _, ?3 A* _6 d/ N, D. e3 }
3、发送到本机; W  l' A8 n8 c: u7 Y  ], n$ a
4 g/ \, m( }2 r

9 U; k3 E4 o# ?! w0 w: m9 P: s6 y- j: U
[hadoop@master ~]$ ssh-copy-id localhost
0 w2 `/ I, l* `" N4 z2 |" c: U( r& l$ {- n) T6 U$ A1 i
4、分别拷贝到node节点
1 s' K* z/ n: ?4 j0 d8 j9 u( [0 E
6 z7 D* x5 n7 L& L+ s! y5 T2 h: L0 W: y; _" b

  r" F" ?, v+ d: s0 N: T1 T. R[hadoop@master ~]$ ssh-copy-id node01.wyl.world + Z( w0 L& Z- s, i3 t# p3 T
[hadoop@master ~]$ ssh-copy-id node02.wyl.world
* `4 |( Q$ p( y3 Q
4 M' f) W1 d3 |: d  `6 \& S2 z4 T5、通过hadoop用户在各个节点上安装hadoop " S) R* A  n1 d* O
可以通过下面路径下载最新的安装代码! w: ~$ j8 {9 Y- _& c
7 ?% ^# p; V  G5 U$ ^" t
1 F$ q. Z  ?2 E; E
0 {" }, L7 R, s& x3 q3 ?
https://hadoop.apache.org/releases.html3 i4 d  j. P- e% Y- M5 {$ u
5 X6 D) |/ p( u# B) Z
下载安装包( D: ^  l  ]# \) R2 y5 ^0 B

  @8 M, c' E, w& ]+ i0 R7 ~; s9 Z  |5 D; [9 v) X3 Q8 U- ^

6 d- L1 z. u& R7 ~" ^9 I[hadoop@master ~]$ curl -O http://ftp.jaist.ac.jp/pub/apach ... hadoop-2.7.3.tar.gz 9 \! ^8 z" @7 g+ e1 t9 {

2 ?5 ^0 h4 U3 x% v0 R) H解压安装包/ c. ^8 B3 q7 i" j: q- P

2 k7 D1 l/ [! N3 n9 _- k. i- m. h, w: T& @

& u2 H, C+ j& @) G# p6 K[hadoop@master ~]$ tar zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop --strip-components 1 8 J9 a, C4 S4 p7 K9 d* C8 J0 _
  H  M4 |+ B1 O
写入系统变量: m! C* ?  V- i" L

: t* j5 x+ {/ I3 t' u+ ]' v5 K7 L5 N# K+ m. |

4 k! G! h! j! P; `' V5 T[hadoop@master ~]$ vi ~/.bash_profile
" S6 s- \3 {7 \) E+ f7 o9 F; ~# 加在末尾
* z. j% w% s  V  Gexport HADOOP_HOME=/usr/hadoop: R) n8 ~+ A5 ~, s
export HADOOP_COMMON_HOME=$HADOOP_HOME
5 w# I% e8 t' Z% iexport HADOOP_HDFS_HOME=$HADOOP_HOME
+ l+ ?7 i0 l, S6 lexport HADOOP_MAPRED_HOME=$HADOOP_HOME
1 j: g- Y+ d2 \3 q9 o. l$ \export HADOOP_YARN_HOME=$HADOOP_HOME( ~4 U  T% a! x# ^: A
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"2 o* b: ]" `4 G, u
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native( w+ i  s! E2 G' {& R3 b$ m' d' ]
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin' O; L/ w) e3 }% S- Q  T: M4 [
+ x; d; s+ g' P7 t( C' u
应用系统变量
% R: g" c  o' Z5 Z7 m* d* m, _+ \5 |8 V# b
3 T% x8 U0 t* e# z0 y
( i+ ~7 p5 J* X, x
[hadoop@master ~]$ source ~/.bash_profile ; w/ R5 J. D  `4 [! E/ M0 F7 c
3 c; k* ?# a% j1 X! ^
6、通过hadoop用户在master节点上配置hadoop . G4 Y! z% q& M3 f  D
创建目录
5 W3 O# U* Q5 h8 A+ I& d# [" M3 U5 l. o

% _2 h. w' y5 Q  J% c/ R) ~! e; i! s9 B
[hadoop@master ~]$ mkdir ~/datanode , S' `' C& F+ J) [6 X
[hadoop@master ~]$ ssh node01.wyl.world "mkdir ~/datanode"
5 H9 u7 O3 w& Z% Z7 R[hadoop@master ~]$ ssh node02.wyl.world "mkdir ~/datanode"
8 K7 {/ a( h- W4 O5 b! U# T2 {- `7 r, T! U
7、修改~/etc/hadoop/hdfs-site.xml
" ?4 l/ T0 I) X' m  }" F' b; h& G: Q( T) w9 W

6 b$ F& \3 s1 o  ~3 p3 u$ Y* Y! g: s8 j8 A6 d6 {# [
在 <configuration> - </configuration> 之间加入如下内容3 M7 C8 a4 T* S" w, g9 d. c+ G7 m( G
<configuration>. g4 v4 e$ p/ H0 U5 g9 b/ H
  <property># |& c8 h" P4 S7 a$ X
    <name>dfs.replication</name>. H0 c, C. d5 b7 z: u1 N  f
    <value>2</value>1 _6 T, _5 y# ?' v& I. {
  </property>
& I8 G8 z3 ]& y' E& q: a  <property>
- [  O5 H/ w4 S5 [! `( A. U4 L' t    <name>dfs.datanode.data.dir</name>
9 M# z: |; v# Q' r2 K. X0 `' h  U    <value>file:///usr/hadoop/datanode</value>0 {2 G. G: N3 ?% K% R& p! F
  </property>
) k& R4 W+ [  d</configuration>
# h" t) H) H  U/ e% `6 l+ ~; r* B2 h; V5 d: v2 v) Q
8、拷贝到其他节点上4 A2 S0 ]$ p- e( ?
( c+ M* t; c" L, r/ \
/ h4 U8 ^" b4 A3 @$ s% E( |- N
3 R; j. w0 u! R& V/ ?% h8 r
[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node01.wyl.world:~/etc/hadoop/
' t. ?+ r+ X/ j5 z1 ]3 ?% m[hadoop@master ~]$ scp ~/etc/hadoop/hdfs-site.xml node02.wyl.world:~/etc/hadoop/
" R1 Y3 ]* {+ }. a! |
3 F$ ~+ \$ X  s+ K  O9、修改~/etc/hadoop/core-site.xml
1 f# `; m: r& |  ^% @! Y. ]3 M( P% r$ c" o. E( ~" L

. f" K- i( u& _1 t; a( e
) ^  A! _: g5 s& b3 V8 K% q1 B0 d在 <configuration> - </configuration> 之间加入如下内容0 v2 P+ p% V6 H! K. ~7 r
<configuration>$ T& R8 L8 [$ n5 }
  <property>
- o- Y  ~' f. X* E) w1 e/ a& B    <name>fs.defaultFS</name>
6 T! n" m+ C2 ^; ]  c7 o    <value>hdfs://master.wyl.world:9000/</value>
0 V7 _/ v' e8 n) o  E' E7 a  </property>
5 s: a# q* K+ k8 f% Q6 t; M: j</configuration>
9 p5 w" P9 c" \# K8 I5 V3 ?/ U3 U* V
10、拷贝到其他节点上
! v6 w, `) t) ]$ u  x) K7 o2 `9 x, E, O: J& G
  m5 l3 v) w, Q' F- U( K( B2 i
6 ~- m3 \: n7 Q( f# \- R
[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node01.wyl.world:~/etc/hadoop/ * ^$ ?  @  E# B5 x: m
[hadoop@master ~]$ scp ~/etc/hadoop/core-site.xml node02.wyl.world:~/etc/hadoop/ & B4 o( t" @! p  e3 |
[hadoop@master ~]$ sed -i -e 's/\${JAVA_HOME}/\/usr\/java\/default/' ~/etc/hadoop/hadoop-env.sh 0 S& ~$ E) s: {  w& H3 a( ?) ~
[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node01.wyl.world:~/etc/hadoop/
" t" t& j; ^' g  T[hadoop@master ~]$ scp ~/etc/hadoop/hadoop-env.sh node02.wyl.world:~/etc/hadoop/& n* }9 Z, i  K
[hadoop@master ~]$ mkdir ~/namenode ! A3 \9 n" N7 A* {' h$ d$ C% ^3 R0 C

: J! l  [" N% H8 {/ K11、修改~/etc/hadoop/hdfs-site.xml
* k- u2 c! k+ }6 G/ ]" F: {4 g  G" `, ?
9 F/ U/ W8 I# w+ N' n& I7 ^6 y

$ P0 G9 c6 V) o: }在 <configuration> - </configuration> 之间加入如下内容8 G) c/ {$ H- l& R6 Q: N
<configuration>
7 a1 ^$ {0 K1 Y7 E  u3 ^1 C  <property>
, a5 G# n/ O) x2 \  ~% j    <name>dfs.namenode.name.dir</name>6 U0 X+ r# l2 |# V  P
    <value>file:///usr/hadoop/namenode</value>
: s6 I# j% Q- B: L, e  </property>
3 @! s3 l3 x2 r/ v</configuration>+ p% ]" _, S1 a) a5 k  h

+ Z0 w' y4 j" k6 x+ [7 s- _12、创建~/etc/hadoop/hdfs-site.xml并写入
* j; N1 [  b7 h3 s* C" ^
$ E+ T1 b- b" s+ T! X5 @' O# create new* v9 Q/ c; V8 m5 [; B
<configuration>
% u6 E" E) E/ o  H5 v0 z1 x  <property>5 J" H* L7 I5 W( ~, ?% i, K% ?
    <name>mapreduce.framework.name</name># ^, Y6 ~. l# ]5 l) u
    <value>yarn</value>8 ^1 j8 e3 B9 V" @
  </property>
! ]! J. q: r9 M0 B- b% |</configuration>( N/ p" C' k* _% N, u; L; \

/ J6 u* R1 ]2 g- y- @% E6 G! B13、配置~/etc/hadoop/yarn-site.xml1 r: g: a) t/ J" L: o; j' h2 P& l. ~& b
" C3 p2 p# ?: i' c

4 ~# Q5 ^2 w' `. s7 [% c- N4 P7 z" n
在 <configuration> - </configuration> 之间新增如下内容% P3 W- o2 F; V4 H$ I% H% t# ~
<configuration>9 d! K/ C9 {* J- U: t8 B; C
  <property>& R. Y3 v- p. G3 b- a; J5 x' [
    <name>yarn.resourcemanager.hostname</name>
4 }  p  B& C/ u/ T- B& G    <value>master.wyl.world</value>! n0 Z$ x+ @9 O' n
  </property>
9 _% m9 w/ l2 D  <property># J1 c  R7 _4 ?( P2 g
    <name>yarn.nodemanager.hostname</name>
3 _% V5 k2 ?: f5 y' e6 A$ `0 X    <value>master.wyl.world</value>
" e( I5 u; V, D  </property># e- l8 F: Y9 b* P, D8 m
  <property>
& p$ u4 f+ k- V: k& P0 u2 _& Y$ j    <name>yarn.nodemanager.aux-services</name>
  _, E, l6 Y$ L/ v. f    <value>mapreduce_shuffle</value>
7 K; {6 W5 J5 u( x  </property>% `8 ^4 m: F8 \) B; @
</configuration>  I* t- T/ H- z/ ~- n
1 {( p/ t  X& u8 r
14、在~/etc/hadoop/slaves写入各个节点信息
. l# X$ E' o" |, Z7 v' V
5 Z. [( F( ]) A+ w# t$ N5 ?/ t5 m5 k#添加所有节点信息,并删除localhost
7 B" @7 {$ S3 X3 r  y5 Xmaster.wyl.world# m9 }% }' b0 x  U3 s0 q
node01.wyl.world. {# }7 {% u2 b4 z4 C
node02.wyl.world. I6 J: |/ U& N! N# a

2 G: z# M# `. `; v5 q" e3 [4 f15、格式化namenode并启动hadoop服务
# G; u/ U4 f; U+ n( P3 ?格式化节点
1 N8 [$ v/ U! X; Q! Z
+ C  k$ |, v1 Z, d8 f" e- A/ G# v$ `; B# {+ a$ x- I
4 C* b( f) m, @
[hadoop@master ~]$ hdfs namenode -format % ]0 {$ m7 v& u: y! u8 V
15/07/28 19:58:14 INFO namenode.NameNode: STARTUP_MSG:* T% x  H4 E4 h3 R$ {& c
/************************************************************
' `: s% M" G3 x1 h, t7 ?7 {STARTUP_MSG: Starting NameNode
# s7 A7 P, o2 ^* \STARTUP_MSG:   host = master.wyl.world/10.0.0.30* b, `: w2 Z& g' L) I/ j
STARTUP_MSG:   args = [-format]8 ]' L/ t1 X$ i! W9 d, b
STARTUP_MSG:   version = 2.7.3/ i  P1 I0 Z* N0 N# }
.....# O! I6 j" B5 b, r; A4 |# A, h
...... ?9 ~. V2 x: ?# W. T
15/07/28 19:58:17 INFO namenode.NameNode: SHUTDOWN_MSG:" O: C, y  z! ~6 w3 Y8 M- s% T
/************************************************************6 w  o; t& m4 k! a8 S" X
SHUTDOWN_MSG: Shutting down NameNode at master.wyl.world/10.0.0.30
/ T  W0 W6 s( U' k) ?3 ?* g3 a************************************************************/
2 F( _  }( B4 Q+ j1 E
6 ]; r4 K0 n# ~启动dfs
( r0 Q7 M7 {# c* W; C3 s! w& }2 `* f9 `- i1 ?7 P
6 k3 g, L5 C& X# i! m% X

2 h1 O6 v0 f. J8 V# {- x[hadoop@master ~]$ start-dfs.sh
" P1 J' I4 \+ [Starting namenodes on [master.wyl.world]8 ?$ b# x" u/ W; _7 d' J4 K) B5 l
master.wyl.world: starting namenode, logging to /usr/hadoop/logs/hadoop-hadoop-namenode-master.wyl.world.out; W% C% f" g! X+ P
master.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-master.wyl.world.out
2 j, n3 C$ m1 y, D. }2 o) Vnode02.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node02.wyl.world.out
5 h, p6 Q% i) Snode01.wyl.world: starting datanode, logging to /usr/hadoop/logs/hadoop-hadoop-datanode-node01.wyl.world.out; k& [5 S( O7 k# k) l! A0 \/ x5 w% f
Starting secondary namenodes [0.0.0.0]
5 Y( m$ ?9 }0 C4 c' j3 E0.0.0.0: starting secondarynamenode, logging to /usr/hadoop/logs/hadoop-hadoop-secondarynamenode-master.wyl.world.out
/ K% B+ @# q! {" I. ~. d
. l- Y3 B! h5 w0 v& A4 g启动yarn
% Y0 X& G4 Y) }0 ^7 k, T" O" H4 L# H7 J& |8 Q, Q

1 _% D4 r3 u& s6 B7 \- s, Y- P0 T" ]+ c) ?) z& Y
[hadoop@master ~]$ start-yarn.sh 4 g# S6 I% @0 W: p
starting yarn daemons
7 p$ a+ G5 L+ g* \5 ^" \2 Mstarting resourcemanager, logging to /usr/hadoop/logs/yarn-hadoop-resourcemanager-master.wyl.world.out
; f5 Q' |, G3 J. M  ^8 L& k  Dmaster.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-master.wyl.world.out
3 B2 S" m( Z- @, X/ w) rnode02.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node02.wyl.world.out2 a% K9 d" d: M/ \& f: k
node01.wyl.world: starting nodemanager, logging to /usr/hadoop/logs/yarn-hadoop-nodemanager-node01.wyl.world.out0 i0 S0 i0 t; h3 d

9 O- {8 t2 W' x2 w$ G' w16、查看服务状态,正常如下,如异常,请返回检查配置8 l4 I) \4 N! w2 @1 v3 Q+ Z0 r
5 g0 M7 s2 ^5 m
- c8 x) T5 }* x6 e7 B6 b  m
; p& Q5 K# C9 t; g
[hadoop@master ~]$ jps . U. i5 L: T; V: H" r1 I5 A2 ~/ W
2130 NameNode
" S' b& u! S; C6 s: t8 k2437 SecondaryNameNode. @/ j: x# h% V
2598 ResourceManager1 I+ G% _9 h( \& G6 d+ F
2710 NodeManager
+ @3 ]/ d6 d( s  |3001 Jps
* A4 P' ]4 T$ n) q7 n, |% X* x2267 DataNode
) Q: d/ a  U2 u  ?1 V$ H0 r" i+ r) R; I
17、创建目录2 [2 F7 @; l0 \5 ~2 g9 N0 J- f
& |+ o; l& y: p% z6 f6 Y4 Y0 e( K
5 S% ~" d' R" Q* D6 U

) {! Q' }8 V; s3 ]8 i[hadoop@master ~]$ hdfs dfs -mkdir /test4 Z0 y- R3 h2 }7 K9 V
$ l- R- Z% q/ p0 S* J
18、拷贝一个文件到/test
# W) c+ b4 g* i& `& O/ e3 }/ q+ `8 c7 x2 h

/ b% z$ p% |$ W) h1 L/ O
* S( ]0 w1 P; Z" _( G) _& @[hadoop@master ~]$ hdfs dfs -copyFromLocal ~/NOTICE.txt /test- n  B' S, K: r3 n$ s; P# o

, b& @1 W% T' n/ q  E: |19、展示文件内容
, D( G! K5 S7 h4 w5 R) [
" m; e7 I: [# |* p( f7 C$ D+ B" M  T
* w! a# |. q2 o# a, T# o: z6 G6 o" g5 M, u6 a, L/ t  B
[hadoop@master ~]$ hdfs dfs -cat /test/NOTICE.txt
. f9 a1 w1 A+ w- I# Z8 J  z: oThis product includes software developed by The Apache Software
, K, ^. A9 P6 p. fFoundation (http://www.apache.org/).- X$ M7 N; Q( j
( R1 g6 {4 {1 E; I( U. S: c
20、执行程序
% N; d5 b) \: ~6 P! {0 ~" J8 q- p8 L# f8 H
) R# x# \' n& e+ ?7 i1 K
' P7 d1 z, X% q: n/ p* t- L& d  \
[hadoop@master ~]$ hadoop jar ~/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/NOTICE.txt /output01
3 Q$ `1 F( `6 U2 h; I5 r15/07/28 19:28:47 INFO client.RMProxy: Connecting to ResourceManager at master.wyl.world/10.0.0.30:8032
& B% X8 D; ~  u) \7 t* Z/ \15/07/28 19:28:48 INFO input.FileInputFormat: Total input paths to process : 1
8 X; ^6 l+ k, k8 J- @* k* A15/07/28 19:28:48 INFO mapreduce.JobSubmitter: number of splits:13 N# \; f) E6 A. ~+ Z( q2 O
.....
! n5 J6 `' V0 H.....3 }7 J) [7 m2 @+ Y

8 ~; A, R8 m) l. r6 I8 D5 b  E21、查看结果
& v1 R. l; {: S4 I% \: a2 X- W5 a+ ^) x8 L* g' ]7 d7 i* y3 H

& o5 ?$ _) x# Z6 S( j, i9 }) ?2 M* B' A" r; H/ Y1 J
[hadoop@master ~]$ hdfs dfs -ls /output01
& F" p1 ]8 X' kFound 2 items1 V! M3 O+ k4 w4 Z7 c1 o
-rw-r--r--   2 hadoop supergroup      0 2015-07-29 14:29 /output01/_SUCCESS
: \  e; x* G; _% q( }-rw-r--r--   2 hadoop supergroup    123 2015-07-29 14:29 /output01/part-r-000006 Q6 ~) f6 J( y% z7 c

/ E6 {- P# R2 y/ C22、显示文件结果! @, P/ Z9 Z* v0 t' [
9 T. A0 o0 \/ F3 p
7 h: u/ w$ ]2 n; j8 n* \' @# l
+ J* u7 E7 O1 s" k; ]+ L3 |1 E
[hadoop@master ~]$ hdfs dfs -cat /output01/part-r-00000
% O& b+ K2 i6 E( H3 f3 F(http://www.apache.org/).       1" D. ^. \6 F' K7 v
Apache          1
" Y; [# ^4 E) U9 V" UFoundation      1$ |' |, B! W7 @  E
Software        1" b( @2 U5 a- s2 c  w2 o9 S
The             1! C4 L1 b- |/ F
This            1
5 t+ s, n4 F( C- i+ Nby              1( B* e. j4 G% r8 |: [
developed       1
4 p' B) ^: k1 u* N2 f3 S5 wincludes        1
: ]* {* ^0 k9 g/ ]  N' A9 G5 Bproduct         1  P: H/ N/ [( ~9 S9 ~$ L
software        1
* E& u; n$ z; u. Q7 {# v9 b! Y' e$ E/ M
查看集群概要
+ U9 y+ P6 W5 y6 w8 q- P6 L6 `) X1 m" X  y. }http://(server’s hostname or IP address):50070
9 h* z/ r% v& e* ~" ]. u  
# T  D1 v2 H* }" E# q+ }8 P- a集群详细信息
4 L- Z8 ^/ d: f# d! o* [0 G% N
. r1 Q# S3 Y+ t4 ~7 ?http://(server’s hostname or IP address):8088/ 8 g2 E. S' h/ D) o

3 ?/ l7 I7 u- ]  E/ U
8 E, t4 Z2 c( w1 _; [0 C* N$ j6 k% \& a' ]5 H0 `

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:12:34 | 显示全部楼层
目的
本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。
* }! a. s( _+ c$ b9 R+ G# h1 i
先决条件
  • 确保在你集群中的每个节点上都安装了所有必需软件。
  • 获取Hadoop软件包。
    : l7 ]( R& x- {1 M# U/ ~4 _* w
. U# ~% Y8 N$ q( E6 [; V3 r
安装
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode作为TaskTracker。这些机器是slaves
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。

% K1 o8 R3 B1 @/ a* p) e配置
接下来的几节描述了如何配置Hadoop集群。
配置文件
对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
  • hadoop-default.xml - 只读的默认配置。
  • hadoop-site.xml - 集群特有的配置。9 i" O/ u: J. n+ l' Q
要了解更多关于这些配置文件如何影响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 :
8 u& l- K4 q6 ~1 {( vexport HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"6 a& N" q6 H8 x: I
其它可定制的常用参数还包括:
  • HADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
  • HADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB
    9 A+ U- c5 D  [
配置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的子虚拟机

    ) P& @& S1 a# Q2 _" [# Q( ]9 \
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,系统将不再记录此日志。
用户可使用以下命令在指定路径下查看历史日志汇总
  ^+ S" [1 z* x$ m7 s$ bin/hadoop job -history output-dir' ]4 v: E% Y3 R5 w6 T  I" O4 M1 N
这条命令会显示作业的细节信息,失败和终止的任务细节。
3 l6 j8 ^+ H, s* d0 K关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
6 \; k  c3 G8 i) W( o* _$ bin/hadoop job -history all output-dir
7 s+ j) o5 y* C3 @
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。
" U3 B& d0 j! n) n4 ^; ?" X) v
Hadoop的机架感知
HDFS和Map/Reduce的组件是能够感知机架的。
NameNode和JobTracker通过调用管理员配置模块中的APIresolve来获取集群里每个slave的机架id。该API将slave的DNS名称(或者IP地址)转换成机架id。使用哪个模块是通过配置项topology.node.switch.mapping.impl来指定的。模块的默认实现会调用topology.script.file.name配置项指定的一个的脚本/命令。 如果topology.script.file.name未被设置,对于所有传入的IP地址,模块会返回/default-rack作为机架id。在Map/Reduce部分还有一个额外的配置项mapred.cache.task.levels,该参数决定cache的级数(在网络拓扑中)。例如,如果默认值是2,会建立两级的cache- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
  ]2 Q/ B) s# h1 e: u
启动Hadoop
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
格式化一个新的分布式文件系统:
* }' c: P' m7 M0 _$ bin/hadoop namenode -format
在分配的NameNode上,运行下面的命令启动HDFS:3 K3 F: m: W# M4 L0 G/ _* N
$ bin/start-dfs.sh
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
在分配的JobTracker上,运行下面的命令启动Map/Reduce:
* v- h4 L0 h4 `4 T0 \$ bin/start-mapred.sh
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
: I; ?' f. P* w6 V# q
停止Hadoop
在分配的NameNode上,执行下面的命令停止HDFS:
2 K4 H1 L9 }& Z/ H- P$ bin/stop-dfs.sh
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
在分配的JobTracker上,运行下面的命令停止Map/Reduce:! Z. ^: H! z  T3 q' P
$ bin/stop-mapred.sh  m7 C1 @8 H* k4 c* m# w+ n, C2 H
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。

# x" O4 U8 o7 ~3 P5 i
# B+ \/ F9 e1 N1 j5 ^2 c6 J

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:12:46 | 显示全部楼层
目的
7 J4 k: J) E" D1 J4 [本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。4 u" j: Y4 Y4 e2 \
& J* i; v# H% t% ?* |) i* [
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。
) P) g: f& A  n3 L  J2 R( {7 k7 q: T9 a( w; Z  s& \! \' Y3 y  k
先决条件
3 w) X& O+ ?# z/ J8 ]: i确保在你集群中的每个节点上都安装了所有必需软件。
/ M0 b9 v+ G! N获取Hadoop软件包。2 B2 j( }8 i, C
安装" `+ T) r# n' U
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
! t- l2 g% d1 g5 i1 ^/ A; Z8 R7 s( o2 F( _( C% a
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。8 C* ?, z2 _4 n, z% k
/ N4 i6 q# ?) }2 B2 ]
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。
# ^5 `9 D, f2 b' f- L2 Y. l; Z
0 o, m1 c8 C6 I# P. H- q配置) g2 ~7 `/ i+ y; s! r  p
接下来的几节描述了如何配置Hadoop集群。: V3 c9 R+ M' _( _  k8 f

: x1 X7 t6 g7 g1 ]4 n' [1 N# O配置文件
' y& \" y: }% R对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
9 l! w" C3 g0 E0 _0 k3 X8 m$ L% u; n
hadoop-default.xml - 只读的默认配置。
' P* i6 o1 k  f' X2 v' L1 F/ u- mhadoop-site.xml - 集群特有的配置。
+ C: L  \: p( g要了解更多关于这些配置文件如何影响Hadoop框架的细节,请看这里。
  K- g  s2 y  H9 \. s/ W* h8 G! T: n" Z5 X6 R+ e1 p0 `; R7 a6 W
此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。
( v- @8 F% i. Y' i+ F1 I) u. I0 I& H6 V+ j# L
集群配置# C( A) f# y0 ?# \. J1 ~
要配置Hadoop集群,你需要设置Hadoop守护进程的运行环境和Hadoop守护进程的运行参数。
/ O; B* c1 i8 i! i
7 M8 @. Z# Y* h* U- }  t, XHadoop守护进程指NameNode/DataNode 和JobTracker/TaskTracker。
- ^0 p6 Y& S6 y# d% y0 K/ f7 c7 `. `; t9 Y
配置Hadoop守护进程的运行环境
3 n% t1 Y/ i3 C管理员可在conf/hadoop-env.sh脚本内对Hadoop守护进程的运行环境做特别指定。) \; d% Z/ \( E; `

$ P: T. d7 q2 M至少,你得设定JAVA_HOME使之在每一远端节点上都被正确设置。
3 r/ J  d, n+ Y' f* Z! ^2 Y0 v2 [8 k  {
管理员可以通过配置选项HADOOP_*_OPTS来分别配置各个守护进程。 下表是可以配置的选项。( |5 x3 y0 O/ e# ]" N# [7 o
8 S: Z; l; {6 X! H
守护进程        配置选项# u  e/ o. v, I: @) v4 X5 L
NameNode        HADOOP_NAMENODE_OPTS2 Q, B! U* `! C8 Z
DataNode        HADOOP_DATANODE_OPTS6 X* t+ M; i9 L; q
SecondaryNamenode        HADOOP_SECONDARYNAMENODE_OPTS5 P6 f" B0 M$ i8 a7 Q! ]1 {
JobTracker        HADOOP_JOBTRACKER_OPTS% S1 ?. y8 N, q8 p, w
TaskTracker        HADOOP_TASKTRACKER_OPTS$ _9 }% o) p6 ], }
例如,配置Namenode时,为了使其能够并行回收垃圾(parallelGC), 要把下面的代码加入到hadoop-env.sh :6 C. g0 U4 f, T! T0 S
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"
0 U7 B, ~, |4 `( ]. j其它可定制的常用参数还包括:1 ?+ m* R% ^$ Y& b

% U5 W- k2 ~/ V/ lHADOOP_LOG_DIR - 守护进程日志文件的存放目录。如果不存在会被自动创建。
1 d2 G9 z0 x" Q' r. xHADOOP_HEAPSIZE - 最大可用的堆大小,单位为MB。比如,1000MB。 这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB。
+ X& m% ^0 n; p: a* `' T配置Hadoop守护进程的运行参数' }6 T% C% v( z# c# e! {
这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。
7 [: ^2 f  C; O/ ?' {: ?
6 g- |) R& {5 a0 k& |& M4 k7 ~参数        取值        备注
6 E- G4 P' ^% ~) d$ Kfs.default.name        NameNode的URI。        hdfs://主机名/
  D1 ^" D( @+ K  a3 W) v* S# ~mapred.job.tracker        JobTracker的主机(或者IP)和端口。        主机:端口。
' o! }  e$ H& _* ?, c6 Tdfs.name.dir        NameNode持久存储名字空间及事务日志的本地文件系统路径。        当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
! l7 e  R) O1 E6 ?' a) T: F( Kdfs.data.dir        DataNode存放块数据的本地文件系统路径,逗号分割的列表。        当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。  m  e. M/ C! t) k
mapred.system.dir        Map/Reduce框架存储系统文件的HDFS路径。比如/hadoop/mapred/system/。        这个路径是默认文件系统(HDFS)下的路径, 须从服务器和客户端上均可访问。
3 c% ^+ {( [! r5 w0 N6 c4 umapred.local.dir        本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。        多路径有助于利用磁盘i/o。
% ~, I" I& N4 c  g1 u( V) N: e. Gmapred.tasktracker.{map|reduce}.tasks.maximum        某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。        默认为2(2个map和2个reduce),可依据硬件情况更改。
( ~: W- u3 x! tdfs.hosts/dfs.hosts.exclude        许可/拒绝DataNode列表。        如有必要,用这个文件控制许可的datanode列表。6 K" v# V' \% F7 i
mapred.hosts/mapred.hosts.exclude        许可/拒绝TaskTracker列表。        如有必要,用这个文件控制许可的TaskTracker列表。
: O3 G$ S3 W2 m0 O. r: y* B2 `  M9 `通常,上述参数被标记为 final 以确保它们不被用户应用更改。- H1 I: v4 \4 q5 e: x$ Z

. Y2 j9 M$ ~. T: i+ x9 G现实世界的集群配置6 A% {/ k: A! x& J1 s
这节罗列在大规模集群上运行sort基准测试(benchmark)时使用到的一些非缺省配置。
0 B7 U  ~9 T  ]' P$ e3 m0 o$ H* h2 q& u; J# O3 x' W" Q: ^# ^7 y" M
运行sort900的一些非缺省配置值,sort900即在900个节点的集群上对9TB的数据进行排序:! b/ M! q: h/ D
# Z# @/ A) r5 n4 G* V+ H! ~
参数        取值        备注
. k) D0 K  a2 j0 p3 X; `/ d4 z9 Fdfs.block.size        134217728        针对大文件系统,HDFS的块大小取128MB。
2 e" q3 n5 P" z$ Y+ e( x( Sdfs.namenode.handler.count        40        启动更多的NameNode服务线程去处理来自大量DataNode的RPC请求。$ U( ^3 O- @# J0 C1 C; y: l
mapred.reduce.parallel.copies        20        reduce启动更多的并行拷贝器以获取大量map的输出。
1 r% f$ Y+ o! Z5 T( F( M2 rmapred.child.java.opts        -Xmx512M        为map/reduce子虚拟机使用更大的堆。
! T* ~: v$ M2 N- m" i' z8 W' \" P8 xfs.inmemory.size.mb        200        为reduce阶段合并map输出所需的内存文件系统分配更多的内存。0 g- H' d" K5 o6 m6 N
io.sort.factor        100        文件排序时更多的流将同时被归并。
2 D" G1 ^; }$ A8 T0 @# [$ y; fio.sort.mb        200        提高排序时的内存上限。
  b3 r! h3 G9 Z7 S2 I& Pio.file.buffer.size        131072        SequenceFile中用到的读/写缓存大小。5 t% I) m: x, ~0 Q3 r( V
运行sort1400和sort2000时需要更新的配置,即在1400个节点上对14TB的数据进行排序和在2000个节点上对20TB的数据进行排序:
0 A# O# f3 n  }+ H  E9 a8 a* ?) l9 H  d) d( l
参数        取值        备注
* ?" m+ Q/ o- t/ V7 `. [mapred.job.tracker.handler.count        60        启用更多的JobTracker服务线程去处理来自大量TaskTracker的RPC请求。: K8 J  Q6 R( r; g! K
mapred.reduce.parallel.copies        50        - P. t: U1 ^/ p& B4 a( p
tasktracker.http.threads        50        为TaskTracker的Http服务启用更多的工作线程。reduce通过Http服务获取map的中间输出。% B( w7 [+ X1 Q9 L8 L
mapred.child.java.opts        -Xmx1024M        使用更大的堆用于maps/reduces的子虚拟机9 J( `% S, G# i0 [8 T
Slaves
0 c# G% W/ c, M- v! W通常,你选择集群中的一台机器作为NameNode,另外一台不同的机器作为JobTracker。余下的机器即作为DataNode又作为TaskTracker,这些被称之为slaves。" i! J2 ?2 x% P

: S- r) }' j% }# g1 Y3 B在conf/slaves文件中列出所有slave的主机名或者IP地址,一行一个。
5 z1 A1 g2 I( |
$ u- g' u( Q  W4 Q日志$ [  ^. |8 Q3 D0 [/ f7 U1 o
Hadoop使用Apache log4j来记录日志,它由Apache Commons Logging框架来实现。编辑conf/log4j.properties文件可以改变Hadoop守护进程的日志配置(日志格式等)。6 N; p+ ?2 m8 D' @( s

2 L8 a% D$ T2 k历史日志4 F9 p6 c1 T9 N  {& M) Y+ }/ l
作业的历史文件集中存放在hadoop.job.history.location,这个也可以是在分布式文件系统下的路径,其默认值为${HADOOP_LOG_DIR}/history。jobtracker的web UI上有历史日志的web UI链接。7 G& a1 c+ V- R5 J: K, P( S
+ F4 N, T1 C. @: _" l) f
历史文件在用户指定的目录hadoop.job.history.user.location也会记录一份,这个配置的缺省值为作业的输出目录。这些文件被存放在指定路径下的“_logs/history/”目录中。因此,默认情况下日志文件会在“mapred.output.dir/_logs/history/”下。如果将hadoop.job.history.user.location指定为值none,系统将不再记录此日志。
* ?. {7 m% q; o8 J  ?- L; U, s
3 {+ y7 T( M0 D8 ?6 J9 G用户可使用以下命令在指定路径下查看历史日志汇总9 [* v! O# o, X
$ bin/hadoop job -history output-dir
# W9 V; W0 \: {1 e# f这条命令会显示作业的细节信息,失败和终止的任务细节。. w: D/ Y- n: O3 d9 d/ }
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看- o4 O* y6 N8 z$ Z; I) Q
$ bin/hadoop job -history all output-dir5 |2 G* l" W+ G' s
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。
1 u) f5 t- U" R: Z; g( U6 B$ N9 b  @+ f3 f& [
Hadoop的机架感知
+ q+ i9 \3 f4 ~HDFS和Map/Reduce的组件是能够感知机架的。. s# Q1 v8 c& h8 Q2 \
' |+ [0 V7 @0 A$ s$ w
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- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
5 ]1 A$ D9 D* i" g; ^" R2 x( l: D# A: c
启动Hadoop, n; j$ Q0 D) J( [, a
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。3 e. R  Q' E8 d% x3 [/ T
, C0 w3 Z/ s$ ^: @7 C1 b/ U6 ^
格式化一个新的分布式文件系统:# e2 p+ Q/ J& ^$ P3 t
$ bin/hadoop namenode -format
$ a2 z5 `) m7 z/ S+ Y; m& r( H. M( F/ w
' n3 F) o& A- W2 y. I6 Z在分配的NameNode上,运行下面的命令启动HDFS:1 D( N. w% `3 B( U( r
$ bin/start-dfs.sh! M& w( N$ v% V& Z/ W/ p8 z+ g

/ S% p5 c) C3 @bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。4 w6 u4 m6 N: c6 p
3 F9 \2 F+ _; j
在分配的JobTracker上,运行下面的命令启动Map/Reduce:
) T# }& s/ n8 X" P" i, D$ @, l$ bin/start-mapred.sh
  M: k* C- _- `8 N3 `! ?! L" |
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。% x, n( _( f. y& R

8 c+ ?; j$ x* g4 _7 Y停止Hadoop
- L/ O* g. J8 K# {8 v在分配的NameNode上,执行下面的命令停止HDFS:
, }0 P3 J; c$ _9 L6 _$ bin/stop-dfs.sh
4 a  D. E* @1 X- t+ r6 d
$ b& [/ u( i, k- \6 y1 N. B- b4 ybin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
$ S' |% ]7 x! n  G* b2 Y5 k2 b( y1 A+ V
4 n: R! q3 W' s在分配的JobTracker上,运行下面的命令停止Map/Reduce:
9 [$ k0 f( z4 d* W9 f. _" P" ]$ bin/stop-mapred.sh9 x" j# u# a/ P! `8 q
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。% M" O$ \+ A( p! j# \3 F
0 P) L$ D2 R4 w$ \! T

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-11-7 11:13:57 | 显示全部楼层
Hadoop伪分布式环境搭建% F2 q8 X1 y; ~, M
: z* ^* t( R7 w+ f" m% k9 n
      (1)三种模式
, h- U+ ?0 |2 x- X' U# ?5 B5 q; J& {+ b. _
              Local (Standalone) Mode  本地模式:不使用HDFS文件系统,使用本地文件系统,程序员调试用;
9 }0 l) V# H; N1 F( C  `6 F) P# i) q8 b: J" v6 h1 I
              Pseudo-Distributed Mode  伪分布式模式:单节点,一台机器,使用HDFS文件系统,程序员调试用;
1 R/ O, `& r" I% X' z
4 N$ \& d( Q; t1 E3 y. i- I' }9 Z              Fully-Distributed Mode  完全分布式模式:真实生产环境用,集群。# t5 A$ }+ c4 ?: q* w

) y. O  [/ [' z) V3 ]4 q      (2)解压JDK: ~" V6 o8 x* _" U: i- c
( @5 r# p0 O, _; _
              $ tar  -zxf  jdk-7u67-linux-x64.tar.gz  -C  /opt/modules/3 v! u- |9 I+ X: l
7 w9 E7 S5 B3 q, ^, z3 M
              配置环境变量- D- f, l/ j% W6 n

0 V  N. y9 u, D1 |6 `              #JAVA_HOME
9 X% K$ d3 D$ h0 a, Z. }               export JAVA_HOME=/opt/modules/jdk1.7.0_67
4 v, H1 ?, _' V4 o/ {               export PATH=$PATH:$JAVA_HOME/bin# U- n% P& Z/ Y8 H

. ]# `  ^, [$ D      (3)解压Hadoop8 {: {7 i) k0 a# t' x4 \

% ^0 T8 ~, ]$ U# L* a              $ tar -zxf hadoop-2.5.0.tar.gz -C /opt/modules/7 y8 T6 ^+ q& a) }) x0 }- w7 [' ^3 R
, g  s+ _! d" F, |
      (4)建议:删除rm -rf /opt/modules/hadoop-2.5.0/share/doc/,里面是英文文档,没有作用1 L$ ^1 N+ h  ^5 D
9 ~7 Q4 j9 [+ U% o: b; j$ x
      (5)配置过程( m) i8 m% C2 F2 V
6 [& `' }+ e( r4 ?! H) X( T
              <1>hadoop-env.sh、mapred-env.sh、yarn-env.sh指定Java的安装路径
. w* X; T, _5 |0 R+ D) O" n                      export JAVA_HOME=/opt/modules/jdk1.7.0_67$ i- M& x! {9 u3 V; K8 x

, |2 N2 u% r8 n3 d: K              <2>core-site.xml,指定namenode所在机器位置及交互端口号,另外也是指定使用的是HDFS文件系统
( W! F4 t. ~# g% V- O# L0 K, I% d8 |                      <property>
% g5 l# Z  M$ J7 t$ ]) D                             <name>fs.defaultFS</name>
' T8 R# Y$ A2 B/ r0 Z                             <value>hdfs://hadoop-senior.ibeifeng.com:8020</value>2 C7 O; r' K4 [4 W$ Y
                      </property>  h8 ~) \( Z5 l8 _% |

' Y- R7 I; \; s/ s3 g; E7 n              <3>hdfs-site.xml,指定副本数个数
) J9 V/ Q6 T$ j' I" j$ a1 r                      <property># d! v6 M) M5 R9 ^: e: F  U& P
                             <name>dfs.replication</name>6 P" ^5 ]; N0 C# E, R' }" Y
                             <value>1</value>
2 _/ u/ s- a! Y2 v8 p, E8 N                      </property>
- \# K2 ]  r0 L9 }$ h2 E. J
% z' _" m0 o- Z* A              <4>core-site.xml,更改Hadoop默认的临时目录位置,用于存放块文件和元数据文件, X8 ?7 W0 R1 J  ]" g* H
                      <property>) U/ E9 Z: |$ G- ^2 p
                            <name>hadoop.tmp.dir</name>
8 Q) A8 M6 S* z, f- u, c1 m( t7 b9 s                            <value>/opt/modules/hadoop-2.5.0/data/tmp</value>
1 L; A0 V  s; g* {3 q9 y# k, I                      </property>$ ?0 @! I" `1 @% Y1 g+ g' x* B
& o# C. w5 z& x5 x0 l
              <5>slaves,指定从节点位置(主机名),包括datanode和nodemanager
3 X4 R* {# c1 `/ B; n& X, I: J
- T& _( ^  x: g" \6 S5 h- b              <6>格式化namenode,对于元数据进行初始化,否则无法读取元数据
  G& S! Y2 z. F2 d: E! _
9 K0 I* }, K" d* G$ ^                     bin/hdfs namenode -format  H, ~& C9 \  i6 M5 I2 `0 [

8 ]% U2 `0 ~: C& V. S             <7>更改mapred-site.xml文件名称,指定MR运行在yarn上
2 g$ P5 k0 c$ m& s3 Y2 I                     <property>
) ]4 ]* v5 ?7 e5 V- B- N- Q; o                             <name>mapreduce.framework.name</name>
1 d9 G: O. Q# o0 s6 }* ^4 D                             <value>yarn</value>8 W7 Z& h7 _2 X+ C+ a8 k- q  G( E3 w# b
                     </property>$ Q# {% x: a2 S/ M* W2 M( F. j9 |
% C3 \5 \: o) E
            <8>yarn-site.xml
1 _! r0 E# v* r  E2 I& w& r                     <property>- T* Q( \0 j6 i1 x
                          <name>yarn.nodemanager.aux-services</name>
: U4 m: _5 q: }                          <value>mapreduce_shuffle</value>8 i3 v1 _  B# B' @  U) s2 x' H9 ?
                     </property>+ ?2 Z" K# ~8 O. m% u, J
                     <property>
1 K8 Y+ T) i* [0 \  U: V                          <name>yarn.resourcemanager.hostname</name>2 R( A" _+ ^5 z
                          <value>hadoop-senior.ibeifeng.com</value>
8 m6 ~6 l# q( a& [4 a                     </property>* q# W% x. h" B3 T" A8 V2 U
5 }" l  l' U( Z- |
            <9>yarn外部管理界面端口号:8088
' N2 a& _9 f% D' |& F% m, V- R1 z% t2 h# V9 E) x& M
                  HDFS外部管理界面端口号:50070
1 {$ |, i/ r) C( w, ~- c% V, B& J) r& R8 j
                  secondarynamenode外部管理界面端口号:50090
6 h4 y- O. ^8 s+ v/ i) F$ V% o8 \* ?/ t* K( i5 D# e
7、组件启动- `) _! Y4 s+ @7 N8 n. K, Y

3 p3 O  Z# K6 j# J      启动namenode:, K" p( a- T& Q
9 G0 t, z0 y& P6 Y
      sbin/hadoop-daemon.sh start namenode
0 K* R, p8 d9 u: r9 C% y7 i' d7 N, E, g. z2 V
      启动datanode:" q! O& B; B% F: l, o5 Y6 k
  W" D& j0 P* j2 Q6 [( o
      sbin/hadoop-daemon.sh start datanode* Y2 h1 w+ @2 C* S
6 a) ]3 \. {) t$ @( L. @. b
      启动resourcemanager:
2 ~/ L5 u" u7 e5 S0 R4 d3 E( l  ~
      sbin/yarn-daemon.sh start resourcemanager" n7 y$ F  L$ W
$ A3 Z! R/ `- T/ O, }
      启动nodemanager:) |* {' G8 `" K! o. e' b* k

2 m7 @- ]$ j, X5 G5 H! a/ l/ \9 G      sbin/yarn-daemon.sh start nodemanager9 i: w" \: M' I% F1 q
0 e0 `& E/ B7 t6 b# H
8、日志
" R# U# b+ ~6 r% ]3 E5 c
+ o  I: Z3 v0 }2 Q6 Q* I2 v      日志文件:分析日志文件的格式.log和.out2 s% h1 V$ v: z% [6 C! E8 V$ r

# c( N5 J; v* U& x- X( ~      .log:通过log4j记录的,记录大部分应用程序的日志信息
! K$ o  I# K6 D0 Z4 K: j" K9 W
0 X, i1 g3 @* R" I$ k5 }      .out:记录标准输出和标准错误日志,少量记录
9 q, V1 F: k. P3 N" y7 Y% O- Q/ R0 F0 ]+ ^4 i: q- T( Z
      日志文件的命名规则:【框架名称-用户名-进程名-主机名.日志格式后缀】
' P1 v1 b! b6 `4 a- W6 S: x
" z- [9 V8 n2 s2 [3 |$ w* H      出错一定要学会看日志,看错误信息,看.log的日志. k+ @  o5 Z( y$ {: H1 s+ u5 d" G* A: H
7 Z1 G4 d' V- g" Q. e6 ?5 V
9、Hadoop自带历史服务器
3 Q2 Q. A  o, O7 O1 H) ]* R7 g) h9 H" i3 K! P' e$ t; W, X
     配置:mapred-site.xml% G  T/ n  |& X% }3 L
" o- v) X- X9 L' H
     <property>
" h) U& I* h# e; [0 D. z                 <name>mapreduce.jobhistory.address</name>
0 {" P2 C0 w( Z  ~                 <value>hadoop-senior.ibeifeng.com:10020</value>
" B; L& d% ]8 v5 [4 t! W3 Z: q         </property>8 B& c3 M, S) M3 |
         <property>: K; O9 Q% n" c  v1 h5 i0 a; L
                 <name>mapreduce.jobhistory.webapp.address</name>
7 c1 }" N' a! k+ G1 C" t                 <value>hadoop-senior.ibeifeng.com:19888</value>/ s* m8 o5 L" C0 I$ A: M1 |2 e
         </property>% L: i7 ?( L4 n5 J; {
& d- E* s/ B5 V& n9 A
     启动历史服务器:sbin/mr-jobhistory-daemon.sh start historyserver7 Q% Z4 J" L7 G3 G

' {* f- i3 U; g1 U8 m10、日志聚集
0 E7 O  H5 u* F2 u. i" L" }6 M% n  U) |& h5 C& q7 {2 T% G( i4 F5 H
      日志聚合是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚合功能需要额外的配置。4 C, D& g# B% j: r% T/ Y0 {

$ z+ b' `+ f3 {# \, m, ?9 j; c       yarn-site.xml
5 K: a2 i9 l9 w+ u: _/ f" s' q5 T+ X- s
        <property>  ]$ `5 @2 V! Y' d2 O' \0 t
                 <name>yarn.log-aggregation-enable</name>/ ?( b, p$ t$ I+ B
                 <value>true</value>" c$ ?3 O- h: a/ ~2 i
         </property>1 N/ V+ I8 `5 o6 n) C7 Y% w
         <property>
% i. u* S4 `) {; k; W                 <name>yarn.log-aggregation.retain-seconds</name>: k! o+ I$ S  x5 x# y5 p* P. m
                 <value>106800</value>
1 D8 W  n' i0 V5 |6 y8 {, S0 I         </property>5 S1 F8 W6 k; S& e& `' F

3 C3 ~4 ~4 Y: Q3 }! `/ N& O        单位:秒
, f! O! l# ~; I" z3 S- \! {9 D9 n/ M9 n: ]2 A/ f0 F- p
      重启resourcemanager、nodemanager和historyserver:
1 A) D7 B* y' n# F3 P+ T* p6 f3 M, V5 ^- r: ]* Y/ b, i
      sbin/yarn-daemon.sh stop resourcemanager* Q% D; `) ]; F6 S' ?- {
1 M" c+ V$ G  |$ D& w
      sbin/yarn-daemon.sh stop nodemanager1 V3 Z4 u% O" r* V1 p" r

# n2 f' x4 T% }2 m& M9 D  z' E      sbin/mr-jobhistory-daemon.sh stop historyserver
" k  `* H; R6 J- i3 I, t: g! R0 b9 k
      sbin/yarn-daemon.sh start resourcemanager
  y  F2 d" t( R* |/ F$ q3 \3 l. i/ e( n+ d  i5 I
      sbin/yarn-daemon.sh start nodemanager
# e/ w5 Y; V) O1 I; ]  e' e8 J1 Y. S6 X. ]$ S8 C) v1 V$ d( h
      sbin/mr-jobhistory-daemon.sh start historyserver, m+ Z) k# ^3 a* o  ]! K

) i' N. T, u2 d! [! l11、HDFS用户权限检查
. P" x1 P3 l. n0 a' A/ k: [
4 F+ v/ `% u  K4 M& V  B9 `      hdfs-site.xml
$ z7 z5 U9 q9 s2 q2 I4 ^, L! ?7 P) d3 P% N
      <property>" G9 E, V( b2 e6 N4 I: f
                 <name>dfs.permissions.enabled</name>
* m) S1 S- X$ W& a) O/ Y& ]                 <value>false</name>* q& v1 T1 K* G4 r, C% x* V) _. ?' B
       </property>3 b! c, c# N* E0 E8 s
7 o" {6 Z% I( C% H
      core-site.xml
: n+ N* T& U, {+ a0 [" q7 E
) t  i5 o9 ^/ w      <property>
7 a/ F6 ^+ Y8 W+ h" W2 x                 <name>hadoop.http.staticuser.user</name>) r7 C" H4 a. x/ c8 \- _& P5 I4 f- Q
                 <value>beifeng</value>- f/ L% y! y: K
       </property>
& ~9 }1 Q- k) g. y( b# D, O+ S- i2 K# x1 N- O* t
      重启namenode、datanode、resourcemanager、nodemanager和historyserver:
7 ^5 j$ T. \4 g% b
# f( a7 d+ h; q) v# M3 w/ A5 h      sbin/hadoop-daemon.sh stop namenode
1 j4 L* z/ R0 V( l! j+ T: Y
: x2 ~" g3 A% v/ [& w      sbin/hadoop-daemon.sh stop datanode# k: r; w1 v: {2 P0 x. r8 @3 y
/ k: K' z! j: h) b/ N. @
      sbin/yarn-daemon.sh stop resourcemanager
* G. F7 R- R0 y6 D, \) [
5 [: t5 L1 V1 \3 h2 x      sbin/yarn-daemon.sh stop nodemanager
7 |4 G( |6 s% r% P% F# B" {) r8 z+ {4 ?& s* \  a4 }+ ~
      sbin/mr-jobhistory-daemon.sh stop historyserver) ~3 X8 W  ~  h1 a( D0 G
/ H) {9 f: t& z3 l1 a
      sbin/hadoop-daemon.sh start namenode/ \' @5 k  B6 S; R7 P* b9 Y0 E

8 ]/ r; x- B$ L8 v! H9 L8 m1 u      sbin/hadoop-daemon.sh start datanode
, t+ @, C$ ^# T
- I4 B- `" K  @$ c) A      sbin/yarn-daemon.sh start resourcemanager7 `- T! C" b, P% H

1 `5 V# |# W! M  z: w+ ?: N      sbin/yarn-daemon.sh start nodemanager! ]! F5 d; J% d1 Y2 X' j

; ?" W3 B" i8 ?2 @# y# v      sbin/mr-jobhistory-daemon.sh start historyserver: h: \( K! T& M( p& b# l
4 ~/ `6 s) ]3 V
12、SecondaryNameNode  k1 Z$ a6 x  ?6 ]; D# e7 b

9 a, c) k0 n) @3 G+ E8 O( H; e       NameNode启动后的元数据存放在内存中,启动前的元数据存放在本地文件系统文件中。( a  x  J4 ~# S* \+ j2 L' D6 [

" r9 n+ J& V" R" G1 c' ^       HDFS格式化后生成fsimage镜像文件,其中存放文件系统元数据,NameNode会读取此元数据,并存放在内存中。
5 W& j/ n6 t3 o0 u8 X' G2 X: \1 }/ h" r, {
       edits文件,编辑日志文件,用于保存用户对于HDFS文件系统的每一步行为操作。
* V. H% C7 m" \% J! Q: B6 U
: ?0 g  n( n: Y- M       NameNode启动后,先读取fsimage镜像文件,得到元数据,再读取edits日志文件,数据就不会丢失。
" F* Q% J5 p- a) T7 d  O' _$ {# M; _7 }3 u+ e% P9 v' F! S6 M3 {6 s: L' S
       SecondaryNameNode用于减少NameNode重启的时间、合并文件,SecondaryNameNode读取两类文件,加载到内存,写到一个新的fsimage镜像文件,然后再生成一个edits编辑日志文件,每隔一段时间将新生成的fsimage和新生成的edits合并成一个fsimage镜像文件,即每隔一段时间获取HDFS元数据的快照,这样NameNode重启只需要读取内存中的fsimage镜像文件即可,读取镜像文件比读取日志文件快很多。
1 a' ^9 ]: M: m5 X2 X0 ^& A2 z" Y! l" A
       hdfs-site.xml
% X( o; s  V! t  C" T2 S* l5 `9 @+ I, N1 c, k0 V  M
       <property>& ^2 Z! q9 G0 D7 x" }" J
                 <name>dfs.namenode.secondary.http-address</name>
( H/ q3 H8 P$ F4 R8 ]/ D6 `                 <value>hadoop-senior.ibeifeng.com:50090</value>1 N' U! K" [! @* P; Q
        </property>8 b; E# a) O- X# r4 z2 r
4 U9 ^* A. p% u5 q5 r" {
       启动命令:$ sbin/hadoop-daemon.sh start secondarynamenode" T+ w& S! m: _
& p2 ^3 K7 v+ t3 a
13、块文件存放地址
1 r/ B5 g+ w  p! f: p0 M) H. X4 w( h4 w# W
      /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-2012260383-192.168.74.128-1516569449179/current/finalized: [: H! Y- c  i
5 b$ ]- w) Y/ p5 y7 e8 \
      镜像文件、日志文件存放地址
+ p* t( N3 m( `. A- w" I
: Q9 X  F/ n) Q2 U- }6 t      /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current2 R2 {! @) E& b9 x% [4 B3 t/ H! d, T8 ?
  L/ y) x8 D' o6 S' I/ c  Y5 G
      dfs.blocksize自定义块大小属性(单位字节),在hdfs-site.xml中
& f& ?" U: v4 y( ~: M8 l" R
  H$ [# \/ Y! t( F7 Z9 R14、SSH免密码登陆
, x  }( `3 H* @0 H+ A" \0 E  C3 T/ B  q7 x
      使用sbin/start-dfs.sh脚本文件启动namenode、datanode和secondarynamenode时,需要输入用户密码,使用SSH免密码登陆的话,就给用户生成公钥和私钥,用户将自己的公钥储存在远程主机上,将公钥发到需要登陆的服务器,当需要登陆时,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回去,远程主机用事先存储的公钥进行解密,如果解密成功,就证明用户是可信的,直接允许登陆shell,不再要求密码。
3 @2 q0 u6 K' I. z! f& C
2 h7 ~. L' [7 o      配置SSH免密码登陆:) @8 u# e, D+ F
, Q. D# o8 j5 Q! L4 B6 C+ C
      cd home/beifeng/.ssh7 P* R: A2 b1 Y, d: y
) J( s0 C1 \. m" O5 [$ V4 m
      ssh-keygen -t rsa
# ~$ X$ M+ A1 a3 n) z* L2 C$ A& Q+ m) r, |7 L' ]! s
      即生成id_rsa和id_rsa.pub文件,其中id_rsa是私钥,id_rsa.pub是公钥。. s" C2 E( r3 A7 c

5 w) A: ]- U0 V3 F, M      ssh-copy-id hadoop-senior.ibeifeng.com& o2 X" r0 P: w& R# x
) v. F3 v, z# n2 J1 j, d
      即生成authorized_keys和known_hosts文件,其中authorized_keys是向远程主机发送的用户公钥,known_hosts是记录文件,有记录文件就不需要再输入密码了。+ K  s* m; o) ]" D% O: B2 [
4 D# \# N% a$ z0 _% j# O" q
15、Hadoop配置常见错误) ?/ M$ ~6 L7 r0 z

; H9 Y" W' j) x! X9 j       <1>不要多次格式化namenode,如需再次格式化,需要先删除data/tmp/下的所有文件。2 t( h; b3 q- Q: C9 J4 f

1 }6 o" N1 [2 m1 U( e5 @6 f       <2>集群ID不一致,即
3 W+ \7 {. f3 I/ Z5 r3 h) q+ P% P5 x* X
             /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current/VERSION/ h3 _  V/ O' T4 C9 n9 J, T
" `0 T; ]6 n4 c
             /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/VERSION
' W! f! k+ T. |' U, ]" F! z- H& Y  Q; q
             两文件中的clusterID不一致,这是由于多次格式化导致的,解决方法可以如<1>,也可以依据namenode中的clusterID来修改datanode中的clusterID。4 |4 a% K, D: u
7 `& V* x. T- f. {3 {. s9 V
       <3>端口号被占用,使用netstat -tlun查看。
7 K2 k5 s) H9 Q% j4 M+ m% k' Y# U7 l! C9 C& O  P
       <4>多用户混用。即/tmp目录下有多个用户的pid,多个用户在各自的环境中启动了同一个进程,造成pid文件冲突。解决方法:将/tmp目录下的.pid文件全部删除,再用一个用户启动进程。
8 P9 q' E. w, S/ I3 w* t) _  j' y2 @* f
16、Hadoop配置文件
9 ^6 R; \. W4 L* M
0 @5 \+ h+ X& U1 k      Hadoop配置文件分为默认的和自定义的,每个模块对应一个文件。
0 c- @( \! z  a* Q3 H" P; H; A) `( R4 I! k5 G
      系统启动会先加载默认配置文件。默认配置文件存放在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。
- L' _  h1 F% w. `- t/ Y: v: H, n& |! ?# C3 E
       自定义配置文件优先级高于默认配置文件,如果自定义配置文件中有配置,会覆盖默认配置文件中的相应属性。5 E1 t0 j" f" G, d. J

# b, i$ ~; B$ R17、安装rz工具. \0 c8 A8 n( E! \/ U. @- _8 b
* i: Q( i( M8 O5 \$ @# e1 v
       切换到root用户后,用yum安装lrzsz。rz工具用于将Windows中的文件上传到虚拟机中,如CentOS中,只能在远程工具中使用,不能在虚拟机中使用。* E* E" P% g7 {

+ e' c5 Z+ v; Y! z      su
- Q% X9 R) c6 l4 O2 R% ^+ ]" R
% Q% |/ B! Q% g2 e5 b+ y      password:
" i; W* j; I, h5 y4 k
/ g. R( q/ ^; D& I      yum -y install lrzsz
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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