搭建hadoop完全分布式,自动切换的ha集群

1、关闭防火墙
            cenos6.5的命令 
service iptables status;#查看防火墙状态
service iptables start;#立即开启防火墙,但是重启后失效。
service iptables stop;#立即关闭防火墙,但是重启后失效。
重启后生效 
chkconfig iptables on;#开启防火墙,重启后生效
chkconfig iptables off;#关闭防火墙,重启后生效 


             centos7的命令
        systemctl stop firewalld  //临时关闭test
        systemctl disable firewalld //禁止开机启动
         会显示
      Removed symlink /etc/systemd/system/multi-user.target.wantsfirewalld.service.
      Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
        查看状态
  firewall-cmd --state
2.配置主机名
!!!!!注意安装hadoop的集群主机名不能有下划线!!不然会找不到主机!无法启动!
配置主机名
$vi /etc/sysconfig/network
$source /etc/sysconfig/network
例如:
NETWORKING=yes
HOSTNAME=hadoop01

$hostname xxxx
然后重启下可生效 :reboot
3.配置Hosts
vi /etc/hosts
填入以下内容
127.0.0.1 hadoop01
其他主机和ip对应信息。。。


4.配置免密码互通
生成自己的公钥和私钥,生成的公私钥将自动存放在/root/.ssh目录下。

$ ssh-keygen

               一直按回车键

把生成的公钥copy到远程机器上

$ ssh-copy-id [user]@[host]

                ssh-copy-id hadoop01

           每个机器都要copy ,给02,03...

此时在远程主机的/root/.ssh/authorized_keys文件中保存了公钥,在known_hosts中保存了已知主机信息,当再次访问的时候就不需要输入密码了。
$ ssh [host]
通过此命令远程连接,检验是否可以不需密码连接


5.安装JDK
通过fz将jdk安装包上传
解压安装包
tar -zxvf [jdk安装包位置]
配置环境变量
修改profile -- 这个文件是每个用户登录时都会运行的环境变量设置,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
vim /etc/profile
在文件行尾加入配置后保存退出
export JAVA_HOME=/xxx/xxx
export PATH=$PATH:$JAVA_HOME/bin
重新加载profile使配置生效
source /etc/profile
环境变量配置完成,测试环境变量是否生效
echo $JAVA_HOME 
java -version


6.Zookeeper集群搭建
  进入conf目录,复制zoo-sample.cfg为zoo.cfg,通过修改zoo.cfg来对zookeeper进行配置
  修改1:dataDir 指定zookeeper将数据保存在哪个目录下,如果不修改,默认在/tmp下,这个目录下的数据有可能会在磁盘空间不足或服务器重启时自动被linux清理,所以一定要修改这个地址
  修改2:修改服务器列表
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
server.4=hadoop03:2888:3888
server.5=hadoop03:2888:3888
  修改myid:
  vim /tmp/myid 
7.安装hadoop修改配置文件


hadoop-env.sh :
   JAVA_HOME=/root/work/jdk1.8.0_65
-----------------------------------------------------------
core-site.xml :
<configuration>
<!-- 指定hdfs的nameservice为ns -->
<property>    
<name>fs.defaultFS</name>    
<value>hdfs://ns</value>    
</property>
<!--指定hadoop数据临时存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/software/hadoop-2.7.1/tmp</value>
</property>   
<property>    
<name>io.file.buffer.size</name>    
<value>4096</value>    
</property>
<!--指定zookeeper地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
</property>
</configuration>




------------------------------------------------------------------------
                   hdfs-site.xml
<!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->    
<property>    
<name>dfs.nameservices</name>    
<value>ns</value>    
</property>  
<!-- ns下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop01:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop03:8485;hadoop04:8485;hadoop05:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/software/hadoop-2.7.1/tmp/journal</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>    
<name>dfs.namenode.name.dir</name>    
<value>/home/software/hadoop-2.7.1/tmp/name</value>    
</property>    
<property>    
<name>dfs.datanode.data.dir</name>    
<value>/home/software/hadoop-2.7.1/tmp/data</value>    
</property>    
<property>    
<name>dfs.replication</name>    
<value>3</value>    
</property>   
<!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 -->                                                                    
<property>    
<name>dfs.webhdfs.enabled</name>    
<value>true</value>    
</property>  


-----------------------------------------------


mapred-site.xml
<configuration>
<property>    
<name>mapreduce.framework.name</name>    
<value>yarn</value>    
</property>    
</configuration>


-----------------------------------------------
      yarn-site.xml
<configuration>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>    
<name>yarn.nodemanager.aux-services</name>    
<value>mapreduce_shuffle</value>    
</property>  
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property> 
</configuration>
---------------------------------------


slaves
hadoop03
hadoop04
hadoop05


修改环境变量
export HADOOP_HOME=/home/software/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin


scp给其他机器


启动 zk


启动各节点:
以下命令最好自己敲 以防格式错误
都在sbin/下
hadoop01:
hadoop-daemons.sh start journalnode
hdfs zkfc -formatZK #只在集群第一次使用前执行
hadoop namenode -format #只在集群第一次使用前执行
hadoop-daemon.sh start namenode


hadoop02:
hdfs namenode -bootstrapStandby

hadoop-daemon.sh start namenode

 hadoop01:启动datanode

hadoop-daemons.sh start datanode

hadoop01:启动yarn

start-yarn.sh

hadoop01:
hadoop-daemon.sh start zkfc 
hadoop02:

hadoop-daemon.sh start zkfc 

启动后 jps显示:

hadoop01:
QuorumPeerMain
NameNode
DFSZKFailoverController

ResourceManager


hadoop02:
QuorumPeerMain
NameNode
DFSZKFailoverController

hadoop03:
QuorumPeerMain
DataNode
NodeManager

JournalNode


hadoop04:
QuorumPeerMain
 DataNode
NodeManager

JournalNode


hadoop05:
QuorumPeerMain
DataNode
NodeManager

JournalNode

可以登录hadoop01和hadoop02的50070端口查看详情

发现一个是active 一个是sandyby,假如hadoop01挂掉后,hadoop02会成为namenode节点

猜你喜欢

转载自blog.csdn.net/qq_40624562/article/details/81016158