From 5aaa059665edad6f279fcd62317fd3edf160ceb7 Mon Sep 17 00:00:00 2001 From: pm-ankit-singhal Date: Wed, 9 Sep 2015 00:36:17 +0530 Subject: [PATCH] HBASE-14280 Fixing bug for Bulk Upload from HA cluster to remote HA hbase cluster --- .../org/apache/hadoop/hbase/util/FSHDFSUtils.java | 25 ++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSHDFSUtils.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSHDFSUtils.java index 1360fb2..df36b23 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSHDFSUtils.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSHDFSUtils.java @@ -27,6 +27,7 @@ import java.net.URI; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.Collection; import com.google.common.collect.Sets; import org.apache.commons.logging.Log; @@ -66,8 +67,16 @@ public class FSHDFSUtils extends FSUtils { dfsUtilClazz = Class.forName("org.apache.hadoop.hdfs.DFSUtil"); } if (getNNAddressesMethod == null) { - getNNAddressesMethod = - dfsUtilClazz.getMethod("getNNServiceRpcAddresses", Configuration.class); + try{ + //getNNServiceRpcAddressesForCluster is available only in version later than 2.6 + getNNAddressesMethod = + dfsUtilClazz.getMethod("getNNServiceRpcAddressesForCluster", Configuration.class); + }catch(NoSuchMethodError e){ + // If hadoop version is older than hadoop 2.6 + getNNAddressesMethod = + dfsUtilClazz.getMethod("getNNServiceRpcAddresses", Configuration.class); + } + } Map> addressMap = @@ -115,6 +124,18 @@ public class FSHDFSUtils extends FSUtils { if (srcServiceName.equals(desServiceName)) { return true; } + if (srcServiceName.startsWith("ha-hdfs") && desServiceName.startsWith("ha-hdfs")) { + Collection internalNameServices = conf.getTrimmedStringCollection + ("dfs.internal.nameservices"); + if(!internalNameServices.isEmpty()){ + if(internalNameServices.contains(srcServiceName.split(":")[1])){ + return true; + } + else{ + return false; + } + } + } if (srcFs instanceof DistributedFileSystem && desFs instanceof DistributedFileSystem) { //If one serviceName is an HA format while the other is a non-HA format, // maybe they refer to the same FileSystem. -- 2.3.2 (Apple Git-55)