默认情况下,在启用NameNode高可用时,这个nameservice ID使用的是nameservice1。 2.首先我们准备好一个启用了HDFS高可用正常的集群,并查看nameservice ID当前状态是nameservice2。 一个运行正常的集群如下: ? 查看HDFS的nameservice ID ? 3.去HDFS配置项里修改nameservice ID,注意有两个地方需要修改,Fayson的环境现有的是nameservice2,我们修改为nameservice3 ? 保存配置 ? 6.我们先去HDFS配置那里确认nameservice修改成功了,见下图,已经是nameservice3。 ?
nameService的类型为NameService,这样做的目的是为了向Angular提供运行时解析依赖所需要的相关信息。 : NameService) { this.name = nameService.getName(); } } nameService.ts export class NameService : NameService) { this.name = nameService.getName(); } } class NameService { getName () { )) nameService){ this.name = nameService.getName(); } } class NameService{ getName() 声明之后才会安全地返回NameService,也就是说当()=>NameService执行的时候,NameService的值已经不是undefined了。
', 'dfs.ha.namenodes.nameservice1'='namenode192,namenode118', 'dfs.namenode.rpc-address.nameservice1 .namenode192'='cdp1.macro.com:8020', 'dfs.namenode.rpc-address.nameservice1.namenode118'='cdp2.macro.com /warehouse/hadoop-iceberg', 'dfs.nameservices'='nameservice1', 'dfs.ha.namenodes.nameservice1 '='namenode192,namenode118', 'dfs.namenode.rpc-address.nameservice1.namenode192'='cdp1.macro.com: 8020', 'dfs.namenode.rpc-address.nameservice1.namenode118'='cdp2.macro.com:8020', 'dfs.client.failover.proxy.provider.your-nameservice
程序首次执行时会创建 /NameService,/NameService/query_bill,/NameService/query_bill/provider,/NameService/query_bill 然后在服务提供进程在/NameService/query_bill/provider下创建暂时序列节点. 第二条命令是启动一个服务消费进程,它在/NameService/query_bill/consumer/下创建暂时序列节点,并watch/NameService/query_bill/provider的子节点变化事件 它watch /NameService/query_bill/provider,/NameService/query_bill/consumer/两个路径的子节点变化,及时更新provider列表和comsumer -s172.17.0.36:2181 \n"); printf(" nameservice -m monitor -n query_bill -s172.17.0.36:2181 \n"
禁用Federation 2.1 删除NameService 2.2 还原挂载点为“/” 2.3 更新Hive Metastore NameNode 3. 2、选择要删除的NameService,这里选择删除“nameservice2”。 ? 3、依据实际场景需求,决定是否启动依赖服务及部署客户端配置,默认是两个都勾选上的,这里保持默认选项。 ? 4、CM执行删除NameService操作,不同场景下,删除步骤有所不同,比如共用一组JN,则不会进行JN的删除操作;不勾选启动依赖服务选项,则不会启动依赖HDFS的相关服务,部署客户端配置亦是如此。 5、等待NameService删除操作完成。 ? 6、删除NameService后,可以看到,NameNode、JournalNode和Failover Controller都需要重启,某种程度上来说,这些角色属于服务端,而DataNode和HttpFS
iess/** filters: #StripPrefix代表截取路径的个数这样配置后当请求/name/bar/foo后端匹配到的请求路径就会变成http://nameservice sve/** filters: #StripPrefix代表截取路径的个数这样配置后当请求/name/bar/foo后端匹配到的请求路径就会变成http://nameservice meta/** filters: #StripPrefix代表截取路径的个数这样配置后当请求/name/bar/foo后端匹配到的请求路径就会变成http://nameservice cps/** filters: #StripPrefix代表截取路径的个数这样配置后当请求/name/bar/foo后端匹配到的请求路径就会变成http://nameservice gis/** filters: #StripPrefix代表截取路径的个数这样配置后当请求/name/bar/foo后端匹配到的请求路径就会变成http://nameservice
[root@hadoop101 ~]# scp /etc/hosts hadoop103:/etc/ 因为集群都是HA模式,所以需要在apache集群上配置CDH集群,让distcp能识别出CDH的nameservice hadoop101 hadoop]# vim /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml dfs.nameservices mycluster,nameservice1 namenode30,namenode37 dfs.namenode.rpc-address.nameservice1.namenode30 hadoop104:8020 dfs.namenode.rpc-address.nameservice1 .namenode37 hadoop106:8020 dfs.namenode.http-address.nameservice1.namenode30 hadoop104:9870 dfs.namenode.http-address.nameservice1 hadoop distcp -Dmapred.job.queue.name=hive webhdfs://mycluster:9070/user/hive/warehouse/dwd.db/ hdfs://nameservice1
"); conf.set("dfs.nameservices", "nameservice1"); conf.set("dfs.ha.namenodes.nameservice1", " 如果配置了 nameNode HA 的话,这里的值就为:hdfs://[nameservice id] 。 dfs.nameservices 命名空间的逻辑名称。 [nameservice id] 命名空间中所有 nameNode 的唯一标示名称。可以配置多个,使用逗号分隔。该名称可以让 dataNode 知道每个集群的所有 nameNode 。 [nameservice id].[namenode name]:HDFS Client访问HDFS,就是通过 RPC 实现的,代表每个 nameNode 监听的 RPC 地址。 [nameservice id]:配置 HDFS 客户端连接到 Active NameNode 的一个 java 类。 这种方式如果用于 单nameNode 环境的话,也不行,也不适配。
Quorum Journal 需要至少三个 JournalNode Quorum Journal 需要奇数的 JournalNode Nameservice nameservice1 has 在 NameNode (ip-172-31-6-83) 个非 HA Nameservice nameservice1 上启用自动故障转移不起作用。 ? 在“NameNode Nameservice”配置项中输入nameservice1,这里根据你集群启用HA后的实际情况nameservice的名字输入,然后保存。 ? 7.在“Quorum Journal 名称”配置项也输入nameservice1,这里根据你集群启用HA后的实际情况nameservice的名字输入,然后保存。 ?
hdfs://nameservice1/user/hadoop/dw_realtime/dw_real_for_path_list/mb_pageinfo_hash2/date=2016-01-09 hdfs ://nameservice1/user/hadoop/dw_realtime/dw_real_for_path_list/mb_pageinfo_hash2/date=2016-07-05 hdfs: //nameservice1/user/hadoop/dw_realtime/dw_real_for_path_list/mb_pageinfo_hash2/date=2016-09-05 hdfs:/ /nameservice1/user/hadoop/dw_realtime/dw_real_for_path_list/mb_pageinfo_hash2/date=2016-10-20 hdfs:// nameservice1/user/hadoop/dw_realtime/dw_real_for_path_list/mb_pageinfo_hash2/date=2016-11-06 hdfs://nameservice1
{ String getName(); } service public class LisiName implements NameService { @Override public System.out.println("我是李四"); return "我是李四"; } } public class WangwuName implements NameService System.out.println("我是王五"); return "我是王五"; } } public class ZhansanName implements NameService "我是张三"; } } factory public class NameServiceFactory { private static final Map<String, NameService nameService = NameServiceFactory.getNameService("张三"); nameService.getName(); }
2、点击“添加Nameservice”按钮,添加一个新的Nameservice。 ? 3、为新添加的Nameservice选择装入点,实际上就是挂载点。 ? 4、为新添加的Nameservice选择部署Namenode和SecondaryNamenode角色的主机。 ? 6、启用Federation成功后,集群新增了一个Nameservice,NameNode也变为了三个,同时新增了一个SecondaryNamenode,效果如下所示 ? 2.3 启用HA 1、为新添加的Nameservice启用HA ? HDFS的根目录下多出了一个/nameservices的子目录,其下分别对应两组Namenode的Nameservice名称,再往下一层目录,就是对应Namenode管理的Namespace。
要实现HDFS跨集群访问及集群间互访,首先需要保证每个集群的nameservice ID唯一 (更改nameservice参考:https://docs.cloudera.com/documentation /enterprise/5-6-x/topics/admin_ha_change_nameservice.html) ;其次需要在hdfs-site.xml里增加其它集群的nameserviceID到dfs.nameservices 属性中,如: <property> <name>dfs.nameservices</name> <value>nameservice1,nameservice2,nameservice3,nameservice4 以上,nameservice1是HDP HDFS的ID,nameservice2是CDH HDFS的ID。 Spark访问外部Hive表测试验证: ? 可以访问外部Hive表数据。
2018-07-07 17:43:08,619 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recover lease on dfs filehdfs://nameservice1 17:43:08,619 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recovered lease, attempt=0 onfile=hdfs://nameservice1 0ms2018-07-07 17:43:08,624 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recover lease on dfs filehdfs://nameservice1 17:43:08,625 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recovered lease, attempt=0 onfile=hdfs://nameservice1 17:43:08,630 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recovered lease, attempt=0 onfile=hdfs://nameservice1
Quorum Journal 需要至少三个 JournalNode Quorum Journal 需要奇数的 JournalNode Nameservice nameservice1 has 在 NameNode (ip-172-31-6-83) 个非 HA Nameservice nameservice1 上启用自动故障转移不起作用。 ? 在“NameNode Nameservice”配置项中输入nameservice1,这里根据你集群启用HA后的实际情况nameservice的名字输入,然后保存。 ? 7.在“Quorum Journal 名称”配置项也输入nameservice1,这里根据你集群启用HA后的实际情况nameservice的名字输入,然后保存。 ?
{
///
name": "hdfswriter", "parameter": { "defaultFS": "hdfs://nameservice1 ", "hadoopConfig": { "dfs.nameservices": "nameservice1 ": "namenode117,namenode124", "dfs.namenode.rpc-address.nameservice1.namenode117 : "bigdata2-prod-nn01.ryan-miao.com:50070", "dfs.namenode.https-address.nameservice1 : "bigdata2-prod-nn02.ryan-miao.com:50070", "dfs.namenode.https-address.nameservice1
Quorum Journal 需要至少三个 JournalNode Quorum Journal 需要奇数的 JournalNode Nameservice nameservice1 has 在 NameNode (ip-172-31-6-83) 个非 HA Nameservice nameservice1 上启用自动故障转移不起作用。 ? 4.回到HDFS服务,点击“配置”,搜索nameservice ? 如上图标红的部分的,点击“移除覆盖项”,删除该配置。 ? 保存更改。
realUser=, issueDate=1514288529674, maxDate=1514893329674, sequenceNumber=568, masterKeyId=150 on ha-hdfs:nameservice1 17/12/26 06:42:09 INFO security.TokenCache: Got dt for hdfs://nameservice1; Kind: HDFS_DELEGATION_TOKEN , Service: ha-hdfs:nameservice1, Ident: (token for fayson: HDFS_DELEGATION_TOKEN owner=fayson@CLOUDERA.COM 1514262166956_0009 17/12/26 06:42:10 INFO mapreduce.JobSubmitter: Kind: HDFS_DELEGATION_TOKEN, Service: ha-hdfs:nameservice1
, 并且这些jar包有大部分是可以在多个application中公用的,故直接将这些公用jar传到HDFS上,然后通过 --jars $(`echo hadoop fs -ls hdfs://nameservice1 jars来提交 --jars $(echo sparklib0.10/*.jar | tr ' ' ',') 整体上是这个样子的 --jars $(`echo hadoop fs -ls hdfs://nameservice1