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]