`

eclipse远程连接hadoop进行开发测试

阅读更多

eclipse远程连接hadoop进行开发测试

马克飞象 由于搭建hadoop环境在仿真系统,在本地远程连接hdfs和提交mapreduce的job任务精力了曲折,现整理如下:

  • hadoop环境 :hadoop2.5.2 jdk1.7 eclipse_luno hadoop_eclipse插件2.6; 
    wordcount代码如下:
package test;

import java.io.File;
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.mapred.JobConf;
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;

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();
    conf.set("df.default.name", "hdfs://10.128.7.140:9000");
    conf.set("hadoop.job.user","hadoop");
//    conf.set("mapred.job.tracker", "10.128.7.140:9001");
    Path in = new Path("hdfs://10.128.7.140:9000/test/test.txt");
    Path out = new Path("hdfs://10.128.7.140:9000/usr/output");
    out.getFileSystem(conf).delete(out, true);

    Job job = new Job(conf, "word——count");

//    
    File jarFile = EJob.createTempJar("bin");
    EJob.addClasspath("/home/hadoop/hadoop-1.2.1/conf");
    ClassLoader classLoader = EJob.getClassLoader();
    Thread.currentThread().setContextClassLoader(classLoader);
    ((JobConf) job.getConfiguration()).setJar(jarFile.toString()); 

    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, in);
    FileOutputFormat.setOutputPath(job,out);

    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}
  • 异常1 :找不到winutils.exe
2015-03-27 18:01:42,982 ERROR [main] util.Shell (Shell.java:getWinUtilsPath(373)) - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:355)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:370)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:363)
    at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:78)
    at org.apache.hadoop.security.Groups.parseStaticMapping(Groups.java:93)
    at org.apache.hadoop.security.Groups.<init>(Groups.java:77)
    at org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Groups.java:240)
    at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:257)
    at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:234)
    at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:749)
    at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:734)
    at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:607)
    at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2748)
    at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2740)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2606)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:368)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)
    at test.WordCount.main(WordCount.java:73)
2015-03-27 18:01:43,812 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(1019)) - session.id is deprecated. Instead, use dfs.metrics.session-id
2015-03-27 18:01:43,812 INFO  [main]

解决:下载winutils.exe文件: 
下载地址:https://github.com/srccodes/hadoop-common-2.2.0-bin 
将bin目录下的文件最好都下载到本地,然后替换本地hadoop安装目录下的bin目录 
然后设置HADOOP_HOME环境变量或者在javamain方法中代码设置:

System.setProperty("hadoop.home.dir", "D://hadoop");
  • 异常2 :如上,问题消失后又出来如下错误:
2015-03-27 18:07:38,072 INFO  [main] mapreduce.JobSubmitter (JobSubmitter.java:submitJobInternal(441)) - Cleaning up the staging area file:/tmp/hadoop-Administrator/mapred/staging/Administrator1538933894/.staging/job_local1538933894_0001
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:570)
    at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:977)
    at org.apache.hadoop.util.DiskChecker.checkAccessByFileMethods(DiskChecker.java:173)
    at org.apache.hadoop.util.DiskChecker.checkDirAccess(DiskChecker.java:160)
    at org.apache.hadoop.util.DiskChecker.checkDir(DiskChecker.java:94)
    at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.confChanged(LocalDirAllocator.java:285)
    at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:344)
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:150)
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:131)
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:115)
    at org.apache.hadoop.mapred.LocalDistributedCacheManager.setup(LocalDistributedCacheManager.java:131)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.<init>(LocalJobRunner.java:163)
    at org.apache.hadoop.mapred.LocalJobRunner.submitJob(LocalJobRunner.java:731)
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:432)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1285)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1282)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1282)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1303)
    at test.WordCount.main(WordCount.java:92)

解决办法:将刚下载的bin目录中的hadoop.dll文件放到目录C:\Windows\System32 目录下问题解决

  • eclipse_hadoop2.6的插件可以在附件中下载适用于eclipse luno(4.3)hadoop2.5 2.6
分享到:
评论

相关推荐

    Hadoop伪分布式部署文档(包括本地开发环境,eclipse远程连接Hadoop服务器)

    Hadoop伪分布式部署文档是指在单台机器上模拟分布式Hadoop集群的部署文档,包括服务器伪分布式部署、本地Hadoop开发环境部署、Eclipse远程连接Hadoop服务器等内容。下面是该文档的详细解释: 首先,需要安装JDK,...

    hadoop-eclipse2.7.1、hadoop-eclipse2.7.2、hadoop-eclipse2.7.3

    总之,Hadoop-Eclipse插件是Hadoop开发者的重要工具,通过它,开发者可以在熟悉的Eclipse环境中高效地开发、测试和部署Hadoop MapReduce应用程序,实现大数据处理任务的快速迭代和优化。不同版本的插件体现了Hadoop-...

    eclipse连接hadoop需要的文件

    标题中的“eclipse连接hadoop需要的文件”指的是在Eclipse集成开发环境中配置Hadoop环境,以便进行Hadoop相关的开发工作。Eclipse是一款强大的Java IDE,而Hadoop是一个开源的分布式计算框架,常用于大数据处理。...

    hadoop-eclipse-plugin-3.1.1.tar.gz

    Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...

    eclipse集成hadoop+spark+hive开发源码实例

    9. **建立连接**:在Eclipse中配置Hadoop和Spark连接,使得Eclipse能够与本地或远程Hadoop和Spark集群通信。 10. **开发源码**:现在你可以在Eclipse中编写Hadoop MapReduce、Spark应用和Hive查询。使用Eclipse的...

    hadoop远程访问资料

    对于Hadoop开发,可以安装Hadoop-Eclipse插件,方便在Eclipse中直接编写、调试和运行Hadoop MapReduce程序。 7. **Hadoop-Eclipse插件的安装**:这个插件允许开发者在Eclipse中直接创建、编辑和运行Hadoop作业,...

    Eclipse Hadoop2.7插件

    Eclipse Hadoop2.7插件是专门为Java开发者设计的一款工具,它允许用户在流行的集成开发环境...对于大数据开发者来说,这是一个不可或缺的工具,它降低了Hadoop开发的门槛,让Hadoop项目的生命周期管理变得更加轻松。

    eclipse运行mr插件hadoop-eclipse-plugin-2.6.0.jar

    本文将深入探讨如何使用Eclipse IDE结合hadoop-eclipse-plugin-2.6.0.jar插件,实现在Windows环境下进行远程连接到Hadoop集群,尤其适用于64位操作系统。 首先,我们要理解Hadoop的核心概念。Hadoop是由Apache基金...

    eclipse开发hadoop的最基础操作及图视

    总结来说,Eclipse结合`hadoop-eclipse-plugin`插件提供了便捷的Hadoop开发环境,使得开发者可以在本地环境中编写、测试和调试MapReduce程序,然后轻松地部署到远程Hadoop集群。通过这种方式,开发者可以更加专注于...

    Hadoop-eclipse-plugin-2.7.6下载与说明

    总的来说,Hadoop-eclipse-plugin-2.7.6是Hadoop开发的一个强大工具,它使得开发者能够在熟悉的Eclipse环境中进行Hadoop应用的开发、测试和部署,极大地提升了开发效率。通过学习和熟练掌握这个插件的使用,可以帮助...

    基于Eclipse的hadoop-eclipse-plugin-2.0.0插件

    《基于Eclipse的Hadoop开发:hadoop-eclipse-plugin-2.0.0插件详解》 在大数据处理领域,Hadoop作为开源的分布式计算框架,扮演着至关重要的角色。而Eclipse作为Java开发的主流IDE,其强大的功能和丰富的插件支持,...

    hadoop-2.5.0-eclipse插件

    总的来说,Hadoop-2.5.0-eclipse插件是Hadoop开发者不可或缺的工具,它简化了MapReduce编程流程,提高了开发效率,使得在Eclipse这样的专业开发环境中进行大数据处理变得更加便捷和直观。通过深入学习和熟练掌握这个...

    Eclipse3.3_(windows7)连接远程hadoop(RedHat.Enterprise.Linux.5)并测试程序

    6. **Eclipse连接Hadoop**: - **Eclipse插件**: 安装Hadoop相关的Eclipse插件,如Hadoop-Eclipse-Plugin,以便在IDE中直接管理和调试Hadoop程序。 - **配置远程Hadoop连接**: 在Eclipse中设置远程Hadoop连接,...

    pc机连接集群的HADOOP_HOME

    标题“pc机连接集群的HADOOP_HOME”指的是在个人计算机(PC)上配置Hadoop环境,以便能够远程连接并操作一个Hadoop集群。 首先,我们来详细解释一下`HADOOP_HOME`。这是Hadoop环境中的一个重要变量,它指向Hadoop...

    hadoop-eclipse-plugin-2.6.5.jar插件下载

    4. **连接Hadoop集群**:通过设置Hadoop的配置文件(core-site.xml和hdfs-site.xml),开发者可以连接到本地或远程的Hadoop集群。 5. **提交和监控作业**:在Eclipse中直接提交MapReduce作业到Hadoop集群,并可以在...

    hadoop2.6.0源码和eclipse插件

    通过这个插件,开发者可以更高效地进行Hadoop应用的开发和测试,提高开发效率。 总的来说,这个压缩包为Hadoop的开发和学习提供了必要的资源,无论是深入理解Hadoop的内部工作机制,还是快速构建和调试MapReduce...

    hadoop-eclipse-plugin-2.6.0.

    Hadoop Eclipse Plugin 2.6.0为Hadoop开发提供了强大的集成开发环境,简化了开发流程,提高了开发效率。通过使用该插件,开发者可以在熟悉的Eclipse环境中,轻松地进行Hadoop项目的开发、调试和部署,从而更好地...

    Win10的eclipse连接CentOS的Hadoop集群.doc

    通过以上步骤,你就可以在Windows 10的Eclipse环境中编写、测试和调试MapReduce程序,然后部署到远程的CentOS Hadoop集群上进行运行。记得在开发过程中,保持Hadoop版本的一致性,以及及时更新Hadoop的配置文件,以...

    Hadoop集群服务器与本地连接

    在实际开发中,理解并掌握这些步骤和概念,可以帮助开发者有效地在Eclipse中建立本地Hadoop开发环境,实现与远程Hadoop集群的无缝交互。通过这种方式,开发人员可以在本地编写、测试和调试Hadoop程序,极大地提高了...

    ecplise远程连接hadoop--hdfs java api操作文件.pdf

    在Eclipse中远程连接到Hadoop集群,并通过HDFS的Java API操作文件是一套涉及多个步骤的技术流程,这套流程主要涉及到分布式计算和文件系统操作的知识。首先,我们来梳理一下整个过程中的关键知识点。 第一步:启动...

Global site tag (gtag.js) - Google Analytics