在配置之前,我们需要建一个简单的表格,来标明每个虚拟机需要的配置
我的安排是把139,138,137作为主要需要配置的机器,136记录只jobhistory。
1.首先,先来配置zookeeper
1.把压缩包解压到 /opt/soft/下,并且重新命名为:zookeeper345
2.在zookeeper345文件夹下,进入到/conf/文件夹下,可以看到有个zoo_sample.cfg文件
复制此文件到当前文件夹下并且命名为:zoo.cfg,打开并修改以下几处12行,添加29,30,31行
附上代码
1 # The number of milliseconds of each tick
2 tickTime=2000
3 # The number of ticks that the initial
4 # synchronization phase can take
5 initLimit=10
6 # The number of ticks that can pass between
7 # sending a request and getting an acknowledgement
8 syncLimit=5
9 # the directory where the snapshot is stored.
10 # do not use /tmp for storage, /tmp here is just
11 # example sakes.
12 dataDir=/opt/soft/zookeeper345/datatmp
13 # the port at which the clients will connect
14 clientPort=2181
15 # the maximum number of client connections.
16 # increase this if you need to handle more clients
17 #maxClientCnxns=60
18 #
19 # Be sure to read the maintenance section of the
20 # administrator guide before turning on autopurge.
21 #
22 # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_mai ntenance
23 #
24 # The number of snapshots to retain in dataDir
25 #autopurge.snapRetainCount=3
26 # Purge task interval in hours
27 # Set to "0" to disable auto purge feature
28 #autopurge.purgeInterval=1
29 server.1=192.168.153.139:2888:3888
30 server.2=192.168.153.138:2888:3888
31 server.3=192.168.153.137:2888:3888
32
3.回到zookeeper345文件夹下,创建一个datatmp文件夹,这一步骤正好和刚刚代码的12行对应
在datatmp文件夹下创建文本myid(这个名字会在后面有使用),编辑文本写个数字:1,这个文本里其他什么都不要乱写,与29行代码对应
4.配置环境
命令:cd /etc/profile
添加以下代码
export ZOOKEEPER_HOME=/opt/soft/zookeeper345
export PATH=$PATH:$ZOOKEEPER_HOME/bin
5.进行分发,因为我是在139机器上做的,所以我把zookeeper345分发到138和137和136。这里我在/usr/bin/目录下写了一个分发脚本为:xsync,也为了后面的方便,再次附上代码
#!/bin/bash
#获取的参数,如果没有参数,直接退出
argCount=$#
if [ $argCount == 0 ]; then
echo 'no args'
exit 0
fi
#获取文件名称
f=$1
fname=`basename $f`
echo $fname
#获取文件绝对路径
pdir=`cd -P $(dirname $f); pwd`
echo $pdir
#获取当前用户
user=`whoami`
echo "$user"
#循环拷贝
for host in gree136 gree137 gree138
do
echo "**********$host*********"
rsync -av $pdir/$fname $user@$host:$pdir
done
执行下面的命令
source /etc/ptofile
zkServer.sh start
zkServer.sh status
6.查看是否可以启动,这边查看状态可能会暴一些问题,有一个原因是因为138和137没有配置好,所以下面我们只需要把/zookeeper345/datatmp/文件夹下面的myid改成与/conf/下的zoo.cfg的最后添加的server后的数字一致;再把/etc/profile文件配置好,这里当然也可以用脚本分发
xsync /etc/profile
7.到相应的及机器下,启动并且查看状态。这里我也在/bin/目录下写了脚本为:zkop,以便于在一台机器上查看其它机器的状态(在此之前已经做过免密登录)
#!/bin/bash
for host in gree139 gree138 gree137
do
case $* in
"start"){
echo "********** $host zookeeper start*****************"
ssh $host "source /etc/profile; zkServer.sh start"
};;
"stop"){
echo "********** $host zookeeper stop*******************"
ssh $host "source /etc/profile; zkServer.sh stop"
};;
"status"){
echo "********** $host zookeeper status*******************"
ssh $host "source /etc/profile; zkServer.sh status"
};;
esac
done
8.查看状态
[root@gree139 conf]# zkop status
********** gree139 zookeeper status*******************
JMX enabled by default
Using config: /opt/soft/zookeeper345/bin/../conf/zoo.cfg
Mode: follower
********** gree138 zookeeper status*******************
JMX enabled by default
Using config: /opt/soft/zookeeper345/bin/../conf/zoo.cfg
Mode: leader
********** gree137 zookeeper status*******************
JMX enabled by default
Using config: /opt/soft/zookeeper345/bin/../conf/zoo.cfg
Mode: follower
自此,zookeeper算是装好了。
2.下面我们来进行其他配置,解压hadoop压缩包,老样子放到/opt/soft/下面
1.日常改名,原来的解压后的文件名太长,改为:hadoop260,
2,我们要修改hadoop-env.sh, yarn-env.sh, mapred-env.sh,core-site.xml,hdfs-site.xml,yarn-site.xml,把mapred-site.xml.template复制一份到当前文件夹,命名为:mapred-site.xml。我们主要就是配置这几个文件
(1)配置core-site.xml文件
[root@gree135 hadoop]# vi ./core-site.xml
<configuration>
20 <!-- 指定hdfs的nameservice 为 mycluster -->
21 <property>
22 <name>fs.defaultFS</name>
23 <value>hdfs://mycluster/</value>
24 </property>
25
26 <!-- 指定hadoop工作目录 -->
27 <property>
28 <name>hadoop.tmp.dir</name>
29 <value>/opt/soft/hadoop260/hadooptmp/</value>
30 </property>
31
32 <!-- 指定zookeeper集群访问地址 -->
33 <property>
34 <name>ha.zookeeper.quorum</name>
35 <value>gree135:2181,gree136:2181,gree137:2181</value>
36 </property>
37
38 <!-- 配置为了解决以后其他组件连接HDFS集群 -->
39 <property>
40 <name>hadoop.proxyuser.bigdata.hosts</name>
41 <value>*</value>
42 </property>
43
44 <property>
45 <name>hadoop.proxyuser.bigdata.groups</name>
46 <value>*</value>
47 </property>
48 </configuration>
(2)配置hdfs-site.xml文件
[root@gree135 hadoop]# vi ./hdfs-site.xml
<!--指定副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定HDFS的nameservices为mycluster,需要跟core-site.xml中保持一致 -->
<property>
28 <name>dfs.nameservices</name>
29 <value>mycluster</value>
30 </property>
31
32 <!-- 设置mycluster集群有两个namenode, 分别为nn1,nn2 -->
33 <property>
34 <name>dfs.ha.namenodes.mycluster</name>
35 <value>nn1,nn2</value>
36 </property>
37
38 <!-- 配置nn1 的RPC通信地址 -->
39 <property>
40 <name>dfs.namenode.rpc-address.mycluster.nn1</name>
41 <value>gree135:9000</value>
42 </property>
43
44 <!-- 配置nn1的http通信地址 -->
45 <property>
46 <name>dfs.namenode.http-address.mycluster.nn1</name>
47 <value>gree135:50070</value>
48 </property>
49
50
51 <!-- 配置nn2 的RPC通信地址 -->
52 <property>
53 <name>dfs.namenode.rpc-address.mycluster.nn2</name>
54 <value>gree136:9000</value>
55 </property>
56
57 <!-- 配置nn2的http通信地址 -->
58 <property>
59 <name>dfs.namenode.http-address.mycluster.nn2</name>
60 <value>gree136:50070</value>
61 </property>
62
63 <!-- 指定JournalNode 在本地磁盘存放数据的位置 -->
64 <property>
65 <name>dfs.journalnode.edits.dir</name>
66 <value>/opt/soft/hadoop260/journaldata</value>
67 </property>
68
69 <!-- 指定NameNode的edits元数据在journalNode上的服务器 -->
70 <property>
71 <name>dfs.namenode.shared.edits.dir</name>
72 <value>qjournal://gree135:8485;gree136:8485;gree137:8485/mycluster</value>
73 </property>
74
75 <!-- 开启NameNode 自动切换 -->
76 <property>
77 <name>dfs.ha.automatic-failover.enabled</name>
78 <value>true</value>
79 </property>
80
81 <!-- 配置nameNode失败自动切换的实现方式 -->
82 <property>
83 <name>dfs.client.failover.proxy.provider.mycluster</name>
84 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
85 </property>
86
87 <!-- 配置隔离机制方法 -->
88 <property>
89 <name>dfs.ha.fencing.methods</name>
90 <value>
91 sshfence
92 shell(/bin/true)
93 </value>
94 </property>
95
96 <!-- 使用sshfence隔离机制时需要ssh免密登陆 -->
97 <property>
98 <name>dfs.ha.fencing.ssh.private-key-files</name>
99 <value>/root/.ssh/id_rsa</value>
100 </property>
101
102 <!-- 配置sshfence隔离机制超时时间 -->
103 <property>
104 <name>dfs.ha.fencing.ssh.connect-timeout</name>
105 <value>30000</value>
106 </property>
107
108 <property>
109 <name>dfs.webhdfs.enabled</name>
110 <value>true</value>
111 </property>
112 </configuration>
(3)配置mapred-site.xml
[root@gree135 hadoop]# vi ./mapred-site.xml
<configuration>
20 <!-- 指定mapreduce运算时资源调度为 yarn 模式 -->
21 <property>
22 <name>mapreduce.framework.name</name>
23 <value>yarn</value>
24 </property>
25
26 <!-- 配置mapreduce历史服务器地址 端口号 -->
27 <property>
28 <name>mapreduce.jobhistory.address</name>
29 <value>gree138:10020</value>
30 </property>
31
32 <!-- 配置mapreduce历史服务器WEB访问地址 -->
33 <property>
34 <name>mapreduce.jobhistory.webapp.address</name>
35 <value>gree138:19888</value>
36 </property>
</configuration>
(4)配置yarn-site.xml
[root@gree136 hadoop]# vi ./yarn-site.xml
<configuration>
<!-- 开启高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定ResourceManager的标识:yrc -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 指定rm1服务器 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>gree135</value>
</property>
<!-- 指定rm2服务器 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>gree136</value>
</property>
<!-- 指定rm 被管理的zk 地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>gree135:2181,gree136:2181,gree137:2181</value>
</property>
<!-- 运行mapreduce任务需要使用的服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 开启yarn集群的日志聚合功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志保存时间 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!-- 启动rm自动恢复功能 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 制定rm 状态信息存储在zookeeper集群上 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>
(5)修改hadoop-env.sh, yarn-env.sh, mapred-env.sh,分别在25行,23行,16行,把JAVA_HOME后的路径更改为jdk文件夹的路径:
export JAVA_HOME=/opt/soft/jdk180
3.在/hadoop260/etc/hadoop/文件夹下创建slaves文件,添加集群内的虚拟机的别名,地址
4.把/Hadoop260/这个文件夹分发到其他虚拟机(脚本运行)
xsync ./hadoop260/
5.在每台机器上配置环境
vi /etc/profile
#hadoop
export HADOOP_HOME=/opt/soft/hadoop260
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
6.启动zookeeper集群,查看状态
[root@gree139 conf]# zkop status
********** gree139 zookeeper status*******************
JMX enabled by default
Using config: /opt/soft/zookeeper345/bin/../conf/zoo.cfg
Mode: follower
********** gree138 zookeeper status*******************
JMX enabled by default
Using config: /opt/soft/zookeeper345/bin/../conf/zoo.cfg
Mode: leader
********** gree137 zookeeper status*******************
JMX enabled by default
Using config: /opt/soft/zookeeper345/bin/../conf/zoo.cfg
Mode: follower
7。启动journalnode (集群内的都起来)
hadoop-daemon.sh start journalnode
看是否有QuorumPeerMain和JournalNode,如果缺少建议查看/Hadoop/文件夹下的hdfs.sitexml是否配置正确。具体问题具体分析。
8.格式化 namenode,因为我们139和138是主备的关系,因此只格式化一台,并且同步hadooptmp
[root@gree135 soft]# hadoop namenode -format
将135格式化后的hadooptmp文件同步到gree136
[root@gree135 hadoop260]# scp -r ./hadooptmp/ root@gree136:/opt/soft/hadoop260/
9.初始化zookeeper
hdfs zkfc -formatZK
10.启动HDFS
start-dfs.sh
11.启动yarn,查看最终状态
[root@gree139 hadoop]#start-yarn.sh
[root@gree139 hadoop]#jqop jps
*********gree139 指令信息**********
jps
3344 NameNode
3920 ResourceManager
4016 NodeManager
3458 DataNode
3013 JournalNode
2908 QuorumPeerMain
3759 DFSZKFailoverController
5279 Jps
*********gree138 指令信息**********
jps
2928 DFSZKFailoverController
2552 QuorumPeerMain
3129 NodeManager
2667 JournalNode
2845 DataNode
2782 NameNode
11950 Jps
*********gree137 指令信息**********
jps
2448 QuorumPeerMain
2834 NodeManager
2662 DataNode
2557 JournalNode
3197 Jps
*********gree136 指令信息**********
jps
3361 Jps
2835 NodeManager
3014 JobHistoryServer
2684 DataNode
12.配置结束,如果有不对的地方欢迎指正