windows 32位eclipse远程hadoop开发环境搭建

 更新时间:2016年07月14日 09:47:59   作者:lele5000  
这篇文章主要介绍了windows 32位eclipse远程hadoop开发环境搭建的相关资料,需要的朋友可以参考下

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

注:本文eclipse/intellij idea 远程调试hadoop 2.6.0主要参考了并在其基础上有所调整

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

软件版本:

操作系统:win7 64位

eclipse: eclipse-jee-mars-2-win32

java: 1.8.0_77 32位

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\

二、安装hadoop eclipse插件

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、下载windows 32位平台的hadoop插件包(hadoop.dll,winutils.exe)

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

比如下载这个:http://xiazai.jb51.net/201607/yuanma/eclipse-hadoop(jb51.net).rar

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

3、配置hadoop-eclipse-plugin插件

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

切换Map/reduce视图

windows->show view->other     Map/Reduce Locations

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

按照如下配置

Location name 这里就是起个名字,随便起

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

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

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

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

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

hdfs-site.xml里添加

 <property>
 <name>dfs.permissions.enabled</name>
 <value>false</value>
 </property>

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

注:如果无法连接,请先尝试telnet 192.168.1.6 9000 (请将ip和端口换成自己的hadoop server ip和端口)确保端口可以访问。

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

三、编写wordcount示例

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

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

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> [<in>...] <out>");
  System.exit(2);
 }
 Job job = Job.getInstance(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);
 for (int i = 0; i < otherArgs.length - 1; ++i) {
  FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
 }
 FileOutputFormat.setOutputPath(job,
  new Path(otherArgs[otherArgs.length - 1]));
 System.exit(job.waitForCompletion(true) ? 0 : 1);
 }
}


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

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.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n

最终目录结构如下:

2、配置运行参数

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

hdfs://192.168.1.6:9000/user/nub1.txt
hdfs://192.168.1.6:9000/user/output

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

好了,运行即可

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

相关文章

  • Java实战之鲜花商城系统的实现

    Java实战之鲜花商城系统的实现

    这篇文章主要介绍了如何利用Java语言实现鲜花商城系统,文中采用的技术有Spring、SpringMVC、Mybatis、JSP等,感兴趣的小伙伴可以了解一下
    2022-05-05
  • SSH框架网上商城项目第8战之查询和删除商品类别功能实现

    SSH框架网上商城项目第8战之查询和删除商品类别功能实现

    SSH框架网上商城项目第8战之查询和删除商品类别功能实现,为项目增加功能,添加、更新、删除和查询操作,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Mybatis-config.xml中映射Mapper.xml文件遇到的错误及解决

    Mybatis-config.xml中映射Mapper.xml文件遇到的错误及解决

    这篇文章主要介绍了Mybatis-config.xml中映射Mapper.xml文件遇到的错误及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • java自定义Scanner类似功能类的实例讲解

    java自定义Scanner类似功能类的实例讲解

    这篇文章主要介绍了java自定义Scanner类似功能类的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • mybatis 实现多层级collection嵌套

    mybatis 实现多层级collection嵌套

    这篇文章主要介绍了mybatis 实现多层级collection嵌套,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring @Retryable注解轻松搞定循环重试功能

    Spring @Retryable注解轻松搞定循环重试功能

    spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。本文主要介绍了Spring@Retryable注解如何轻松搞定循环重试功能,有需要的朋友可以参考一下
    2023-04-04
  • 一文掌握Spring的创建与使用

    一文掌握Spring的创建与使用

    这篇文章详细介绍了spring的创建与使用,文章中有详细的代码示例和图片介绍,对学习有一定的而参考价值,需要的同学可以参考一下
    2023-04-04
  • Java开发环境不再需要配置classpath问题

    Java开发环境不再需要配置classpath问题

    这篇文章主要介绍了Java开发环境不再需要配置classpath问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • SpringBoot实现quartz定时任务可视化管理功能

    SpringBoot实现quartz定时任务可视化管理功能

    这篇文章主要介绍了SpringBoot实现quartz定时任务可视化管理功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 深入探究Spring IOC和DI的区别

    深入探究Spring IOC和DI的区别

    很多人都会把ioc和di说成同一个东西,其实IOC和DI虽然在概念上可以笼统地视为同一事物,但其本质上存在区别,因此,我们希望能够更加严谨地区分这两个概念,以更好地理解和应用它们,需要的朋友可以参考阅读本文
    2023-10-10

最新评论