hadoop初学之--------GenericOptionsParser解析器
2013-10-11 21:30
435 查看
GenericOptionsParser是hadoop框架中解析命令行参数的基本类。它能够辨别一些标准的命令行参数,能够使应用程序轻易地指定namenode,jobtracker,以及其他额外的配置资源。
parseGeneralOptions(options, conf, args)这个函数解析用户指定的参数,获取基本选项以及根据需要修改配置。它首先指定每个通用选项的属性,然后解析选项,参数,把它转化为命令行对象(CommandLine),紧接着把设定好的命令行参数写入系统配置,源代码如下:
processGeneralOptions函数作用是修改配置,利用CommandLine对象的相关方法,这个类包含处理选项以及选项描述,选项值的方法,源代码如下:
原文出处:http://www.cnblogs.com/caoyuanzhanlang
GenericOptionsParser主要方法、属性分析
GenericOptionsParser这个类是从构造函数开始的,它有多个构造函数,真正的处理是在parseGeneralOptions(options, conf, args)这个函数中。/** * 构造GenericOptionsParser来解析给定的选项以及基本的hadoop选项 * 命令行对象可以通过getCommandLine()函数获得 * @param conf the configuration to modify * @param options options built by the caller * @param args User-specified arguments * @throws IOException */ public GenericOptionsParser(Configuration conf, Options options, String[] args) throws IOException { parseGeneralOptions(options, conf, args); this.conf = conf; }
parseGeneralOptions(options, conf, args)这个函数解析用户指定的参数,获取基本选项以及根据需要修改配置。它首先指定每个通用选项的属性,然后解析选项,参数,把它转化为命令行对象(CommandLine),紧接着把设定好的命令行参数写入系统配置,源代码如下:
View parseGeneralOptions Code /** * 解析用户指定的参数,获取基本选项以及根据需要修改配置 * Parse the user-specified options, get the generic options, and modify * configuration accordingly * @param conf Configuration to be modified * @param args User-specified arguments * @return Command-specific arguments */ private String[] parseGeneralOptions(Options opts, Configuration conf, String[] args) throws IOException { // 指定每个通用选项的属性 opts = buildGeneralOptions(opts); CommandLineParser parser = new GnuParser(); try { // 解析选项,参数,获取命令行 commandLine = parser.parse(opts, args, true); // 根据用户指定的参数(commandLine)修改系统的配置 processGeneralOptions(conf, commandLine); return commandLine.getArgs(); } catch(ParseException e) { LOG.warn("options parsing failed: "+e.getMessage()); HelpFormatter formatter = new HelpFormatter(); formatter.printHelp("general options are: ", opts); } return args; }
processGeneralOptions函数作用是修改配置,利用CommandLine对象的相关方法,这个类包含处理选项以及选项描述,选项值的方法,源代码如下:
View processGeneralOptions Code /** * 根据用户指定的参数修改配置 * Modify configuration according user-specified generic options * @param conf Configuration to be modified * @param line User-specified generic options */ private void processGeneralOptions(Configuration conf, CommandLine line) throws IOException { if (line.hasOption("fs")) { // 设置NAMENODE的ip FileSystem.setDefaultUri(conf, line.getOptionValue("fs")); } if (line.hasOption("jt")) { conf.set("mapred.job.tracker", line.getOptionValue("jt")); } if (line.hasOption("conf")) { String[] values = line.getOptionValues("conf"); for(String value : values) { // 新增配置文件,除非是final属性,不然新配置文件会覆盖旧的配置文件 conf.addResource(new Path(value)); } } if (line.hasOption("libjars")) { conf.set("tmpjars", validateFiles(line.getOptionValue("libjars"), conf)); //setting libjars in client classpath URL[] libjars = getLibJars(conf); if(libjars!=null && libjars.length>0) { conf.setClassLoader(new URLClassLoader(libjars, conf.getClassLoader())); Thread.currentThread().setContextClassLoader( new URLClassLoader(libjars, Thread.currentThread().getContextClassLoader())); } } if (line.hasOption("files")) { conf.set("tmpfiles", validateFiles(line.getOptionValue("files"), conf)); } if (line.hasOption("archives")) { conf.set("tmparchives", validateFiles(line.getOptionValue("archives"), conf)); } if (line.hasOption('D')) { String[] property = line.getOptionValues('D'); for(String prop : property) { String[] keyval = prop.split("=", 2); if (keyval.length == 2) { conf.set(keyval[0], keyval[1]); } } } conf.setBoolean("mapred.used.genericoptionsparser", true); // tokensFile if(line.hasOption("tokenCacheFile")) { String fileName = line.getOptionValue("tokenCacheFile"); // check if the local file exists try { FileSystem localFs = FileSystem.getLocal(conf); Path p = new Path(fileName); if (!localFs.exists(p)) { throw new FileNotFoundException("File "+fileName+" does not exist."); } LOG.debug("setting conf tokensFile: " + fileName); conf.set("mapreduce.job.credentials.json", localFs.makeQualified(p).toString()); } catch (IOException e) { throw new RuntimeException(e); } } }
原文出处:http://www.cnblogs.com/caoyuanzhanlang
相关文章推荐
- 初学hadoop之linux系统操作的hdfs的常用命令
- 初学hadoop遇到的问题
- hadoop初学入门之一:相关博文资料与注意事项
- Hadoop初学指南(1)--Hadoop1伪分布模式的安装
- 初学hadoop2.7.1(二)配置伪集群
- 初学Hadoop之HDFS
- hadoop初学(一)
- 初学Hadoop
- Hadoop初学指南(3)--HDFS的体系结构
- hadoop初学
- hadoop初学-WordCount
- 初学Hadoop之图解MapReduce与WordCount示例分析
- 初学hadoop之一:相似度计算(Jacard距离)
- hadoop初学之伪分布式配置
- 初学hadoop2.7.1(一)配置单点模式
- Hadoop初学指南(9)--hadoop1的集群安装
- Hadoop初学指南(10)--ZooKeeper的集群安装和操作
- 初学HADOOP(MAPREDUCE-WORLD COUNT/HIVE/SQOOP)
- [初学hadoop]错误信息:hdfs://192.168.0.16:9000/report.bak, expected: file:///
- hadoop初学之单机模式