大数据与人工智能入门到放弃(04 回顾篇 hadoop高可用【HA】的搭建)

记:

最近公司任务比较多,所以小忙之中,在晚上抽出一丢丢时间来搭建Hadoop的高可用集群。

集群规划准备

此次搭建是在03篇中搭建好完全分布式的情况下进行修改。因为机器配置受限,但是为了能搭建出来高可用的集群效果。所以把主、备NameNode启动在节点为master,node1的机器上,master,node1,node2上都配置启动了JournalNodes进程(为了两个NameNode同步数据);zookeeper启动在master,node1,node2上。

此次Hadoop搭建高可用集群参考的是官方的文档(http://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html#Configuration_overview

修改配置文件(以主机master为例)

1)hdfs-site.xml的配置如下:


<configuration>
        <!-- 副本数 -->
        <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>
        <!-- 两台实现远程调用的namenode主机 -->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>master:8020</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>node1:8020</value>
        </property>
        <!-- 浏览器的访问主机和端口 -->
        <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>master:50070</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>node1:50070</value>
        </property>
        <!-- 启动journalNode服务的节点 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://master:8485;node1:8485;node2:8485/mycluster</value>
        </property>
        <!-- 代理类,确定哪个NameNode正在提供服务 -->
        <property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <!-- 选用ssh的方式,到active中的NameNode杀死进程 -->
        <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>/var/junxi/hadoop/ha/journalnode</value>
        </property>
        <!-- 开启故障自动切换功能 -->
         <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
</configuration>

2)修改core-site.xml

<configuration>
        <!-- mycluster是逻辑名称,它必须与hdfs-site.xml所配置的逻辑名称相同 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://mycluster</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/var/junxi/hadoop/ha</value>
        </property>

        <!-- 指定zookeeper的节点地址 -->
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>master:2181,node1:2181,node2:2181</value>
        </property>
</configuration>

将修改的这两个文件拷贝到主机node1和node2上,命令为:

#注意,以下命令是在路径为:/opt/xige/hadoop-2.7.5/etc/hadoop目录下执行的

scp core-site.xml hdfs-site.xml node1:`pwd`
scp core-site.xml hdfs-site.xml node2:`pwd`

Zookeeper配置

上传zookeeper的压缩包(zookeeper-3.4.12.tar.gz),解压到路径为/opt/xige目录下;

tar -zxf zookeeper-3.4.12.tar.gz -C /opt/xige

修改zookeeper的conf目录下的目录文件,将zoo_sample.cfg改名为zoo.cfg,并且进入zoo.cfg文件中进行文本编辑。

#修改一下dataDir,改成自己想存放的路径
dataDir=/var/junxi/zk
#配置zookeeper的服务节点,2888端口表示主从节点间的端口,3888是当发生主挂掉之后,它的选举机制采用的端口
server.1=master:2888:3888
server.2=node1:2888:3888
server.3=node2:2888:3888

配置好之后,把zookeeper分发给node1和node2。

scp -r zookeeper-3.4.12/ node1:`pwd`
scp -r zookeeper-3.4.12/ node2:`pwd`

分别在master,node1,node2创建刚刚在配置文件中设置的dataDir路径 mkdir -p /var/junxi/zk;创建完成之后,设置每台机器的myid,即可以理解为zookeeper的机器标识,master为1,node1为2,node2为三,以master为例子,命令如下:

echo 1 > /var/junxi/zk/myid

配置zookeeper环境变量,修改/etc/profile文件,第三行和第四行最后一个冒号开始部门就是新加入的内容,配置完要source一下这个文件,才会生效。

export JAVA_HOME=/usr/java/jdk1.8.0_191
export HADOOP_HOME=/opt/xige/hadoop-2.7.5
export ZOOKEEPER_HOME=/opt/xige/zookeeper-3.4.12
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

然后就是进行分发,分发到node1和node2机器上,命令:

scp -r /etc/profile node1:/etc/

scp -r /etc/profile node2:/etc/

在每台机器上输入zookeeper启动命令:zkServer.sh start。zookeeper启动完成之后;

第二步,为了解决两台namenode数据同步问题,启动journalnode,分别在每台机器上输入命令为:hadoop-daemon.sh start journalnode,可以通过jps验证一下是否启动服务成功。

第三步,选一台namenode进行格式化,这里我选择master,输入命令为:hdfs namenode -format。

第四步,要在另一台未格式化的机器上进行元数据同步,所以要在刚刚格式化的那台机器先启动namenode,命令为:hadoop-daemon.sh start namenode;之后在另外一台未格式化的namenode上执行以下命令即为(node1机器):hdfs namenode -bootstrapStandby。

第五步,在master上(启动了namenode的机器上)进行zookeeper的格式化,命令为: hdfs zkfc -formatZK;可以通过进入zookeeper客户端进去查看是否产生了hadoop-ha的目录(这个操作很简单,百度一下)。

第六步,在master节点输入:start-dfs.sh

到目前HA已经搭建完毕。最后,说一下启动顺序,先启动zookeeper,再启动journalnode,最后再启动文件系统,即命令顺序为:

zkServer.sh start    #每台机器上都需要输入这个启动命令

start-dfs.sh    只需要master输入就行

关闭的时候可以按照启动顺序的操作来关闭。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章