windows下eclipse远程连接hadoop集群开发mapreduce

转载请注明出处,谢谢
2017-10-22 17:14:09
之前都是用python开发maprduce程序的,今天试了在windows下通过eclipse java开发,在开发前先搭建开发环境。在此,总结这个过程,希望能够帮助有需要的朋友。
用Hadoop eclipse plugin,可以浏览管理HDFS,自动创建MR程序的模板文件,最爽的就是可以直接Run on hadoop。
1、安装插件
下载hadoop-eclipse-plugin-1.2.1.jar,并把它放到 F:\eclipse\plugins 目录下。
2、插件配置与使用
2.1指定hadoop的源码目录
2.2、打开Map/Reduce视图
”Window”->”Open Perspective”->”Other”->“Map/Reduce”.
“Window”->”Show views”->”Other”->”Map Reduce Tools”->”Map/Reduce locations”.

 

正常情况下回出现左上角的HDFS标志,等eclipse与hadoop集群连接后,会在这显示HDFS目录结构。
2.3、新建Map/Reduce Localtion
点击图中红色框或者鼠标右击选中新建,然后出现下面的界面,配置hadoop集群的信息。
这里需要注意的是hadoop集群信息的填写。因为我是在windows下用eclipse远程连接hadoop集群【完全分布式】开发的,所以这里填写的host是master的IP地址。如果是hadoop伪分布式的可以填写localhost。
【Jser name】填写的windows电脑的用户名,右击【我的电脑】-->【管理】-->【本地用户和组】-->【修改用户名字】
完成前面的步骤后,正常的eclipse界面应该像下图那样的。注意example1工程是我自己新建的,主要是用来验证eclipse能否远程连接hadoop集群来开发mapreduce程序。并且,此时在eclipse的HDFS视图界面对HDFS的操作(增删查)和在命令行上对HDFS操作的结果是一样的。
3、开发mapreduce程序
3.1、新建mapreduce工程
使用插件开发的好处这时显示出来了,完成这一个步骤,在工程视图会出现一个mapreduce工程模板,不用我们自己导入hadoop的jar包。下图红框就是新建mapreduce工程后生成的空模板,我们需要做的是在src文件夹中新建包和开发java程序。
3.3、在远程终端中通过命令行方式上传文件hadoop fs -put test.txt /input/  或者 通过eclipse 的HDFS视图上传input文件: /input/test.txt,内容如下:
liang ni hao ma
wo hen hao
ha
qwe
asasa
xcxc vbv xxxx aaa eee
3.2、WordCount.java程序
package com.hadoop.example1;
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
public class WordCount {public static class Map extends MapReduceBase implementsMapper<LongWritable, Text, Text, IntWritable> {private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(LongWritable key, Text value,OutputCollector<Text, IntWritable> output, Reporter reporter)throws IOException {String line = value.toString();StringTokenizer tokenizer = new StringTokenizer(line);while (tokenizer.hasMoreTokens()) {word.set(tokenizer.nextToken());output.collect(word, one);}}}public static class Reduce extends MapReduceBase implementsReducer<Text, IntWritable, Text, IntWritable> {public void reduce(Text key, Iterator<IntWritable> values,OutputCollector<Text, IntWritable> output, Reporter reporter)throws IOException {int sum = 0;while (values.hasNext()) {sum += values.next().get();}output.collect(key, new IntWritable(sum));}}public static void main(String[] args) throws Exception {JobConf conf = new JobConf(WordCount.class);conf.setJobName("wordcount");conf.setOutputKeyClass(Text.class);conf.setOutputValueClass(IntWritable.class);conf.setMapperClass(Map.class);conf.setCombinerClass(Reduce.class);conf.setReducerClass(Reduce.class);conf.setInputFormat(TextInputFormat.class);conf.setOutputFormat(TextOutputFormat.class);FileInputFormat.setInputPaths(conf, new Path(args[0]));FileOutputFormat.setOutputPath(conf, new Path(args[1]));JobClient.runJob(conf);}
}

 

3.3、运行examplse1工程
注意的这种开发方式运行采用的是:run on haoop
运行方法:【右击工程】-->【Run as】-->【run on hadoop】 。在这里如果跳出一个界面让你选择,证明现在工程选用的Java Applicaltion不对。这时可以这样做:【右击工程】-->【Run as】-->【run on configrations】。并填写传的参数是输入文件路径和输出目录路径。

在Linux eclipse上开发,以上步骤都成功的话程序会正常运行。但是在windows eclipse 下开发会以下错误。因为在hadoop源码中会检查windows文件权限,因此,我们要修改hadoop源码。
14/05/29 13:49:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
14/05/29 13:49:16 ERROR security.UserGroupInformation: PriviledgedActionException as:ISCAS cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-ISCAS\mapred\staging\ISCAS1655603947\.staging to 0700
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-ISCAS\mapred\staging\ISCAS1655603947\.staging to 0700
at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:691)
at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:664)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:514)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:349)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:193)
at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:126)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:942)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:936)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Unknown Source)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:936)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:550)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:580)
at org.apache.hadoop.examples.WordCount.main(WordCount.java:82)
3.4、修改hadoop源码以支持windows下eclipse开发mapreduce程序。
出现问题的代码位于 【hadoop-1.2.1\src\core\org\apache\hadoop\fs\FileUtil.java】。
修改方式如下,注释掉对文件权限的判断。
private static void checkReturnValue(boolean rv, File p,
FsPermission permission)
throws IOException
{/*** comment the following, disable this functionif (!rv){throw new IOException("Failed to set permissions of path: " + p +" to " +String.format("%04o", permission.toShort()));}*/
}
然后将修改好的文件重新编译,并将.class文件打包到hadoop-core-1.2.1.jar中,并重新刷新工程。这里,为了方便大家,我提供已经修改后的jar文件包,如果需要可以点击下载,并替换掉原有的hadoop-1.2.1中的jar包,位于hadoop-1.2.1根目录。
再次3,3步骤的操作,这时运行成功了。
3.5查看结果
在HDFS视图刷新后,可以看到生成output_wordcount文件夹,进入此目录可以看见生成的part-00000,其结果为:

 

转载于:https://www.cnblogs.com/liangjf/p/7710789.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

缩放浏览器时 背景图片固定

今天遇到一个很奇怪的问题&#xff0c;页面做好后&#xff0c;当缩放浏览器的时候&#xff0c;背景图片跟着移动&#xff0c;这就使本来做好的内容看起来像是错位了一样&#xff0c;跟背景对不上。 研究了一下发现&#xff0c;不需要fixed 之类的&#xff0c;只需要给body加个 …

医学影像后处理服务器系统的特点,【CT影像系统工作站怎么用】CT影像系统工作站好不好_使用技巧-ZOL软件百科...

为满足医疗卫生领域广大影像工作者、医生和医院管理工作者的需求&#xff0c;本单位应用当代计算机技术&#xff0c;影像处理技术以及网络技术开发的 CT型医学影像工作站&#xff0c;可与各种CT配接&#xff0c;不需对原机作任何改动。实现了数字化存储和接口标准化以及网络管理…

20145308刘昊阳 《Java程序设计》实验五报告

20145308刘昊阳 《Java程序设计》实验五 Java网络编程及安全 实验报告 实验名称 Java网络编程及安全 实验内容 1&#xff0e;掌握Socket程序的编写&#xff1b; 2&#xff0e;掌握密码技术的使用&#xff1b; 3&#xff0e;设计安全传输系统。 统计的PSP(Personal Software Pro…

FPL 2017最佳论文:如何对FPGA云发动DoS攻击?

第27届现场可编程逻辑与应用国际会议&#xff08;The International Conference on Field-Programmable Logic and Applications&#xff0c;FPL&#xff09;九月份在比利时根特召开。在FPL 2017上&#xff0c;一篇来自德国卡尔斯鲁厄理工学院&#xff08;Karlsruhe Institute …

应用程序唯一性

程序启动后&#xff0c;如果再次启动程序&#xff0c;不会出现2个程序&#xff0c;或者实现如Notepad已打开一个文件&#xff0c;再打开另外一个文件&#xff0c;则追加在Notepad界面上。 使用codeproject上别人编写的一个类&#xff0c;加在程序启动时即可。 sinstance.h /* M…

php的GC机制

在php5.3版本之前, php变量的回收机制只是简单的通过计数来处理(当refcount0时&#xff0c;会回收内存),但这样会出现一个问题 $aarray("str"); $a[]&$a; unset($a); 执行unset之前,$a的refcount 为2,执行unset之后,$a的refcout为1,因为是1不等于0,不能被回收内存…

Spring 框架的JDBC模板技术

1. 概述 Spring 框架提供了很多持久层的模板类来简化编程;Spring 框架提供的JDBC模板类: JdbcTemplate 类;Spring 框架提供的整合 Hibernate 框架的模板类: HibernateTemplate 类2. 环境搭建 2.1 创建数据库表结构 CREATE TABLE t_account(id INT PRIMARY KEY AUTO_INCREMENT,…

BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )

数据 n < 30000 , 然后 O( n ) 的贪心也过了..... USACO 数据是有多弱啊 ( ps : BZOJ 1640 和此题一模一样 , 双倍经验 ) --------------------------------------------------------------------------------------#include<cstdio>#include<cstring>#include…

数据说话,88000条数据绘制北京市地图

偶获得一批数据&#xff0c;本着好玩的态度绘制下来看看到底是什么鬼&#xff0c;绘制的结果如下&#xff1a; 呵呵&#xff0c;什么都不像。而且中间最重要的部分因数据量过大绘制的已经看不清楚了。于是乎&#xff0c;缩小绘制范围&#xff0c;去除周围没有用的数据。重新绘制…

我的第一个python web开发框架(11)——工具函数包说明(二)

db_helper.py是数据库操作包&#xff0c;主要有两个函数&#xff0c;分别是read()数据库读操作函数和write()数据库写操作函数。这个包的代码是从小戴同学分享的博文改造过来的。 1 #!/usr/bin/env python2 # codingutf-83 4 import psycopg25 from common import log_helper6 …

ASP.NET:在一般处理程序中通过 Session 保存验证码却无法显示图片?

1 using System.Drawing;2 using System.Web;3 using System.Web.SessionState;4 5 /// <summary>6 /// CaptchaHandler 的摘要说明7 /// </summary>8 public class CaptchaHandler : IHttpHandler, IRequiresSessionState  //简记&#xff1a;我需要Session9 { …

[LINK]用Python计算昨天、今天和明天的日期时间

用Python计算昨天、今天和明天的日期时间 转载于:https://www.cnblogs.com/Athrun/p/5477651.html

Windows系统下oracle数据库每天定时备份

第一步&#xff1a;建立备份脚本oraclebackup.bat 首先建立一个备份bat文件&#xff0c;在D盘下新建备份目录oraclebackup&#xff0c;将oracle安装目录下的EXP.EXE复制到此目录下&#xff0c;再新建一个文本文件oraclebackup.txt&#xff0c;内容如下&#xff1a; echo off ec…

面试题3:二维数组查找

1 bool Find(const int *matrix, int rows, int columns, int number)2 {3 int key;4 int indexRow;5 int indexCol;6 7 /*合法性检查*/8 if((NULL matrix)||(rows < 0)||(columns <0))9 { 10 return false; 11 } 12 13 /*提升…

linux crontab 命令

#method 1 crontab -e crontab -u root -e #不同用户自己的任务计划 crontab -l#method 2 vim /etc/crontab# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .--…

[译] RNN 循环神经网络系列 2:文本分类

原文地址&#xff1a;RECURRENT NEURAL NETWORKS (RNN) – PART 2: TEXT CLASSIFICATION原文作者&#xff1a;GokuMohandas译文出自&#xff1a;掘金翻译计划本文永久链接&#xff1a;github.com/xitu/gold-m…译者&#xff1a;Changkun Ou校对者&#xff1a;yanqiangmiffy, To…

[置顶] Android开发者官方网站文档 - 国内踏得网镜像

Mark 一下&#xff1a; 镜像地址&#xff1a;http://wear.techbrood.com/index.html Android DevelopTools: http://www.androiddevtools.cn/ 转载于:https://www.cnblogs.com/superle/p/4561856.html

Java实现选择排序

选择排序思想就是选出最小或最大的数与第一个数交换&#xff0c;然后在剩下的数列中重复完成该动作。 package Sort;import java.util.Arrays;public class SelectionSort {public static int selectMinKey(int[] list, int beginIdx) {int idx beginIdx;int temp list[begin…

ASP.NET MVC中ViewData、ViewBag和TempData

1.ViewData 1.1 ViewData继承了IDictionary<string, object>,因此在设置ViewData属性时,传入key必须要字符串型别,value可以是任意类型。 1.2 ViewData它只会存在这次的HTTP要求而已,而不像Session可以将数据带到下HTTP要求。 public class TestController : Controller{…

java 正则表达式验证邮箱格式是否合规 以及 正则表达式元字符

package com.ykmimi.testtest; /*** 测试邮箱地址是否合规* author ukyor**/ public class EmailTest {public static void main(String[] args) {//定义要匹配的Email地址的正则表达式//其中\w代表可用作标识符的字符,不包括$. \w表示多个// \\.\\w表示点.后面有\w 括号{2,3}…