Hadoop 2.0架构搭建

节点担任的角色

		NN		DN		JN		ZK		ZKFC		RM
node01   1		 1 		 1       1         1          
node02   1       1       1       1         1         1
node03           1       1       1                   1

1.修改Hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.7.0_67

2.配置core-site.xml

<configuration>
  <property>
      <name>ipc.client.connect.max.retries</name>
      <value>20</value>  //最大连接次数,修改大一点,为20,默认10
  </property>
  <property>
     <name>ipc.client.connect.retry.interval</name>
     <value>1000</value> //重复连接的间隔1000ms=1s
  </property>
  <property>
     <name>fs.defaultFS</name>
     <value>hdfs://ocean</value>   //集群的名字
  </property>
  <property>
     <name>ha.zookeeper.quorum</name>
     <value>node01:2181,node02:2181,node03:2181</value>    //zookeeper节点
  </property>
  <property>
     <name>hadoop.tmp.dir</name>
     <value>/opt/hadoop2</value>   //NN DN的数据信息
  </property>
</configuration>

3.配置hdfs-site.xml

<configuration>
   <property>
      <!-- 服务器的名称 -->
      <name>dfs.nameservices</name>     
      <value>ocean</value>
   </property>
   <property>
      <!-- 高可用的NN -->
      <name>dfs.ha.namenodes.shsxt</name>    
      <value>nn1,nn2</value>
   </property>
   <property>
      <name>dfs.namenode.rpc-address.shsxt.nn1</name>
      <value>node01:8020</value>
   </property>
   <property>
      <name>dfs.namenode.rpc-address.shsxt.nn2</name>
      <value>node02:8020</value>
   </property>
   <property>
      <!-- namenode的http地址和端口 -->
      <name>dfs.namenode.http-address.shsxt.nn1</name>
      <value>node01:50070</value>
   </property>
   <property>
      <!-- namenode的http地址和端口 -->
      <name>dfs.namenode.http-address.shsxt.nn2</name>
      <value>node02:50070</value>
   </property>
   <property>
      <!-- 指定namenode元数据存储在journalnode中的路径 -->
	  <name>dfs.namenode.shared.edits.dir</name>
	  <value>qjournal://node01:8485;node02:8485;node03:8485/shsxt</value>
   </property>
   <property>
      <!-- 指定HDFS客户端连接active namenode的java类 -->
      <name>dfs.client.failover.proxy.provider.shsxt</name> 
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
   </property>
   <property>
      <!-- 配置隔离机制为ssh 防止脑裂 -->
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
      <value>shell(true)</value>
   </property>
   <property>
      <!-- 指定秘钥的位置 -->
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_dsa</value>
   </property>
   <property>
      <!-- 指定journalnode日志文件存储的路径 -->
      <name>dfs.journalnode.edits.dir</name>
      <value>/opt/hadoop2/data</value>
    </property>
    <property>
      <!-- 开启自动故障转移 -->
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>
    </property>
</configuration>

3.配置hadoop中的slaves

node01
node02
node03

4.准备zookeeper

a)三台zookeeper:hadoop1,hadoop2,hadoop3 
b)编辑zoo.cfg配置文件
	修改dataDir=/opt/zookeeper
	server.1=node01:2888:3888
    server.2=node02:2888:3888
    server.3=node03:2888:3888

c)创建/opt/zookeeper,并在该目录中创建一个myid的文件,三个节点的myid文件内容分别为1,2,3

5.环境变量配置

export PATH
export JAVA_HOME=/usr/java/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/usr/soft/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export ZOOKEEPER_HOME=/usr/soft/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin

6.把环境变量、Hadoop和zookeeper发到其他节点,并加载环境变量

7.启动三个zookeeper:

zkServer.sh start
jps看一下,有时候jps有线程不代表启动成功,zkServer.sh status看一下

8.启动三个JournalNode:

hadoop-daemon.sh start journalnode
jps看一下是否启动

9.在其中一个namenode上格式化:

hdfs namenode -format

10.把刚刚格式化之后的元数据拷贝到另外一个namenode上:

a)启动刚刚格式化的namenode :  
	hadoop-daemon.sh start namenode
	jps看到namenode已经启动
b)在没有格式化的namenode上执行:
	hdfs namenode -bootstrapStandby
c)启动第二个namenode    
	hadoop-daemon.sh start namenode

11.在其中一个namenode上初始化zkfc:

hdfs zkfc -formatZK

12.在随便一个节点上停止服务:

stop-dfs.sh
jps查看一下

13.在随便一个节点上全面启动:

start-dfs.sh
jps查看一下是否全部启动

14.启动node02和node03 yarn的resourcemanager

yarn-daemon.sh start resourcemanager  (yarn resourcemanager  )

关闭集群:

   stop-dfs.sh
   zkServer.sh stop
   yarn-daemon.sh stop resourcemanager

有可能会出错的地方

1,确认每台机器防火墙均关掉
2,确认每台机器的时间是一致的
3,确认配置文件无误,并且确认每台机器上面的配置文件一样
4,如果还有问题想重新格式化,那么先把所有节点的进程关掉
5,删除之前格式化的数据目录hadoop.tmp.dir属性对应的目录,所有节点同步都删掉,别单删掉之前的一个,
   删掉三台JN节点中dfs.journalnode.edits.dir属性所对应的目录
6,接上面的第6步又可以重新格式化已经启动了
7,最终Active Namenode停掉的时候,StandBy可以自动接管!

部署过程中遇到的问题:

1.每次只能启动一个namenode:
	搭建HA的情况下,开启start-dfs.sh 服务的时候,master和slave1两个NameNode服务总有一个挂掉,
    原因:start-dfs.sh的时候,首先开启的是master:NameNode,后是slave1:NameNode,最后是JournalNode
              即是:namenode-->datanode-->journalnode-->zkfc,两个NameNode的服务冲突,必须的先开启JournalNode服务才行(三个节点都要先开)
	解决方案:在core-site.xml添加下述内容:
		<property>
          		<name>ipc.client.connect.max.retries</name>
          		<value>20</value>  //最大连接次数,修改大一点,为20,默认10
          	<description>Indicates the number of retries a client will make to establish
              		 a server connection.
          	</description>
  		</property>
 
  		<property>
        		 <name>ipc.client.connect.retry.interval</name>
          		 <value>1000</value> //重复连接的间隔1000ms=1s
          		 <description>Indicates the number of milliseconds a client will wait for
                        	before retrying to establish a server connection.
          		 </description>
  		</property>
	因为:NameNode连接不上JournalNode,超过一定的次数,就会挂掉,所以要增加连接的最大次数。

2.一个namenode挂掉后不会自动切换:hdfs-site.xml
	<property>
        	<name>dfs.ha.fencing.methods</name>
        	<value>sshfence</value>
        	<value>shell(true)</value>
	</property>

猜你喜欢

转载自blog.csdn.net/weixin_39206633/article/details/83542620