设为首页 收藏本站
查看: 1295|回复: 0

[经验分享] [原创]Hadoop-2.5.2-HA原文译

[复制链接]

尚未签到

发表于 2017-12-17 15:41:26 | 显示全部楼层 |阅读模式
* 配置概述  * 与联合配置类似,HA配置向后兼容,允许现有的单个NameNode配置工作而不更改。新配置被设计为使得集群中的所有节点可以具有相同的配置,而不需要基于节点的类型将不同的配置文件部署到不同的机器。

  * 与HDFS联合一样,HA群集使用名称服务ID(nameservice>  * 配置详情
  * hdfs-site.xml
  * 要配置HA NameNode,必须向hdfs-site.xml配置文件中添加多个配置选项。

  * 设置这些配置的顺序并不重要,但是为dfs.nameservices和dfs.ha.namenodes [nameservice>  * dfs.nameservices - 新nameservice的逻辑名
  * 为此名称服务选择一个逻辑名称,例如“mycluster”,并将此逻辑名称用于此配置选项的值。你选择的名字是任意的。它将用于配置和作为集群中绝对HDFS路径的权限组件。
  Note:如果您还使用HDFS Federation,此配置设置还应包括其他名称服务(HA或其他)的列表,以逗号分隔列表。
  <property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
  </property>

  * dfs.ha.namenodes.[nameservice>
  * 使用逗号分隔的NameNode>  * 例如,如果以前使用“mycluster”作为名称服务ID,并且您希望使用“nn1”和“nn2”作为NameNode的各个ID,您可以这样配置:
  <property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
  </property>
  Note:目前,每个nameservice最多只能配置两个NameNode。

  * dfs.namenode.rpc-address.[nameservice>
  * 对于之前配置的NameNode>  <property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>machine1.example.com:8020</value>
  </property>
  <property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>machine2.example.com:8020</value>
  </property>
  Note:如果您愿意,您可以类似地配置“servicerpc-address”设置。

  * dfs.namenode.http-address.[nameservice>  * 与上面的rpc-address类似,设置NameNode的HTTP服务器的地址以进行侦听。例如:
  <property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>machine1.example.com:50070</value>
  </property>
  <property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>machine2.example.com:50070</value>
  </property>
  Note:如果您启用了Hadoop的安全功能,您还应该为每个NameNode设置类似的https地址。
  * dfs.namenode.shared.edits.dir - 标识NameNode将要读写edits的JNs组的URI
  * 这是配置提供共享编辑存储的JournalNode的地址的地方,由Active NameNode写入并由Standby NameNode读取以保持最新与Active NameNode做出的所有文件系统更改。

  * 虽然必须指定多个JournalNode地址,但您只应配置其中一个URI。 URI的格式应为:“qjournal:// host1:port1; host2:port2; host3:port3 / journalId”。Journal>  * 例如,如果此群集的JournalNode在计算机“node1.example.com”,“node2.example.com”和“node3.example.com”上运行,并且名称服务ID为“mycluster”,则可以使用以下作为此设置的值(JournalNode的默认端口为8485):
  <property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster</value>
  </property>

  * dfs.client.failover.proxy.provider.[nameservice>  * 配置将由DFS客户端使用的Java类的名称,以确定哪个NameNode是当前活动的,以及因此哪个NameNode当前为客户端请求提供服务。
  * 目前Hadoop附带的唯一实现是ConfiguredFailoverProxyProvider,所以使用它,除非你使用自定义。例如:
  <property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  * dfs.ha.fencing.methods - 将用于在故障转移期间屏蔽Active NameNode的脚本或Java类的列表
  * 期望系统的正确性,在任何给定时间只有一个NameNode处于活动状态
  * 重要的是,当使用Quorum Journal Manager时,只有一个NameNode允许写入JournalNode,因此没有可能破坏来自裂脑情景的文件系统元数据。
  * 但是,当发生故障转移时,以前的Active NameNode仍然可能为客户端提供读取请求,这可能已过期,直到该NameNode在尝试写入JournalNode时关闭。
  * 因此,仍然需要配置一些防护方法,即使在使用Quorum Journal Manager时也是如此。
  * 但是,为了在防护机制发生故障的情况下提高系统的可用性,建议配置可确保作为列表中最后一个防护方法返回成功的防护方法。
  * 请注意,如果选择不使用实际的防护方法,您仍然必须为此设置配置一些内容,例如“shell(/ bin / true)”。
  * 在故障转移过程中使用的防护方法被配置为一个回车符分隔的列表,将在顺序尝试,直到一个表明防护成功。
  * Hadoop提供了两种方法:shell和sshfence。
  * 有关实现自己的自定义防护方法的信息,请参阅org.apache.hadoop.ha.NodeFencer类
  * sshfence - SSH 给Active NameNode 并 杀掉此进程
  * sshfence选项SSH到目标节点,并使用fuser来终止监听服务的TCP端口的进程。
  * 为了使此防护选项可以工作,它必须能够SSH到目标节点,而不提供密码短语。
  * 因此,还必须配置dfs.ha.fencing.ssh.private-key-files选项,这是一个用逗号分隔的SSH私钥文件列表。例如:
  <property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
  </property>
  <property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/exampleuser/.ssh/id_rsa</value>
  </property>
  * 可选地,可以配置非标准用户名或端口以执行SSH。
  * 还可以为SSH配置超时(以毫秒为单位),之后此防护方法将被视为失败。它可以这样配置:
  <property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence([[username][:port]])</value>
  </property>
  <property>
  <name>dfs.ha.fencing.ssh.connect-timeout</name>
  <value>30000</value>
  </property>
  * shell - 运行一个任意的shell命令来防护 Active NameNode
  * shell防护方法运行任意shell命令。它可以这样配置:
  <property>
  <name>dfs.ha.fencing.methods</name>
  <value>shell(/path/to/my/script.sh arg1 arg2 ...)</value>
  </property>
  * '('和')'之间的字符串直接传递给bash shell,不能包含任何括号。
  * shell命令将使用设置为包含所有当前Hadoop配置变量的环境运行,其中“_”字符替换在配置键中的任何“.”字符。
  * 所使用的配置已经将任何特定于namenode的配置提升为其通用形式
  * 例如dfs_namenode_rpc-address将包含目标节点的RPC地址,即使配置可能将该变量指定为dfs.namenode.rpc-address.ns1.nn1。
  * 此外,还可以使用以下指向要保护的目标节点的变量:
  $target_host:   hostname of the node to be fenced
  $target_port:   IPC port of the node to be fenced
  $target_address:    the above two, combined as host:port

  $target_nameserviceid:  the nameservice>
  $target_namenodeid: the namenode>  * 这些环境变量也可以用作shell命令本身的替换。例如:
  <property>
  <name>dfs.ha.fencing.methods</name>
  <value>shell(/path/to/my/script.sh --nameservice=$target_nameserviceid $target_host:$target_port)</value>
  </property>
  * 如果shell命令返回退出代码0,则确定防护成功。如果它返回任何其他退出代码,防护不成功,将尝试列表中的下一个防护方法。
  Note:此防护方法不实现任何超时。如果超时是必要的,它们应该在shell脚本本身中实现(例如通过派生子shell在几秒钟内杀死它的父进程)。
  * dfs.journalnode.edits.dir - JournalNode守护进程将存储其本地状态的路径
  * 这是JournalNode计算机上的绝对路径,将存储JN使用的编辑和其他本地状态。
  * 您只能对此配置使用单个路径。
  * 此数据的冗余通过运行多个单独的JournalNode或通过在本地连接的RAID阵列上配置此目录来提供。例如:
  <property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/path/to/journal/node/local/data</value>
  </property>         
  * core-site.xml (可选的)
  * fs.defaultFS - 当没有给出时,Hadoop FS客户端使用的默认路径前缀
  * 可选的配置项,您现在可以配置Hadoop客户端的默认路径以使用新的HA启用的逻辑URI。
  * 如果您之前使用“mycluster”作为名称服务ID,则这将是所有HDFS路径的权限部分的值。
  * 这可能是这样配置的,在您的core-site.xml文件中:
  <property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
  </property>
  * 部署详情
  * 在设置了所有必需的配置选项后,必须在将要运行它们的计算机集上启动JournalNode守护程序。
  * 这可以通过运行命令“hdfs-daemon.sh journalnode”并等待守护程序在每个相关机器上启动来完成。
  * 一旦启动了JournalNode,必须首先同步两个HA NameNode的磁盘元数据。
  * 如果要设置一个新的HDFS集群,您应该首先在一个NameNode上运行format命令(hdfs namenode -format)。
  * 如果您已经格式化了NameNode,或者正在将非HA启用的集群转换为启用HA,那么现在应该通过在未被格式化的NameNode上运行命令“hdfs namenode -bootstrapStandby" 复制元数据目录的内容到别的,未被格式化的NameNode上。
  * 运行此命令还将确保JournalNode(由dfs.namenode.shared.edits.dir配置)包含足够的编辑事务,以便能够启动两个NameNode。
  * 如果要将非HA NameNode转换为HA,则应运行命令“hdfs -initializeSharedEdits”,该命令将使用来自本地NameNode edits目录的edits数据初始化JournalNodes。
  * 此时,您可以像启动一个NameNode一样启动两个HA NameNode。
  * 您可以通过浏览其配置的HTTP地址单独访问每个NameNodes的网页。
  * 您应该注意到,配置的地址旁边将是NameNode的HA状态(“备用”或“活动”。)每当HA NameNode启动时,它最初处于备用状态。
  * 管理命令
  * 现在您的HA NameNode已配置并启动,您将可以访问一些其他命令来管理HA HDFS集群。
  * 具体来说,您应该熟悉“hdfs haadmin”命令的所有子命令。
  * 运行此命令而没有任何其他参数将显示以下使用信息:
  Usage: DFSHAAdmin [-ns <nameserviceId>]
[-transitionToActive <serviceId>]

[-transitionToStandby <serviceId>]

[-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]

[-getServiceState <serviceId>]

[-checkHealth <serviceId>]

[-help <command>]

  * 本指南介绍了每个子命令的高级用法。有关每个子命令的具体使用信息,应运行“hdfs haadmin -help <command>”。
  * transitionToActive and transitionToStandby - 将给定NameNode的状态转换为Active或Standby.
  * 这些子命令分别使给定的NameNode转换到活动或待机状态。
  * 这些命令不尝试执行任何防护,因此很少使用。
  * 相反,人们应该总是喜欢使用“hdfs haadmin -failover”子命令。
  * failover - 启动两个NameNode之间的故障转移
  * 此子命令导致从第一个提供的NameNode到第二个提供的NameNode的故障转移。
  * 如果第一个NameNode处于待机状态,则该命令简单地将第二个转换为活动状态而没有错误。
  * 如果第一个NameNode处于活动状态,将尝试正常地将其转换到备用状态。
  * 如果失败,将依次尝试防护方法(由dfs.ha.fencing.methods配置),直到成功。
  * 只有在此过程之后,第二个NameNode才会转换为活动状态。
  * 如果没有成功的防护方法,则第二个NameNode将不会转换为活动状态,并返回错误。
  * getServiceState - 确定给定的NameNode是活动还是备用
  * 连接到提供的NameNode以确定其当前状态,适当地打印“待机”或“活动”到STDOUT。
  * 此子命令可能由cron作业或监视脚本使用,这些脚本需要根据NameNode当前是活动还是待机来进行不同的操作。
  * checkHealth - 检查给定NameNode的运行状况
  * 连接到提供的NameNode以检查其健康状况。
  * NameNode能够对自身执行一些诊断,包括检查内部服务是否按预期运行。
  * 如果NameNode健康,此命令将返回0,否则为非零。可以使用此命令进行监视。
  Note:这还没有实现,并且目前将始终返回成功,除非给定的NameNode完全关闭。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425048-1-1.html 上篇帖子: 从Ubunt的安装到hadoop集群的搭建 下篇帖子: 如果没能一次成功,那就叫它1.0版吧!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表