hadoop2.5.2全分布式HDFS HA搭建
最近老师布置了个大作业,需要搭建hadoop存储数据,所以照着网上的各种版本教程努力的搭了一个,搭建的过程可谓声泪俱下。。。(此处省略一万字),所以想着以后要是重新搭建hadoop可以有所参照,所以写下这个博客。
本次搭建主要有如下几个步骤:
- 安装VM以及ubuntu,配置好4台虚拟机
- 更改4台虚拟机的主机名以及hosts文件并配置java环境
- 用SFTC将下载好的hadoop-2.5.X-x64.tar.gz和zookeeper-3.4.6传到虚拟机中
- 解压两个压缩文件夹并开始配置
节点分布如下
先行准备及虚拟机配置
- hadoop-2.5.1-x64.tar.gz下载地址百度云链接密码00vm
Ctrl + B
- zookeeper-3.4.6去官网下载
- VM及Ubuntu14.04.5自行下载
先装一台虚拟机,分配20G的存储空间,1G内存,网卡选择NAT。虚拟机名称命名为node4(因为之前配过由3台虚拟机组成的hadoop1.X,所以这是第4台虚拟机),用户名为hadoop,密码随意。配置好之后选择完全克隆,复制3台虚拟机。
克隆完成后将4台虚拟机全部打开,依次修改主机名。
-sudo gedit etc/hostname #要改成的主机名
-sudo gedit etc/hosts #将4台虚拟机的ip地址写进去
重启4台虚拟机,4台虚拟机分别为 hadoop@node4、hadoop@node5、hadoop@node6、hadoop@node7
配置java环境
- sudo apt-get install openjdk-7-jre openjdk-7-jdk
安装好后需要找到相应的安装路径,这个路径是用于配置JAVA_HOME环境变量的
这里直接放出路径/usr/lib/jvm/java-7-openjdk-amd64
接着配置JAVA_HOME环境变量,为了方便,我们在~/.bashrc 中进行设置
- sudo gedit ~/.bashrc
在文件最前面添加如下内容
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
保存并且输入如下命令使该环境变量生效
- source ~/.bashrc
任意位置输入java验证是否配置成功
安装ssh、配置无密钥登录
- sudo apt-get install openssh-server
安装完后即可通过 ssh hadoop@node5 访问node5虚拟机
分别在4台虚拟机上输入如下命令
- ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
- cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
保证登录本地免密码,然后把公钥文件 id_dsa.pub 拷贝到其他虚拟机上去
- scp id_dsa.pub hadoop@node5:~
然后在node5的命令行里输入
- cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
如法炮制使node4、node5可以免密码登录到其他node
配置hadoop以及zookeeper
在node4上
- tar -zxvf hadoop-2.5.1-x64.tar.gz
- tar -zxvf zookeeper-3.4.6.tar.gz
配置hadoop-env.sh
- cd hadoop-2.5.1/etc/hadoop
- sudo gedit hadoop-env.sh
找到 export JAVA_HOME=${JAVA_HOME}
改为 export JAVA_HOME=${JAVA_HOME:-"/usr/lib/jvm/java-7-openjdk-amd64"}
配置hdfs-site.html
- sudo gedit hdfs-site.html
找到configuration标签,在标签内插入如下内容
<configuration>
<property>
<name>dfs.nameservices</name>
<value>mxy</value>
</property>
<property>
<name>dfs.ha.namenodes.mxy</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mxy.nn1</name>
<value>node4:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mxy.nn2</name>
<value>node5:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mxy.nn1</name>
<value>node4:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mxy.nn2</name>
<value>node5:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node5:8485;node6:8485;node7:8485/mxy</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mxy</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_dsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/path/to/journal/node/local/data</value>
</property>
<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>
其中mxy为hadoop集群名字,可以改为其他,但是要注意,集群名不能带下划线!!!
配置core-site.xml
- sudo gedit core-site.xml
找到configuration标签,在标签内插入如下内容
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mxy</value>
</property>
<property>
<name>ha.zookeeper.quorum</name> <value>node4:2181,node5:2181,node6:2181</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop2</value>
</property>
</configuration>
mxy为集群名可以更改
配置slaves
- sudo gedit slaves
- 插入node5
- 插入node6
- 插入node7
配置zoo.cfg
- cd ~/zookeeper-3.4.6/conf
找到zoo_sample.cfg将其重命名为zoo.cfg
- sudo gedit zoo.cfg
找到dataDir,修改为dataDir=/opt/zookeeper
在文件最下部插入
server.1=node4:2888:3888
server.2=node5:2888:3888
server.3=node6:2888:3888
启动zookeeper
分别在node4、node5、node6的建立/opt/zookeeper (注意opt文件权限问题)
- cd /
- sudo mkdir opt/zookeeper
- sudo chmod -R 777 /opt
- cd /opt/zookeeper
- sudo gedit myid
在文档中写入数字编号:node4中的myid文件写入1,node5写2,node6写3
将zookeeper-3.4.6文件拷贝到node5、node6上
- cd ~
- scp -r zookeeper-3.4.6 hadoop@node5:~/
- scp -r zookeeper-3.4.6 hadoop@node6:~/
在node4上为zookeeper配置环境变量
- sudo gedit /etc/profile
在unset i之前插入
export PATH=$PATH:/home/hadoop/zookeeper-3.4.6/bin
退出保存执行如下语句
- source /etc/profile
- scp /etc/profile hadoop@node5:/etc/
- 在node5中执行source /etc/profile
- scp /etc/profile hadoop@node6:/etc/
- 在node6中执行source /etc/profile
在node4、5、6的任意目录下输入zkServer.sh start启动zookeeper
输入jps检查是否启动
出现QuorumPeerMain则为成功
启动JournalNode
- scp -r /home/hadoop/hadoop-2.5.1 hadoop@node5:/home/hadoop/
- scp -r /home/hadoop/hadoop-2.5.1 hadoop@node6:/home/hadoop/
- scp -r /home/hadoop/hadoop-2.5.1 hadoop@node7:/home/hadoop/
在node5、6、7中分别启动journalnode
- cd ~/hadoop-2.5.1/sbin
- ./hadoop-daemon.sh start journalnode
输入jps检查
可以使用冒号来定义对齐方式:
初始化NameNode
在node4上
- cd ..
- cd bin
- ./hdfs namenode -format
启动node4上的namenode,把namenode信息复制到node5上
node4:
- cd ..
- cd sbin
- ./hadoop-daemon.sh start namenode
node5:
- cd ../bin
- ./hdfs namenode -bootstrapStandby
- cd ../sbin
- ./stop-dfs.sh
初始化ZKFC
在任意namenode(node4或node5上)执行以下命令
- cd ../bin
- ./hdfs zkfc -formatZK
配置完成,启动全部节点
- cd ../sbin
- ./start-dfs.sh
别忘了修改window/system32/driver/etc/hosts文件哦
然后浏览器输入http://node4:50070 和 http://node5:50070
即可查看两个namenode节点情况
ps:输入node4或5的ip:50070也可以