HADOOP-13587. distcp.map.bandwidth.mb is overwritten even when -bandwidth flag isn't set. Contributed by Zoran Dimitrijevic

This commit is contained in:
Ravi Prakash 2016-09-12 08:26:08 -07:00
parent cc01ed7026
commit 9faccd1046
3 changed files with 70 additions and 6 deletions

View File

@ -71,6 +71,7 @@ public class DistCp extends Configured implements Tool {
private static final String PREFIX = "_distcp"; private static final String PREFIX = "_distcp";
private static final String WIP_PREFIX = "._WIP_"; private static final String WIP_PREFIX = "._WIP_";
private static final String DISTCP_DEFAULT_XML = "distcp-default.xml"; private static final String DISTCP_DEFAULT_XML = "distcp-default.xml";
private static final String DISTCP_SITE_XML = "distcp-site.xml";
static final Random rand = new Random(); static final Random rand = new Random();
private boolean submitted; private boolean submitted;
@ -86,6 +87,7 @@ public class DistCp extends Configured implements Tool {
public DistCp(Configuration configuration, DistCpOptions inputOptions) throws Exception { public DistCp(Configuration configuration, DistCpOptions inputOptions) throws Exception {
Configuration config = new Configuration(configuration); Configuration config = new Configuration(configuration);
config.addResource(DISTCP_DEFAULT_XML); config.addResource(DISTCP_DEFAULT_XML);
config.addResource(DISTCP_SITE_XML);
setConf(config); setConf(config);
this.inputOptions = inputOptions; this.inputOptions = inputOptions;
this.metaFolder = createMetaFolderPath(); this.metaFolder = createMetaFolderPath();
@ -393,10 +395,12 @@ public class DistCp extends Configured implements Tool {
* Loads properties from distcp-default.xml into configuration * Loads properties from distcp-default.xml into configuration
* object * object
* @return Configuration which includes properties from distcp-default.xml * @return Configuration which includes properties from distcp-default.xml
* and distcp-site.xml
*/ */
private static Configuration getDefaultConf() { private static Configuration getDefaultConf() {
Configuration config = new Configuration(); Configuration config = new Configuration();
config.addResource(DISTCP_DEFAULT_XML); config.addResource(DISTCP_DEFAULT_XML);
config.addResource(DISTCP_SITE_XML);
return config; return config;
} }

View File

@ -47,7 +47,7 @@ public class DistCpOptions {
public static final int maxNumListstatusThreads = 40; public static final int maxNumListstatusThreads = 40;
private int numListstatusThreads = 0; // Indicates that flag is not set. private int numListstatusThreads = 0; // Indicates that flag is not set.
private int maxMaps = DistCpConstants.DEFAULT_MAPS; private int maxMaps = DistCpConstants.DEFAULT_MAPS;
private float mapBandwidth = DistCpConstants.DEFAULT_BANDWIDTH_MB; private float mapBandwidth = 0; // Indicates that we should use the default.
private String copyStrategy = DistCpConstants.UNIFORMSIZE; private String copyStrategy = DistCpConstants.UNIFORMSIZE;
@ -609,8 +609,10 @@ public class DistCpOptions {
String.valueOf(useDiff)); String.valueOf(useDiff));
DistCpOptionSwitch.addToConf(conf, DistCpOptionSwitch.SKIP_CRC, DistCpOptionSwitch.addToConf(conf, DistCpOptionSwitch.SKIP_CRC,
String.valueOf(skipCRC)); String.valueOf(skipCRC));
DistCpOptionSwitch.addToConf(conf, DistCpOptionSwitch.BANDWIDTH, if (mapBandwidth > 0) {
String.valueOf(mapBandwidth)); DistCpOptionSwitch.addToConf(conf, DistCpOptionSwitch.BANDWIDTH,
String.valueOf(mapBandwidth));
}
DistCpOptionSwitch.addToConf(conf, DistCpOptionSwitch.PRESERVE_STATUS, DistCpOptionSwitch.addToConf(conf, DistCpOptionSwitch.PRESERVE_STATUS,
DistCpUtils.packAttributes(preserveStatus)); DistCpUtils.packAttributes(preserveStatus));
if (filtersFile != null) { if (filtersFile != null) {

View File

@ -107,7 +107,7 @@ public class TestOptionsParser {
DistCpOptions options = OptionsParser.parse(new String[] { DistCpOptions options = OptionsParser.parse(new String[] {
"hdfs://localhost:9820/source/first", "hdfs://localhost:9820/source/first",
"hdfs://localhost:9820/target/"}); "hdfs://localhost:9820/target/"});
Assert.assertEquals(options.getMapBandwidth(), DistCpConstants.DEFAULT_BANDWIDTH_MB, DELTA); Assert.assertEquals(options.getMapBandwidth(), 0, DELTA);
options = OptionsParser.parse(new String[] { options = OptionsParser.parse(new String[] {
"-bandwidth", "-bandwidth",
@ -389,7 +389,7 @@ public class TestOptionsParser {
+ "deleteMissing=false, ignoreFailures=false, overwrite=false, " + "deleteMissing=false, ignoreFailures=false, overwrite=false, "
+ "append=false, useDiff=false, fromSnapshot=null, toSnapshot=null, " + "append=false, useDiff=false, fromSnapshot=null, toSnapshot=null, "
+ "skipCRC=false, blocking=true, numListstatusThreads=0, maxMaps=20, " + "skipCRC=false, blocking=true, numListstatusThreads=0, maxMaps=20, "
+ "mapBandwidth=100.0, " + "mapBandwidth=0.0, "
+ "copyStrategy='uniformsize', preserveStatus=[], " + "copyStrategy='uniformsize', preserveStatus=[], "
+ "preserveRawXattrs=false, atomicWorkPath=null, logPath=null, " + "preserveRawXattrs=false, atomicWorkPath=null, logPath=null, "
+ "sourceFileListing=abc, sourcePaths=null, targetPath=xyz, " + "sourceFileListing=abc, sourcePaths=null, targetPath=xyz, "
@ -572,6 +572,8 @@ public class TestOptionsParser {
Configuration conf = new Configuration(); Configuration conf = new Configuration();
Assert.assertFalse(conf.getBoolean(DistCpOptionSwitch.IGNORE_FAILURES.getConfigLabel(), false)); Assert.assertFalse(conf.getBoolean(DistCpOptionSwitch.IGNORE_FAILURES.getConfigLabel(), false));
Assert.assertFalse(conf.getBoolean(DistCpOptionSwitch.ATOMIC_COMMIT.getConfigLabel(), false)); Assert.assertFalse(conf.getBoolean(DistCpOptionSwitch.ATOMIC_COMMIT.getConfigLabel(), false));
Assert.assertEquals(
conf.getRaw(DistCpOptionSwitch.BANDWIDTH.getConfigLabel()), null);
DistCpOptions options = OptionsParser.parse(new String[] { DistCpOptions options = OptionsParser.parse(new String[] {
"-atomic", "-atomic",
"-i", "-i",
@ -581,7 +583,7 @@ public class TestOptionsParser {
Assert.assertTrue(conf.getBoolean(DistCpOptionSwitch.IGNORE_FAILURES.getConfigLabel(), false)); Assert.assertTrue(conf.getBoolean(DistCpOptionSwitch.IGNORE_FAILURES.getConfigLabel(), false));
Assert.assertTrue(conf.getBoolean(DistCpOptionSwitch.ATOMIC_COMMIT.getConfigLabel(), false)); Assert.assertTrue(conf.getBoolean(DistCpOptionSwitch.ATOMIC_COMMIT.getConfigLabel(), false));
Assert.assertEquals(conf.getFloat(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), -1), Assert.assertEquals(conf.getFloat(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), -1),
DistCpConstants.DEFAULT_BANDWIDTH_MB, DELTA); -1.0, DELTA);
conf = new Configuration(); conf = new Configuration();
Assert.assertFalse(conf.getBoolean(DistCpOptionSwitch.SYNC_FOLDERS.getConfigLabel(), false)); Assert.assertFalse(conf.getBoolean(DistCpOptionSwitch.SYNC_FOLDERS.getConfigLabel(), false));
@ -602,6 +604,62 @@ public class TestOptionsParser {
Assert.assertEquals(conf.getFloat(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), -1), 11.2, DELTA); Assert.assertEquals(conf.getFloat(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), -1), 11.2, DELTA);
} }
@Test
public void testOptionsAppendToConfDoesntOverwriteBandwidth() {
Configuration conf = new Configuration();
Assert.assertEquals(
conf.getRaw(DistCpOptionSwitch.BANDWIDTH.getConfigLabel()), null);
DistCpOptions options = OptionsParser.parse(new String[] {
"hdfs://localhost:8020/source/first",
"hdfs://localhost:8020/target/"});
options.appendToConf(conf);
Assert.assertEquals(
conf.getFloat(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), -1), -1.0,
DELTA);
conf = new Configuration();
Assert.assertEquals(
conf.getRaw(DistCpOptionSwitch.BANDWIDTH.getConfigLabel()), null);
options = OptionsParser.parse(new String[] {
"-update",
"-delete",
"-pu",
"-bandwidth",
"77",
"hdfs://localhost:8020/source/first",
"hdfs://localhost:8020/target/"});
options.appendToConf(conf);
Assert.assertEquals(
conf.getFloat(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), -1), 77.0,
DELTA);
conf = new Configuration();
conf.set(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), "88");
Assert.assertEquals(
conf.getRaw(DistCpOptionSwitch.BANDWIDTH.getConfigLabel()), "88");
options = OptionsParser.parse(new String[] {
"hdfs://localhost:8020/source/first",
"hdfs://localhost:8020/target/"});
options.appendToConf(conf);
Assert.assertEquals(
conf.getFloat(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), -1), 88.0,
DELTA);
conf = new Configuration();
conf.set(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), "88.0");
Assert.assertEquals(
conf.getRaw(DistCpOptionSwitch.BANDWIDTH.getConfigLabel()), "88.0");
options = OptionsParser.parse(new String[] {
"-bandwidth",
"99",
"hdfs://localhost:8020/source/first",
"hdfs://localhost:8020/target/"});
options.appendToConf(conf);
Assert.assertEquals(
conf.getFloat(DistCpOptionSwitch.BANDWIDTH.getConfigLabel(), -1), 99.0,
DELTA);
}
@Test @Test
public void testAppendOption() { public void testAppendOption() {
Configuration conf = new Configuration(); Configuration conf = new Configuration();