配色: 字号:
windows 32位eclipse远程hadoop开发环境搭建
2016-10-17 | 阅:  转:  |  分享 
  
windows32位eclipse远程hadoop开发环境搭建

这篇文章主要介绍了windows32位eclipse远程hadoop开发环境搭建的相关资料,需要的朋友可以参考下

本文假设hadoop环境在远程机器(如linux服务器上),hadoop版本为2.5.2

由于我喜欢在win764位上安装32位的软件,比如32位jdk,32位eclipse,所以虽然本文中的操作系统是win764位,但是所有的软件都是32位的。

软件版本:

操作系统:win764位

eclipse:eclipse-jee-mars-2-win32

java:1.8.0_7732位

hadoop:2.5.2

一、安装hadoop

1、在win7中随便找一个目录解压hadoop-2.5.2.tar.gz,比如D:\app\hadoop-2.5.2\

2、配置环境变量

HADOOP_HOME=D:\app\hadoop-2.5.2\

二、安装hadoopeclipse插件

1、下载hadoop-eclipse-plugin

hadoop-eclipse-plugin是一个专门用于eclipse的hadoop插件,可以直接在IDE环境中查看hdfs的目录和文件内容。其源代码托管于github上,官网地址是https://github.com/winghc/hadoop2x-eclipse-plugin下载release文件夹中的hadoop-eclipse-plugin-2.6.0.jar即可





2、下载windows32位平台的hadoop插件包(hadoop.dll,winutils.exe)

由于我们的软件环境是32位的,所以需要下载32位的hadoop.dll和winutils.exe,下载地址大家可以百度hadoop.dll32

将winutils.exe复制到$HADOOP_HOME\bin目录,将hadoop.dll复制到C:\Windows\SysWOW64目录下(注:由于我们的操作系统是64位,而软件是32位,所以我们是拷到这个目录下,另外,如果你的操作系统就是32位,那么就直接拷到c:\windwos\system32目录下)

3、配置hadoop-eclipse-plugin插件

启动eclipse,window->preferences->hadoopmap/reduce指定win7上的hadoop根目录(即:$HADOOP_HOME)



切换Map/reduce视图

windows->showview->otherMap/ReduceLocations



然后在下面的Map/ReduceLocations面板中添加新的Location



按照如下配置



Locationname这里就是起个名字,随便起

Map/Reduce(V2)MasterHost这里就是虚拟机里hadoopmaster对应的IP地址,下面的端口对应hdfs-site.xml里dfs.datanode.ipc.address属性所指定的端口

DFSMasterPort这里的端口,对应core-site.xml里fs.defaultFS所指定的端口

最后的username要跟虚拟机里运行hadoop的用户名一致,我是用hadoop身份安装运行hadoop2.6.0的,所以这里填写hadoop,如果你是用root安装的,相应的改成root

这些参数指定好以后,点击Finish,eclipse就知道如何去连接hadoop了,一切顺利的话,在ProjectExplorer面板中,就能看到hdfs里的目录和文件了



可以在文件上右击,选择删除试下,通常第一次是不成功的,会提示一堆东西,大意是权限不足之类,原因是当前的win7登录用户不是虚拟机里hadoop的运行用户,解决办法有很多,比如你可以在win7上新建一个hadoop的管理员用户,然后切换成hadoop登录win7,再使用eclipse开发,但是这样太烦,最简单的办法:

hdfs-site.xml里添加

1

2

3

4

dfs.permissions.www.visa158.com.enabled

false

总而言之,就是彻底把hadoop的安全检测关掉(学习阶段不需要这些,正式生产上时,不要这么干),最后重启hadoop,再到eclipse里,重复刚才的删除文件操作试下,应该可以了。

注:如果无法连接,请先尝试telnet192.168.1.69000(请将ip和端口换成自己的hadoopserverip和端口)确保端口可以访问。

如果telnet不成功,可能是core-site.xml里fs.defaultFS的值有问题,比如配置的是localhost:9000,可以考虑把localhost换成主机名

三、编写wordcount示例

1、新建一个项目,选择Map/ReduceProject



后面的Next就行了,然后新建一个类WodCount.java代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66 importjava.io.IOException;

importjava.util.StringTokenizer;

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.fs.Path;

importorg.apache.hadoop.io.IntWritable;

importorg.apache.hadoop.io.Text;

importorg.apache.hadoop.mapreduce.Job;

importorg.apache.hadoop.mapreduce.Mapper;

importorg.apache.hadoop.mapreduce.Reducer;

importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;

importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

importorg.apache.hadoop.util.GenericOptionsParser;

publicclassWordCount{

publicstaticclassTokenizerMapper

extendsMapper{

privatefinalstaticIntWritableone=newIntWritable(1);

privateTextword=newText();

publicvoidmap(Objectkey,Textvalue,Contextcontext)throwsIOException,InterruptedException{

StringTokenizeritr=newStringTokenizer(value.toString());

while(itr.hasMoreTokens()){

word.set(itr.nextToken());

context.write(word,one);

}

}

}

publicstaticclassIntSumReducerextendsReducer{

privateIntWritableresult=newIntWritable();

publicvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedException{

intsum=0;

for(IntWritableval:values){

sum+=val.get();

}

result.set(sum);

context.write(key,result);

}

}

publicstaticvoidmain(String[]args)throwsException{

Configurationconf=newConfiguration();

String[]otherArgs=newGenericOptionsParser(conf,args).getRemainingArgs();

if(otherArgs.length<2){

System.err.println("Usage:wordcount[...]");

System.exit(2);

}

Jobjob=Job.getInstance(conf,"wordcount");

job.setJarByClass(WordCount.class);

job.setMapperClass(TokenizerMapper.class);

job.setCombinerClass(IntSumReducer.class);

job.setReducerClass(IntSumReducer.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

for(inti=0;i
FileInputFormat.addInputPath(job,newPath(otherArgs[i]));

}

FileOutputFormat.setOutputPath(job,

newPath(otherArgs[otherArgs.length-1]));

System.exit(job.waitForCompletion(true)?0:1);

}

} 然后再src目录下创建一个log4j.properties,内容如下:(为了方便运行起来后,查看各种输出)

1

2

3

4

5

6

7

8

9

10

11 log4j.rootLogger=INFO,stdout

#log4j.logger.org.springframework=INFO

#log4j.logger.org.apache.activemq=INFO

#log4j.logger.org.apache.activemq.spring=WARN

#log4j.logger.org.apache.activemq.store.journal=INFO

#log4j.logger.org.activeio.journal=INFO

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.www.hunanwang.net.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}|%-5.5p|%-16.16t|%-32.32c{1}|%-32.32C%4L|%m%n 最终目录结构如下:



2、配置运行参数



因为WordCount是输入一个文件用于统计单词字,然后输出到另一个文件夹下,所以给二个参数,参考上图,在Programarguments里,输入

注意的是,如果user/nub1.txt文件没有,请先手动上传(使用eclipse中DFSLocation工具的右键),然后/output/必须是不存在的,否则程序运行到最后,发现目标目录存在,也会报错。

好了,运行即可



以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:























献花(0)
+1
(本文系白狐一梦首藏)