`
ganliang13
  • 浏览: 252144 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Eclipse本地机提交hadoop程序至集群

阅读更多
用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伪集群搭建及eclipse插件配置

    Hadoop作为当今最流行的分布式存储与计算框架之一,主要用于存储和分析大规模数据集。...这样的环境非常适合学习和开发Hadoop应用程序,帮助开发者在部署到实际生产环境之前发现并解决潜在的问题。

    Hadoop集群pdf文档

    Hadoop_Hadoop集群(第7期)_Eclipse开发环境设置 Hadoop_Hadoop集群(第8期)_HDFS初探之旅 Hadoop_Hadoop集群(第9期)_MapReduce初级案例 Hadoop_Hadoop集群(第10期)_MySQL关系数据库 Web(Json-Lib类库使用...

    eclipse安装Hadoop插件

    为了更好地利用Eclipse进行Hadoop程序开发,安装Hadoop Eclipse插件是十分必要的。本文将详细介绍如何在Eclipse中安装Hadoop插件及相关配置步骤。 #### 二、准备工作 1. **Eclipse IDE**:确保已安装最新版本的...

    Map-Reduce原理体系架构和工作机制,eclipse与Hadoop集群连接

    此外,通过Eclipse与Hadoop集群的有效连接,开发者可以在本地环境中轻松地编写、测试和调试Map-Reduce程序,进而提高开发效率。在实际应用中,Map-Reduce已经被广泛应用于搜索引擎索引构建、社交网络数据分析、金融...

    eclipse hadoop2 插件

    这个插件针对Hadoop 2.x版本进行了优化,提供了丰富的功能来简化Hadoop应用程序的开发流程。以下是关于这个插件及其相关知识点的详细说明: 1. **Hadoop简介**:Hadoop是一个开源框架,主要用于处理和存储大量数据...

    Hadoop集群程序设计与开发教材最终代码.zip

    - Eclipse和IntelliJ IDEA等IDE提供了Hadoop插件,便于调试和测试Hadoop应用程序。 5. Hadoop集群部署: - 单机模式:用于开发和测试,所有Hadoop进程都在一台机器上运行。 -伪分布式模式:在一个节点上模拟多...

    hadoop-eclipse-plugin1.2.1 and hadoop-eclipse-plugin2.8.0

    为了方便开发者在Eclipse或MyEclipse这样的集成开发环境中高效地进行Hadoop应用开发,Hadoop-Eclipse-Plugin应运而生。这个插件允许开发者直接在IDE中对Hadoop集群进行操作,如创建、编辑和运行MapReduce任务,极大...

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

    5. **编写MapReduce程序**: 使用Eclipse编写Java代码实现MapReduce任务,然后右键点击项目,选择`Run As` -&gt; `Hadoop Job`来提交作业到远程Hadoop集群。 6. **监控作业状态**: 插件还会在Eclipse的`Progress`视图中...

    Eclipse开发Hadoop相关项目本地配置插件

    Eclipse会自动提交任务到Hadoop集群,或者在本地模式下运行。 5. **使用eclipse开发hadoop项目相关插件**:这个压缩包文件可能包含了一些帮助开发Hadoop项目的Eclipse插件或工具。例如,可能有用于提高代码编辑体验...

    hadoop-eclipse2.5.2、hadoop-eclipse2.6.0、hadoop-eclipse2.6.5

    选择合适版本的Hadoop-Eclipse插件对于开发和调试Hadoop应用至关重要,因为它直接影响到开发效率和代码兼容性。使用这些插件,开发者可以更便捷地在Hadoop环境中开发、测试和部署大数据处理应用程序。

    Eclipse Hadoop2.7插件

    3. **运行/调试支持**:可以直接在Eclipse内提交MapReduce任务进行运行或调试,无需离开IDE,这包括本地模式和远程集群模式。 4. **资源管理**:通过插件可以方便地查看和管理Hadoop集群的资源状态,包括节点信息、...

    如何在Windows下的eclipse调试Hadoop2.2.0分布式集群

    在Windows环境下,使用Eclipse进行Hadoop 2.2.0分布式集群的调试是一项重要的技能,这可以帮助开发者更好地理解和优化Hadoop程序。以下是一些关键的知识点,将指导你完成这个过程。 首先,Hadoop是一个开源的分布式...

    eclipse远程连接hadoop集群 hadoop-eclipse-plugin-2.6.0.jar

    windows下 eclipse操作hadoop集群 插件

    配置Eclipse连接Hadoop

    在本文中,我们将深入探讨如何配置Eclipse IDE以连接到Hadoop集群,这对于开发和调试Hadoop相关的Java应用程序至关重要。Eclipse是一个强大的集成开发环境,支持多种编程语言,包括Java,而Hadoop是一个分布式计算...

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

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

    eclipse连接hadoop所需要的hadoop.ddl和eclipse插件和hadoop运行案例

    这个插件提供了与Hadoop集群交互的功能,例如创建、提交和监控MapReduce作业。它简化了开发过程,允许开发者在Eclipse环境中直接管理Hadoop项目,浏览HDFS文件系统,甚至直接在IDE内编写、测试和调试作业。 安装...

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

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

    win7下Eclipse开发Hadoop应用程序环境搭建

    在Windows 7操作系统中,使用Eclipse开发Hadoop应用程序的过程涉及多个步骤,涵盖了从环境配置到实际编程的各个层面。以下是对这个主题的详细讲解: 首先,我们需要了解Hadoop和Eclipse的基础。Hadoop是一个开源的...

Global site tag (gtag.js) - Google Analytics