金沙网址它能够辨认标准的命令行参数

hadoop中mapreduce的常用类(1)

写那一个文章的时候才察觉到新旧API是还要设有于1.1.2的hadoop中的。从前还直选用闷儿为何一时候是jobClient提交任务,有时是Job…不管API是还是不是更新,上面那几个类也仍旧存在于API中的,经过和谐追踪源码,发掘原理照旧这一个。只可是举行了再也协会,举办了一部分包装,使得增加性更加好。所以如故把这个事物从记载本贴进来吧。

关于那个类的牵线以及利用,有的是在融洽debug中来看的,许多为纯翻译API的笺注,可是翻译的长河受益匪浅。

GenericOptionsParser

parseGeneralOptions(Options opts, Configuration conf, String[]
args)解析命令行参数

GenericOptionsParser是为hadoop框架剖判命令行参数的工具类。它能够辨识规范的命令行参数,使app能够轻巧钦定namenode,jobtracker,以及额外的布局能源或音讯等。它协理的效益有:

-conf 钦点布置文件;

-D 钦赐布署新闻;

-fs 指定namenode

-jt 指定jobtracker

-files 钦赐需求copy到M途观集群的文本,以逗号分隔

-libjars钦点供给copy到MCRUISER集群的classpath的jar包,以逗号分隔

-archives钦点供给copy到M传祺集群的压缩文件,以逗号分隔,会活动解压缩

  1. String[] otherArgs = new GenericOptionsParser(job, args)

  2. .getRemainingArgs();

  3. if (otherArgs.length != 2) {

  4. System.err.println(“Usage: wordcount “);

  5. System.exit(2);

  6. }

ToolRunner

用来跑达成Tool接口的工具。它与GenericOptionsParser同盟来解析命令行参数,只在这一次运转中改换configuration的参数。

Tool

拍卖命令行参数的接口。Tool是M奥迪Q5的别的tool/app的正儿八经。那个完成应有代理对标准命令行参数的拍卖。下边是博闻强识实现:

public class MyApp extends Configured implements Tool {              public int run(String[] args) throws Exception {   // 即将被ToolRunner执行的Configuration   Configuration conf = getConf();               // 使用conf建立JobConf   JobConf job = new JobConf(conf, MyApp.class);           // 执行客户端参数   Path in = new Path(args[1]);   Path out = new Path(args[2]);               // 指定job相关的参数        job.setJobName("my-app");   job.setInputPath(in);   job.setOutputPath(out);   job.setMapperClass(MyApp.MyMapper.class);   job.setReducerClass(MyApp.MyReducer.class);   *   // 提交job,然后监视进度直到job完成   JobClient.runJob(job);   }              public static void main(String[] args) throws Exception {   // 让ToolRunner 处理命令行参数    int res = ToolRunner.run(new Configuration(), new Sort(), //这里封装了GenericOptionsParser解析args               System.exit(res);   }   }   

MultipleOutputFormat

自定义输出文件名称大概说名称格式。在jobconf中setOutputFormat(MultipleOutputFormat的子类)就行了。并非这种part-r-00000什么的了。。。并且能够分配结果到多少个文本中。

MultipleOutputFormat继承了FileOutputFormat,
允许将出口数据写进不相同的出口文件中。有二种采纳场景:

a.
最少有二个reducer的mapreduce职务。那么些reducer想要依照实际的key将出口写进分化的文本中。假若四个key编码了实际上的key和为实际的key内定的职分

b.
只有map的任务。这些任务想要把输入文件恐怕输入内容的部分名称设为输出文件名。

c. 独有map的天职。那几个任务为出口命名时,须求借助keys和输入文件名。 

//这里是根据key生成多个文件的地方,可以看到还有value,name等参数   @Override   protected String generateFileNameForKeyValue(Text key,   IntWritable value, String name) {   char c = key.toString().toLowerCase().charAt(0);   if (c >= 'a' && c <= 'z') {   return c + ".txt";   }   return "result.txt";   }   

DistributedCache

在集群中一点也不慢分发大的只读文件。DistributedCache是M索罗德用来缓存app必要的诸如text,archive,jar等的文本的。app通过jobconf中的url来钦赐须要缓存的公文。它会假定钦点的这些文件已经在url钦赐的对应地方上了。在job在node上试行在此以前,DistributedCache会copy供给的文本到这么些slave
node。它的功能正是为每一个job只copy一次,何况copy到钦点地点,能够自行解压缩。

DistributedCache能够用来散发轻巧的只读文件,可能某个复杂的比方archive,jar文件等。archive文件会自行解压缩,而jar文件会被电动放置到义务的classpath中(lib)。分发压缩archive时,能够内定解压名称如:dict.zip#dict。这样就能够解压到dict中,不然默许是dict.zip中。

文本是有实践权限的。客户能够选择在职分的干活目录下创设针对DistributedCache的软链接。

DistributedCache.createSymlink(conf);     DistributedCache.addCacheFile(new Path("hdfs://host:port/absolute-path#link-name").toUri(), conf);      

DistributedCache.createSymlink(Configuration)方法让DistributedCache
在当前职业目录下创办到缓存文件的符号链接。则在task的当前工作目录会有link-name的链接,也就是火速方法,链接到expr.txt文件,在setup方法运用的情景则要轻易相当多。或许通过安装配置文件属性mapred.create.symlink为yes。
遍布式缓存会截取U普拉多I的一对作为链接的名字。 举个例子,ULacrosseI是
hdfs://namenode:port/lib.so.1#lib.so,
则在task当前工作目录会有名称叫lib.so的链接,
它会链接遍布式缓存中的lib.so.1


金沙网址 1


)
写那一个小说的时候才察觉到新旧API是还要设有于1.1.2的hadoop中的。以前还间接选举取闷儿为啥偶然候是jobClient提交任…

相关文章