一、Hadoop1.0到2.0的架构变化
<a href="http://s3.51cto.com/wyfs02/M02/5B/92/wKioL1UNG-aSt10OAAHl295Gnjw111.jpg" target="_blank"></a>
1、Hadoop 2.0由HDFS、MapReduce和YARN三个分支构成
2、HDFSNN Federation、HA
3、MapReduce运行在YARN上的MR
4、YARN资源管理系统
二、HDFS 2.0
1、解决HDFS 1.0中单点故障和内存受限问题。
2、解决单点故障
HDFS HA通过主备NameNode解决
如果主NameNode发生故障则切换到备NameNode上
3、解决内存受限问题
HDFS Federation(联邦)
水平扩展支持多个NameNode
每个NameNode分管一部分目录
所有NameNode共享所有DataNode存储资
4、仅是架构上发生了变化使用方式不变
对HDFS使用者透明
HDFS 1.0中的命令和API仍可以使用$ hadoop fs -ls /user/hadoop/$ hadoop fs -mkdir /user/hadoop/data
三、HDFS 2.0 HA
1、主备NameNode
主NameNode对外提供服务备NameNode同步主NameNode元数据以待切换
所有DataNode同时向两个NameNode汇报数据块信息
3、两种切换选择
手动切换通过命令实现主备之间的切换可以用HDFS升级等场合
自动切换基于Zookeeper实现
4、基于Zookeeper自动切换方案
Zookeeper Failover Controller监控NameNode健康状态并向Zookeeper注册NameNode
NameNode挂掉后ZKFC为NameNode竞争锁获得ZKFC 锁的NameNode变为active
四、环境搭建
192.168.1.2 master
192.168.1.3 slave1
192.168.1.4 slave2
Hadoop versionhadoop-2.2.0.tar.gz
Hbase versionhbase-0.98.11-hadoop2-bin.tar.gz
Zookeeper versionzookeeper-3.4.5.tar.gz
JDK versionjdk-7u25-linux-x64.gz
1、主机HOSTS文件配置
1
2
3
4
5
6
7
8
9
10
11
12
<code>[root@master ~]</code><code># cat /etc/hosts</code>
<code>192.168.1.2 master</code>
<code>192.168.1.3 slave1</code>
<code>192.168.1.4 slave2</code>
<code>[root@slave1 ~]</code><code># cat /etc/hosts</code>
<code>[root@slave2 ~]</code><code># cat /etc/hosts</code>
2、配置节点之间互信
<code>[root@master ~]</code><code># useradd hadoop</code>
<code>[root@slave1 ~]</code><code># useradd hadoop</code>
<code>[root@slave2 ~]</code><code># useradd hadoop</code>
<code>[root@master ~]</code><code># passwd hadoop</code>
<code>[root@slave1 ~]</code><code># passwd hadoop</code>
<code>[root@slave2 ~]</code><code># passwd hadoop</code>
<code>[root@master ~]</code><code># su - hadoop</code>
<code>[hadoop@master ~]$ </code><code>ssh</code><code>-copy-</code><code>id</code> <code>-i ~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub slave1</code>
<code>[hadoop@master ~]$ </code><code>ssh</code><code>-copy-</code><code>id</code> <code>-i ~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub slave2</code>
<code>[hadoop@master ~]$ </code><code>ssh</code><code>-copy-</code><code>id</code> <code>-i ~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub master</code>
3、JDK环境配置
13
14
15
16
<code>[root@master ~]</code><code># tar jdk-7u25-linux-x64.gz</code>
<code>[root@master ~]</code><code># mkdir /usr/java</code>
<code>[root@master ~]</code><code># mv jdk-7u25-linux-x64.gz /usr/java</code>
<code>[root@master ~]</code><code># cd /usr/java/</code>
<code>[root@master java]</code><code># ln -s jdk1.7.0_25 jdk</code>
<code># 修改/etc/profile,添加</code>
<code>export</code> <code>JAVA_HOME=</code><code>/usr/java/jdk</code>
<code>export</code> <code>CLASSPATH=$CLASSPATH:$JAVA_HOME</code><code>/lib</code><code>:$JAVA_HOME</code><code>/jre/lib</code>
<code>export</code> <code>PATH=</code><code>/usr/java/jdk/bin</code><code>:$PATH</code>
<code>[root@master ~]</code><code># source /etc/profile</code>
<code>[root@master ~]</code><code># java -version</code>
<code>java version </code><code>"1.7.0_25"</code>
<code>Java(TM) SE Runtime Environment (build 1.7.0_25-b15)</code>
<code>Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)</code>
<code># slave1,slave2同样操作</code>
4.Hadoop安装
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<code>[root@master ~]</code><code># tar zxvf hadoop-2.2.0.tar.gz</code>
<code>[root@master ~]</code><code># mv hadoop-2.2.0 /home/hadoop/</code>
<code>[root@master ~]</code><code># cd /home/hadoop/</code>
<code>[root@master hadoop]</code><code># ln -s hadoop-2.2.0 hadoop</code>
<code>[root@master hadoop]</code><code># chown -R hadoop.hadoop /home/hadoop/</code>
<code>[root@master ~]</code><code># cd /home/hadoop/hadoop/etc/hadoop</code>
<code># 修改hadoop-env.sh文件</code>
<code>export</code> <code>HADOOP_HEAPSIZE=200</code>
<code># 修改mapred-env.sh文件</code>
<code>export</code> <code>HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000</code>
<code># 修改yarn-env.sh文件</code>
<code>JAVA_HEAP_MAX=-Xmx300m</code>
<code>YARN_HEAPSIZE=100</code>
<code># 修改core-site.xml文件</code>
<code><configuration></code>
<code> </code><code><property></code>
<code> </code><code><name>fs.defaultFS<</code><code>/name</code><code>></code>
<code> </code><code><value>hdfs:</code><code>//master</code><code>:9000<</code><code>/value</code><code>></code>
<code> </code><code><</code><code>/property</code><code>></code>
<code> </code><code><name>hadoop.tmp.</code><code>dir</code><code><</code><code>/name</code><code>></code>
<code> </code><code><value></code><code>/home/hadoop/tmp</code><code><</code><code>/value</code><code>></code>
<code> </code><code><name>hadoop.proxyuser.hadoop.hosts<</code><code>/name</code><code>></code>
<code> </code><code><value>*<</code><code>/value</code><code>></code>
<code> </code><code><name>hadoop.proxyuser.hadoop.</code><code>groups</code><code><</code><code>/name</code><code>></code>
<code><</code><code>/configuration</code><code>></code>
<code># 修改hdfs-site.xml文件</code>
<code> </code><code><name>dfs.namenode.secondary.http-address<</code><code>/name</code><code>></code>
<code> </code><code><value>master:9001<</code><code>/value</code><code>></code>
<code> </code><code><name>dfs.namenode.name.</code><code>dir</code><code><</code><code>/name</code><code>></code>
<code> </code><code><value></code><code>/home/hadoop/dfs/name</code><code><</code><code>/value</code><code>></code>
<code> </code><code><name>dfs.datanode.data.</code><code>dir</code><code><</code><code>/name</code><code>></code>
<code> </code><code><value></code><code>/home/hadoop/dfs/data</code><code><</code><code>/value</code><code>></code>
<code> </code><code><name>dfs.replication<</code><code>/name</code><code>></code>
<code> </code><code><value>2<</code><code>/value</code><code>></code>
<code> </code><code><name>dfs.webhdfs.enabled<</code><code>/name</code><code>></code>
<code> </code><code><value></code><code>true</code><code><</code><code>/value</code><code>></code>
<code># 修改mapred-site.xml文件</code>
<code> </code><code><name>mapreduce.framework.name<</code><code>/name</code><code>></code>
<code> </code><code><value>yarn<</code><code>/value</code><code>></code>
<code> </code><code><name>mapreduce.jobhistory.address<</code><code>/name</code><code>></code>
<code> </code><code><value>master:10020<</code><code>/value</code><code>></code>
<code> </code><code><name>mapreduce.jobhistory.webapp.address<</code><code>/name</code><code>></code>
<code> </code><code><value>master:19888<</code><code>/value</code><code>></code>
<code> </code><code><name>mapreduce.map.memory.mb<</code><code>/name</code><code>></code>
<code> </code><code><value>512<</code><code>/value</code><code>></code>
<code> </code><code><name>mapreduce.map.cpu.vcores<</code><code>/name</code><code>></code>
<code> </code><code><value>1<</code><code>/value</code><code>></code>
<code> </code><code><name>mapreduce.reduce.memory.mb<</code><code>/name</code><code>></code>
<code># 修改yarn-site.xml文件</code>
<code> </code><code><name>yarn.nodemanager.aux-services<</code><code>/name</code><code>></code>
<code> </code><code><value>mapreduce_shuffle<</code><code>/value</code><code>></code>
<code> </code><code><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class<</code><code>/name</code><code>></code>
<code> </code><code><value>org.apache.hadoop.mapred.ShuffleHandler<</code><code>/value</code><code>></code>
<code> </code><code><name>yarn.resourcemanager.address<</code><code>/name</code><code>></code>
<code> </code><code><value>master:8032<</code><code>/value</code><code>></code>
<code> </code><code><name>yarn.resourcemanager.scheduler.address<</code><code>/name</code><code>></code>
<code> </code><code><value>master:8030<</code><code>/value</code><code>></code>
<code> </code><code><name>yarn.resourcemanager.resource-tracker.address<</code><code>/name</code><code>></code>
<code> </code><code><value>master:8031<</code><code>/value</code><code>></code>
<code> </code><code><name>yarn.resourcemanager.admin.address<</code><code>/name</code><code>></code>
<code> </code><code><value>master:8033<</code><code>/value</code><code>></code>
<code> </code><code><name>yarn.resourcemanager.webapp.address<</code><code>/name</code><code>></code>
<code> </code><code><value>master:8088<</code><code>/value</code><code>></code>
<code> </code><code><name>yarn.scheduler.minimum-allocation-mb<</code><code>/name</code><code>></code>
<code> </code><code><value>100<</code><code>/value</code><code>></code>
<code> </code><code><name>yarn.scheduler.maximum-allocation-mb<</code><code>/name</code><code>></code>
<code> </code><code><value>200<</code><code>/value</code><code>></code>
<code> </code><code><name>yarn.scheduler.minimum-allocation-vcores<</code><code>/name</code><code>></code>
<code> </code><code><name>yarn.scheduler.maximum-allocation-vcores<</code><code>/name</code><code>></code>
<code># 修改slaves文件</code>
<code>slave1</code>
<code>slave2</code>
<code># 修改 /home/hadoop/.bashrc</code>
<code>export</code> <code>HADOOP_DEV_HOME=</code><code>/home/hadoop/hadoop</code>
<code>export</code> <code>PATH=$PATH:$HADOOP_DEV_HOME</code><code>/bin</code>
<code>export</code> <code>PATH=$PATH:$HADOOP_DEV_HOME</code><code>/sbin</code>
<code>export</code> <code>HADOOP_MAPARED_HOME=${HADOOP_DEV_HOME}</code>
<code>export</code> <code>HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}</code>
<code>export</code> <code>HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}</code>
<code>export</code> <code>YARN_HOME=${HADOOP_DEV_HOME}</code>
<code>export</code> <code>HADOOP_CONF_DIR=${HADOOP_DEV_HOME}</code><code>/etc/hadoop</code>
<code>export</code> <code>HDFS_CONF_DIR=${HADOOP_DEV_HOME}</code><code>/etc/hadoop</code>
<code>export</code> <code>YARN_CONF_DIR=${HADOOP_DEV_HOME}</code><code>/etc/hadoop</code>
<code># 将上面修改的文件全部传送到slave1,slave2节点</code>
5、在master节点上启动hdfs
<code>[hadoop@master ~]$ </code><code>cd</code> <code>/home/hadoop/hadoop/sbin/</code>
<code>[hadoop@master sbin]$ .</code><code>/start-dfs</code><code>.sh </code>
<code>15</code><code>/03/21</code> <code>00:49:35 WARN util.NativeCodeLoader: Unable to load native-hadoop library </code><code>for</code> <code>your platform... using </code><code>builtin</code><code>-java classes where applicable</code>
<code>Starting namenodes on [master]</code>
<code>master: starting namenode, logging to </code><code>/home/hadoop/hadoop-2</code><code>.2.0</code><code>/logs/hadoop-hadoop-namenode-master</code><code>.out</code>
<code>slave2: starting datanode, logging to </code><code>/home/hadoop/hadoop-2</code><code>.2.0</code><code>/logs/hadoop-hadoop-datanode-slave2</code><code>.out</code>
<code>slave1: starting datanode, logging to </code><code>/home/hadoop/hadoop-2</code><code>.2.0</code><code>/logs/hadoop-hadoop-datanode-slave1</code><code>.out</code>
<code>Starting secondary namenodes [master]</code>
<code>master: starting secondarynamenode, logging to </code><code>/home/hadoop/hadoop-2</code><code>.2.0</code><code>/logs/hadoop-hadoop-secondarynamenode-master</code><code>.out</code>
<code># 查看进程</code>
<code>[hadoop@master ~]$ jps</code>
<code>39093 Jps</code>
<code>38917 SecondaryNameNode</code>
<code>38767 NameNode</code>
<code>[root@slave1 ~]</code><code># jps</code>
<code>2463 Jps</code>
<code>2379 DataNode</code>
<code>[root@slave2 ~]</code><code># jps</code>
<code>#启动jobhistory</code>
<code>[hadoop@master sbin]$ mr-jobhistory-daemon.sh start historyserver</code>
<code>starting historyserver, logging to </code><code>/home/hadoop/hadoop-2</code><code>.2.0</code><code>/logs/mapred-hadoop-historyserver-master</code><code>.out</code>
6、启动yarn
<code>[hadoop@master sbin]$ .</code><code>/start-yarn</code><code>.sh </code>
<code>starting yarn daemons</code>
<code>starting resourcemanager, logging to </code><code>/home/hadoop/hadoop-2</code><code>.2.0</code><code>/logs/yarn-hadoop-resourcemanager-master</code><code>.out</code>
<code>slave2: starting nodemanager, logging to </code><code>/home/hadoop/hadoop-2</code><code>.2.0</code><code>/logs/yarn-hadoop-nodemanager-slave2</code><code>.out</code>
<code>slave1: starting nodemanager, logging to </code><code>/home/hadoop/hadoop-2</code><code>.2.0</code><code>/logs/yarn-hadoop-nodemanager-slave1</code><code>.out</code>
<code>[hadoop@master sbin]$ jps</code>
<code>39390 Jps</code>
<code>39147 ResourceManager</code>
<code>[hadoop@slave1 ~]$ jps</code>
<code>2646 Jps</code>
<code>2535 NodeManager</code>
<code>[hadoop@slave2 ~]$ jps</code>
<code>8261 Jps</code>
<code>8150 NodeManager</code>
<code>8004 DataNode</code>
7、查看hdfs文件系统
<code>[hadoop@master sbin]$ hadoop fs -</code><code>ls</code> <code>/</code>
<code>15</code><code>/03/21</code> <code>15:56:05 WARN util.NativeCodeLoader: Unable to load native-hadoop library </code><code>for</code> <code>your platform... using </code><code>builtin</code><code>-java classes where applicable</code>
<code>Found 2 items</code>
<code>drwxr-xr-x - hadoop supergroup 0 2015-03-20 17:46 </code><code>/hbase</code>
<code>drwxrwx--- - hadoop supergroup 0 2015-03-20 16:56 </code><code>/tmp</code>
8、安装Zookeeper
<code>[root@master ~]</code><code># tar zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop/</code>
<code>[root@master hadoop]</code><code># ln -s zookeeper-3.4.5 zookeeper</code>
<code>[root@master hadoop]</code><code># chown -R hadoop.hadoop /home/hadoop/zookeeper</code>
<code>[root@master hadoop]</code><code># cd zookeeper/conf/</code>
<code>[root@master conf]</code><code># cp zoo_sample.cfg zoo.cfg</code>
<code># 修改zoo.cfg</code>
<code>dataDir=</code><code>/home/hadoop/zookeeper/data</code>
<code>dataLogDir=</code><code>/home/hadoop/zookeeper/logs</code>
<code>server.1=192.168.1.2:7000:7001</code>
<code>server.2=192.168.1.3:7000:7001</code>
<code>server.3=192.168.1.4:7000:7001</code>
<code>#在slave1,slave2执行相同的操作</code>
<code>[hadoop@master conf]</code><code># cd /home/hadoop/zookeeper/data/</code>
<code>[hadoop@master data]</code><code># echo 1 > myid </code>
<code>[hadoop@slave1 data]</code><code># echo 2 > myid </code>
<code>[hadoop@slave2 data]</code><code># echo 3 > myid </code>
<code>#启动zookeeper</code>
<code>[hadoop@master ~]$ </code><code>cd</code> <code>zookeeper</code><code>/bin/</code>
<code>[hadoop@master bin]$ .</code><code>/zkServer</code><code>.sh start</code>
<code>[hadoop@slave1 ~]$ </code><code>cd</code> <code>zookeeper</code><code>/bin/</code>
<code>[hadoop@slave1 bin]$ .</code><code>/zkServer</code><code>.sh start</code>
<code>[hadoop@slave2 ~]$ </code><code>cd</code> <code>zookeeper</code><code>/bin/</code>
<code>[hadoop@slave2 bin]$ .</code><code>/zkServer</code><code>.sh start</code>
9、Hbase安装
<code>[root@master ~]</code><code># tar zxvf hbase-0.98.11-hadoop2-bin.tar.gz -C /home/hadoop/</code>
<code>[root@master hadoop]</code><code># ln -s hbase-0.98.11-hadoop2 hbase</code>
<code>[root@master hadoop]</code><code># chown -R hadoop.hadoop /home/hadoop/hbase</code>
<code>[root@master hadoop]</code><code># cd /home/hadoop/hbase/conf/</code>
<code># 修改hbase-env.sh文件</code>
<code>export</code> <code>HBASE_HEAPSIZE=50</code>
<code># 修改 hbase-site.xml 文件</code>
<code> </code><code><name>hbase.rootdir<</code><code>/name</code><code>></code>
<code> </code><code><value>hdfs:</code><code>//master</code><code>:9000</code><code>/hbase</code><code><</code><code>/value</code><code>></code>
<code> </code><code><name>hbase.cluster.distributed<</code><code>/name</code><code>></code>
<code> </code><code><property> </code>
<code> </code><code><name>hbase.zookeeper.property.clientPort<</code><code>/name</code><code>> </code>
<code> </code><code><value>2181<</code><code>/value</code><code>> </code>
<code> </code><code><name>hbase.zookeeper.quorum<</code><code>/name</code><code>></code>
<code> </code><code><value>master,slave1,slave2<</code><code>/value</code><code>></code>
<code># 修改regionservers文件</code>
<code># 将上面修改的文件传送到slave1,slave2</code>
10、在master上面启动Hbase
<code>[hadoop@master ~]$ </code><code>cd</code> <code>hbase</code><code>/bin/</code>
<code>[hadoop@master bin]$ .</code><code>/start-hbase</code><code>.sh </code>
<code>master: starting zookeeper, logging to </code><code>/home/hadoop/hbase/bin/</code><code>..</code><code>/logs/hbase-hadoop-zookeeper-master</code><code>.out</code>
<code>slave1: starting zookeeper, logging to </code><code>/home/hadoop/hbase/bin/</code><code>..</code><code>/logs/hbase-hadoop-zookeeper-slave1</code><code>.out</code>
<code>slave2: starting zookeeper, logging to </code><code>/home/hadoop/hbase/bin/</code><code>..</code><code>/logs/hbase-hadoop-zookeeper-slave2</code><code>.out</code>
<code>starting master, logging to </code><code>/home/hadoop/hbase/bin/</code><code>..</code><code>/logs/hbase-hadoop-master-master</code><code>.out</code>
<code>slave1: starting regionserver, logging to </code><code>/home/hadoop/hbase/bin/</code><code>..</code><code>/logs/hbase-hadoop-regionserver-slave1</code><code>.out</code>
<code>slave2: starting regionserver, logging to </code><code>/home/hadoop/hbase/bin/</code><code>..</code><code>/logs/hbase-hadoop-regionserver-slave2</code><code>.out</code>
<code>[hadoop@master bin]$ jps</code>
<code>39532 QuorumPeerMain</code>
<code>39918 HMaster</code>
<code>40027 Jps</code>
<code>[hadoop@slave1 data]$ jps</code>
<code>3021 HRegionServer</code>
<code>3133 Jps</code>
<code>2942 HQuorumPeer</code>
<code>8430 HRegionServer</code>
<code>8351 HQuorumPeer</code>
<code>8558 Jps</code>
<code># 验证</code>
<code>[hadoop@master bin]$ .</code><code>/hbase</code> <code>shell</code>
<code>2015-03-21 16:11:44,534 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available</code>
<code>HBase Shell; enter </code><code>'help<RETURN>'</code> <code>for</code> <code>list of supported commands.</code>
<code>Type </code><code>"exit<RETURN>"</code> <code>to leave the HBase Shell</code>
<code>Version 0.98.11-hadoop2, r6e6cf74c1161035545d95921816121eb3a516fe0, Tue Mar 3 00:23:49 PST 2015</code>
<code>hbase(main):001:0> list</code>
<code>TABLE </code>
<code>SLF4J: Class path contains multiple SLF4J bindings.</code>
<code>SLF4J: Found binding </code><code>in</code> <code>[jar:</code><code>file</code><code>:</code><code>/home/hadoop/hbase-0</code><code>.98.11-hadoop2</code><code>/lib/slf4j-log4j12-1</code><code>.6.4.jar!</code><code>/org/slf4j/impl/StaticLoggerBinder</code><code>.class]</code>
<code>SLF4J: Found binding </code><code>in</code> <code>[jar:</code><code>file</code><code>:</code><code>/home/hadoop/hadoop-2</code><code>.2.0</code><code>/share/hadoop/common/lib/slf4j-log4j12-1</code><code>.7.5.jar!</code><code>/org/slf4j/impl/StaticLoggerBinder</code><code>.class]</code>
<code>SLF4J: See http:</code><code>//www</code><code>.slf4j.org</code><code>/codes</code><code>.html</code><code>#multiple_bindings for an explanation.</code>
<code>2015-03-21 16:11:56,499 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library </code><code>for</code> <code>your platform... using </code><code>builtin</code><code>-java classes where applicable</code>
<code>0 row(s) </code><code>in</code> <code>1.9010 seconds</code>
<code>=> []</code>
11、查看集群状态
<a href="http://s3.51cto.com/wyfs02/M01/5B/93/wKioL1UNKangFROXAASShwIuv2E204.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M02/5B/93/wKioL1UNKg3ztIHXAALvk_7_in4772.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/5B/98/wKiom1UNKkPhxPw2AAIHcsxpKeg884.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/5B/93/wKioL1UNKnfzNKHkAAKUUKivsdg997.jpg" target="_blank"></a>
本文转自ljl_19880709 51CTO博客,原文链接:http://blog.51cto.com/luojianlong/1622823,如需转载请自行联系原作者