搭建windows(win7)平台hadoop开发环境
2016-05-28 15:38
567 查看
一.环境
hadoop搭建在Vmware中,分布如下:
hadoop版本:hadoop-2.6.0
Eclipse+hadoop-eclipse-plugin-2.6.0.jar(该包可以在github中下载)
二.搭建
下载Eclipse,解压到某个文件夹(D:\heclipse),将hadoop-eclipse-plugin-2.6.0.jar放在Eclipse的plugins文件夹下(D:\heclipse\eclipse\plugins),打开Eclipse,出现DFS Locations,表示成功,否则可能是jar包的问题,需要重新下载或制作:
运行hadoop,通过win7访问http://(master_ip):50070查看能否访问,以及节点是否都存活。
插曲:如果没有存活,如下图显示2的地方为0,则可以采取如下措施(只是其中一种方法):
解决方法:将master节点中hadoop/tmp/dfs/name/current/VERSION 中的clusterID改成slaves节点的clusterID(即将clusterID与node1、node2统一)
添加jar包,打开Eclipse,点击window–>preferences–>Hadoop Map/Reduce,选择hadoop的位置(这个要与安装的hadoop版本一样):
点击window–>show view将Map/Reduce Locations显示出来,点击右上角的
出现如下的视图:
(1)代表的是hadoop的master节点的IP,(2)是指端口号,需要与hadoop配置文件中的core-site.xml中的配置相同,(3)是指端口号,需要与hadoop配置文件的mapred-site.xml中的配置相同。
点击finish,点击DFS Locations,出现如下视图表示连接正确(不同的环境不同的结果):
新建Map/Reduce Project (WordCount)
创建package与class( package:org.apache.hadoop.examples class:WordCount.java)
运行如下代码:
正确运行结果:
打开output里面的part-r-00000,出现如下结果:
四.遇到的问题
导入jar包后不能显示DFS Locations
可能原因是版本不同的原因,可以自己制作hadoop jar包
制作方法:参考http://my.oschina.net/muou/blog/408543?fromerr=ACzJzurH
运行程序出现:
原因:在Hadoop2的bin目录下没有winutils.exe
解决方法:在github上下载hadoop-common-2.6.0-bin-master.zip,解压之后将bin目录全部复制到上面在Eclipse中指定的hadoop目录的bin文件夹下,并配置环境变量(重新运行即可):
HADOOP_HOME=D:\heclipse\hadoop PATH=;$HADOOP_HOME\bin
运行程序出现:
[code]Exception in thread “main”java.lang.UnsatisfiedLinkError:
原因:C:\Windows\System32下缺少hadoop.dll
解决方法:将上一步中bin文件下的hadoop.dll放到系统的C:\Windows\System32下,重启电脑即可。
4.经过第三步运行程序还是出现:
[code]Exception in thread “main”java.lang.UnsatisfiedLinkError:
原因:Windows的唯一方法用于检查当前进程的请求,在给定的路径的访问权限,所以我们先给以能进行访问,我们自己先修改源代码,return true 时允许访问。
解决方法:下载hadoop源码(版本要一致),将hadoop-2.6.0-src\hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio下NativeIO.java 复制到对应的Eclipse的project,然后修改557行为return true如图所示(包名最好与hadoop源码一致):
5.运行程序出现如下warning:
解决:将hadoop/etc/hadoop/下的log4j.properties复制到WordCount下即可。
6.运行程序提示没有找到input或者是output已经存在
解决方法:在WordCount下新建一个input文件夹,将运行的文件放进去即可;将原来运行产生的ouput文件夹删除即可。
hadoop搭建在Vmware中,分布如下:
192.168.16.131 master 192.168.16.132 node1 192.168.16.133 node2
hadoop版本:hadoop-2.6.0
Eclipse+hadoop-eclipse-plugin-2.6.0.jar(该包可以在github中下载)
二.搭建
下载Eclipse,解压到某个文件夹(D:\heclipse),将hadoop-eclipse-plugin-2.6.0.jar放在Eclipse的plugins文件夹下(D:\heclipse\eclipse\plugins),打开Eclipse,出现DFS Locations,表示成功,否则可能是jar包的问题,需要重新下载或制作:
运行hadoop,通过win7访问http://(master_ip):50070查看能否访问,以及节点是否都存活。
插曲:如果没有存活,如下图显示2的地方为0,则可以采取如下措施(只是其中一种方法):
解决方法:将master节点中hadoop/tmp/dfs/name/current/VERSION 中的clusterID改成slaves节点的clusterID(即将clusterID与node1、node2统一)
添加jar包,打开Eclipse,点击window–>preferences–>Hadoop Map/Reduce,选择hadoop的位置(这个要与安装的hadoop版本一样):
点击window–>show view将Map/Reduce Locations显示出来,点击右上角的
出现如下的视图:
(1)代表的是hadoop的master节点的IP,(2)是指端口号,需要与hadoop配置文件中的core-site.xml中的配置相同,(3)是指端口号,需要与hadoop配置文件的mapred-site.xml中的配置相同。
点击finish,点击DFS Locations,出现如下视图表示连接正确(不同的环境不同的结果):
至此hadoop的win7开发环境搭建完成
三.运行mapreduce程序新建Map/Reduce Project (WordCount)
创建package与class( package:org.apache.hadoop.examples class:WordCount.java)
运行如下代码:
package org.apache.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: wordcount <in> <out>"); System.exit(2); } Job job = new Job(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } }
正确运行结果:
打开output里面的part-r-00000,出现如下结果:
四.遇到的问题
导入jar包后不能显示DFS Locations
可能原因是版本不同的原因,可以自己制作hadoop jar包
制作方法:参考http://my.oschina.net/muou/blog/408543?fromerr=ACzJzurH
运行程序出现:
Exception in thread “main”java.lang.NullPointerException atjava.lang.ProcessBuilder.start(Unknown Source)
原因:在Hadoop2的bin目录下没有winutils.exe
解决方法:在github上下载hadoop-common-2.6.0-bin-master.zip,解压之后将bin目录全部复制到上面在Eclipse中指定的hadoop目录的bin文件夹下,并配置环境变量(重新运行即可):
HADOOP_HOME=D:\heclipse\hadoop PATH=;$HADOOP_HOME\bin
运行程序出现:
[code]Exception in thread “main”java.lang.UnsatisfiedLinkError:
org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
原因:C:\Windows\System32下缺少hadoop.dll
解决方法:将上一步中bin文件下的hadoop.dll放到系统的C:\Windows\System32下,重启电脑即可。
4.经过第三步运行程序还是出现:
[code]Exception in thread “main”java.lang.UnsatisfiedLinkError:
org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
原因:Windows的唯一方法用于检查当前进程的请求,在给定的路径的访问权限,所以我们先给以能进行访问,我们自己先修改源代码,return true 时允许访问。
解决方法:下载hadoop源码(版本要一致),将hadoop-2.6.0-src\hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio下NativeIO.java 复制到对应的Eclipse的project,然后修改557行为return true如图所示(包名最好与hadoop源码一致):
5.运行程序出现如下warning:
解决:将hadoop/etc/hadoop/下的log4j.properties复制到WordCount下即可。
6.运行程序提示没有找到input或者是output已经存在
解决方法:在WordCount下新建一个input文件夹,将运行的文件放进去即可;将原来运行产生的ouput文件夹删除即可。
相关文章推荐
- Java开发必会的Linux命令
- iOS架构师之路:慎用继承
- linux,Centos,bash: service: command not found
- 架构漫谈系列文章
- 网站集成QQ登录功能
- linux mysql操作和配置
- -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable
- 3.2 Linux 2.6后的内核特点
- linux下jdk安装以及配置
- Linux课程实践四:ELF文件格式分析
- linux netstat命令详解
- 架构设计最佳实践之Don’t Repeat Yourself
- CentOS7安装Docker与使用篇
- 3.1 Linux内核的发展与演变
- linux rsync介绍(八)
- linux中的ctags与make命令
- [Nutch]Hadoop多机完全分布式模式hadoop配置
- linux - less命令
- Hadoop学习笔记
- CentOS 6 安装 APC(Alternative PHP Cache)