如何让你的作业在Hadoop集群中真正实现分布式运行
搭建过hadoop之后,如何让程序在hadoop集群中分布式运行成了一件令人头痛的事。
可能有人会说在eclipse的类文件中右键点击-》“run on hadoop”不就行了嘛,注意:eclipse中的“run on hadoop”默认只是运行在单机上的,因为要想在集群中让程序分布式运行还要经历上传类文件、分发到各个节点等过程的,一个简单的“run on hadoop”只是启动了本地hadoop类库来运行你的程序而已,在Hadoop JobTracker的web管理页面(http://localhost:50030)上是看不到任何作业信息的,因为你的作业根本就没有运行在集群上。
《Hadoop:the Definitive Guide 3rd edition》上介绍的是使用打jar包的方式,然后用hadoop脚本命令的jar选项来运行分布式程序。如下所示:
hadoop jar hadoop-examples.jar v3.MaxTemperatureDriver -conf conf/hadoop-cluster.xml input/ncdc/all max-temp
但问题是这本书里面是使用maven来编译类文件的,通过pom.xml他很容易就解决了jar包的依赖问题,这让我等平常使用eclipse来编程的灰常依赖IDE的程序猿们情何以堪啊,maven的配置及使用方法到现在还没搞懂,索性不学了,自己打jar包吧
自己打jar包就要解决类文件引用的问题,以我在程序中使用的Hbase的jar包(hbase-0.94.3.jar)为例,我先后尝试了各种试图解决类文件引用及打jar包的方法,无论如何,总会提示我找不到org.apache.hadoop.hbase.util.Bytes class文件(它就在hbase-0.94.3.jar中),以下为我尝试的各种方法:
1.设置classpath到hbase-0.94.3.jar
2.设置HADOOP_CLASSPATH到hbase-0.94.3.jar
3.设置HADOOP_CLASSPATH到HBASE_HOME
4.把hbase-0.94.3.jar打包到运行的jar包中(其中包括了1.直接打进jar包;2.放入lib文件夹再打入jar包;3.通过manifest文件设置Class-Path选项指向hbase-0.94.3.jar)
5.把hbase-0.94.3.jar复制到HADOOP_HOME/lib下面
直至这个时候我已要接近崩溃了,要知道光是解决这个问题已花费了我接近三天的时间,仍是一无所获,索性不做了改弄其他东西,如此10多天过去了。
等忙完这10多天,另一个解决问题的角度出现了,既然自己在命令行下打包不行,为何不使用eclipse呢(说到底还是屈服于IDE了,我鄙视我自己!)。刚开始是直接把整个项目导出成jar包,但这样只是包含了自己编写的源文件及lib文件夹下的依赖jar包,并没有包含hadoop-core之类的引用第三方jar包,按着这个思路就去google了下如何完整的把引用的第三方jar包也包含进来的打包方式,还真给找到了:Fat-jar!(下载地址)
下载之后解压缩,会得到一个名为net.sf.fjep.fatjar_0.0.31.jar(版本不同,名字可能不同)的jar包,把它拷到eclipse_home/plugins中然后重启eclipse,如果在Windows=>prefernce=>fat jar preference看到它就说明已经安装成功了。
接下来,在需要导出的Java项目上右击,选择“导出”,选择”其他”中的”Fat Jar EXporter”,即可进行打包操作。注意选择好”Main-class”以及需要打包的文件。“finish”之后你就会得到一个完整的jar包了,这样便可以在任何地方通过hadoop jar命令来运行了,以我的程序为例:
hadoop jar HDG3.jar cf/RateDataImporter //HDG3.jar为我的jar包的名字,共64Mb,cf/RateDataImporter为我要运行的类文件名字
在jobtracker的web管理界面可以很清楚的看到此作业的信息,以及正在运行的进度、状态等,感觉很爽的有木有(虽然我的集群只有两个节点)!!
至此,折腾了许久的hadoop集群运行分布式作业问题终于解决!
以上各种拙计,有高手指正不吝感激!
本文系原创,转载请注明出处:http://www.cnblogs.com/beanmoon/archive/2013/05/09/3068729.html
ComponentOne Studio for ASP.NET Wijmo最新版本2013V1支持MVC4,其中包括:
- 新增 MVC 4 工程模板 (C# & VB) 开箱即用的MVC 4 工程模板基于Microsoft内置模板创建,我们仅优化了标记和CSS样式为 Wijmo风格,熟悉的模板布局和界面风格,无疑将缩短您的学习过程、节省开发时间及提高开发效率。
- 新增国际化主题(Metro)
- MVC4 模板自动增强Wijmo MVC Scaffolding模板,将会为您应用程序中的增删改查(CRUD)操作生成默认的模板文件,这些生成的文件为您的工程构建了起始的工程文件目录结构,当然你也可以修改它,Scaffolding模板的优美之处在于生成后您可以按照您的意愿来扩展它。
- Wijmo-增强编辑器模板 该模板使您可以通过日期选择器、数值输入框和滑动条快速的定制应用。您甚至可以添加其他自定义的模板。
开始使用
使用ComponentOne Studio for ASP.NET Wijmo制作MVC4应用程序,首先要做的是安装Studio for ASP.NET Wijmo 。
测试环境 VS2012、MVC4、Framework4.5、IE10、Studio for ASP.NET Wijmo2013V1
文件-新建项目
在安装了Studio for ASP.NET Wijmo2013V1 之后,在 VS2012 中选择新建项目。在 Web 选项卡中,您可以发现Studio for ASP.NET Wijmo2013V1。
好了,现在让我们运行程序看看初始效果。您可能对这个界面很熟悉。因为Wijmo MVC 4 工程模板是基于Microsoft内置模板创建。我们仅优化了标记和CSS样式为 Wijmo风格。
添加模型
下面,让我们使用Wijmo MVC Scaffolding模板创建一个简易的“ToDoList”。首先我们来添加模型。需要添加以下代码:
namespace MVC4Wijmo.Models { public class ToDoList { [Editable( false )] public int Id { get ; set ; } [Required] public string Title { get ; set ; } [Display(Name = "Date Created" )] public DateTime? CreatedAt { get ; set ; } [Range(0, 5), UIHint( "IntSlider" )] public int Priority { get ; set ; } [Range(0, 1000000)] public decimal Cost { get ; set ; } [DataType(DataType.MultilineText)] public string Summary { get ; set ; } public bool Done { get ; set ; } [Display(Name = "Date Completed" )] public DateTime? DoneAt { get ; set ; } public ICollection<TahDoItem> TahDoItems { get ; set ; } } public class TahDoItem { [Editable( false )] public int Id { get ; set ; } [Required] public string Title { get ; set ; } [Display(Name = "Date Created" )] public DateTime? CreatedAt { get ; set ; } [Range(0, 5), UIHint( "IntSlider" )] public int Priority { get ; set ; } [DataType(DataType.MultilineText)] public string Note { get ; set ; } public int ToDoListId { get ; set ; } public ToDoList ToDoList { get ; set ; } public bool Done { get ; set ; } [Display(Name = "Date Completed" )] public DateTime? DoneAt { get ; set ; } } } |
创建控制器和视图
在添加控制器和视图之前,编译项目。这将使Scaffolding模板识别新增的模型。现在,邮件点击Controllers文件夹,选择“添加控制器”,选择一下选项点击“添加”。
Scaffolding将会自动生成控制器和增删改查应用程序所需要的所有视图。最大的亮点是这些生成的文件为您的工程构建了起始的工程文件目录结构,当然你也可以修改它,Scaffolding模板的优美之处在于生成后您可以按照您的意愿来扩展它。
运行
仅仅通过以上步骤,我们就实现了简易的ToDoList。切换到ToDoList页面,应用程序会给模型创建数据源,首先展示给我们的是一张空表格。我们可以通过“创建新计划”按钮添加计划。
在创建视图中您会发现展现在眼前的是标准的EditorFor Helpers。然而我们已经在工程中添加了自定义编辑模板。所以如果使用日期或数值等类型时,Scaffolding模板会自动生成编辑器。下面自定义编辑器视图截图:
现在我们就完成了具有增删改查功能的MVC4应用程序。这些生成的文件为您的工程构建了起始的工程文件目录结构,当然你也可以修改它,Scaffolding模板的优美之处在于生成后您可以按照您的意愿来扩展它。
Demo源码下载:TahDoMvc4.zip
工具下载链接:Studio for ASP.NET Wijmo
-----------------------------------------------------------------------------------------------------------------------------------------------
译者注:
本系列共9篇文章,翻译自Asp.Net MVC4 官方教程,由于本系列文章言简意赅,篇幅适中,从一个示例开始讲解,全文最终完成了一个管理影片的小系统,非常适合新手入门Asp.Net MVC4,并由此开始开发工作。9篇文章为:
1. Asp.Net MVC4 入门介绍
· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/01/2749906.html
2. 添加一个控制器
· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/02/2751015.html
3. 添加一个视图
· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/06/2756711.html
4. 添加一个模型
· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/12/17/2821495.html
5. 从控制器访问数据模型
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/11/2855935.html
6. 验证编辑方法和编辑视图
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/24/2874622.html
7. 给电影表和模型添加新字段
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/02/26/2933105.html
8. 给数据模型添加校验器
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/03/05/2944030.html
9. 查询详细信息和删除记录
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/03/07/2948000.html
10.第三方控件Studio for ASP.NET Wijmo MVC4 工具应用
· 地址:http://www.cnblogs.com/powertoolsteam/archive/2013/05/09/3068699.html