设为首页 加入收藏

TOP

HDFS的高可用部署教程
2019-02-08 12:20:59 】 浏览:77
Tags:HDFS 可用 部署 教程

1:官网中有给出详细的操作步骤,可以查看如下链接:

http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

2:hdfs-site.xml中的配置以及解释:

	<!--高可用集群的相关配置 -->
<configuration>
	<!--备份的副本数,这个数量是包括自己在内的数量 -->
	<property>
		<name>dfs.replication</name>
		<value>2</value>
	</property>
	<!--忘记了,后期补充上 -->
	<property>
		<name>dfs.permissions.enabled</name>
		<value>false</value>
	</property>
	
	<!--高可用集群的相关配置 -->
	<!--集群中nameservice的名字列表,如果有多个用逗号分隔 -->
	<property>
		<name>dfs.nameservices</name>
		<value>ns</value>
	</property>
	
	<!--集群下namenode的个数 -->
	<property>
	  <name>dfs.ha.namenodes.ns</name>
	  <value>nn1,nn2</value>
	</property>
	
	<!--客户端通过访问HDFS的端口RPC -->
	<property>
	  <name>dfs.namenode.rpc-address.ns.nn1</name>
	  <value>bigdata-pro01.rachel.com:8020</value>
	</property>
	<property>
	  <name>dfs.namenode.rpc-address.ns.nn2</name>
	  <value>bigdata-senior01.rachel.com:8020</value>
	</property>
	
	<!--客户端通过访问HTTP的地址 -->
	<property>
	  <name>dfs.namenode.http-address.ns.nn1</name>
	  <value>bigdata-pro01.rachel.com:50070</value>
	</property>
	
	<property>
	  <name>dfs.namenode.http-address.ns.nn2</name>
	  <value>bigdata-senior01.rachel.com:50070</value>
	</property>
	
	
	<property>
	  <name>dfs.namenode.shared.edits.dir</name>
	  <value>qjournal://bigdata-pro01.rachel.com:8485;bigdata-senior01.rachel.com:8485;bigdata-senior02.rachel.com:8485/ns</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>

    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/home/rachel/.ssh/id_rsa</value>
    </property>
	
	<property>
	  <name>dfs.journalnode.edits.dir</name>
	  <value>/opt/modules/hadoop-2.5.0/data/dfs/jn</value>
	</property>
</configuration>

3:启动集群服务

先启动journalnode服务,因为在journalnode节点中存放着实时数据的修改。(

sbin/hadoop-daemon.sh start journalnode

在nn1上,对其进行格式化,并启动,生成元数据和edit,写入journalnode上

bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode

nn2上,同步nn1的元数据信息

bin/hdfs namenode  -bootstrapStandby

启动nn2

sbin/hadoop-daemon.sh start namenode

手动将nn1切换为active(不然都是standby)

$ bin/hdfs haadmin -transitionToActive nn1 

在nn1上启动所有datanode

sbin/hadoop-daemons.sh start datanode

4:验证测试:

HTTP50070访问端口可以看到

Journal Manager
QJM to [192.168.1.10:8485, 192.168.1.11:8485, 192.168.1.12:8485]	open for read

测试:
上传文件:

bin/hdfs dfs -mkdir -p /user/rachel/data
bin/hdfs dfs -put /opt/modules/hadoop-2.5.0/etc/hadoop/core-site.xml  /user/rachel/data/

后kill掉namenode1的服务,
再手动起namenode2为active状态,其中用forceactive这个参数
发现重新使用HDFS客户端在namnode1上是可以访问刚刚上传的文件的。

5:遇到的问题以及解决方法:

name node和datanode的版本不一致导致启动datanode后瞬间又关掉

报错详情如下:
2018-09-11 07:09:12,329 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to bigdata-pro01.rachel.com/192.168.1.10:8020. Exiting.
java.io.IOException: Incompatible clusterIDs in /opt/modules/hadoop-2.5.0/data/tmp/dfs/data: namenode clusterID = CID-cd815514-81ea-4207-87d8-cf5f33207d87; datanode clusterID = CID-871bc408-3047-4595-8c22-ed61a9ed0f75

这里是由于namenode被格式化的时候,版本更新,而datanode的版本没有及时更新导致的。
所以需要将保存datanode和namenode的相关数据删除掉。

而如何查找他们的目录:
其实是hdfs-site.xml中的两个参数决定的:
dfs.namenode.name.dir和dfs.datanode.data.dir
官网中给出的默认值是:
dfs.namenode.name.dir file://${hadoop.tmp.dir}/dfs/name
dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data

而这两个值共同引用的变量hadoop.tmp.dir在core-site.xml进行配置
官网给出的默认值是:
hadoop.tmp.dir /tmp/hadoop-${user.name}
其实这个目录在报错信息中也给出了,/opt/modules/hadoop-2.5.0/data
可以根据自己的报错信息来做

6:HDFS-HA服务启动以及自动故障转移测试hdfs-site.xml 中,

<property>
	<name>dfs.ha.automatic-failover.enabled.ns</name>
	<value>true</value>
</property>

注:如果配置了这个选项,就是故障的自动转移。

此时不支持手动将namenode从standby切换为active状态,也就是这个操作:

$ bin/hdfs haadmin -transitionToActive nn1

一旦在配置该选项的情况下,还执行这个命令,就会报错:

Automatic failover is enabled for NameNode at bigdata-senior01****
refusing to manually manage HA state,Since it may cause a split-brain scenario or other

core-site.xml

<property>
	<name>ha.zookeeper.quorum</name>
	<value>bigdata-pro01.rachel.com:2181,bigdata-senior01.rachel.com:2181,bigdata-senior02.rachel.com:2181</value>
</property>

要将配置分发到第二个节点(scp命令)

>>停掉集群中的有关HDFS的服务

hadoop-daemon.sh start zkfc
sbin/stop-dfs.sh

>>在每个节点停掉Zookeeper的服务

bin/zkServer.sh stop

>>启动集群中每个节点的zookeeper服务

bin/zkserver.sh start

>>This will create a znode in ZooKeeper inside of which the automatic failover system stores its data.

hdfs zkfc -formatZK

>>启动有关HDFS的所有服务

sbin/start-dfs.sh

>>在配置为namenode的节点上启动zkfc服务

./hadoop-daemon.sh start zkfc

验证:

在namenode1上上传一个文件wc.input
停掉namenode服务
sbin/hadoop-daemon.sh stop namenode
再在node-1节点上去链接HDFS

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇搭建HDFS集群的客户端并利用eclip.. 下一篇HDFS快照与配额

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目