根据官方文档搭建完整hadoop集群,包括NN, DN , JN , ZK,ZKFC,RS ,NM,
参考官方文档
hdfs:
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
http://hadoop.apache.org/docs/r2.5.2/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
因为我搭建了四台虚拟机,所以很多节点是部署在同一台虚拟机上的。四台虚拟机的hostname分别是node1、node2、node3、node4,上面第一步中已经配置好hosts
NameNode | DateNode | JournalNodes | Zookeeper | ZKFC | RS | NodeManage | |
node1 | 1 | 1 | 1 | 1 | |||
node2 | 1 | 1 | 1 | 1 | 1 | 1 | |
node3 | 1 | 1 | 1 | 1 | 1 | ||
node4 | 1 | 1 | 1 |
1.准备工作
1)克隆四台linux虚拟机 过程参考 点击打开链接
2)设置好网络、host、时间同步、免密码传输(这个是为了后期配置文档传输)过程参考 点击打开链接
2.安装jdk,配置环境变量
1)下载安装包,上传到linux虚拟机上,我安装的为1.7
2)配置环境变量
vi + /etc/profile
export JAVA_HOME=#jdk安装路径
export PATH=$PANTH:$JAVA_HOME/bin
:wq
source /etc/profile
3.下载hadoop包,解压
我使用的是hadoop-2.5.1
4.搭建zookeeper集群
1)下载zookeeper,解压。我用的是3.4.6
2)安装目录下的/conf下,新建zoo.cfg或者修改zoo.sample.cfg为zoo.cfg
tickTime=2000
dataDir=/opt/zookeeper#修改
clientPort=2181
initLimit=5
syncLimit=2
#追加
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
3)在dataDir设置的路径下新建myid
如:node1
echo 1 > myid
1)修改hdfs-site.xml
#name_service
<property>
<name>dfs.nameservices</name>
<value>yzhang</value>#yzhang为我自定义的名字
</property>
#nameservice_id
<property>
<name>dfs.ha.namenodes.yzhang</name>
<value>nn1,nn2</value>#nn1是用的官方自定义的名字,也可以改成其他
</property>
#rpc,有几台配几个
<property>
<name>dfs.namenode.rpc-address.yzhang.nn1</name>#node1-node4是配置好的四台虚拟机hostname
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.yzhang.nn2</name>
<value>node2:8020</value>
</property>
#http
<property>
<name>dfs.namenode.http-address.yzhang.nn1</name>
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.yzhang.nn2</name>
<value>node2:50070</value>
</property>
#jn
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/yzhang</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/journal</value>
</property>
#fencing
<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_rsa</value>
</property>
#failover
<property>
<name>dfs.client.failover.proxy.provider.yzhang</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
2)修改core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://yzhang</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop</value>#官方路径是在tmp下
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
3)修改slaves这里定义dn,而且map-reduce中的nm会与dn保持一致
node2
node3
node4
4)修改hadoop-env.sh
默认使用的是${JAVA_HOME},但是配置了环境变量依旧会报错,不知道原因,但是修改了就可以了
export JAVA_HOME=/usr/java/jdk1.7.0_67
5)修改yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node4</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
6)修改mapred.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
6.启动jn集群
hadoop-daemon.sh start journalnode
7.格式化其中一台namenode,启动namenode,在未格式化的nn上同步
hdfs namenode -format
hadoop-daemon.sh start namenode
hdfs namenode -bootstrapStandby
8.启动zk集群,在一台nn上格式化zkfc
zkServer.sh start
zkServer.sh status
hdfs zkfc -formatZK
9.全部启动
start-all.sh start
因为启动是先启动的namenode,所以在格式化好的第二次启动,直接用这个命令,可能会出现nn启动不成功的情况,需要手动启动
hadoop-daemon.sh start namenode
10.手动启动resourceManager
在哪一台服务器全部启动,就会启动这一台的resourceMangeer,我在node1启动,启动后检测到node1不是RM,就会杀死进程,所以需要手动启动两台RM
yarn-daemon.sh start resourcemanager
11.通过jps命令查看每台服务器上是否启动成功,如果有什么错误看对应日志。如果部署错误,需要删掉core-site.xml配置的hadoop.tmp.dir的文件和hdfs-site.xml配置的jn的edits路径文件。然后重新格式化namenode,格式化zkfc
12.通过web UI 监测集群
hadoop:node1:50070
resourcemanager:node3:8088
13.权限问题
个人测试权限可以关闭
在hdfs.site添加
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>