安装前准备
node安装(这里使用VM12部署4个centos7.0系统,分布式部署)
jdk安装 (我这里使用的是jdk1.8)
ssh免密码登录
参考我的上一篇Hadoop1.2.1详细配置与相关问题讲解 有详细说明,这里就不再累赘。
环境说明
主机hosts:
node1 192.168.132.138
node2 192.168.132.139
node3 192.168.132.140
node4 192.168.132.141
JDK:1.8
Hadoop:2.7.4
配置详细:
NameNode | DataNode | ZooKeeper | ZKFlloverController | JournalNode | |
node1 | √ | √ | √ | ||
node2 | √ | √ | √ | √ | √ |
node3 | √ | √ | √ | ||
node4 | √ | √ |
配置文件编辑
1.zookeeper配置
下载解压
zookeeper-3.4.10
进入/zookeeper-3.4.10/conf目录
编辑zoo.cfg文件(vi zoo.cfg)
#修改dataDir,后续将创建
dataDir=/opt/zookeeper
#1 2 3表示zookeeper节点名
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
mkdir /opt/zookeeper 创建dataDir目录
cd /opt/zookeeper 创建节点名
vi myid
1
cd ../
scp -r zookeeper/ root@node2:/opt/
scp -r zookeeper/ root@node3:/opt/
同时修改node2和node3目录相应目录下myid文件内容,改为2和3
scp -r zookeeper-3.4.10 root@node2:~/
scp -r zookeeper-3.4.10 root@node3:~/
配置环境变量,,同时设置node2和node3
vi /etc/profile
export PATH = $PATH:/root/zookeeper-3.4.10/bin
source /etc/profile
测试开启zookeeper集群,同理node2和node3同时单独启动:
zkServer.sh start
启动成功!
2.hadoop文件配置
进入
/etc/hadoop 目录
一、hadoop-env.sh
1
|
export JAVA_HOME
=
/
usr
/
lib
/
jvm
/
java
-
1.8
.
0.openjdk
|
二、hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
|
<configuration>
#设置服务名
<
property
>
<name>dfs.nameservices<
/
name>
<value>lhtnb<
/
value>
<
/
property
>
#设置namenode名
<
property
>
<name>dfs.ha.namenodes.lhtnb<
/
name>
<value>nn1,nn2<
/
value>
<
/
property
>
#设置namenode rpc协议地址
<
property
>
<name>dfs.namenode.rpc
-
address.lhtnb.nn1<
/
name>
<value>node1:
8020
<
/
value>
<
/
property
>
<
property
>
<name>dfs.namenode.rpc
-
address.lhtnb.nn2<
/
name>
<value>node2:
8020
<
/
value>
<
/
property
>
#设置namenode http协议地址
<
property
>
<name>dfs.namenode.http
-
address.lhtnb.nn1<
/
name>
<value>node1:
50070
<
/
value>
<
/
property
>
<
property
>
<name>dfs.namenode.http
-
address.lhtnb.nn2<
/
name>
<value>node2:
50070
<
/
value>
<
/
property
>
#设置JournalNode
<
property
>
<name>dfs.namenode.shared.edits.
dir
<
/
name>
<value>qjournal:
/
/
node2:
8485
;node3:
8485
;node4:
8485
/
lhtnb<
/
value>
<
/
property
>
#设置自动寻找active namenode
<
property
>
<name>dfs.client.failover.proxy.provider.lhtnb<
/
name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider<
/
value>
<
/
property
>
#sshfence - SSH到Active NameNode并终止进程
<
property
>
<name>dfs.ha.fencing.methods<
/
name>
<value>sshfence<
/
value>
<
/
property
>
<
property
>
<name>dfs.ha.fencing.ssh.private
-
key
-
files<
/
name>
<value>
/
root
/
.ssh
/
id_dsa<
/
value>
<
/
property
>
#设置jn数据存放目录
<
property
>
<name> dfs.journalnode.edits.
dir
<
/
name>
<value>
/
opt
/
jn
/
data<
/
value>
<
/
property
>
#开启自动切换
<
property
>
<name>dfs.ha.automatic
-
failover.enabled<
/
name>
<value>true<
/
value>
<
/
property
>
<
/
configuration>
|
三、core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#namenode的入口
<
property
>
<name>fs.defaultFS<
/
name>
<value>hdfs:
/
/
lhtnb<
/
value>
<
/
property
>
#设置zookeeper集群
<
property
>
<name>ha.zookeeper.quorum<
/
name>
<value>node1:
2181
,node2:
2181
,node3:
2181
<
/
value>
<
/
property
>
#设置系统目录
<
property
>
<name>hadoop.tmp.
dir
<
/
name>
<value>
/
opt
/
hadoop2<
/
value>
<
/
property
>
|
四、slaves
DataNode节点配置
1
2
3
|
node2
node3
node4
|
拷贝配置文件到其他节点上
scp ./* root@node2:/root/hadoop-2.7.4/etc/hadoop/
scp ./* root@node3:/root/hadoop-2.7.4/etc/hadoop/
scp ./* root@node4:/root/hadoop-2.7.4/etc/hadoop/
Mapreduce配置
mapred-site.xml
1
2
3
4
|
<
property
>
<name>mapreduce.framework.name<
/
name>
<value>yarn<
/
value>
<
/
property
>
|
yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<configuration>
<
property
>
<name>yarn.resourcemanager.hostname<
/
name>
<value>node1<
/
value>
<
/
property
>
<
property
>
<name>yarn.nodemanager.aux
-
services<
/
name>
<value>mapreduce_shuffle<
/
value>
<
/
property
>
<
property
>
<name>yarn.nodemanager.aux
-
services.mapreduce.shuffle.
class
<
/
name>
<value>org.apache.hadoop.mapred.ShuffleHandler<
/
value>
<
/
property
>
<
/
configuration>
|
启动
1.启动三个JournalNode: /root/hadoop-2.7.4/sbin
./hadoop-daemon.sh start journalnode
出现JournalNode表示启动成功!
2.在其中一个namenode(例如node1)上格式化:/root/hadoop-2.7.4/bin
./hdfs namenode -format
启动namenode1:/root/hadoop-2.7.4/sbin
./hadoop-daemon.sh start namenode
(cd ../logs tail -n50 hadoop-root-namenode-node1.log 查看详细日志是否启动成功,有无错误。)
启动namenode2(切换到node2主机,注意:必须有一台namenode主机先启动):/root/hadoop-2.7.4/bin
./hdfs namenode -bootstrapStandby
验证:切换到上面设置的系统目录那/opt/hadoop2看是否有文件存在。
启动namenode1:/root/hadoop-2.7.4/sbin
./hadoop-daemon.sh start namenode
(cd ../logs tail -n50 hadoop-root-namenode-node1.log 查看详细日志是否启动成功,有无错误。)
启动namenode2(切换到node2主机,注意:必须有一台namenode主机先启动):/root/hadoop-2.7.4/bin
./hdfs namenode -bootstrapStandby
验证:切换到上面设置的系统目录那/opt/hadoop2看是否有文件存在。
3.在其中一个namenode上格式化zkfc:/root/hadoop-2.7.4/bin
./hdfs zkfc -formatZK
4.停止上面节点:/root/hadoop-2.7.4/sbin
./stop-dfs.sh
5.全面启动
启动成功!
验证
除了输入jps命令查看节点是否开启之外,尝试开启web验证。
在window开启Hadoop Web界面
配置hosts后
打开浏览器
输入 HDFS界面
http://node1:50070/dfshealth.html#tab-overview第一次输入,建议输入完整地址,而不要输入http://node1:50070,有时会造成不会自动跳转,导致链接不到界面。
MapReduce界面
http://node1:8088/cluster
当然也可以尝试创建目录,上传文件操作
创建文件夹:/root/hadoop-2.7.4/bin
./hdfs dfs -mkdir -p /usr/file
上传文件
./hdfs dfs -put ./lhtpp /usr/file
./hdfs dfs -mkdir -p /usr/file
上传文件
./hdfs dfs -put ./lhtpp /usr/file
如果有什么缺漏的记得留言,写的不好的多多指正!