检查所有主机date是否一致
ntpdate -u ntp.sjtu.edu.cn
配置ssh的免密码登录 :
登陆ssh : ssh localhost (ssh node1)
ssh-keygen -t rsa 创建密钥(存在于 : ~/.ssh 下)
ssh-copy-id node1 + 两次输入密码
三台主机 :
node1 :namenode , datanode , zkfc (zookeeper , Failover Controller)
node2 : datanode , journalnode ,
node3 : namenode , datanode , journalnode , zkfc
启动顺序 :namenode , datanode , journalnode , zkfc
namenode(node1 node3) , datanode(node1 node2 node3) , journalnode(node2 node3) , zkfc(node1 node2 node3)
-----------------------------------------------------------------------------------------------------------------------------------------
zookeeper官网 : http://zookeeper.apache.org/
安装zookeeper
右侧Documentation 选择版本 : Release 3.4.6(stable)
Getting Started
选择集群安装 : Running Replicated ZooKeeper
在node1 , node2 , node3 :
解压zookeeper.tar.gz 包,并且重命名为zookeeper :
tar -zxvf zookeeper-3.4.6.tar.gz
rm -rf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper
目录 conf 下查看是否有zoo.cfg 没有就创建。有zoo_sample.cfg 就 重命名为zoo.cfg :
mv zoo_sample.cfg zoo.cfg
编辑 vi zoo.cfg
dataDir=/home/zk
最后追加 :
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
创建目录 : mkdir /home/zk
新建:
vi /home/zk/myid
node1中: 1 , node2中: 2 ,node3中: 3
node1 , node2 , node3 : 每台都要启动 :
/usr/zookeeper/bin/zkServer.sh start
每台都要查看进程 : jps
查看每台的状态 :zkServer.sh status
--------------------------------------------------------------------------------------------------------------------------------------------------
HDFS :
左侧选择模式 :High Availability With QJM
修改/etc/hadoop/hadoop-env.sh 中的JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.7.0_79
修改配置文件 :
etc/hadoop/hdfs-site.xml:
#关闭用户访问权限
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
#为nameservices定义一个逻辑名
<property>
<name>dfs.nameservices</name>
<value>sunshine</value>
</property>
#定义namenode的id为datanode提供确认
<property>
<name>dfs.ha.namenodes.sunshine</name>
<value>nnn1,nnn3</value>
</property>
#每个NameNode的完全限定的RPC地址监听
<property>
<name>dfs.namenode.rpc-address.sunshine.nnn1</name>
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.sunshine.nnn3</name>
<value>node3:8020</value>
</property>
#完全限定的HTTP地址每个NameNode监听
<property>
<name>dfs.namenode.http-address.sunshine.nnn1</name>
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.sunshine.nnn3</name>
<value>node3:50070</value>
</property>
#这就是一个配置的地址JournalNodes提供共享存储、编辑写的活跃nameNode和
阅读的备用nameNode保持更新所有文件系统的变化活动nameNode。
尽管你必须指定几个JournalNode地址,您应该只配置一个uri。
表单的URI应该:“qjournal:/ / host1:端口1;host2:端口2;host3:端口3 / journalId”
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node2:8485;node3:8485/sunshine</value>
</property>
#配置的Java类的名称将使用DFS客户机,以确定哪些NameNode是当前活跃,因此,
NameNode目前为客户端请求提供服务。目前唯一实现附带Hadoop ConfiguredFailoverProxyProvider
<property>
<name>dfs.client.failover.proxy.provider.sunshine</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>/root/.ssh/id_rsa</value>
</property>
#JournalNode守护进程的路径将其本地存储的状态
<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>
etc/hadoop/core-site.xml:
#DFS的入口
<property>
<name>fs.defaultFS</name>
<value>hdfs://sunshine</value>
</property>
##存放fsimage元数据目录
<property>
<name>hadoop.tmp.dir</name>
<value>/home/data</value>
</property>
#指定集群应该设置为自动故障转移
<property>
<name>ha.zookeeper.quorum</name>
<value>node1,node2,node3</value>
</property>
etc/hadoop/slaves:
##指定 DataNode 主机
node1
node2
node3
将在node1配制好的配置文件复制到node2,node3 :
scp ./* root@node2:/usr/hadoop-2.5.1/etc/hadoop/
启动每台journalnode : hadoop-daemon.sh start journalnode
每台查看进程 : jps
注意 : 格式化namenode之前 要保证 : 三台 zookeeper 启动 ,三台journalnode 启动
将node1的namenode格式化 :hdfs namenode -format
查看fsimage文件 : cd /home/data/dfs/name/current
将node1的fsimage数据复制到node3上 : 保证两台 namenode主机的fsimage相同 :
先将刚刚格式化完的node1的namenode启动:
hadoop-daemon.sh start namenode
再在node3上home目录下执行 :hdfs namenode -bootstrapStandby
格式化ZooKeeper : 在任意一台namenode上初始化即可: hdfs zkfc -formatZK
(因为在配置文件中etc/hadoop/core-site.xml已经指明,即 : 执行一遍所有ZooKeeper都执行格式化)
注意 :namenode解决当点故障,需要两台namenode主机自动切换所以需要相互之间设置免密码登录 (ssh-copy-id node#)
---------------------------------------------------yarn---------------------------------------
重命名 : mv mapred-site.xml.template mapred-site.xml
vi yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>RMaster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node3</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
编辑 :
vi mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
环境变量配置:
export PATH
export JAVA_HOME=/opt/jdk1.7.0_79
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6
export HADOOP_HOME=/opt/hadoop-2.5.2
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
集群启动:
启动每台ZooKeeper : /usr/zookeeper/bin/zkServer.sh start (配置环境变量后 : zkServer.sh start)
再启动NameNode : node1 : start-dfs.sh
再 node1 : start-yarn.sh
再 node3 : yarn-daemon.sh start resourcemanager
假如某个节点未正常启动或关闭,可以 :
比如 datanode : hadoop-daemon.sh start datanode
datanode : hadoop-daemon.sh stop datanode
hdfs访问: 172.16.231.3:50070
job执行进度:172.16.231.3:8088 / node1:8088