Hadoop+zookeeper集群部署

本文详细介绍了一位同事总结的Hadoop+zookeeper集群部署过程,包括服务器网络环境配置、SSH免密码登录、JDK和Hadoop安装配置、ZooKeeper安装配置及集群启动等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop+zookeeper集群部署

(本文是工作过程中,一位同事整理编写的,非常全面详细,在此对其表示由衷的感谢,同时也分享给大家,希望对有此需求的朋友能给予帮助)

一、集群服务器情况

IP

主机名

进程

192.168.0.202

hadoop-master

NameNode/ DataNode/ JournalNode/ QuorumPeerMain/

DFSZKFailoverController

192.168.0.203

hadoop-slave1

NameNode/ DataNode/ JournalNode/ QuorumPeerMain/

DFSZKFailoverController

192.168.0.205

hadoop-slave2

DataNode/ JournalNode/ QuorumPeerMain/

 

进程说明:

NameNode:Hadoop管理者进程,即master,负责管理HDFS文件系统

DataNode:Hadoop工作者进程,即slave,负责文件存储读写

JournalNode:负责多个(目前最多为2个)NameNode之间数据同步,数量必须为奇数

QuorumPeerMain:ZooKeeper进程,数量必须为奇数

DFSZKFailoverController:负责监控NameNode的状态,当active状态的NameNode出现问题的时候,自动将standby状态的NameNode置为active状态,以保证HDFS系统的稳定

 

二、集群部署

1、服务器网络环境配置

(1)修改主机名

vi  /etc/sysconfig/network

分别修改3台机器主机名为hadoop-master、hadoop-slave1、hadoop-slave2

分别执行sysctl kernel.hostname=相应主机名,使配置生效

 

(2)修改IP地址,设置为静态IP

vi  /etc/sysconfig/network-scripts/ifcfg-eth0

增加以下内容:

BOOTPROTO=static

DNS1=192.168.0.1

IPV6INIT=no

USERCTL=no

IPADDR=192.168.0.202

NETMASK=255.255.255.0

GATEWAY=192.168.0.1

同理修改另外两台机器IP。

(3)增加IP与主机映射

vi  /etc/hosts

增加以下内容:

192.168.0.202   hadoop-master

192.168.0.203   hadoop-slave1

192.168.0.205   hadoop-slave2

2、SSH免密码登录

(1)在每台机器上根目录创建ssh公钥:ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

(2)在hadoop-master中,进入.ssh目录,并将公钥写到authorized_keys:

         cat~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

         sshhadoop-slave1 cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys

         sshhadoop-slave2 cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys

(3)更改authorized_keys属性,使之不能被修改:chmod 600 ~/.ssh/authorized_keys

(4)将hadoop-master中生成的known_hosts和authorized_keys复制到其他机器中:

         scp~/.ssh/authorized_keys root@hadoop-slave1:~/.ssh/

scp ~/.ssh/authorized_keysroot@hadoop-slave2:~/.ssh/

scp ~/.ssh/known_hostsroot@hadoop-slave1:~/.ssh/

scp ~/.ssh/known_hostsroot@hadoop-slave2:~/.ssh/

(5)验证ssh的免密码登录:在hadoop-master中输入:ssh hadoop-slave1、ssh hadoop-slave2是否需要密码,如果不需要,则ssh免密码配置成功。

3、安装JDK

在hadoop-master上进行操作

(1)JDK下载

wget http://download.oracle.com/otn-pub/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz

(2)解压

tar –xvzf jdk-7u80-linux-x64.tar.gz

(3)解压后的文件夹重命名

mv jdk1.7.0_80 java

(4)配置环境变量

vi /etc/profile

在文件末尾增加如下内容:

export JAVA_HOME=/opt/java

export PATH=$JAVA_HOME/bin:$PATH

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

保存文件退出,source /etc/profile 使配置生效

(5)将JDK复制到其他机器,并在其他机器上配置环境变量

scp -r /opt/java root@hadoop-slave1:/opt/

scp -r /opt/java root@hadoop-slave2:/opt/

4、安装Hadoop

在hadoop-master上进行操作

(1)Hadoop下载

wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz

(2)解压

tar –xvzf hadoop-2.7.3.tar.gz

(3)解压后的文件夹重命名

mv hadoop-2.7.3 hadoop

(4)配置Hadoop环境变量

vi /etc/profile

在文件末尾增加如下内容:

export HADOOP_HOME=/opt/hadoop

exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

exportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

保存文件退出,source /etc/profile 使配置生效

(5)Hadoop配置文件修改

配置文件目录:/opt/hadoop/etc/hadoop/

l  hadoop-env.sh

添加jdk环境变量: exportJAVA_HOME=/opt/java

l  coer-site.xml

<configuration>

 <property>

     <name>fs.defaultFS</name>

     <value>hdfs://cluster1</value>

 </property>

 <property>

     <name>hadoop.tmp.dir</name>

    <value>/opt/hadoop/tmp/</value>

     <description>A base for othertemporary directories.</description>

 </property>

 <!--指定zookeeper地址-->

 <property>

    <name>ha.zookeeper.quorum</name>

     <value>hadoop-master:2181,hadoop-slave1:2181,hadoop-slave2:2181</value>

 </property>

</configuration>

l  hdfs-site.xml

<configuration>

<!--指定hdfs的nameservice为cluster1,需要和core-site.xml中的保持一致-->   

<property>   

    <name>dfs.nameservices</name>   

    <value>cluster1</value>   

</property> 

   <!-- cluster1下面有两个NameNode,分别是nn1,nn2 -->

   <property>

      <name>dfs.ha.namenodes.cluster1</name>

       <value>nn1,nn2</value>

   </property>

   <!-- nn1的RPC通信地址 -->

   <property>

       <name>dfs.namenode.rpc-address.cluster1.nn1</name>

      <value>hadoop-master:9000</value>

   </property>

   <!-- nn1的http通信地址 -->

   <property>

       <name>dfs.namenode.http-address.cluster1.nn1</name>

       <value>hadoop-master:50070</value>

   </property>

   <!-- nn2的RPC通信地址 -->

   <property>

       <name>dfs.namenode.rpc-address.cluster1.nn2</name>

       <value>hadoop-slave1:9000</value>

   </property>

   <!-- nn2的http通信地址 -->

   <property>

       <name>dfs.namenode.http-address.cluster1.nn2</name>

       <value>hadoop-slave1:50070</value>

   </property>

   <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->

   <property>

        <name>dfs.namenode.shared.edits.dir</name>

        <value>qjournal://hadoop-master:8485;hadoop-slave1:8485;hadoop-slave2:8485/cluster1</value>

   </property>

   <!-- 指定JournalNode在本地磁盘存放数据的位置 -->

   <property>

         <name>dfs.journalnode.edits.dir</name>

         <value>/opt/hadoop/tmp/journal</value>

   </property>

   <!-- 开启NameNode故障时自动切换 -->

   <property>

          <name>dfs.ha.automatic-failover.enabled</name>

          <value>true</value>

   </property>

   <!-- 配置失败自动切换实现方式 -->

   <property>

<name>dfs.client.failover.proxy.provider.cluster1</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.ha.fencing.ssh.connect-timeout</name>

          <value>30000</value>

   </property>

         <!—NameNode数据存储路径 -->

   <property>

              <name>dfs.namenode.name.dir</name>

                    <value>/opt/hadoop/tmp/dfs/name</value>

   </property>

<!—DataNode数据存储路径 -->

   <property>

                    <name>dfs.datanode.data.dir</name>

                     <value>/opt/hadoop/tmp/dfs/data,/home/hadoop/tmp/dfs/data</value>

   </property>

<!—复制因子-->

   <property>

         <name>dfs.replication</name>

          <value>2</value>

   </property>

</configuration>

l  slaves

hadoop-slave1

hadoop-slave2

hadoop-master

(6)将Hadoop复制到其他机器上

scp -r /opt/hadoop root@hadoop-slave1:/opt/

scp -r /opt/hadoop root@hadoop-slave2:/opt/

5、安装ZooKeeper

在hadoop-master上进行操作

(1)ZooKeeper下载

wget http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

(2)解压

tar –xvzf zookeeper-3.4.9.tar.gz

(3)解压后的文件夹重命名

mv zookeeper-3.4.9 zookeeper

(4)配置环境变量

vi /etc/profile

在文件末尾增加如下内容:

export ZOOKEEPER_HOME=/opt/zookeeper

export PATH=$PATH:$ZOOKEEPER_HOME/bin

保存文件退出,source /etc/profile 使配置生效

(5)ZooKeeper配置文件修改

配置文件目录:/opt/zookeeper/conf/

复制zoo_sample.cfg并命名为zoo.cfg,命令:cp zoo_sample.cfg zoo.cfg

编辑zoo.cfg,vi zoo.cfg

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting anacknowledgement

syncLimit=5

# the directory where the snapshot isstored.

# do not use /tmp for storage, /tmp here isjust

# example sakes.

dataDir=/opt/zookeeper/zkdata

dataLogDir=/opt/zookeeper/zkdatalog

# the port at which the clients willconnect

clientPort=2181

server.1=hadoop-master:2888:3888

server.2=hadoop-slave1:2888:3888

server.3=hadoop-slave2:2888:3888

(6)创建myid文件

在zookeeper的目录中,创建上述两个文件夹zkdata和zkdatalog。进入zkdata文件夹,创建文件myid,填入1。这里写入的1,是在zoo.cfg文本中的server.1中的1。

(7)将ZooKeeper复制到其他机器,并在其他机器上配置环境变量,修改相应的myid

scp -r /opt/zookeeper root@hadoop-slave1:/opt/

scp -r /opt/zookeeper root@hadoop-slave2:/opt/

6、集群启动

(1)启动ZooKeeper集群

在hadoop-master、hadoop-slave1、hadoop-slave2上zookeeper目录下分别执行命令:bin/zkServer.sh start

检查是否正常启动,在每台机器上执行:bin/zkServer.sh status 查看每台机器zookeeper的状态,正确的话,只有一台机器是leader,其余机器都是显示folower

(2)格式化ZooKeeper集群

格式化zookeeper集群,目的是在ZooKeeper集群上建立HA的相应节点。

在hadoop-master上的hadoop的目录执行:hdfs zkfc –formatZK,注意该命令需要手动输入,复制会有问题

(3)启动JournalNode集群

在hadoop-master上执行命令hadoop-daemons.sh start journalnode

在每台机器上使用jps命令查看JournalNode是否正常启动,正常情况下可以看到JournalNode进程

(4)格式化NameNode

在hadoop-master上格式化NameNode,命令:hdfs namenode –format

将/opt/hadoop/tmp/dfs/name 文件复制到hadoop-slave1的/opt/hadoop/tmp/dfs目录下

(5)启动HDFS集群

在hadoop-master上启动HDFS集群,命令:start-dfs.sh

在每台机器上使用jps命令查看进程,各个机器上进程如果与集群服务器情况表中所写的进程相同,则表示整个集群启动成功。

查看HDFS管理界面:

http://192.168.0.202:50070/dfshealth.html#tab-overview

http://192.168.0.203:50070/dfshealth.html#tab-overview

可以看到两个NameNode的状态,一个为active,一个为standby

三、常用命令

1、NameNode手动主备切换

hdfs haadmin -failover nn1 nn2

说明:执行命令前,NameNodeId为nn1的节点为active状态,NameNodeId为nn2的节点为standby状态,执行该命令后,两个节点状态互换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值