本人环境为win10

eclipse是 luna

在win10下,安装了vm workstation,其上安装了centos6.5 ,并在上面部署了hadoop2.6.4的伪分布式安装

一、 目标

设置win10下的eclipse开发环境,并且可以在此环境上开发Hadoop应用,并在伪分布式hadoop环境下测试。

二、准备

1、eclipse  (  Kepler Service Release 1)

2、 hadoop2.6.0

3、 hadoop.dll 和  winutils

4、 wordcount 代码

5、 wordcount 所需要的统计单词的文本源

6、 hadoop for eclipse的插件,本人使用的插件为 hadoop-eclipse-plugin-2.6.0.jar

三、环境搭建步骤

1、 将hadoop2.6.0解压 在win10系统的任意目录下。 (就是为了配置eclipse用,实际联调的时候,是连接Linux 虚机上的伪分布式hadoop)

2、 设置win10的环境变量,通过控制面板-》系统-》高级设置-》环境变量  需要设置如下几个环境变量,已本人机器为例:

JAVA_HOME=C:\Program Files (x86)\Java\jre6\bin

HADOOP_HOME=E:\cwqwork\develop\hadoop-2.6.0

path 增加最后 E:\cwqwork\develop\hadoop-2.6.0\bin

3、拷贝插件到  eclipse安装目录下的plugsin目录

4、 启动eclipse,  windows-》hadoop Map/Reduce

在 hadoop installation directory 里面,填入 前面第1步解压的目录,点击OK

5、 界面最右边新出先的 Map/Reduce标签点中, 在最左边Project Explorer 会出现  DFS Locations。

界面最右下角有个蓝色小象,点击后,设置  hadoop location

6、上面设置好后,就可以 一层一层浏览   DFS Locations。 这里显示的是 linux下hadoop的dfs系统

四、  测试工程代码

1、 新建工程,选other -》map reduce project, 然后输入工程名称等等,建立新的工程

2、 创建 WordCount 类

代码如下:

[java] view plaincopy
  1. import java.io.IOException;
  2. import java.util.StringTokenizer;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.IntWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Job;
  8. import org.apache.hadoop.mapreduce.Mapper;
  9. import org.apache.hadoop.mapreduce.Reducer;
  10. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  11. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  12. import org.apache.hadoop.util.GenericOptionsParser;
  13. public class WordCount {
  14. public static class TokenizerMapper
  15. extends Mapper<Object, Text, Text, IntWritable>{
  16. private final static IntWritable one = new IntWritable(1);
  17. private Text word = new Text();
  18. public void map(Object key, Text value, Context context
  19. ) throws IOException, InterruptedException {
  20. StringTokenizer itr = new StringTokenizer(value.toString());
  21. while (itr.hasMoreTokens()) {
  22. word.set(itr.nextToken());
  23. context.write(word, one);
  24. }
  25. }
  26. }
  27. public static class IntSumReducer
  28. extends Reducer<Text,IntWritable,Text,IntWritable> {
  29. private IntWritable result = new IntWritable();
  30. public void reduce(Text key, Iterable<IntWritable> values,
  31. Context context
  32. ) throws IOException, InterruptedException {
  33. int sum = 0;
  34. for (IntWritable val : values) {
  35. sum += val.get();
  36. }
  37. result.set(sum);
  38. context.write(key, result);
  39. }
  40. }
  41. public static void main(String[] args) throws Exception {
  42. Configuration conf = new Configuration();
  43. //conf.set("mapred.job.tracker","192.168.136.155:9001" );
  44. //conf.set("fs.default.name","192.168.136.155:9000" );
  45. String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
  46. if (otherArgs.length != 2) {
  47. System.err.println("Usage: wordcount <in> <out>");
  48. System.exit(2);
  49. }
  50. System.out.println ("Usage: wordcount <in> <out>" + otherArgs[0] +"  "+ otherArgs[1] );
  51. Job job = new Job(conf, "wordcount");
  52. job.setJarByClass(WordCount.class);
  53. job.setMapperClass(TokenizerMapper.class);
  54. job.setCombinerClass(IntSumReducer.class);
  55. job.setReducerClass(IntSumReducer.class);
  56. job.setOutputKeyClass(Text.class);
  57. job.setOutputValueClass(IntWritable.class);
  58. FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
  59. FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
  60. System.out.println ("add input path:" + otherArgs[0]);
  61. System.out.println ("set output path:" + otherArgs[1]);
  62. System.out.println ("begin wait job completion");
  63. job.waitForCompletion(true);
  64. }
  65. }

创建完成后, 在linux 虚机上导入需要统计的文本

文本1:Hello world Hello me! cwq solo

文本2: Hello world Hello you! solo

在linux 目录 /opt/hadoop/input/wordcount  下:

echo "Hello world Hello me! cwq solo"  >test1.txt

echo " Hello world Hello you! solo"  >test2.txt

hadoop fs -put  /opt/hadoop/input/wordcount input

3、 完成后,在类上右键-》run configuration-》 输入参数

hdfs://192.168.136.155:9000/user/hadoop/input/wordcount  hdfs://192.168.136.155:9000/user/hadoop/output/wordcount

输入后,不要执行。

然后,用run on hadoop 方式执行。

4、 正常情况下,会报异常:

[java] view plaincopy
  1. Exception in thread "main" java.lang.NullPointerException
  2. at java.lang.ProcessBuilder.start(ProcessBuilder.java:441)
  3. at org.apache.hadoop.util.Shell.runCommand(Shell.java:445)
  4. at org.apache.hadoop.util.Shell.run(Shell.java:418)

原因是,没有安装补丁。  将 hadoop.dll 和  winutils 拷贝到  win10上hadoop目录下bin目录。

5、 再次运行,没有异常,但是运行结束,查看dfs 没有output结果, console没有输出异常。 这里纠结很久。

解决办法:在src 目录下,建立log.properities文件,使得log4j 可以打印

[java] view plaincopy
  1. log4j.rootLogger=debug,stdout,R
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
  5. log4j.appender.R=org.apache.log4j.RollingFileAppender
  6. log4j.appender.R.File=mapreduce_test.log
  7. log4j.appender.R.MaxFileSize=1MB
  8. log4j.appender.R.MaxBackupIndex=1
  9. log4j.appender.R.layout=org.apache.log4j.PatternLayout
  10. log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%
  11. log4j.logger.com.codefutures=DEBUG

6、再次运行,console打印会有error

WARN - job_local194089354_0001
org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/user/hadoop/output":hadoop:supergroup:drwxr-xr-x
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)

说明是权限问题, eclipse是用Administrator启动的,连接linux下的hadoop是用此用户,所以权限禁止。

解决办法:

1)、如果是测试环境,可以取消hadoop hdfs的用户权限检查。打开conf/hdfs-site.xml,找到dfs.permissions属性修改为false(默认为true)OK了。
2)、修改hadoop location参数,在advanced parameter选项卡中,找到hadoop.job.ugi项,将此项改为启动hadoop的用户名即可
3)、 修改window 机器的用户名为 hadoop 用户名。

7、执行,这次又报错了:java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0

这个时候我们需要在debug的时候环境变量加上HADOOP_HOME=D:\tools\hadoop-2.6.0和PATH=%PATH%;D:\tools\hadoop-2.6.0\bin

如图:

8、再次执行,这次正确执行完成,console 不报告错误, dfs location 右键 -》reconnect -》一层一层点开,最后output 目录下看到统计单词结果。

Hello 4
cwq 1
me! 1
solo 2
world 2
you! 1

win10+eclipse+hadoop2.6.0 开发环境相关推荐

  1. Apache Spark学习:利用Eclipse构建Spark集成开发环境

    介绍了如何使用Maven编译生成可直接运行在Hadoop 2.2.0上的Spark jar包,而本文则在此基础上, 介绍如何利用Eclipse构建Spark集成开发环境 . 不建议大家使用eclips ...

  2. ubuntu下搭建eclipse+tomcat的web开发环境

    之前是打算给eclipse装上插件变成eclipse for javaEE 的,后来一看过程太麻烦了,直接下载eclipse for java EE 算了.搭建eclipse+tomcat的web开发 ...

  3. EJB3.0开发环境的搭建

    EJB Container的介绍 SUN公司正式推出了EJB的规范之后,在众多的公司和开发者中引起了非常大的反响.标志着用Java开发企业级应用系统将变的非常easy.很多公司都已经推出了或正打算EJ ...

  4. Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建

    Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建 这几天一直在研究 Android SDK C/C++平台的搭建,尽管以前有成功在Windows X ...

  5. ambari 2.6.0.0开发环境配置

    ambari 2.6.0.0开发环境配置 安装git 安装依赖 yum -y install curl-devel expat-devel gettext-devel openssl-devel zl ...

  6. java1.8+pydev_Ubuntu 18.04.4 中使用 Eclipse+PyDev 配置 Python 开发环境

    先学习一下深度学习必备的编程语言 Python.工欲善其事,必先利其器.一个好用的 IDE 将会使你的学习事半功倍,下面就是我本人在 Ubuntu 18.04.4 中使用 Eclipse+PyDev ...

  7. tomcat+eclipse +mysql搭建JSP开发环境

         tomcat+eclipse+mysql搭建JSP开发环境 一.准备工作 1.系统环境:Windows xp及其版本以上 2.先下载相关的工具   JDK1.6 官网下载:  www.sun ...

  8. Eclipse+Pydev搭建Python开发环境教程

    Eclipse+Pydev搭建Python开发环境教程 Eclipse+Pydev搭建Python开发环境 PyDev简介 准备文件 Jdk配置,1.8版本 python-2.7.18安装 Eclip ...

  9. 用Eclipse搭建VLC SDK开发环境

    最近研究FFmpeg,看到用FFmpeg写的VLC播放器很牛X,我打算学习一下,网上找了很多的资料发现都是在VS IDE基础上开发的,本人对VS IDE不感冒,因为一直从事java开发,对eclips ...

  10. udig-1.4.0 开发环境搭建

       udig-1.4.0开发环境搭建 下载需要的文件 dropins-3.7.2.zip: http://udig.refractions.net/files/downloads/extras/ ...

最新文章

  1. W - Pasha and Phone CodeForces - 595B (收益颇丰的数学题
  2. 第十八讲 傅里叶变换
  3. CodeBlocks 汉化教程及多语言
  4. java 之 桥接模式(大话设计模式)
  5. react 使用 leaflet 百度地图_【React】react项目中应用百度地图添加起始点绘制路线...
  6. 计算机 科学计算应用邻预,电子计算机的工作特性主要有什么
  7. python 第一天
  8. 【python学习-2】python起步必备
  9. Android-7.0-Nuplayer流程图
  10. IPv6中NDP协议简介
  11. 高级编程语言分类_高级编程语言的分类
  12. 笔记本电脑查看电池损耗
  13. Unbuntu16.04下cmake-gui安装
  14. Swift-Moya 源码解析
  15. XSS(Stored)
  16. 运算电路的频率响应与冲激响应
  17. 从投资人发现“新大陆”,看“产融星城”为何成?
  18. 《windows游戏编程大师技巧》第五章:DirectX基础知识和令人生畏的COM
  19. 如何利用黑天鹅事件来避险和赚钱(比如中国房价一定会崩盘但无法确定时间点)
  20. 微信小程序是否支持手机定位经纬度坐标

热门文章

  1. C# SOCKE通信
  2. Python 函数也是一种对象
  3. Git 打标签(分布式版本控制系统)
  4. 運行命令”msiexec”查看Windows Installer的版本
  5. 【转】TCP状态变迁图
  6. CF891E Lust 生成函数
  7. Linux 文件umask默认权限_012
  8. 远程连接桌面报:这可能是由于credssp加密oracle修正
  9. AIM Tech Round 5 (rated, Div. 1 + Div. 2)
  10. Vim 经常使用快捷键及键盘图