精华内容
下载资源
问答
  • hadoop高可用集群搭建

    千次阅读 2019-08-20 09:47:35
    主机配置环境如下表 主机名 IP 系统 软件版本 安装目录 数据目录 ...hadoop-01 ...hadoop-2.7.7、jdk1.8、zookeeper-3.4.6 .../usr/local/hadoop .../data/hadoop ...hadoop-02 ...hadoop-2.7.7、jdk1....

    主机配置环境如下表

    主机名IP系统软件版本安装目录数据目录
    hadoop-01192.168.10.51Centos 7.6hadoop-2.7.7、jdk1.8、zookeeper-3.4.6/usr/local/hadoop/data/hadoop
    hadoop-02192.168.10.52Centos 7.6hadoop-2.7.7、jdk1.8、zookeeper-3.4.6/usr/local/hadoop/data/hadoop
    hadoop-03192.168.10.53Centos 7.6hadoop-2.7.7、jdk1.8、zookeeper-3.4.6/usr/local/hadoop/data/hadoop

    安装后启动的进程如下表

    hadoop-01hadoop-02hadoop-03
    NodeManagerNodeManagerNodeManager
    NameNodeNameNode
    DataNodeDataNodeDataNode
    DFSZKFailoverControllerDFSZKFailoverController
    JournalNodeJournalNodeJournalNode
    ResourceManagerResourceManager
    QuorumPeerMainQuorumPeerMainQuorumPeerMain

    详细搭建过程记录如下

    1. 配置主机名以及解析(3台)

    在这里插入图片描述

    2. 配置服务器间ssh免密码登陆(3台)

    高可用模式下,hadoop的故障切换需要通过ssh登陆到其它机器,进行主备切换,因此需要配置主机间的免密码登陆
    以hadoop-01为例,剩下两台服务器做相同配置

    #第一步,ssh-keygen -t rsa生成密钥对
    [root@hadoop-01 ~]$ ssh-keygen -t rsa
    # 连续三次回车,即在本地生成了公钥和私钥,不设置密码,默认存储在 ~/.ssh目录下
    
    [root@hadoop-01 ~]# ll .ssh/
    total 16
    -rw------- 1 root root 1989 Jul 24 14:18 authorized_keys
    -rw------- 1 root root 1679 Jul 15 11:43 id_rsa
    -rw-r--r-- 1 root root  396 Jul 15 11:43 id_rsa.pub
    -rw-r--r-- 1 root root 1311 Jul 24 16:41 known_hosts
    
    #第二步,用ssh-copy-id拷贝将公钥复制到远程机器中
    [root@hadoop-01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.10.51
    [root@hadoop-01 ~]# ssh-copy-id -i .ssh/id_rsa.pub  root@192.168.10.52
    [root@hadoop-01 ~]# ssh-copy-id -i .ssh/id_rsa.pub  root@192.168.10.53
    
    #第三步,测试免密码登陆
    [root@hadoop-01 ~]# ssh -p 9431 root@192.168.10.52
    Last login: Mon Aug 19 15:30:09 2019 from 192.168.10.45
    
    Welcome to Alibaba Cloud Elastic Compute Service !
    
    [root@hadoop-02 ~]# 
    

    3. 安装hadoop

    3.1 修改配置文件

    (1)将hadoop安装包解压,重命名为hadoop,拷贝到/usr/local下
    (2)修改各配置文件,所有的配置文件在/usr/local/hadoop/etc/hadoop目录下

    修改core-site.xml,内容如下:

    <configuration>
    	<!--指定hdfs连接地址,集群模式(高可用)-->
    	<property>
    		<name>fs.defaultFS</name>
    		<value>hdfs://cluster</value>
    	</property>
    	
    	<!-- 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
    	<property>
      		<name>ha.zookeeper.quorum</name>
      		<value>hadoop-01:2181,hadoop-02:2181,hadoop-03:2181</value>
    	</property>
    </configuration>
    

    修改hdfs-site.xml,内容如下:

    <configuration>
    	<!--指定HDFS副本的数量,不能超过机器节点数-->
    	<property>
    		<name>dfs.replication</name>
    		<value>3</value>
    	</property>
    	<!-- 为namenode集群定义一个services name -->
    	<property>
     		<name>dfs.nameservices</name>
      		<value>cluster</value>
    	</property>
    	<!-- nameservice 包含哪些namenode,为各个namenode起名 -->
    	<property>
      		<name>dfs.ha.namenodes.cluster</name>
      		<value>nn01,nn02</value>
    	</property>
     	<!-- 名为nn01的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
    	<property>
      		<name>dfs.namenode.rpc-address.cluster.nn01</name>
      		<value>hadoop-01:9000</value>
    	</property>
     	<!--名为nn01的namenode的http地址和端口号,用来和web客户端通讯 -->
    	<property>
      		<name>dfs.namenode.http-address.cluster.nn01</name>
      		<value>hadoop-01:50070</value>
    	</property>
     	<!-- 名为nn02的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
    	<property>
      		<name>dfs.namenode.rpc-address.cluster.nn02</name>
      		<value>hadoop-02:9000</value>
    	</property>
     	<!--名为nn02的namenode的http地址和端口号,用来和web客户端通讯 -->
    	<property>
      		<name>dfs.namenode.http-address.cluster.nn02</name>
      		<value>hadoop-02:50070</value>
    	</property>
      	<!-- namenode间用于共享编辑日志的journal节点列表 -->
    	<property>
      		<name>dfs.namenode.shared.edits.dir</name>
      		<value>qjournal://hadoop-01:8485;hadoop-02:8485;hadoop-03:8485/cluster</value>
    	</property>
        <!-- journalnode 上用于存放edits日志的目录 -->
    	<property>
      		<name>dfs.journalnode.edits.dir</name>
      		<value>/data/hadoop/journaldata</value>
    	</property>
      	<!-- 指定该集群出现故障时,是否自动切换到另一台namenode -->
    	<property>
      		<name>dfs.ha.automatic-failover.enabled.cluster</name>
      		<value>true</value>
    	</property>
    	<!-- 配置失败自动切换实现方式 -->
    	<property>
        	<name>dfs.client.failover.proxy.provider.cluster</name>
     		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    	</property>
      	<!-- 一旦需要NameNode切换,使用ssh方式进行操作 -->
    	<property>
      		<name>dfs.ha.fencing.methods</name>
      		<value>sshfence(root:9431)</value>
    	</property>
      	<!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 -->
    	<property>
      		<name>dfs.ha.fencing.ssh.private-key-files</name>
      		<value>/root/.ssh/id_rsa</value>
    	</property>
    	<!-- connect-timeout超时时间 -->
    	<property>
        		<name>dfs.ha.fencing.ssh.connect-timeout</name>
        		<value>30000</value>
    	</property>
    	<property>
       		<name>dfs.name.dir</name>
       		<value>/data/hadoop/tmp/dfs/name</value>
       	</property>
       	<property>
       		<name>dfs.data.dir</name>
       		<value>/data/hadoop/tmp/dfs/data</value>
       	</property>
    </configuration>
    

    修改yarn-site.xml,内容如下:

    <configuration>
    	<!-- 启用Resource Manager HA高可用性 -->
    	<property>
    		<name>yarn.resourcemanager.ha.enabled</name>
    		<value>true</value>
    	</property>
    	<!-- 指定resourcemanager的名字 -->
    	<property>
    		<name>yarn.resourcemanager.cluster-id</name>
    		<value>yrc</value>
    	</property>
    	<!-- 使用了2个resourcemanager,分别指定Resourcemanager的地址 -->
    	<property>
    		<name>yarn.resourcemanager.ha.rm-ids</name>
    		<value>rm1,rm2</value>
    	</property>
    	<!-- 指定rm1的地址 -->
    	<property>
    		<name>yarn.resourcemanager.hostname.rm1</name>
    		<value>hadoop-01</value>
    	</property>
    	<!-- 指定rm2的地址  -->
    	<property>
    		<name>yarn.resourcemanager.hostname.rm2</name>
    		<value>hadoop-02</value>
    	</property>
    	<!-- 指定zookeeper集群机器 -->
    	<property>
    		<name>yarn.resourcemanager.zk-address</name>
    		<value>hadoop-01:2181,hadoop-02:2181,hadoop-03:2181</value>
    	</property>
    	<!-- NodeManager上运行的附属服务,默认是mapreduce_shuffle -->
    	<property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    	</property>
    </configuration>
    

    修改mapred-site.xml(该文件不存在,需要手动创建),cp mapred-site.xml.template mapred-site.xml,内容如下:

    <configuration>
    	<!-- 采用yarn作为mapreduce的资源调度框架 -->
    	<property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    	</property>
    </configuration>
    

    修改slaves文件,内容如下:

    hadoop-01
    hadoop-02
    hadoop-03
    

    修改hadoop-env.sh文件,指定jdk的地址

    # The java implementation to use.
    export JAVA_HOME=/usr/java/jdk1.8.0_131
    
    # 如果ssh端口不是默认22,需要添加此配置
    export HADOOP_SSH_OPTS="-p 9431"
    
    # 指定hadoop相关的pid存放位置
    export HADOOP_PID_DIR=/usr/local/hadoop/pids
    

    配置hadoop环境变量,vim /etc/profile.d/hadoop.sh,内容如下

    export HADOOP_HOME=/usr/local/hadoop
    export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
    export HADOOP_COMMON_LIB_NATIVE_DIR=/usr/local/hadoop/lib/native
    export HADOOP_OPTS="-Djava.library.path=/usr/local/hadoop/lib"
    export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    

    source /etc/profile.d/hadoop.sh

    3.2 拷贝复制到其它机器

    scp -r /usr/local/hadoop root@hadoop-02:/usr/local/
    scp -r /usr/local/hadoop root@hadoop-03:/usr/local/
    

    3.3 启动hadoop

    启动hadoop前,需要执行几步格式化操作:
    (1)启动journalnode,三台机器都要这一步操作(仅第一次启动hadoop时,需要这一步操作,之后不再需要手动启动journalnode)

    cd /usr/local/hadoop/sbin
    sh hadoop-daemon.sh start journalnode
    

    (2) 在hadoop-01上执行格式化操作,格式化namenode和zkfc

    hdfs namenode -format
    hdfs zkfc -formatZK
    

    (3) namenode主从信息同步,在hadoop-02节点上执行同步命令

    bin/hdfs namenode -bootstrapStandby
    

    上述步骤完成后,接下来我们就可以启动hadoop了

    在hadoop-01机器上执行下面的命令

    # 启动hdfs
    cd /usr/local/hadoop/sbin
    sh start-dfs.sh
    # 启动yarn
    sh start-yarn.sh
    #启动ZookeeperFailoverController
    sh hadoop-daemon.sh start zkfc
    

    在hadoop-02机器上执行下边命令

    /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager
    /usr/local/hadoop/sbin/hadoop-daemon.sh start zkfc
    

    也可以简化启动

    启动命令

    #hadoop-01
    /usr/local/hadoop/sbin/start-all.sh
    /usr/local/hadoop/sbin/hadoop-daemon.sh start zkfc
    
    #hadoop-02
    /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager
    /usr/local/hadoop/sbin/hadoop-daemon.sh start zkfc
    

    停止命令

    #hadoop-01
    /usr/local/hadoop/sbin/stop-all.sh
    /usr/local/hadoop/sbin/hadoop-daemon.sh stop zkfc
    
    #hadoop-02
    /usr/local/hadoop/sbin/yarn-daemon.sh stop resourcemanager
    /usr/local/hadoop/sbin/hadoop-daemon.sh stop zkfc
    

    3.4 查看每台节点的进程

    hadoop-01

    [root@hadoop-01 ~]# jps | grep -v Jps
    26849 NodeManager
    2770 QuorumPeerMain
    27331 DFSZKFailoverController
    26308 DataNode
    26537 JournalNode
    26154 NameNode
    26733 ResourceManager
    

    hadoop-02

    [root@hadoop-02 ~]# jps | grep -v Jps
    7489 JournalNode
    7281 NameNode
    627 QuorumPeerMain
    8233 DFSZKFailoverController
    8123 ResourceManager
    7389 DataNode
    7631 NodeManager
    

    hadoop-03

    [root@hadoop-03 ~]# jps | grep -v Jps
    21762 QuorumPeerMain
    29476 NodeManager
    29271 DataNode
    29370 JournalNode
    

    3.5 通过Web界面查看hadoop信息

    (1) 浏览器访问http://192.168.10.51:50070
    在这里插入图片描述
    由图可知,当前hadoop-01是active节点,即namenode主节点

    (2)浏览器访问http://192.168.10.52:50070
    在这里插入图片描述
    由图可知,当前hadoop-01是standby节点,即namenode备节点

    (3) 查看yarn的web控制台,浏览器访问http://192.168.10.51:8088
    在这里插入图片描述

    3.6 测试namenode高可用

    (1)在hadoop-01上kill掉namenode进程,然后通过浏览器查看hadoop-02的状态,发现状态变为active,说明高可用测试成功
    (2)重新启动hadoop-01的namenode进程,sh start-dfs.sh,浏览器访问hadoop-01,此时hadoop-01的状态为standby

    至此,hadoop高可用集群搭建完毕。

    展开全文
  • jdk,hadoop,zookeeper 192.168.200.202 hadoop-02 备用主节点 jdk,hadoop,zookeeper 192.168.200.203 hadoop-03 数据服务节点 jdk,hadoop,zookeeper 配置静态IP # 有的可能为 ifcfg-ens33 vi /etc/sysconfig/...

    节点布置

    IP主机名描述部署软件
    192.168.200.201hadoop-01主节点jdk,hadoop,zookeeper
    192.168.200.202hadoop-02备用主节点jdk,hadoop,zookeeper
    192.168.200.203hadoop-03数据服务节点jdk,hadoop,zookeeper

    配置静态IP

    # 有的可能为 ifcfg-ens33
    vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 
    

    在这里插入图片描述

    # 重启网卡
    service network restart
    

    配置ssh免密登录

    参考文档

    部署JDK

    参考文档

    部署zookeeper

    参考文档

    部署hadoop

    编辑hadoop-env.sh

    在这里插入图片描述

    编辑core-site.xml

    <configuration>
     	 <!-- 指定hdfs的nameservice为ns1 -->
    	 <property>
    		 <name>fs.defaultFS</name>
    		 <value>hdfs://ns1/</value>
    	 </property>
    	 <!-- 指定hadoop临时目录 -->
    	 <property>
    		 <name>hadoop.tmp.dir</name>
    		 <value>/root/software/hadoop-2.7.7/tmp</value>
    	 </property>
    
    	 <!-- 指定zookeeper地址 -->
    	 <property>
    		 <name>ha.zookeeper.quorum</name>
    		 <value>hadoop-01:2181,hadoop-02:2181,hadoop-03:2181</value>
    	 </property>
    </configuration>
    

    编辑hdfs-site.xml

    <configuration>
    	<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
    	<property>
    		<name>dfs.nameservices</name>
    		<value>ns1</value>
    	</property>
    	<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
    	<property>
    		<name>dfs.ha.namenodes.ns1</name>
    		<value>nn1,nn2</value>
    	</property>
    	<!-- nn1的RPC通信地址 -->
    	<property>
    		<name>dfs.namenode.rpc-address.ns1.nn1</name>
    		<value>hadoop-01:9000</value>
    	</property>
    	<!-- nn1的http通信地址 -->
    	<property>
    		<name>dfs.namenode.http-address.ns1.nn1</name>
    		<value>hadoop-01:50070</value>
    	</property>
    	<!-- nn2的RPC通信地址 -->
    	<property>
    		<name>dfs.namenode.rpc-address.ns1.nn2</name>
    		<value>hadoop-02:9000</value>
    	</property>
    	<!-- nn2的http通信地址 -->
    	<property>
    		<name>dfs.namenode.http-address.ns1.nn2</name>
    		<value>hadoop-02:50070</value>
    	</property>
    	<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
    	<property>
    		<name>dfs.namenode.shared.edits.dir</name>
    		<value>qjournal://hadoop-01:8485;hadoop-02:8485;hadoop-03:8485/ns1</value>
    	</property>
    	<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    	<property>
    		<name>dfs.journalnode.edits.dir</name>
    		<value>/root/software/hadoop-2.7.7/journaldata</value>
    	</property>
    	<!-- 开启NameNode失败自动切换 -->
    	<property>
    		<name>dfs.ha.automatic-failover.enabled</name>
    		<value>true</value>
    	</property>
    	<!-- 配置失败自动切换实现方式 -->
    	<property>
    		<name>dfs.client.failover.proxy.provider.ns1</name>
    		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    	</property>
    	<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
    	<property>
    		<name>dfs.ha.fencing.methods</name>
    		<value>
    		sshfence
    		shell(/bin/true)
    		</value>
    	</property>
    	<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
    	<property>
    		<name>dfs.ha.fencing.ssh.private-key-files</name>
    		<value>/root/.ssh/id_rsa</value>
    	</property>
    	<!-- 配置sshfence隔离机制超时时间 -->
    	<property>
    		<name>dfs.ha.fencing.ssh.connect-timeout</name>
    		<value>30000</value>
    	</property>
    </configuration>
    

    配置yarn-site.xml

    <configuration>
    	<!-- 开启RM高可用 -->
    	<property>
    		<name>yarn.resourcemanager.ha.enabled</name>
    		<value>true</value>
    	</property>
    	<!-- 指定RM的cluster id -->
    	<property>
    		<name>yarn.resourcemanager.cluster-id</name>
    		<value>yrc</value>
    	</property>
    	<!-- 指定RM的名字 -->
    	<property>
    		<name>yarn.resourcemanager.ha.rm-ids</name>
    		<value>rm1,rm2</value>
    	</property>
    	<!-- 分别指定RM的地址 -->
    	<property>
    		<name>yarn.resourcemanager.hostname.rm1</name>
    		<value>hadoop-01</value>
    	</property>
    	<property>
    		<name>yarn.resourcemanager.hostname.rm2</name>
    		<value>hadoop-02</value>
    	</property>
    	<!-- 指定zk集群地址 -->
    	<property>
    		<name>yarn.resourcemanager.zk-address</name>
    		<value>hadoop-01:2181,hadoop-02:2181,hadoop-03:2181</value>
    	</property>
    	<property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    	</property>
    </configuration>
    

    修改mapred-site.xml(该文件不存在,需要手动创建),cp mapred-site.xml.template mapred-site.xml

    <configuration>
            <!-- 采用yarn作为mapreduce的资源调度框架 -->
            <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
    </configuration>
    

    配置slaves

    hadoop-01
    hadoop-02
    hadoop-03
    

    编辑yarn-env.sh

    在这里插入图片描述

    配置环境变量

    export JAVA_HOME=/root/software/jdk1.8.0_251
    export PATH=$PATH:$JAVA_HOME/bin
    
    export HADOOP_HOME=/root/software/hadoop-2.7.7
    export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
    
    export ZOOKEEPER_HOME=/root/software/zookeeper-3.4.8
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    

    分发文件

    # 在hadoop-01上进行
    scp -r /root/software/hadoop-2.7.7 root@hadoop-02:/root/software
    scp -r /root/software/hadoop-2.7.7 root@hadoop-03:/root/software
    
    scp -r /etc/profile root@hadoop-02:/etc
    scp -r /etc/profile root@hadoop-03:/etc
    

    启动hadoop

    启动journalnode,三台机器都要这一步操作(仅第一次启动hadoop时,需要这一步操作,之后不再需要手动启动journalnode)

    hadoop-daemon.sh start journalnode
    

    在hadoop-01上执行格式化操作,格式化namenode和zkfc

    hdfs namenode -format
    hdfs zkfc -formatZK
    

    namenode主从信息同步,在hadoop-02节点上执行同步命令

    hdfs namenode -bootstrapStandby
    

    启动

    #hadoop-01
    start-all.sh
    hadoop-daemon.sh start zkfc
    
    #hadoop-02
    yarn-daemon.sh start resourcemanager
    hadoop-daemon.sh start zkfc
    

    停止

    #hadoop-01
    stop-all.sh
    hadoop-daemon.sh stop zkfc
    
    #hadoop-02
    yarn-daemon.sh stop resourcemanager
    hadoop-daemon.sh stop zkfc
    

    查看进程

    [root@hadoop-01 ~]# jps
    3619 ResourceManager
    3734 NodeManager
    2599 NameNode
    3351 JournalNode
    3511 DFSZKFailoverController
    2696 DataNode
    3788 Jps
    2909 QuorumPeerMain
    
    [root@hadoop-02 ~]# jps
    2705 QuorumPeerMain
    2499 NameNode
    3207 Jps
    3065 NodeManager
    2890 JournalNode
    2557 DataNode
    2975 DFSZKFailoverController
    
    [root@hadoop-03 ~]# jps
    2496 DataNode
    2753 JournalNode
    2599 QuorumPeerMain
    2986 Jps
    2844 NodeManager
    

    验证

    登录主节点查看
    在这里插入图片描述

    登录备用主节点查看
    在这里插入图片描述
    kill 掉主节点的 namenode 进程, 检验hadoop-02是否会自动切换到namenode

    # jps查看hadoop-01的namenode进程id,然后kill
    [root@hadoop-01 ~]# jps
    3619 ResourceManager
    3734 NodeManager
    2599 NameNode
    3351 JournalNode
    3511 DFSZKFailoverController
    4119 Jps
    2696 DataNode
    2909 QuorumPeerMain
    [root@hadoop-01 ~]# kill 2599
    

    再一次登录192.168.200.202:50070进行查看
    在这里插入图片描述
    到此,hadoop高可用集群搭建完毕

    展开全文
  • Hadoop高可用集群搭建及测试

    千次阅读 2020-06-18 00:04:39
    ** Hadoop高可用集群搭建(遇到的错误)及测试 ** 本文主要介绍的是hadoop高可用集群搭建步骤,个人觉得还挺详细得哈哈哈哈哈哈还附有截图,希望可以给有需要的童鞋一点帮助。然后文章的最后也列举了本人在安装...

    **

    Hadoop高可用集群搭建(遇到的错误)及测试

    **
    本文主要介绍的是hadoop的高可用集群搭建步骤,个人觉得还挺详细得哈哈哈哈哈哈还附有截图,希望可以给有需要的童鞋一点帮助。然后文章的最后也列举了本人在安装过程中所遇到的困难以及解决办法,希望可以给正在为错误焦头烂额的你一点点渺茫的希望哈哈哈哈哈~
    **

    一、前期准备

    **

    1、 首先安装VMware 虚拟机,先配置好一台虚拟机的公共配置,然后其余的克隆出来即可(我用的是4台克隆的虚拟机),Linux环境要搭好,每台虚拟机的IP地址要和对应的虚拟机对应。 !!!!最重要的是每台虚拟机的防火墙一定都要关了!!!!(如果不关闭防火墙后面搭建集群的过程中真的会有很多错误!)
    关闭防火墙service iptables stop
    查看防火墙状态service iptables status(下图为关闭防火墙时图片)
    在这里插入图片描述
    2、如果觉得在VMware中跑四台机子,可能会很麻烦,要来回切换在Windows系统与Linux之间。这个时候就可以下载一个软件:Xshell 5 链接:https://pan.baidu.com/s/14iO-wsRXt8AxOpmuj4qR2A
    提取码:npqj
    在这里插入图片描述
    这个软件真的很方便,不仅仅不用在Windows和Linux中来回切换,还可以直接把Windows中的文件传输到Linux中:
    在这里插入图片描述
    这个时候还要下载一个软件:Xftp 4
    链接:https://pan.baidu.com/s/14XSkeJ9fU30_otAAlbMfGw
    提取码:mo3e
    在这里插入图片描述
    3、你还要确保你的四台虚拟机之间可以ping的通,因为后面要互相之间传输文件!!!(下图举例为node02上ping node01正确的情况)
    在这里插入图片描述
    **

    二、搭建过程(具体步骤)

    **
    在这里插入图片描述

    1、我是在4台虚拟机上跑Hadoop集群,主机名以及IP分别为:
    node01 192.168..31
    node02 192.168..32
    node03 192.168..33
    node04 192.168..34
    2、安装jdk(在node01上安装,已经在第一台机子上安装过的就不用了),我安装的版本是:jdk-7u67-linux-x64
    链接:https://pan.baidu.com/s/1WU28omtvsHH_LCHk1HxuPg
    提取码:zqlr
    下载到桌面上后,用Xftp 4传输到Linux中,接着安装:
    **①
    rpm安装命令
    rpm -i jdk-7u67-linux-x64.rpm
    **②
    查看java路径
    whereis java
    ③****添加环境变量vi + /etc/profile
    在文件最后加上(我的):

    export JAVA_HOME=/usr/bin/java
    export PATH=$PATH:$JAVA_HOME/bin
    

    加载一下刚才更改过的profile文件source /etc/profile(只要更改profile中的内容就要重新加载一下,不然是没有用的!)
    如果出现 -bash: jps: command not found
    改:

    export JAVA_HOME=/usr/bin/java
    export PATH=$PATH:/usr/java/jdk1.7.0_67/bin
    

    此时已经安装好jdk,这个时候你就可以键入:jps(如图则安装成功!)
    在这里插入图片描述
    ⑤****分发jdk到node02、03、04:

    scp jdk-7u67-linux-x64.rpm node02:`pwd`
    scp jdk-7u67-linux-x64.rpm node03:`pwd`
    scp jdk-7u67-linux-x64.rpm node04:`pwd`
    

    ⑥****分别在node02、03、04上执行rpm安装命令

    rpm -i jdk-7u67-linux-x64.rpm
    

    并在Xshell的全部会话栏里一起ll,看jdk是否发送成功。
    在这里插入图片描述
    ⑦****在node01上cd /etc,在此目录下把profile文件分发到node02、03、04上,键入命令:

    scp profile node02:`pwd`
    scp profile node03:`pwd`
    scp profile node04:`pwd`
    

    在这里插入图片描述

    利用Xshell全部会话栏source /etc/profile
    利用Xshell全部会话栏,jps,看02、03、04这三台机子的jdk是否装好。
    在这里插入图片描述
    jdk安装好的 话,会出现下图:
    在这里插入图片描述
    ⑨****同步所有服务器的时间
    在全部会话栏里键入:date (查看机子当前的时间)
    比较四台机子的时间,如果出入很大的话,就要安装时间同步器。因为时间不能差太大,否则集群启动后某些进程跑不起来。
    yum进行时间同步器的安装yum -y install ntp
    执行同步命令ntpdate time1.aliyun.com (和阿里云服务器时间同步)

    3、装机之前的配置文件检查:
    ①****查看主机名是否和当前虚拟机一致,以及网络状态cat /etc/sysconfig/network
    在这里插入图片描述
    ②****查看IP映射是否正确cat /etc/hosts
    (查看主机名是否和IP相对应)
    在这里插入图片描述
    ③****关闭SELINUX服务cat /etc/sysconfig/selinux
    看是否SELINUX=disabled,若不是则修改。
    在这里插入图片描述
    ④****查看防火墙是否关闭service iptables status
    (下图显示已关闭,若没有关闭则使用关闭防火墙命令:service iptables stop
    在这里插入图片描述
    4、免秘钥设置此举的目的就是为了以后node01可以不用密码就可以给其他三台虚拟机发送文件等)
    在家目录下 :ll –a
    看下有无.ssh文件,如果没有就使用命令:ssh localhost(生成秘钥)(ssh localhost后要exit)。
    在这里插入图片描述
    如果有的话就打开.ssh文件:cd .ssh
    并且ll一下
    在这里插入图片描述
    ②****把node01的公钥发给其他三台机子

       scp id_dsa.pub node02:`pwd`/node01.pub
       scp id_dsa.pub node03:`pwd`/node01.pub
       scp id_dsa.pub node04:`pwd`/node01.pub
    

    此时一定要在.ssh文件下键入此命令,不然报错显示找不到此文件
    在这里插入图片描述
    然后分别在node02、node03、node04上打开.ssh文件,看是否有node01.pub
    在这里插入图片描述
    如果有node01.pub,那就分别在node02、node03、node04上把node01.pub追加到authorized_keys,键入命令:cat node01.pub >> authorized_keys
    (此命令分别在node02、node03、node04上键入!还有就是要在.ssh的目录下执行此命令,不然会报错显示找不到此文件)
    在这里插入图片描述
    当④完成后,就在node01上分别键入命令:ssh node02ssh node03,ssh node04
    看是否能免密钥登录(每次ssh都不要忘了exit!!!
    在这里插入图片描述
    在这里插入图片描述
    此时node01是可以免秘钥登录node02、node03、node04的,但是还需要node02是可以免秘钥登录node01,这时需要操作:
    在node02上:
    首先键入命令:ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa(以dsa的方式生成秘钥,并把秘钥放在家目录下的.ssh中)
    然后键入命令:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys(把id_dsa.pub 追加到authorized_keys中,这样下次登录就不用了密码了,即免秘钥登录
    接着键入命令:ssh localhost(验证一下是否可以不用密码直接登录!记得exit!!)
    在这里插入图片描述
    然后在node02上把id_dsa.pub分发到node01上,并把node02的公钥(id_dsa.pub)重命名为node02.pub,以免和node01的公钥有冲突,键入命令:
    scp id_dsa.pub node01:pwd/node02.pub
    在这里插入图片描述
    接着在node01的.ssh目录下键入命令:cat node02.pub >> authorized_keys
    在这里插入图片描述
    最后在node02上键入命令:ssh node01 验证一下可否免密钥登录(记得exit!!!)
    在这里插入图片描述
    此时,node01和node02是可以相互免秘钥登录的。
    5修改node03中一些配置信息
    首先回到家目录下,键入命令:cd /opt/zqq/hadoop-2.6.5/etc/hadoop
    然后键入:ll
    在这里插入图片描述
    此时需要修改hdfs-site.xml中的配置,键入命令:vi hdfs-site.xml
    首先去掉snn的配置

    <property>
                  <name>dfs.namenode.secondary.http-address</name>
              	  <value>node01:50090</value>
     </property>
    

    增加以下property

    <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
    
    <property>
      <name>dfs.nameservices</name>
      <value>mycluster</value>
    </property>
    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>nn1,nn2</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn1</name>
      <value>node01:8020</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn2</name>
      <value>node02:8020</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>node01:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>node02:50070</value>
    </property>
    
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
    </property>
    
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/var/zqq/hadoop/ha/jn</value>
    </property>
    
    
    <property>
      <name>dfs.client.failover.proxy.provider.mycluster</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_dsa</value>
    </property>
    
    <property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
     </property>
    

    修改core-site.xml中的配置,键入命令:vi core-site.xml
    configuration中全部修改为:

     <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
     </property>
    
    <property>
       <name>ha.zookeeper.quorum</name>
       <value>node02:2181,node03:2181,node04:2181</value>
    </property>
    

    ④****修改slaves中的配置vi slaves
    改为:node02
    node03
    node04
    在这里插入图片描述
    6、安装hadoop
    ①****首先键入命令cd /opt
    在这里插入图片描述
    将其下的zqq目录分发到node02、03、04上:

    scp –r zqq/ node02:`pwd`
    scp –r zqq/ node03:`pwd`
    scp –r zqq/ node04:`pwd`
    
    

    例如:
    在这里插入图片描述
    此时node01发送文件给其他三台虚拟机是不用输入密码的,因为前面已经免秘钥了
    ②****回到家目录下,键入命令:cd /opt/zqq/hadoop-2.6.5/etc/hadoop
    将hdfs-site.xml和core-site.xml分发到node02、03、04

        scp hdfs-site.xml core-site.xml node02:`pwd`
    	scp hdfs-site.xml core-site.xml node03:`pwd`
    	scp hdfs-site.xml core-site.xml node04:`pwd`
    

    例如:
    在这里插入图片描述
    7、安装zookeeper
    此时,需要在node02、node03、node04上安装zookeeper。
    我安装的版本是zookeeper-3.4.6
    链接:https://pan.baidu.com/s/1HNmdVyfzVmMUlrxgMYDUcw
    提取码:xze8
    你可以下载到桌面上然后利用Xftp 4传输到Linux中的指定目录下。
    在node02中存放zookeeper的目录下执行以下命令:
    ①****解压安装zookeeper
    键入命令:tar xf zookeeper-3.4.6.tar.gz -C /opt/zqq
    在这里插入图片描述
    ②****修改zookeeper的配置文件
    首先打开conf,键入命令:cd /opt/zqq/zookeeper-3.4.6/conf
    然后给zoo_sample.cfg改名为zoo.cfg并保存到conf中,键入命令:cp zoo_sample.cfg zoo.cfg
    下图是已经改好过的:
    在这里插入图片描述
    ③****修改zoo.cfg,输入命令:vi zoo.cfg
    修改数据路径:改dataDir=/var/zqq/zk
    并在末尾追加
    server.1=node02:2888:3888
    server.2=node03:2888:3888
    server.3=node04:2888:3888
    其中2888主从通信端口,3888是当主挂断后进行选举机制的端
    在这里插入图片描述
    把zookeeper分发给node03、node04,此时要回到你存放zookeeper的目录下,分别输入命令:

    scp -r zookeeper-3.4.6/ node03:`pwd`
    scp -r zookeeper-3.4.6/ node04:`pwd`
    

    在这里插入图片描述
    在这里插入图片描述
    并用ll /opt/zqq分别在node03、node04上检查下看分发成功没。
    例如:
    在这里插入图片描述
    在步骤③种我们写了server.1是node02、server.2是node03、server.3是node04,此时我们就要标识到底谁是server.1、server.2、server.3,这是我们就要分别在node02、node03、node04中给每台机子配置其编号:
    首先给每台机子(node02、node03、node04)创建刚刚配置文件里的路径,输入命令:mkdir -p /var/zqq/zk
    node02来说,执行:

    echo 1 > /var/zqq/zk/myid
    cat /var/zqq/zk/myid
    

    node03来说,执行:

    echo 2 > /var/zqq/zk/myid
    cat /var/zqq/zk/myid
    

    node04来说,执行:

    echo 3 > /var/zqq/zk/myid
    cat /var/zqq/zk/myid
    

    node02中修改配置问题,输入命令:vi /etc/profile
    配置结果如下图,把ZOOKEEPER_HOME改成了绝对路径(你可以在没进到profile文件前,先确定zookeeper的路径,并用pwd显示路径,然后复制到profile文件中,如果没有的话就增加这一行),并且也要在PATH后追加zookeeper的bin目录。
    在这里插入图片描述
    ⑦****然后再把/etc/profile分发到其他node03、node04

    scp /etc/profile node03:/etc
    scp /etc/profile node04:/etc
    

    例如:
    例如
    node02、03、04里执行:source /etc/profie 这步千万别忘,加载一下修改后的profile文件,否则修改是没有用的。
    验证source这句是否完成,分别在node02、node03、node04输入zkCli.s,按Tab可以把名字补全zkCli.sh,就安装成功!
    在这里插入图片描述
    8启动zookeeper
    全部会话zkServer.sh start
    全部会话后你会发现node01上显示:-bash: zkServer.sh: command not found 这是因为我们没有在node01上安装zookeeper,而是在另外三台机子上。
    如果启动不起来,请把用命令:vi + /etc/profile把profile中的JAVA_HOME改成绝对路径,即你jdk所存放的路径,查看路径同⑥步骤类似,修改后记得source /etc/profile ,加载一下
    接着同样全部会话,用命令:zkServer.sh status查看每个zookeeper节点的状态(就算node01上没有安装zookeeper,我们使用此命令也还是可以的,不会有什么关系的),如果正确启动zookeeper后,就会发现node02、node03、node04中有两个是follower,一个是leader,如下图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    此时你已经成功启动了zookeeper,说明你的安装以及配置很成功!
    如果!不是如图所示,那就回头检查配置是否正确。
    9启动journalnode
    (Why启动journalnode?为了使两台namenode间完成数据同步)
    node01、node02、node03三台机子上分别把journalnode启动起来,使用命令:hadoop-daemon.sh start journalnode
    用jps检查下进程启起来了没(jps用来显示当前有哪些进程启动了)
    在这里插入图片描述
    在这里插入图片描述
    node02上jps一下发现多了一个1120 QuorumPeerMain,这是因为我们node02上启动了zookeeper。
    node03结果同node02。
    10、格式化任一namenode
    node01上,格式化namenode(因为我们的namenode是在node01和node02这两台虚拟机上面),执行命令:hdfs namenode –format 另一台namenode(即node02)不用执行,否则clusterID变了,找不到集群了。出现下图这种情况,就是格式化成功了。
    在这里插入图片描述
    11、启动namenode
    启动刚刚格式化的那台namenode,即node01,执行命令:hadoop-daemon.sh start namenode
    然后用命令:jps(如下图)
    在这里插入图片描述
    12、给另一namenode同步数据
    那另一台namenode怎么办,什么都不做吗?
    node01上,我们要给另一台namenode(node01)同步一下数据,用以下命令:hdfs namenode -bootstrapStandby
    在这里插入图片描述
    13、格式化zkfc
    格式化zkfc,使用命令:hdfs zkfc -formatZK
    出现下图这种,就是格式化成功!
    在这里插入图片描述
    node02上执行:zkCli.sh打开zookeeper客户端看hadoop-ha是否打开。
    执行打开客户端命令时,可以不用再node02上执行,我们可以双击node02的标签,就会出来,一个新的node02界面,在这个新的界面执行,结果如下图。

    在这里插入图片描述
    在这里插入图片描述
    14、启动hdfs集群
    node01上启动hdfs集群。执行命令:start-dfs.sh
    注意:如果那个节点没起来到hadoop目录下去看那个node的日志文件log
    在这里插入图片描述
    然后,在全部会话里执行命令:jps 看一下都起来些什么进程
    node01上:
    在这里插入图片描述
    node02上:
    在这里插入图片描述
    node03上:
    在这里插入图片描述
    node04上:
    在这里插入图片描述
    总之,node01和node02上是要有namenode的,反正对照一下,node02、node03、node04上是开启了zookeeper,所以进程要多一点的。然后journalnode我们是在01、02、03上开启的,所以04要少一个journalnode!所以不要惊慌!
    用浏览器访问node01:50070和node02:50070
    在这里插入图片描述
    在这里插入图片描述
    注意上面两张图中的标注,必须是一个是active,另一个是standby!!!除此之外都是错误的,需要检查是否是配置问题或者其他问题。
    如果到此为止都是成功的话,那么我们的hadoop高可用模式就已经搭建了90%了,距离成功只有一步之遥了!
    15、关闭集群
    到这里,我们其实已经快成功了,这时我们需要关闭集群,进行下一步操作。关闭集群命令:stop-dfs.sh 关闭zookeeper命令:zkServer.sh stop
    这两个命令都执行后,你可以执行:jps 查看还有什么进程没有关闭,如果还有进程没有关闭的(除了jps),可以简单粗暴执行命令:stop-all.sh(不建议!)正常情况下是执行对应节点的关闭命令。例如journalnode节点的启动命令是:hadoop-daemon.sh start journalnode 则关闭命令就是:hadoop-daemon.sh stop journalnode
    注意:你下一次启动hdfs集群的时候还需要用hadoop-daemon.sh start journalnode命令启动journalnode吗?不需要!只要start-dfs.sh就可以了。我们之前启动journalnode是为了同步两个namenode之间的信息。
    16、为MapReduce做准备
    node01
    上,到hadoop文件下修改配置,执行命令:cd /opt/zqq/hadoop-2.6.5/etc/hadoop
    此时你在hadoop的路径下:ll
    在这里插入图片描述
    把mapred-site.xml.template留个备份,并且改下名字,执行命令:cp mapred-site.xml.template mapred-site.xml
    mapred-site.xml里添加如下property,执行命令:vi mapred-site.xml

        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    	</property>
    

    添加后保存并退出!(按下Esc加上“:wq”)
    yarn-site.xml里添加如下property,执行命令:vi 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>node05</value>
     </property>
     <property>
       <name>yarn.resourcemanager.hostname.rm2</name>
       <value>node06</value>
     </property>
     <property>
       <name>yarn.resourcemanager.zk-address</name>
       <value>node04:2181,node05:2181,node06:2181</value>
     </property>
    

    添加后,保存并退出(按下Esc加上“:wq”
    mapred-site.xml和yarn-site.xml 分发到node02、03、04,在node01中分别执行命令:

    scp mapred-site.xml yarn-site.xml node04:`pwd`
    scp mapred-site.xml yarn-site.xml node05:`pwd`
    scp mapred-site.xml yarn-site.xml node06:`pwd`
    

    前提是要在hadoop的路径下,否则找不到.xml文件,就会有错误!

    ③****由于node03和node04都是resourcemanager,所以它俩应该相互免密钥
    node03上免密钥登录node04:
    首先执行命令:cd .ssh 下面要在.ssh路径下执行其他命令。
    node03的.ssh目录下生成密钥,执行命令:ssh-keygen -t dsa -P '' -f ./id_dsa
    并追加到自己authorized_keys,执行命令:cat id_dsa.pub >> authorized_keys
    然后用命令:ssh localhost验证看是否需要密码,别忘了exit
    node03 的公钥分发到node04,执行命令:scp id_dsa.pub node04:pwd/node03.pub
    在node04的.ssh目录下,追加node03.pub,执行命令:cat node03.pub >> authorized_keys
    node03上执行命令:ssh node04,看是否免密钥,如果不需要密码则免秘钥成功!
    相同操作,node04免秘钥登录node03。最后要互相验证,并且不要忘记exit!
    16、启动
    启动zookeeper,全部会话:zkServer.sh start
    node01上启动hdfs:start-dfs.sh
    node01上启动yarn:start-yarn.sh
    node0304上分别启动resourcemanager,执行命令:yarn-daemon.sh start resourcemanager
    全部会话:jps,看进程全不全!
    node01为:
    在这里插入图片描述
    node02为:
    在这里插入图片描述
    node03为:
    在这里插入图片描述
    node04为:
    在这里插入图片描述
    对应着看,自己有哪些节点没有开起来,没有的话,就去检查相关配置或者去百度查找解决办法。
    如果都成功的话就在浏览器上访问node05:8088,查看resourcemanager管理的内容
    在这里插入图片描述
    至此,hadoop的高可用集群已经搭建完成!!!!

    **

    三、测试

    **
    集群搭建完成后,我们来跑一个wordcount试试!
    在node03上:
    cd /opt/ldy/hadoop-2.6.5/share/hadoop/mapreduce
    ②在hdfs里建立输入目录和输出目录
    命令为:hdfs dfs -mkdir -p /data/in
    命令为:hdfs dfs -mkdir -p /data/out
    ③将要统计数据的文件上传到输入目录并查看
    命令为:hdfs dfs -put ~/500miles.txt /data/input
    命令为:hdfs dfs -ls /data/input
    ④运行wordcount(注意:此时的/data/out必须是空目录
    命令为:hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result
    命令④结束后,就会出现下图所示,一定要出现图中的红圈圈才可以!
    在这里插入图片描述
    查看运行结果
    命令为:hdfs dfs -ls /data/out/result
    命令为:hdfs dfs -cat /data/out/result/part-r-00000
    结果如图:在这里插入图片描述

    然后切换到浏览器上,刷新刚才的页面:
    在这里插入图片描述
    如上图,即可!
    测试完成!
    Hadoop高可用集群搭建完成!
    能做到这一步的人可都是小天才呢!ヾ(◍°∇°◍)ノ゙

    最后!不要忘了关闭集群以及zookeeper哦!

    四、报错以及解决办法

    1、格式化namenode错误:
    不能格式化namenode,下图是去日志里找到的错误:
    在这里插入图片描述
    百度了好久,最开始是要求关闭防火墙,就按照一般的关闭防火墙的命令
    关闭后发现还是不能正确的格式化namenode,最后百度到要求在
    root用户里去关闭防火墙,然后格式化成功。
    具体网址如下:http://www.voidcn.com/article/p-qtkiyjco-tt.html
    在这里插入图片描述
    2、虚拟机繁忙问题(大多是不正当操作引起的!)
    在这里插入图片描述
    解决:①如果出现这种情况,你是无法通过任务管理器关闭的!这个时候你就要重启你的计算机!
    ②重启后先不要开启VMware,你可以到你刚才无法打开的那台虚拟机的文件下,删除.lck文件,再重启即可!
    在这里插入图片描述
    3、启动第二个namenode遇到的问题
    node01节点已经采用hadoop-daemon.sh start namenode启动了一个namenode节点
    这时候如果你还用hadoop-daemon.sh start namenode去02节点启动namenode是起不来的
    必须现在02节点bin目录下执行:sh hdfs namenode -bootstrapStandby

    其实没那么多错误,大部分的错误是因为自己的不细心而产生的,所以大家配置的时候一定要**细心!细心!**不然会被错误折磨到大半夜的!!!
    加油!奥利给!

    展开全文
  • 一、进去hadoop安装目录 [root@vwmaster hadoop]# pwd /opt/bigdata/hadoop/hadoop260/etc/hadoop 二、继上步,编辑hadoop-env.sh [root@vwmaster hadoop]# vi hadoop-env.sh export JAVA_HOME=/opt/bigdata/java/...

    一、进去hadoop安装目录

    [root@vwmaster hadoop]# pwd
    /opt/bigdata/hadoop/hadoop260/etc/hadoop
    

    二、继上步,编辑hadoop-env.sh

    [root@vwmaster hadoop]# vi hadoop-env.sh
    export JAVA_HOME=/opt/bigdata/java/jdk180
    export HADOOP_PID_DIR=/opt/bigdata/hadoop/hadoop260/data/pids
    

    三、编辑core-site.xml

    [root@vwmaster hadoop]# vi core-site.xml
    <configuration>
      <!--设定集群访问路径:kbcluster-->
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://kbcluster</value>
      </property>
      <!--设定临时目录-->
      <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/bigdata/hadoop/hadoop260/data/tmp</value>
      </property>
      <!--设定zookeeper集群目录-->
      <property>
        <name>ha.zookeeper.quorum</name>
        <value>vwmaster:2181,vwslave01:2181,vwslave02:2181,vwslave03:2181</value>
      </property>
    </configuration>
    

    四、配置 hdfs-site.xml

    <configuration>
      <!--设定文件块备份数-->
      <property>
        <name>dfs.replication</name>
        <value>2</value>
      </property>
      <!--设定集群服务名称:kbcluster-->
      <property>
        <name>dfs.nameservices</name>
        <value>kbcluster</value>
      </property>
      <!---设定集群kbcluster的namenode自定义名称列表--->
      <property>
        <name>dfs.ha.namenodes.kbcluster</name>
        <value>nn1,nn2</value>
      </property>
      <!---分别设定所有namenode名称列表的rpc访问地址--->
      <property>
        <name>dfs.namenode.rpc-address.kbcluster.nn1</name>
        <value>vwmaster:9000</value>
      </property>
      <property>
        <name>dfs.namenode.rpc-address.kbcluster.nn2</name>
        <value>vwslave01:9000</value>
      </property>
      <!---分别设定所有namenode名称列表的http访问地址--->
      <property>
        <name>dfs.namenode.http-address.kbcluster.nn1</name>
        <value>vwmaster:50070</value>
      </property>
      <property>
        <name>dfs.namenode.http-address.kbcluster.nn2</name>
        <value>vwslave01:50070</value>
      </property>
      <!---设定所有节点的共享编辑日志journal地址列表--->
      <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://vwmaster:8485;vwslave01:8485;vwslave02:8485;vwslave03:8485/kbcluster</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>
      <!---设定journal节点存储目录--->
      <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/bigdata/hadoop/hadoop260/data/journalnode</value>
      </property>
      <!---关闭权限检查--->
      <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
      </property>
      <!---启动client访问失败动态代理--->
      <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
      </property>
      <!---设置client访问失败自动切换代理--->
      <property>
        <name>dfs.client.failover.proxy.provider.kbcluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
      </property>
    </configuration>
    

    五、配置 yarn-site.xml

    <configuration>
      <!---设置nodemanager附属服务--->
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
      </property>
      <!---启用resourcemanager的高可用(ha)集群--->
      <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
      </property>
      <!---启用resourcemanager的集群标识--->
      <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>kbcluster-yarn</value>
      </property>
      <!---启用resourcemanager(ha)集群的resoucemanager名称列表--->
      <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
      </property>
      <!---分别设置resourcemanager(ha)集群的resoucemanager名称的hostname--->
      <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>vwmaster</value>
      </property>
      <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>vwslave01</value>
      </property>
      <!---设置resourcemanager(ha)集群的zookeepr集群地址列表--->
      <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>vwmaster:2181,vwslave01:2181,vwslave02:2181,vwslave03:2181</value>
      </property>
      <!---启用resourcemanager(ha)集群可恢复功能--->
      <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
      </property>
      <!---指定resourcemanager(ha)集群的状态信息存储在zookeepr集群--->
      <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
      </property>
    </configuration>
    

    六、初始化hadoop集群

    #--------------- 分别启动 所有节点上的journal服务 ------------------#
    [root@vwmaster sbin]# hadoop-daemon.sh start journalnode
    [root@vwslave01 sbin]# hadoop-daemon.sh start journalnode
    [root@vwslave02 sbin]# hadoop-daemon.sh start journalnode
    [root@vwslave03 sbin]# hadoop-daemon.sh start journalnode
    #--------------- nn1上格式化 ------------------#
    [root@vwmaster sbin]# hdfs namenode -format
    [root@vwmaster sbin]# hadoop-daemon.sh start namenode
    #--------------- nn2上同步nn1上的元数据信息 ------------------#
    [root@vwslave01 sbin]# hdfs namenode -bootstrapStandby
    [root@vwslave01 sbin]# hadoop-daemon.sh start namenode #启动后通过网页测试
    

    七、启动hadoop集群

    #--------------- nn1上启动hadoop ha集群 ------------------#
    [root@vwmaster sbin]# start-all.sh
    #--------------- 单独启动nn2上的resourcemanager ------------------#
    [root@vwslave01 sbin]# yarn-daemon.sh start resourcemanager
    

    八、切记,关闭虚拟机时一定要把后台启动的程序全部关闭
    关闭hadoop集群

    [root@vwmaster sbin]# stop-all.sh
    
    [root@vwslave01 sbin]# yarn-daemon.sh stop resourcemanager
    

    九、检查服务列表

    [root@vwmaster sbin]# jps
    22065 NameNode		//主机已启动
    22545 DFSZKFailoverController		//启动hdfs和yarn成功,如不成功,可以单启:hdfs zkfc -formatZK
    22753 NodeManager		//
    22371 JournalNode		//设定journal节点存储目录,成功
    22172 DataNode		//从节点启动成功
    21917 QuorumPeerMain		//zookeeper启动成功
    22639 ResourceManager	//资源管理启动成功
    
    展开全文
  • Hadoop高可用集群搭建

    2020-12-28 11:34:48
    2.HDFS高可用集群规划,请先搭建好一个Hadoop完全分布式集群(可以未进行namenode格式化)和ZooKeeper完全分布式环境已经安装完成。 Hadoop102 Hadoop103 Hadoop104 NameNode NameNode ResourceManager ...
  • hadoop高可用集群搭建及参数优化hadoop高可用集群搭建及参数优化hadoop高可用集群搭建及参数优化
  • -- 开启RM高可用 --> <name>yarn.resourcemanager.ha.enabled <value>true <!-- 指定RM的cluster id --> <name>yarn.resourcemanager.cluster-id <value>yrc <!-- 指定RM的名字 --> <name>yarn.resourcemanager...
  • hadoop2.6集群搭建手册,搭建的详细步骤,各种参数配置,配置文件配置,并对搭建的平台进行验证。
  • [root@hadoop03 bin]# hdfs zkfc -formatZK Exception in thread "main" org.apache.hadoop.HadoopIllegalArgumentException: Could not get the namenode ID of this node. You may run zkfc on t...
  • 一,搭建centos6.10集群 1,软件准备 centos6.10下载:https://mirrors.aliyun.com/centos/6/isos/x86_64/CentOS-6.10-x86_64-bin-DVD1.iso(阿里云镜像站) vm:自行百度 2,准备Linux环境 2.1,点击VMware快捷方式...
  • 一文搞定Hadoop高可用集群搭建

    千次阅读 2020-05-08 16:43:24
    Hadoop高可用集群搭建1. 前期准备和规划1.1 前期准备1.2 集群规划2.安装步骤2.1 .安装配置zooekeeper集群(在hadoop05上)2.1.1解压2.1.2.修改配置2.1.3将配置好的zookeeper拷贝到其他节点3.安装配置hadoop集群(在...
  • hadoop真分布式集群搭建高可用性) 搭建过程: 1.准备三台虚拟机 第一台:作为NameNode 负责文件元数据的操作,全权管理数据库的复制 第二台:作为DataNode 负责处理文件内容的读写请求,...
  • hadoop集群HA高可用搭建 ❀❀❀❀❀搭建前的简单介绍❀❀❀❀❀ 主机配置环境如下表: Hadoop HA原理:    在一典型的HA集群中,每个NameNode是一台独立的服务器。在任一时刻,只有一个NameNode处于active状态,另...
  • HADOOP高可用集群搭建,实现两个namenode之间active和standby的转换 一,重点配置hadoop下的配置文件 core-site.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href=...
  • Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多,所以它的实现也更加复杂,故下面先进行讲解...
  • hadoop高可用集群搭建配置HDFS-HA集群启动HDFS-HA集群 配置HDFS-HA集群 保证hadoop集群搭建成功。hadoop集群搭建 保证zookeeper时区同步和集群搭建成功。zookeeper的安装配置和zookeeper集群的时区同步配置 以三台...
  • 最近研究了下公司的hadoop集群并模仿搭建了一个在本地测试使用的hadoop集群。本文介绍下详细的搭建过程... 注意,修改之前建议使用 root 管理员权限登陆,这样会避免特别多问题,等集群搭建好之后在用普通用户登...
  • Hadoop完全分布式的安装配置中,可以配置多个Namenode(两个)形成互为热备的状态,解决Namenode单节点故障的问题两个Namenode直接通过JN集群来共享数据,基本原理和Zookeeper类似,处于Active状态的Namenode通过...
  • 集群节点分配Park01 Zookeeper NameNode (active)Resourcemanager (active) Park02Zookeeper NameNode (standby) Park03Zookeeper ResourceManager (standby) Park04DataNode NodeManager JournalNode Park05...
  • JournalNode jn集群: 用于active standby nn同步数据的, 本身由jn节点组成,至少3台 2n+1 保证高可用 zkfc: 监控nn的健康状态 向zk集群定期的发送心跳 让自己被选举上, 当被zk选举为active时,zkfc通过rpc协议...
  • “使用Ansible搭建分布式大数据基础环境”系列文章完整包含了如何使用Ansible这一分布式运维利器,来帮我们快速搭建Hadoop2/Spark2/Hive2/ZooKeeper3/Flink1.7/ElasticSearch5等一整套大数据解决方案。本篇是系列...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,777
精华内容 9,510
关键字:

hadoop高可用集群搭建