marty001 发表于 2018-10-29 10:01:12

Hadoop学习--HA配置(不含zookeeper)--day05

  1.HA配置
  (1).high availability,高可用
  持续服务的能力
  多台主机之间进行集群配置
  (2).failover,容灾
  (3).namenode, 2nn
  secondary namenode解决的可靠性问题
  (4).single point of failure(SPOF),单点故障
  nn1+nn2
  (5).NFS(Network file System,共享存储设备EMC)+QJM
  (6).HA架构
  两台主机,一台active,另外一台standby,active nn复制客户端所有操作.
  standby维护足够多的状态,随时提供容灾服务.
  Journal是单独的进程,用于active nn和standby nn之间的同步信息.
  active nn的ns修改动作写入到jns,standby nn从jn读取edit,需要不断观察log的变化
  一旦log发生变化,standby就会同步到自己的namespace.
  datanode同时向两个nn发送块列表信息以及心跳.
  同一时刻只能有一个active nn,如果两个都是active的namenode,叫做“脑裂”.
  2.部署HA配置解析
  一共有8台机器
  hadoop01192.168.0.11namenodejouralnode resourcemanager
  hadoop02192.168.0.12datanodenodemanager
  hadoop03192.168.0.13datanodenodemanager
  hadoop04192.168.0.14datanodenodemanager
  hadoop05192.168.0.15datanodenodemanager
  hadoop06192.168.0.16datanodenodemanager
  hadoop07192.168.0.17secondarynamenode jouralnode
  hadoop08192.168.0.18namenodejouralnode
  (1).在hdfs-site.xml中配置名称服务:dfs.nameservices
  名称服务的逻辑名
  
  dfs.nameservices
  mycluster
  
  (2).配置nameservice中每个namenode
  dfs.ha.namenodes.
  
  dfs.ha.namenodes.mycluster
  nn1,nn2
  
  注意:目前的hadoop2.7.2最多只能配置2个namenode
  (3).配置每个namenode的rpc地址
  
  dfs.namenode.rpc-address.mycluster.nn1
  s100:8020
  
  
  dfs.namenode.rpc-address.mycluster.nn2
  s800:8020
  
  (4).配置每个namenode的webui地址
  
  dfs.namenode.http-address.mycluster.nn1
  machine1.example.com:50070
  
  
  dfs.namenode.http-address.mycluster.nn2
  machine2.example.com:50070
  
  (5).配置namenode的共享edit log目录,实际上这是个逻辑目录
  
  dfs.namenode.shared.edits.dir
  qjournal://s100:8485;s700:8485;s800:8485/mycluster
  
  (6).配置客户端容灾代理供应商类
  供客户端用来检测哪个是namenode是活页节点
  
  dfs.client.failover.proxy.provider.mycluster
  org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
  
  (7).可选:配置HA防护方法名集合
  QJM防止脑裂发生,不存在两个active node
  可以配置sshfence或者shell脚本
  (8).在core-site.xml中配置hdfs的文件系统
  
  fs.defaultFS
  hdfs://mycluster
  
  (9).配置JN的本地存放数据(edit log)的目录
  
  dfs.journalnode.edit.dir
  /home/ubuntu/hadoop/journal
  
  3.配置过程
  (1).首先将配置好的hdfs-site.xml和core-site.xml文件发送到所有的节点
  (2).在JN节点上启动journalnode进程
  $hadoop-daemon.sh start journalnode
  (3).启动完成JN之后,需要在disk上完成两个nn的元数据同步工作
  如果正在构建新的hdfs群集,需要先在一台 namenode上进行format工作
  若已经格式化文件系统或者在non-ha的群集之上启用ha功能,需要复制现有的nn的目录(~/hadoop/dfs/name)到另外一台的nn的相同目录下,在未格式化的nn上执行命令:hdfs namnode -bootstrapStandby,该命令保证jn有足够多的edit来启动两个nn
  如果正在将non-ha namenode转换成ha,执行命令hdfs namenode -initializeShareEdits,会从local的namenode编辑日志目录数据初始化到jns中.启动两个nn通过webui查看每个nn的状态
  http://hadoop01:50070/
  http://hadoop08:50070/
  (4).在s100上启动hdfs namenode -initializeShareEdits会有报错,关闭namenode解锁
  s100$hadoop-daemon.sh stop namenode
  然后再次执行:
  s100$hdfs namenode -initializeSharedEdits
  (5).然后启动两个nn
  s100$hadoop-daemon.sh start namenode
  s800$hadoop-daemon.sh start namenode
  (6).启动所有的数据节点
  s100$hadoop-daemons.sh start datanode
  (7).切换活动的节点
  s100$hdfs haadmin -transitionToActive nn1
  这个时候s800将不能允许读了
  4.机架感知
  (1).保证在交换机故障或者集群内部事件问题出现时,数据任然可用的,通过两种方式来实现配置机架感知
  A:一种是通过配置一个脚本来进行映射
  在core-site.xml中的topology.script.file.name参数指定脚本文件的位置
  具体脚本见rack.sh和topology.data,把原来topology.data文件内容改了下,把hostname也添加进去了,这样保证正确性.因为JobTracker是通过hostname进行映射的.
  B:另外一种是通过实现DNSToSwtichMapping接口的resolve()方法来完成网络位置的映射dnsToSwitchMapping的值是由"core-site.xml"配置文件中"topology.node.switch.mapping.impl"参数指定,默认值是ScriptBaseMapping,也就是通过读提前写好的脚本文件来进行网络位置映射的,但如果这个脚本没有配置的话,那就使用默认值
  "default-rack"作为所有节点的网络位置。自定义了一个MyResolveNetworkTopology类放在了core包的org.apache.hadoop.net目录下,
  在“core-site.xml”文件中的配置如下:
  
  topology.node.switch.mapping.impl
  org.apache.hadoop.net.MyResolveNetworkTopology
   The default implementation of the DNSToSwitchMapping. It
  invokes a script specified in topology.script.file.name to resolve
  node names. If the value for topology.script.file.name is not set, the
  default value of DEFAULT_RACK is returned for all node names.
  
  
  (2).编写一个脚本或者实现接口org.apache.hadoop.net.DNSToSwitchMapping
  返回数据格式如:'/myrack/myhost'
  (3).将自定义的机架感知类打成jar包,分发到所有节点的${hadoop_home}/share/hadoop/common/lib/
  (4).配置类,指定自定义的类名
  topology.node.switch.mapping.impl
  具体格式参照以上信息
  (5).删除所有节点的日志,启动namenode
  $bin/hadoop dfsadmin -printTopology来查看机架感知的位置信息
  5.distcp集群间数据的拷贝
  (1).通过hadoop mr技术实现并行复制,递归复制文件夹.性能较高,可以实现跨集群复制
  (2).使用方法
  $hadoop distcp hdfs://s100:8020/user/hadoop/data hdfs://X.X.X.X:8020/user/hadoop/new
  14.归档
  (1).java    jar//jar archieve
  (2).hadoophar//hadoop archieve
  $hadoop archive -archiveName new.har -p /user/hadoop/new/user/hadoop
  (3).删除垃圾箱
  $hadoop fs -rm -R -f /user/hadoop/.Trash
  (4).查看归档文件的内容
  $hadoop fs -lsr har:///user/hadoop/new.har
  6.数据完整性
  (1).校验和
  Checksum
  (2).CRC-32
  cycle redundent check-32
  (3).指定校验的字节数组长度
  io.bytes.per.checksum
  (4).$hdfs dfs -get -crc /user/hadoop/demo.txt ./downloads
  会在指定的文件夹下出现一个叫.demo.txt.crc的文件
  (5).$cat .demo.txt.crc

页: [1]
查看完整版本: Hadoop学习--HA配置(不含zookeeper)--day05