hadoop学习笔记(四)HA环境

我们先来看一下hadoop1.x的架构图


image

可以看到,有且只有一个namenode,集群可靠性会受到影响,当namenode出现问题时会影响到整个集群工作,所以,在hadoop2.x中解决了这个问题。

Hadoop 2.0产生背景

  • hadoop 1.0 中HDFS和MapReduce在高可用、扩展性等方面存在问题
  • HDFS存在的问题
    1.NameNode单点故障,难以用于在线场景
    2.NameNode压力过大,且内存受限,影响系统扩展性
  • MapReduce存在的问题
    1.JobTracker访问压力大,影响系统扩展性
    2.难以支持除MapReduce之外的计算框架,比如Spark、Storm等

Hadoop 1.x与Hadoop2.x

QQ截图20180306183158.png

  • Hadoop 2.x由HDFS、MapReduce和YARN三个分支构成:
    1.HDFS:NN Federation、HA;
    2.MapReduce:运行在YARN上的MR
    3.YARN:资源管理系统
    HDFS 2.x Federation
  • 通过多个namenode/namespace把元数据的储存和管理分散到多个节点中,使namenode/namespace可以通过增加机器来进行水平扩展
  • 能把单个namenode的负载分散到多个节点中,在HDFS数据规模较大的时候不会降低HDFS的性能,可以通过多个namespace来隔离不同类型的应用,把不同类型应用的HDFS元数据的存储和管理分派到不同的namenode下
    HDFS 2.0 Federation
    QQ截图20180306183158.png

    Federation配置:
<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>ns1,ns2</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns1</name>
    <value>nn-host1:rpc-port</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.ns1</name>
    <value>nn-host1:http-port</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address.ns1</name>
    <value>snn-host1:http-port</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns2</name>
    <value>nn-host2:rpc-port</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.ns2</name>
    <value>nn-host2:http-port</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address.ns2</name>
    <value>snn-host2:http-port</value>
  </property>

  .... Other common configuration ...
</configuration>

Hadoop HA(HDFS High Availability)
对namenode实现高可用,当一个namenode出现故障,备用的namenode会进行自动接管。因此,备用的namenode的元数据要和第一台namenode保持一致,也就是说,fsimage和edits要保持一致。
HA有两种方式,分别是:
HDFS High Availability NFS
HDFS High Availability QJM
HDFS High Availability NFS将edits文件上传至NFS服务器,通过NFS服务器实现多个namenode之间的共享,但是,如果NFS服务器挂掉了,就会影响整个集群环境,也就是说NFS本身就被单点故障所限制,所以,我们一般不会采用这种模式。

HDFS High Availability QJM

timg.jpg

JN也就是journalnode,本身就是一个小的集群,直接把edits文件交给JN来管理。通过zookeeper来监控各namenode的状态
HA环境搭建
下载安装hadoop2.x
下载安装zookeeper
依然以五个节点node1-node5为例,node1和node2为namenode。node1-node3为journalnode。node3-node5为zookeeper集群,node3-node5为datanode。理论上来说应该一个节点对应一个独立功能,但是服务器有限,所以功能有所重叠。
1.时间同步:ntpdate -u edu.ntp.org.cn

    关闭网络hosts防火墙

2.安装jdk

3.上传hadoop安装文件并解压

4.免密钥登录:node1到node1-5
                         node2到node1-5
             ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
             cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
5.修改配置文件
    hadoop1.x中创建的masters文件要保证每台服务器都删除。
    hadoop_env.sh中的JAVA_HOME

    core-site.xml

    hdfs-site.xml

    slaves 指定datanode

6.同步配置文件
7.启动journalnode在node1-node3上执行:hadoop-daemon.sh start journalnode
8.格式化其中一台namenode:hdfs namenode -format
9.同步其他没有格式化的NN,在其他NN上执行:hdfs namenode -bootstrapStandby
10.启动zookeeper集群,分别在node3-node5上执行:进入zookeeper的bin目录下执行./zkServer.sh start
11.格式化zookeeper:在一台namenode上执行hdfs zkfc -formatZK
12.启动 start-dfs.sh

以后每次重启集群时
[停集群:stop-dfs.sh]
再启动:
启动zookeeper集群:node3-node5,./zkServer.sh start
启动hdfs:start-dfs.sh

详细配置
配置过hadoop1.x的同学一定要删除每个节点配置文件中的masters
修改hadoop_env.sh中的JAVA_HOME为jdk安装目录
hdfs-site.xml配置

<!--指定nameservice,value可以随便起,但必须保证后面配置的一致,建议默认>
  <property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
<!--两个namenode别名,如果更改了nameservice,需要将mycluster更改,下同不赘述>
<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>
<!--指定rpc地址>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>node1:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>node2:8020</value>
</property>
<!--指定http地址>
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>node1:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>node2:50070</value>
</property>
<!--指定journalnode集群>
<property>
  <name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</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>/home/gaojz/.ssh/id_rsa</value>
    </property>
<!--配置edits文件存放目录>
<property>
  <name>dfs.journalnode.edits.dir</name>
  <!--保证目录不存在或为空>
  <value>/home/gaojz/opt/journal</value>
</property>
<!--启动自动故障处理>
 <property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>

core-site.xml配置

  <!--nameservice 值为hdfs-site.xml中指定的名称>
  <property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<!--配置文件存储目录>
<property>
                <name>hadoop.tmp.dir</name>
<!--保证目录不存在或为空>
                <value>/home/gaojz/opt/hadoop</value>
        </property>
<!--指定zookeeper集群>
<property>
   <name>ha.zookeeper.quorum</name>
 <value>node3:2181,node4:2181,node5:2181</value>
 </property>

zookeeper配置(在node3-node5安装zookeeper)
进入zookeeper目录的conf下,修改zoo_sample.cfg的文件名为zoo.cfg

  tickTime=2000
dataDir=/home/gaojz/opt/zookeeper (文件目录 默认为临时,一定要改)
clientPort=2181
initLimit=5
syncLimit=2
server.1=node3:2888:3888
server.2=node4:2888:3888
server.3=node5:2888:3888

进入zoo.cfg的dataDir配置的目录下,创建myid文件。内容为server对应的数字。比如在node3上,对应的是server.1,因此myid中就写一个1,node4为2,node5为3。
同步配置文件。
启动zookeeper:进入node3-node5的zookeeper的bin目录下分别执行 ./zkServer.sh start
启动之后执行./zkServer.sh status查看状态,leader和follow为正常启动。
启动journalnode集群:在node1-node3上分别执行hadoop-daemon.sh start journalnode启动之后用jps命令查看是否有journalnode进程
在node1上执行hdfs namenode -format
在node1上执行hadoop-daemon.sh start namenode(否侧node2同步会失败)
在node2上同步node1的format:hdfs namenode -bootstrapStandby
格式化zookeeper在node1上执行:hdfs zkfc -formatZK
启动hdfs:start-dfs.sh

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355