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伪分布式部署文档是指在单台机器上模拟分布式Hadoop集群的部署文档,包括服务器伪分布式部署、本地Hadoop开发环境部署、Eclipse远程连接Hadoop服务器等内容。下面是该文档的详细解释: 首先,需要安装JDK,...
总之,Hadoop-Eclipse插件是Hadoop开发者的重要工具,通过它,开发者可以在熟悉的Eclipse环境中高效地开发、测试和部署Hadoop MapReduce应用程序,实现大数据处理任务的快速迭代和优化。不同版本的插件体现了Hadoop-...
标题中的“eclipse连接hadoop需要的文件”指的是在Eclipse集成开发环境中配置Hadoop环境,以便进行Hadoop相关的开发工作。Eclipse是一款强大的Java IDE,而Hadoop是一个开源的分布式计算框架,常用于大数据处理。...
Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...
9. **建立连接**:在Eclipse中配置Hadoop和Spark连接,使得Eclipse能够与本地或远程Hadoop和Spark集群通信。 10. **开发源码**:现在你可以在Eclipse中编写Hadoop MapReduce、Spark应用和Hive查询。使用Eclipse的...
对于Hadoop开发,可以安装Hadoop-Eclipse插件,方便在Eclipse中直接编写、调试和运行Hadoop MapReduce程序。 7. **Hadoop-Eclipse插件的安装**:这个插件允许开发者在Eclipse中直接创建、编辑和运行Hadoop作业,...
Eclipse Hadoop2.7插件是专门为Java开发者设计的一款工具,它允许用户在流行的集成开发环境...对于大数据开发者来说,这是一个不可或缺的工具,它降低了Hadoop开发的门槛,让Hadoop项目的生命周期管理变得更加轻松。
本文将深入探讨如何使用Eclipse IDE结合hadoop-eclipse-plugin-2.6.0.jar插件,实现在Windows环境下进行远程连接到Hadoop集群,尤其适用于64位操作系统。 首先,我们要理解Hadoop的核心概念。Hadoop是由Apache基金...
总结来说,Eclipse结合`hadoop-eclipse-plugin`插件提供了便捷的Hadoop开发环境,使得开发者可以在本地环境中编写、测试和调试MapReduce程序,然后轻松地部署到远程Hadoop集群。通过这种方式,开发者可以更加专注于...
总的来说,Hadoop-eclipse-plugin-2.7.6是Hadoop开发的一个强大工具,它使得开发者能够在熟悉的Eclipse环境中进行Hadoop应用的开发、测试和部署,极大地提升了开发效率。通过学习和熟练掌握这个插件的使用,可以帮助...
《基于Eclipse的Hadoop开发:hadoop-eclipse-plugin-2.0.0插件详解》 在大数据处理领域,Hadoop作为开源的分布式计算框架,扮演着至关重要的角色。而Eclipse作为Java开发的主流IDE,其强大的功能和丰富的插件支持,...
总的来说,Hadoop-2.5.0-eclipse插件是Hadoop开发者不可或缺的工具,它简化了MapReduce编程流程,提高了开发效率,使得在Eclipse这样的专业开发环境中进行大数据处理变得更加便捷和直观。通过深入学习和熟练掌握这个...
6. **Eclipse连接Hadoop**: - **Eclipse插件**: 安装Hadoop相关的Eclipse插件,如Hadoop-Eclipse-Plugin,以便在IDE中直接管理和调试Hadoop程序。 - **配置远程Hadoop连接**: 在Eclipse中设置远程Hadoop连接,...
标题“pc机连接集群的HADOOP_HOME”指的是在个人计算机(PC)上配置Hadoop环境,以便能够远程连接并操作一个Hadoop集群。 首先,我们来详细解释一下`HADOOP_HOME`。这是Hadoop环境中的一个重要变量,它指向Hadoop...
4. **连接Hadoop集群**:通过设置Hadoop的配置文件(core-site.xml和hdfs-site.xml),开发者可以连接到本地或远程的Hadoop集群。 5. **提交和监控作业**:在Eclipse中直接提交MapReduce作业到Hadoop集群,并可以在...
通过这个插件,开发者可以更高效地进行Hadoop应用的开发和测试,提高开发效率。 总的来说,这个压缩包为Hadoop的开发和学习提供了必要的资源,无论是深入理解Hadoop的内部工作机制,还是快速构建和调试MapReduce...
Hadoop Eclipse Plugin 2.6.0为Hadoop开发提供了强大的集成开发环境,简化了开发流程,提高了开发效率。通过使用该插件,开发者可以在熟悉的Eclipse环境中,轻松地进行Hadoop项目的开发、调试和部署,从而更好地...
通过以上步骤,你就可以在Windows 10的Eclipse环境中编写、测试和调试MapReduce程序,然后部署到远程的CentOS Hadoop集群上进行运行。记得在开发过程中,保持Hadoop版本的一致性,以及及时更新Hadoop的配置文件,以...
在实际开发中,理解并掌握这些步骤和概念,可以帮助开发者有效地在Eclipse中建立本地Hadoop开发环境,实现与远程Hadoop集群的无缝交互。通过这种方式,开发人员可以在本地编写、测试和调试Hadoop程序,极大地提高了...
在Eclipse中远程连接到Hadoop集群,并通过HDFS的Java API操作文件是一套涉及多个步骤的技术流程,这套流程主要涉及到分布式计算和文件系统操作的知识。首先,我们来梳理一下整个过程中的关键知识点。 第一步:启动...