终于搭建了四台虚拟机,正式开始搭建Hadoop集群,目前是四台虚拟分别为:
node01(192.168.122.11),node02(192.168.122.12),node03(192.168.122.13),node04(192.168.122.14)
规划搭建HDFS2.X HA:
角色划分如下:
节点
NN-1
NN-2
DN
ZK
ZKFC
JNN
RM
NM
node01
√
√
√
node02
√
√
√
√
√
√
node03
√
√
√
√
√
node04
√
√
√
√
sudo ufw disablessh-keygen -t rsa -P ""生成密钥后,将node02、node03、node04的生成的id_rsa.pub公钥文件拷贝到node01里 (sudo scp id_rsa.pub node02@node02:/root/.ssh/id_rsa.pub.node02),再将这些公钥追加到node01的authorized_keys(没有该文件新建一个)文件里,最后将生成的包含四个节点的秘钥的authorized_keys 复制到node02、node03、node04的.ssh目录下(sudo scp authorized_keys node01:node02:/home/node02/.ssh/)ntpdate cn.pool.ntp.orghwclock --systohc先安装zookeeper集群是因为hadoop集群中需要配置zookeeper节点。
下载安装包 zookeeper-3.4.6.tar.gz
解压:tar -zxvf /opt/software/zookeeper-3.4.6.tar.gz -C home/hadoop/app/
配置:
cd /home/hadoop/app/zookeeper-3.4.6/conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改:dataDir=/home/hadoop/app/zookeeper-3.4.6/tmp
在最后添加:
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir /home/hadoop/app/zookeeper-3.4.6/tmp
echo 1 > /home/hadoop/app/zookeeper-3.4.6/tmp/myid
将配置好的zookeeper拷贝到其他节点:
首先分别在node03、node04目录下创建一个hadoop目录:
sudo mkdir -p /home/hadoop/app
修改文件夹用户:
sudo chown node03:node03 /home/hadoop/app
拷贝至node03、node04节点:
scp -r /home/hadoop/app/zookeeper-3.4.6/node03@node03:/home/hadoop/app/
scp -r /home/hadoop/app/zookeeper-3.4.6/node04@node04:/home/hadoop/app/
注意:node03、node04对应/hadoop/zookeeper-3.4.6/tmp/myid内容
node03:
echo 2 > /home/hadoop/app/zookeeper-3.4.6/tmp/myid
node04:
echo 3 > /home/hadoop/app/zookeeper-3.4.6/tmp/myid
下载安装包:因为网速较慢,下载的是hadoop-2.7.6.tar.gz 附:hadoop安装包下载地址
上传到虚拟机后解压:tar -zxvf hadoop-2.7.6.tar.gz -C /home/hadoop/app/
配置相应环境变量
(1) 配置HADOOP_HOME环境变量:修改/etc/profile
export HADOOP_HOME=/home/hadoop/app/hadoop-2.7.6
export PATH=$PATH:${JAVA_HOME}/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(2) 修改hadoo-env.sh mapred-env.sh yarn-env.sh的JAVA_HOME
配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves
(1) core-site.xml
(2) hdfs-site.xml
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
nn1,nn2
dfs.namenode.rpc-address.mycluster.nn1
node01:8020
dfs.namenode.rpc-address.mycluster.nn2
node02:8020
dfs.namenode.http-address.mycluster.nn1
node01:50070
dfs.namenode.http-address.mycluster.nn2
node02:50070
dfs.namenode.shared.edits.dir
qjournal://node01:8485;node02:8485;node03:8485/mycluster
dfs.journalnode.edits.dir
/var/hadoop/ha/jn
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/home/leehan/.ssh
dfs.ha.automatic-failover.enabled
true
(3) mapred-site.xml
mapreduce.framework.name
yarn
(4) yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
cluster1
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
node03
yarn.resourcemanager.hostname.rm2
node04
yarn.resourcemanager.zk-address
node02:2181,node03:2181,node04:2181
(5) slaves
node02
node03
node04
scp -r /home/hadoop/app/hadoop-2.7.6/ node02@node02:/home/hadoop/app严格按照下面的步骤!!!
在all slave上启动zookeeper服务:
cd /home/hadoop/app/zookeeper-3.4.6/bin/
./zkServer.sh start
可查看状态:一个leader,两个follower
zkServer.sh status
hadoop-daemon.sh start journalnode
运行jps命令检验,是否多了JournalNode进程。
在node01上执行命令:
hdfs namenode -format
在node02上执行:
hdfs namenode -bootstrapStandby
hdfs zkfc -formatZK
启动过程中出现报错Configuration has multiple addresses that match local node’s address. Please configure the system with dfs.nameservice.id and dfs.ha.namenode.id:
原因是/etc/hosts文件中配置了多个本机,所以最好不要127.0.0.1的信息。
start-dfs.sh
这里出现了需要密码认证,原因是四台虚拟机的用户名不一样,所以无法认证,因此需要将虚拟机的用户名统一。
在node01上执行:
start-yarn.sh
node03-node04启动resourcemanager:
yarn-daemon.sh start resourcemanager
集群启动:
all slave —-> zkServer.sh start node02 node03、node04
one master —->start-dfs.sh node01
one master —–>start-yarn.sh node01
backup master —->yarn-daemon.sh start resourcemanager node03、node04
正常集群启动后,
namenode上的jps后的进程有:
2648 ResourceManager
2553 DFSZKFailoverController
3036 NameNode
3325 Jps
datanode上的jps后进程有:
2353 NodeManager
2200 DataNode
2264 JournalNode
2137 QuorumPeerMain
2526 Jps
http://node01:50070
NameNode 'node01:9000' (active)
http://node02:50070
NameNode 'node02:9000' (standby)
验证HDFS HA
首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9
通过浏览器访问:http://192.168.1.202:50070
NameNode 'hadoop02:9000' (active)
这个时候hadoop02上的NameNode变成了active
在执行命令:
hadoop fs -ls /
-rw-r--r-- 3 root supergroup 1926 2014-02-06 15:36 /profile
刚才上传的文件依然存在!!!
手动启动那个挂掉的NameNode
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:http://192.168.1.201:50070
NameNode 'hadoop01:9000' (standby)
验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out
OK,大功告成!!!
测试集群工作状态的一些指令 :
bin/hdfs dfsadmin -report 查看hdfs的各节点状态信息
bin/hdfs haadmin -getServiceState nn1 获取一个namenode节点的HA状态
sbin/hadoop-daemon.sh start namenode 单独启动一个namenode进程
./hadoop-daemon.sh start zkfc 单独启动一个zkfc进程