用Eclipse提交hadoop 程序提交时总是发现有些类不存在,只好用EJob这个类辅助成功。 这个类主要用于把hadoop程序打包,并从本机发到集群 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; import java.util.jar.Manifest; public class EJob { // To declare global field private static List<URL> classPath = new ArrayList<URL>(); // To declare method public static File createTempJar(String root) throws IOException { if (!new File(root).exists()) { return null; } Manifest manifest = new Manifest(); manifest.getMainAttributes().putValue("Manifest-Version", "1.0"); final File jarFile = File.createTempFile("EJob-", ".jar", new File( System.getProperty("java.io.tmpdir"))); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { jarFile.delete(); } }); JarOutputStream out = new JarOutputStream( new FileOutputStream(jarFile), manifest); createTempJarInner(out, new File(root), ""); out.flush(); out.close(); return jarFile; } private static void createTempJarInner(JarOutputStream out, File f, String base) throws IOException { if (f.isDirectory()) { File[] fl = f.listFiles(); if (base.length() > 0) { base = base + "/"; } for (int i = 0; i < fl.length; i++) { createTempJarInner(out, fl[i], base + fl[i].getName()); } } else { out.putNextEntry(new JarEntry(base)); FileInputStream in = new FileInputStream(f); byte[] buffer = new byte[1024]; int n = in.read(buffer); while (n != -1) { out.write(buffer, 0, n); n = in.read(buffer); } in.close(); } } public static ClassLoader getClassLoader() { ClassLoader parent = Thread.currentThread().getContextClassLoader(); if (parent == null) { parent = EJob.class.getClassLoader(); } if (parent == null) { parent = ClassLoader.getSystemClassLoader(); } return new URLClassLoader(classPath.toArray(new URL[0]), parent); } public static void addClasspath(String component) { if ((component != null) && (component.length() > 0)) { try { File f = new File(component); if (f.exists()) { URL key = f.getCanonicalFile().toURL(); if (!classPath.contains(key)) { classPath.add(key); } } } catch (IOException e) { } } } }
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 { File jarFile = EJob.createTempJar("bin"); ClassLoader classLoader = EJob.getClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); Configuration conf = new Configuration(); conf.set("mapred.job.tracker", "bfdbjc1:12001"); 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("hdfs://bfdbjc1:12000/user/work/a.txt")); //本地提交至集群的时候得有写权限 FileOutputFormat.setOutputPath(job, new Path("hdfs://bfdbjc1:12000/user/work/output/20130528_12")); //Eclipse 本地提交 ((JobConf) job.getConfiguration()).setJar(jarFile.toString()); System.exit(job.waitForCompletion(true) ? 0 : 1); } }
相关推荐
Hadoop作为当今最流行的分布式存储与计算框架之一,主要用于存储和分析大规模数据集。...这样的环境非常适合学习和开发Hadoop应用程序,帮助开发者在部署到实际生产环境之前发现并解决潜在的问题。
Hadoop_Hadoop集群(第7期)_Eclipse开发环境设置 Hadoop_Hadoop集群(第8期)_HDFS初探之旅 Hadoop_Hadoop集群(第9期)_MapReduce初级案例 Hadoop_Hadoop集群(第10期)_MySQL关系数据库 Web(Json-Lib类库使用...
为了更好地利用Eclipse进行Hadoop程序开发,安装Hadoop Eclipse插件是十分必要的。本文将详细介绍如何在Eclipse中安装Hadoop插件及相关配置步骤。 #### 二、准备工作 1. **Eclipse IDE**:确保已安装最新版本的...
此外,通过Eclipse与Hadoop集群的有效连接,开发者可以在本地环境中轻松地编写、测试和调试Map-Reduce程序,进而提高开发效率。在实际应用中,Map-Reduce已经被广泛应用于搜索引擎索引构建、社交网络数据分析、金融...
这个插件针对Hadoop 2.x版本进行了优化,提供了丰富的功能来简化Hadoop应用程序的开发流程。以下是关于这个插件及其相关知识点的详细说明: 1. **Hadoop简介**:Hadoop是一个开源框架,主要用于处理和存储大量数据...
- Eclipse和IntelliJ IDEA等IDE提供了Hadoop插件,便于调试和测试Hadoop应用程序。 5. Hadoop集群部署: - 单机模式:用于开发和测试,所有Hadoop进程都在一台机器上运行。 -伪分布式模式:在一个节点上模拟多...
为了方便开发者在Eclipse或MyEclipse这样的集成开发环境中高效地进行Hadoop应用开发,Hadoop-Eclipse-Plugin应运而生。这个插件允许开发者直接在IDE中对Hadoop集群进行操作,如创建、编辑和运行MapReduce任务,极大...
5. **编写MapReduce程序**: 使用Eclipse编写Java代码实现MapReduce任务,然后右键点击项目,选择`Run As` -> `Hadoop Job`来提交作业到远程Hadoop集群。 6. **监控作业状态**: 插件还会在Eclipse的`Progress`视图中...
Eclipse会自动提交任务到Hadoop集群,或者在本地模式下运行。 5. **使用eclipse开发hadoop项目相关插件**:这个压缩包文件可能包含了一些帮助开发Hadoop项目的Eclipse插件或工具。例如,可能有用于提高代码编辑体验...
选择合适版本的Hadoop-Eclipse插件对于开发和调试Hadoop应用至关重要,因为它直接影响到开发效率和代码兼容性。使用这些插件,开发者可以更便捷地在Hadoop环境中开发、测试和部署大数据处理应用程序。
3. **运行/调试支持**:可以直接在Eclipse内提交MapReduce任务进行运行或调试,无需离开IDE,这包括本地模式和远程集群模式。 4. **资源管理**:通过插件可以方便地查看和管理Hadoop集群的资源状态,包括节点信息、...
在Windows环境下,使用Eclipse进行Hadoop 2.2.0分布式集群的调试是一项重要的技能,这可以帮助开发者更好地理解和优化Hadoop程序。以下是一些关键的知识点,将指导你完成这个过程。 首先,Hadoop是一个开源的分布式...
windows下 eclipse操作hadoop集群 插件
在本文中,我们将深入探讨如何配置Eclipse IDE以连接到Hadoop集群,这对于开发和调试Hadoop相关的Java应用程序至关重要。Eclipse是一个强大的集成开发环境,支持多种编程语言,包括Java,而Hadoop是一个分布式计算...
通过以上步骤,你就可以在Windows 10的Eclipse环境中编写、测试和调试MapReduce程序,然后部署到远程的CentOS Hadoop集群上进行运行。记得在开发过程中,保持Hadoop版本的一致性,以及及时更新Hadoop的配置文件,以...
这个插件提供了与Hadoop集群交互的功能,例如创建、提交和监控MapReduce作业。它简化了开发过程,允许开发者在Eclipse环境中直接管理Hadoop项目,浏览HDFS文件系统,甚至直接在IDE内编写、测试和调试作业。 安装...
总之,Hadoop-Eclipse插件是Hadoop开发者的重要工具,通过它,开发者可以在熟悉的Eclipse环境中高效地开发、测试和部署Hadoop MapReduce应用程序,实现大数据处理任务的快速迭代和优化。不同版本的插件体现了Hadoop-...
在Windows 7操作系统中,使用Eclipse开发Hadoop应用程序的过程涉及多个步骤,涵盖了从环境配置到实际编程的各个层面。以下是对这个主题的详细讲解: 首先,我们需要了解Hadoop和Eclipse的基础。Hadoop是一个开源的...