一般我们采用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 < fl.length; 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依赖还是需要的, 只是这个在跨平台提交的过程中是一定需要的
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-jobclient</artifactId><version>${hadoop.version}</version>
</dependency>

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.defaultFS</name><value>hdfs://hdfs-cluster</value></property>
</configuration>

core-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>dfs.nameservices</name><value>hdfs-cluster</value></property><property><name>dfs.ha.namenodes.hdfs-cluster</name><value>hdfs-cluster-1,hdfs-cluster-2</value></property><property><name>dfs.namenode.rpc-address.hdfs-cluster.hdfs-cluster-1</name><value>hdfs-cluster-1:8020</value></property><property><name>dfs.namenode.rpc-address.hdfs-cluster.hdfs-cluster-2</name><value>hdfs-cluster-2:8020</value></property><property><name>dfs.client.failover.proxy.provider.hdfs-cluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property></configuration>

hdfs-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.app-submission.cross-platform</name><value>true</value></property>
</configuration>

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- RM Manager Configd --><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><property><name>yarn.resourcemanager.cluster-id</name><value>yarn-cluster</value></property><property><name>yarn.resourcemanager.ha.rm-ids</name><value>yarn-cluster-1,yarn-cluster-2</value></property><!-- RM1 Configs--><property><name>yarn.resourcemanager.address.yarn-cluster-1</name><value>yarn-cluster-1:8032</value></property><!-- RM2 Configs --><property><name>yarn.resourcemanager.address.yarn-cluster-2</name><value>yarn-cluster-2:8032</value></property><property><name>yarn.application.classpath</name><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

转载于:https://www.cnblogs.com/liuming1992/p/4843562.html

[Hadoop] - Win7下提交job到集群上去相关推荐

  1. hadoop namenode启动不了_集群版hadoop安装,写给大忙人看的

    导语 如果之前的单机版hadoop环境安装满足不了你,集群版hadoop一定合你胃口,轻松入手. 目录 集群规划 前置条件 配置免密登录 3.1 生成密匙 3.2 免密登录 3.3 验证免密登录 集群 ...

  2. Linux下搭建Lotus Domino集群

    Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...

  3. Hadoop 2.x 完全分布式HA集群环境搭建

    Hadoop 2.x 完全分布式HA集群环境搭建 目录 Hadoop 2.0 环境搭建 前提:环境准备 第一步:修改hadoop-env.sh配置文件,配置好JAVA_HOME环境变量 第二步:修改h ...

  4. Spark练习 - 提交作业到集群 - submit job via cluster

    Created by Wang, Jerry, last modified on Sep 12, 2015 start-master.sh ( sbin folder下) then ps -aux 7 ...

  5. Hadoop 3.x搭建基础HDFS集群

    与Hadoop 2.x相比,它有一些新的特性如下: 基于JDK 1.8 HDFS可擦除编码 MR Native Task优化 基于Cgroup的内存隔离和IO Disk隔离 更改分配容器资源Conta ...

  6. linux双物理机weblogic集群,linux下weblogic多机器集群部署要点

    weblogic在部署单台物理的多节点服务器(受管服务器)集群时候,只要根据提示下一步下一步都能完成. 最近帮测试部部署一个简单的双物理机weblogic集群(下简称多机集群) 1.在部署多机集群时, ...

  7. spark 提交任务到集群

    spark 提交任务到集群 链接 posted on 2018-07-11 15:46 luoganttcc 阅读(...) 评论(...) 编辑 收藏

  8. centos6.5环境下zookeeper-3.4.6集群环境部署及单机部署详解

    centos6.5环境下Zookeeper-3.4.6集群环境部署 [系统]Centos 6.5 集群部署 [软件]准备好jdk环境,此次我们的环境是open_jdk1.8.0_101 zookeep ...

  9. docker privileged作用_Docker环境下秒建Redis集群,连SpringBoot也整上了!

    为了提高Redis的存储容量和响应速度,有时候我们需要搭建Redis集群.本文主要讲述Redis集群环境的搭建步骤以及如何在SpringBoot中整合使用Redis集群. SpringBoot实战电商 ...

  10. LINUX 下 配置MySQL数据库集群

    LINUX 下 配置MySQL数据库集群 MySQL数据库集群进行正确配置步骤(1) 此文章主要向大家讲述的是对MySQL数据库集群进行正确配置的实际操作步骤,以及对其概念的讲述,如果你对其相关的实际 ...

最新文章

  1. WheelView实现省市区三级联动(数据库实现版本号附带完整SQL及数据)
  2. python中表头格式错误导入_python读csv文件时指定行为表头或无表头的方法
  3. android 获取monkey日志_Android压力测试:monkey压力测试实战
  4. 互联网晚报 | 3月28日 星期一 | 上海医保局辟谣:新冠患者要自负医疗费用不属实 ;十荟团关停全国所有业务...
  5. SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理
  6. 《南溪的目标检测学习笔记》——验证模式下出现“Process finished with exit code 137 (interrupted by signal 9: SIGKILL)“的问题
  7. server sql 数据总行数_一种快速统计SQL Server每个表行数的方法
  8. 自然伽马测井基础知识
  9. 物联网系统怎么部署服务器,如何搭建物联网云服务器
  10. 5G物联网数据网关助力工业企业转型升级
  11. 数据结构之SWUSTOJ1038: 顺序表中重复数据的删除
  12. 论文介绍--Spatio-Temporal Dynamics and Semantic Attribute Enriched Visual Encoding for Video Captioning
  13. Redit集群搭建-Sentinel模式搭建
  14. 2021年研究生入学考试总结和复试冲刺复习计划
  15. 特朗普遭抗议:美国投资人仍看好可再生能源
  16. 【企业】见相非相,即见如来
  17. 全新2007高校BBS 睿智的冷笑话
  18. K8S 故障处理经验积累(网络)
  19. ULTRON — 360基于Flink的实时数仓平台
  20. 分享:金融短信接口应用场景详解

热门文章

  1. 归并排序算法(java实现)
  2. 2d开源游戏引擎_前5名:构建出色的CLI,开源2D游戏引擎等
  3. java初级面试总结
  4. 汽车电子产品EMC测试项目、测试标准
  5. 《MATLAB 神经网络43个案例分析》:第23章 Elman神经网络的数据预测----电力负荷预测模型研究
  6. 信捷plc用c语言编程视频,信捷PLC/触摸屏全套编程软件/学习教程视频资料 大全编程操作手册...
  7. 探究VS2017运行库
  8. Node.js学习9~Egg.js框架学习和部署实战
  9. linux如何添加虚拟打印机,Linux下虚拟打印机CUPS-PDF教程
  10. unity学习笔记-uniwebview3的使用以及一些补充(视频问题已解决)