热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Hadoop]-Win7下提交job到集群上去

一般我们采用win开发+linuxhadoop集群的方式进行开发,使用插件:hadoop-***-eclipse-plugin。运行程序的时候,我们一般采用runasapplica

一般我们采用win开发+linux hadoop集群的方式进行开发,使用插件:hadoop-***-eclipse-plugin。


 

运行程序的时候,我们一般采用run as application或者选择run as hadoop。按照这个字面理解,我们可以认为第一种是运行在本地,第二种是运行在hadoop集群上。但是实际情况是一般如果不进行配置的话,全部是在本地进行运行的。如果需要将job提交到集群上,那么需要进行必要的设置和添加部分代码。

1、copy mapred-site.xml && yarn-site.xml文件,并修改必要的信息,将yarn指向集群。

2、给mapred-site.xml文件中添加参数mapreduce.app-submission.cross-platform,参数值为true。

3、打包本地代码提交到集群上,如果不进行该操作,会出现ClassNotFoundException。打包代码如下:

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileOutputStream;
 4 import java.io.IOException;
 5 import java.util.jar.JarEntry;
 6 import java.util.jar.JarOutputStream;
 7 
 8 public class EJob {
 9 
10     public static File createTempJar(String root) throws IOException {
11         if (!new File(root).exists()) {
12             return null;
13         }
14 
15         final File jarFile = File.createTempFile("EJob-", ".jar", new File(System
16                 .getProperty("java.io.tmpdir")));
17 
18         Runtime.getRuntime().addShutdownHook(new Thread() {
19             @Override
20             public void run() {
21                 jarFile.delete();
22             }
23         });
24 
25         JarOutputStream out = new JarOutputStream(new FileOutputStream(jarFile));
26         createTempJarInner(out, new File(root), "");
27         out.flush();
28         out.close();
29         return jarFile;
30     }
31 
32     private static void createTempJarInner(JarOutputStream out, File f,
33             String base) throws IOException {
34         if (f.isDirectory()) {
35             File[] fl = f.listFiles();
36             if (base.length() > 0) {
37                 base = base + "/";
38             }
39             for (int i = 0; i ) {
40                 createTempJarInner(out, fl[i], base + fl[i].getName());
41             }
42         } else {
43             out.putNextEntry(new JarEntry(base));
44             FileInputStream in = new FileInputStream(f);
45             byte[] buffer = new byte[1024];
46             int n = in.read(buffer);
47             while (n != -1) {
48                 out.write(buffer, 0, n);
49                 n = in.read(buffer);
50             }
51             in.close();
52         }
53     }
54  }
EJob 打包代码工具类
 File jarFile = EJob.createTempJar("target/classes");
((JobConf) job.getConfiguration()).setJar(jarFile.toString());
// 其他创建job的代码不进行任何的修改

至此,就可以将job提交到集群上去了。




 

对应任何在非hadoop集群中提交的mr任务来讲,均需要注意一下几点:

1. 参数mapreduce.app-submission.cross-platform必须设置为true,表示是跨集群提交job

2. 如果参数mapreduce.framework.name值为yarn,那么必须将类YarnClientProtocolProvider引入到项目的classpath路径中,maven依赖如下:

// 其他正常的hadoop-mapreduce-client依赖还是需要的, 只是这个在跨平台提交的过程中是一定需要的

    org.apache.hadoop
    hadoop-mapreduce-client-jobclient
    ${hadoop.version}

3. 如果集群是HA设置,那么必须给定HA配置或者采用明确指定active节点的方式。必须给定的参数有yarn.resourcemanager.address和fs.defaultFS之类的定位参数

当HDFS和Yarn均使用HA的时候,跨集群提交最少配置(依赖集群的具体搭建方法,比如如果在搭建过程中执行了yarn的classpath,那么yarn-site.xml中的参数yarn.application.classpath可以不要, 其他参数不可以少,必须存在!!!)

xml version="1.0"?>
xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>fs.defaultFSname>
        <value>hdfs://hdfs-clustervalue>
    property>
configuration>
core-site.xml
xml version="1.0"?>
xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>dfs.nameservicesname>
        <value>hdfs-clustervalue>
    property>

    <property>
        <name>dfs.ha.namenodes.hdfs-clustername>
        <value>hdfs-cluster-1,hdfs-cluster-2value>
    property>

    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.hdfs-cluster-1name>
        <value>hdfs-cluster-1:8020value>
    property>

    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.hdfs-cluster-2name>
        <value>hdfs-cluster-2:8020value>
    property>

    <property>
        <name>dfs.client.failover.proxy.provider.hdfs-clustername>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
    property>

configuration>
hdfs-site.xml
xml version="1.0"?>
xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>mapreduce.framework.namename>
        <value>yarnvalue>
    property>
    <property>
        <name>mapreduce.app-submission.cross-platformname>
        <value>truevalue>
    property>
configuration>
mapred-site.xml
xml version="1.0"?>
xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    
    <property>
        <name>yarn.resourcemanager.ha.enabledname>
        <value>truevalue>
    property>

    <property>
        <name>yarn.resourcemanager.cluster-idname>
        <value>yarn-clustervalue>
    property>

    <property>
        <name>yarn.resourcemanager.ha.rm-idsname>
        <value>yarn-cluster-1,yarn-cluster-2value>
    property>

    
    <property>
        <name>yarn.resourcemanager.address.yarn-cluster-1name>
        <value>yarn-cluster-1:8032value>
    property>


    
    <property>
        <name>yarn.resourcemanager.address.yarn-cluster-2name>
        <value>yarn-cluster-2:8032value>
    property>

    <property>
        <name>yarn.application.classpathname>
        <value>
                $HADOOP_CONF_DIR,
                $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
                $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
                $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
                $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
        value>
    property>
configuration>
yarn-site.xml

 


推荐阅读
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
author-avatar
渊博的大盗zhang_618
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有