hadoop中mapreduce的常用类,用户对BSM所陷入的误区

BSM是能够给企业带来管理效益、创造更大生产利润的管理方法论,但中国用户目前对BSM的认识却是远远不够的,因此在实施BSM的过程中陷入了一些误区,也给理解BSM带来了一定的影响,认为中国目前是不能够达到BSM高度的,这些看法都是不全面的。

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到MR集群的文件,以逗号分隔

-libjars指定需要copy到MR集群的classpath的jar包,以逗号分隔

-archives指定需要copy到MR集群的压缩文件,以逗号分隔,会自动解压缩

  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是MR的任何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是MR用来缓存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。 分布式缓存会截取URI的片段作为链接的名字。 例如,URI是 hdfs://namenode:port/lib.so.1#lib.so, 则在task当前工作目录会有名为lib.so的链接, 它会链接分布式缓存中的lib.so.1


图片 1


) 写这个文章的时候才意识到新旧API是同时存在于1.1.2的hadoop中的。以前还一直纳闷儿为什么有时候是jobClient提交任...

.NET开发CAD入门之Hello,.netcadhello

1、开发情况介绍

使用.NET开发CAD,在CAD2005之前的版本其实用的是ActiveX的方式开发的,并非真正意义上的.Net开发。从CAD2005开始支持了.NET对其的开发,在安装CAD2005之后的版本时都必须安装.NET Framework,证明CAD本身也有部分功能是用.NET开发出来的。

2、开发环境搭建

2.1:安装CAD的2005或更高版本。

2.2:安装.NET开发工具(例如VS)。

2.3:开发语言可以用属于.NET的C#、VB.NET、托管C 等。

3、使用VB.NET创建CAD开发的Hello项目

3.1:VS2005新建项目,选择VB-类库,指定名称及路径,勾选“创建解决方案的目录”。

3.2:项目添加引用,acdbmgd.dll和acmgd.dll,dll文件路径(C:Program Files (x86)AutoCAD 2007)

 

3.3:视图-对象浏览器,浏览引用的程序集所提供的的类

3.4:添加Hello命令

'要添加命令必须导入AutoCAD .NET托管封装类
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime

Public Class Class1
    '添加CAD命令,必须用 Runtime提供的CommandMethod属性
    <CommandMethod("Hello")> _
    Public Sub Hello() '当Hello命令在CAD中被执行,Hello()函数就会被调用
        '获取当前活动文档的Editor对象,也就是命令行
        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        '调用Editor对象的WriteMessage函数在命令行上显示文本
        ed.WriteMessage("欢迎进入.NET开发AutoCAD的世界!")
        'CAD当前活动文档的Editor对象可以使用Application类来访问,创建Editor实例后,可以调用它的WriteMessage函数在命令行显示文本内容
    End Sub
End Class

3.5:调试

3.5.1:项目属性-调试-启动外部程序,找到相应的CAD版本

3.5.2:CAD装载托管程序,用NetLoad命令。在CAD命令行执行NetLoad命令,弹出【选择.NET程序集】的对话框,选择编译生成的Hello.dll文件。

3.5.3:在CAD命令行输入Hello并回车执行命令,会出现“未知命令”的提示。

因为什么之后研究,解决这个问题的方法是:停止调试,项目属性-引用 查看acdbmgd.dll和acmgd.dll的“复制本地”属性,将True修改为False。

再次调试即可。

 在此非常感谢《Auto CAD VBA & VB.NET开发 基础与实例教程》这本书对我的帮助。 

文章内容纯属个人的一点想法和感受,由于水平有限,难免会有错误和遗漏,欢迎批评指正(邮箱:[email protected])。
查看评论

1、开发情况介绍 使用.NET开发CAD,在CAD2005之前的版本其实用的是ActiveX的方式开发的,并非真正意义上的...

分析起来,企业存在的误区主要有几方面:一是认为实施BSM解决方案是可以通过一个产品的安装部署来迅速完成的。这种观点是非常不全面,因为每个企业都有各自不同的业务系统,要开展BSM的实施管理好这些业务系统就要进行前期的业务模型构建,梳理好与业务相关的各IT要素之间的关系,从而要对IT相关要素进行关联性管控,以得出业务的使用人数、每个人的业务流量、分布在内网的位置、这个系统的平均故障响应时间、平均无故障运行时间等参数情况,只有通过了解、运用这些参数,才能真正管理好业务系统的运转,这是一个不可逾越过程。

本文由ca88手机版登录发布于亚洲城官网,转载请注明出处:hadoop中mapreduce的常用类,用户对BSM所陷入的误区

TAG标签: ca88手机版登录
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。