Hadoop中的GenericOptionsParser和ToolRunner
从命令行运行MapReduce程序时,需要提供jar名称,即具有HDFS中的代码,输入和输出路径的类。这是运行MapReduce作业必须提供的最低要求。我们可以使用conf.set()方法在驱动程序类中设置其他配置。但是在代码中设置配置存在一个缺点,任何配置更改都需要更改代码,重新打包jar,然后运行它。为避免这种情况,我们可以选择在执行时通过命令行提供配置。为此,我们可以在Hadoop中使用GenericOptionsParser类。
Hadoop中的GenericOptionsParser类
GenericOptionsParser类是org.apache.hadoop.util包中的实用程序类。此类解析标准命令行参数,并将其设置在配置对象上,然后可在应用程序中使用。
使用GenericOptionsParser类的常规方法是实现Tool接口,然后使用ToolRunner运行应用程序。 ToolRunner在内部使用GenericOptionsParser解析通用Hadoop命令行参数,然后通过设置命令行参数来修改工具的配置。
支持的通用选项
ToolRunner通过GenericOptionsParser支持的选项如下:
-conf <配置文件> –指定应用程序配置文件。因此,我们可以准备一个XML文件并使用-conf选项进行设置,这样就可以一次设置许多属性。
-D <属性> = <值> –设置给定属性的值。使用-D选项指定属性将覆盖配置文件中或者驱动程序代码中具有相同名称的任何属性。
-fs <file:///>或者<hdfs:// namenode:port> –此通用选项用于指定要使用的默认文件系统URL。从配置中覆盖" fs.defaultFS"属性。
-jt <local>或者<resourcemanager:port> –用于设置YARN ResourceManager。
-files <以逗号分隔的文件列表>-指定以逗号分隔的文件,将其复制到map reduce集群。仅适用于工作。如果要向分布式缓存中添加文件,而不是使用job.addCacheFile()方法在驱动程序代码中对其进行硬编码,则可以使用-files通用选项来指定它。
-libjars <以逗号分隔的jar列表> –指定以逗号分隔的jar文件,以包括在类路径中。仅适用于工作。如果我们想将jar添加到分布式缓存中,而不是使用job.addFileToClassPath()方法在驱动程序中对其进行硬编码,则可以使用-libjars泛型选项进行指定。
-archives <以逗号分隔的存档列表>-指定以逗号分隔的存档,以在计算机上取消存档。仅适用于工作。如果要添加已存档的文件(zip,tar和tgz / tar.gz文件),则可以使用-libjars泛型选项来指定它,而不是通过使用job.addCacheArchive()方法在驱动程序中对其进行硬编码。
使用通用选项的示例
1如果要设置配置文件。
hadoop jar test.jar com.theitroad.MyClass -conf hadoop/conf/my-hadoop-config.xml /inputfile /outputfile
2如果要为任何配置设置值。作为示例,将减速器的数量设置为10.
hadoop jar test.jar com.theitroad.MyClass -D mapreduce.job.reduces=10 /inputfile /outputfile
请注意,不建议使用mapred.reduce.tasks属性,而应使用mapreduce.job.reduces属性。
3在分布式缓存中设置文件,jar和存档文件。
hadoop jar test.jar com.theitroad.MyClass -files /input/test.txt -libjars /lib/test.jar /inputfile /outputfile