如何通过Java程序提交yarn的mapreduce on yarn计算任务

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&如何通过Java程序提交yarn的MapReduce计算任务_百度知道
如何通过Java程序提交yarn的MapReduce计算任务
提问者采纳
value&gt,我将文件读入格式设定为WholeFileInputF。  如果我的回答没能帮助您。  2,key2起到了一个数据标识的作用  转载,value&gt,重新设定了分组函数,当相同key1的数据进入reduce容器后,TextPair的格式为&textpair。  3;,即GroupCkey1,map的输出键的格式为组合键格式:  1。这样、为了控制reduce的处理过程。,只要TextPair中的key1相同(不要求key2相同)。与常规的&lt,请继续追问、在程序中;key、为了适应组合键,key2&gt,则数据被分配到一个reduce容器中,这里变为了&lt,即不对文件进行切分,我来为您解答。分组规则为,仅供参考您好;不同
其他类似问题
为您推荐:
mapreduce的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁【每日一博】Spark 用程序提交任务到 yarn - 推酷
【每日一博】Spark 用程序提交任务到 yarn
先介绍官网提交的例子,我用的是spark 0.9.0 hadoop2.2.0
一.使用脚本提交
1.使用spark脚本提交到yarn,首先需要将spark所在的主机和hadoop集群之间hosts相互配置(也就是把spark主机的ip和主机名配置到hadoop所有节点的/etc/hosts里面,再把集群所有节点的
ip和主机名配置到spark所在主机的/etc/hosts里面
2.然后需要把hadoop目录etc/hadoop下面的*-sit.xml复制到${SPARK_HOME}的conf下面.
3.确保hadoop集群配置了 HADOOP_CONF_DIR or YARN_CONF_DIR&
1.yarn-standalone方式提交到yarn
${SPARK_HOME}下面执行:
SPARK_JAR=./assembly/target/scala-2.10.4/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar \
./bin/spark-class org.apache.spark.deploy.yarn.Client \
--jar ./examples/target/scala-2.10/spark-examples_2.10-assembly-0.9.0-incubating.jar \
--class org.apache.spark.examples.SparkPi \
--args yarn-standalone \
--num-workers 3 \
--master-memory 2g \
--worker-memory 2g \
--worker-cores 1
yarn-client
方式提交到yarn
${SPARK_HOME}下面执行:
SPARK_JAR=./assembly/target/scala-2.10.4/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar \
SPARK_YARN_APP_JAR=examples/target/scala-2.10/spark-examples_2.10-assembly-0.9.0-incubating.jar \
./bin/run-example org.apache.spark.examples.SparkPi yarn-client
二、使用程序提交
.必须使用linux主机提交任务,使用windows提交到linux hadoop集群会报
org.apache.hadoop.util.Shell$ExitCodeException: /bin/bash: 第 0 行: fg: 无任务控制
错误。hadoop2.2.0不支持windows提交到linux hadoop集群,网上搜索发现这是hadoop的bug。
提交任务的主机和hadoop集群主机名需要在hosts相互配置。
因为使用程序提交是使用yarn-client方式,所以必须像上面脚本那样设置环境变量SPARK_JAR 和&SPARK_YARN_APP_JAR
比如我的设置为向提交任务主机~/.bashrc里面添加:
export SPARK_JAR=file:///home/ndyc/software/sparkTest/lib/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar
export SPARK_YARN_APP_JAR=file:///home/ndyc/software/sparkTest/ndspark-0.0.1.jar
如果不加file:// spark会任务是hdfs,会在hdfs里面找,file://表明是本地文件。
其中SPARK_JAR是${SPARK_HOME}/assembly/target/scala-2.10.4/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar
SPARK_YARN_APP_JAR是自己程序打的jar包,包含自己的测试程序。
程序中加入hadoop、yarn、依赖。
注意,如果引入了hbase依赖,需要这样配置
&dependency&
&groupId&org.apache.hbase&/groupId&
&artifactId&hbase-thrift&/artifactId&
&version&${hbase.version}&/version&
&exclusions&
&exclusion&
&groupId&org.apache.hadoop&/groupId&
&artifactId&hadoop-mapreduce-client-jobclient&/artifactId&
&/exclusion&
&exclusion&
&groupId&org.apache.hadoop&/groupId&
&artifactId&hadoop-client&/artifactId&
&/exclusion&
&/exclusions&
&/dependency&
然后再加入
&dependency&
&groupId&org.ow2.asm&/groupId&
&artifactId&asm-all&/artifactId&
&version&4.0&/version&
&/dependency&
否则会报错:
IncompatibleClassChangeError has interface org.objectweb.asm.ClassVisitor as super class
异常是因为Hbase jar hadoop-mapreduce-client-jobclient.jar
&hadoop conf下的*-site.xml需要复制到提交主机的classpath下,或者说maven项目resources下面。
代码示例:
package com.sdyc.ndspark.
import org.apache.spark.SparkC
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkC
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairF
import scala.Tuple2;
import java.util.ArrayL
import java.util.L
* Created with IntelliJ IDEA.
* User: zarchary
* Date: 14-1-19
* Time: 下午6:23
* To change this template use File | Settings | File Templates.
public class ListTest {
public static void main(String[] args) throws Exception {
SparkConf sparkConf = new SparkConf();
sparkConf.setAppName(&listTest&);
//使用yarn模式提交
sparkConf.setMaster(&yarn-client&);
JavaSparkContext sc = new JavaSparkContext(sparkConf);
List&String& listA = new ArrayList&String&();
listA.add(&a&);
listA.add(&a&);
listA.add(&b&);
listA.add(&b&);
listA.add(&b&);
listA.add(&c&);
listA.add(&d&);
JavaRDD&String& letterA = sc.parallelize(listA);
JavaPairRDD&String, Integer& letterB = letterA.map(new PairFunction&String, String, Integer&() {
public Tuple2&String, Integer& call(String s) throws Exception {
return new Tuple2&String, Integer&(s, 1);
letterB = letterB.reduceByKey(new Function2&Integer, Integer, Integer&() {
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
//颠倒顺序
JavaPairRDD&Integer, String& letterC = letterB.map(new PairFunction&Tuple2&String, Integer&, Integer, String&() {
public Tuple2&Integer, String& call(Tuple2&String, Integer& stringIntegerTuple2) throws Exception {
return new Tuple2&Integer, String&(stringIntegerTuple2._2, stringIntegerTuple2._1);
JavaPairRDD&Integer, List&String&& letterD = letterC.groupByKey();
// //false说明是降序
JavaPairRDD&Integer, List&String&& letterE = letterD.sortByKey(false);
System.out.println(&========& + letterE.collect());
System.exit(0);
代码中master设置为yar-client表明了是使用提交到yarn.
关于spark需要依赖的jar的配置可以参考我的博客spark安装和远程调用。
以上弄完之后就可以运行程序了。
运行后会看到yarn的ui界面出现:
正在执行的过程中会发现hadoop yarn 有的nodemanage会有下面这个进程:
13247 org.apache.spark.deploy.yarn.WorkerLauncher
这是spark的工作进程。
如果接收到异常为:
WARN YarnClientClusterScheduler: Initial job has not ac check your cluster UI to ensure that workers are registered and have sufficient memory
&出现这个错误是因为提交任务的节点不能和spark工作节点交互,因为提交完任务后提交任务节点上会起一个进程,展示任务进度,大多端口为4044,工作节点需要反馈进度给该该端口,所以如果主机名或者IP在hosts中配置不正确,就会报
WARN YarnClientClusterScheduler: Initial job has not ac check your cluster UI to ensure that workers are registered and have sufficient memory错误。
所以请检查主机名和IP是否配置正确。
我自己的理解为,程序提交任务到yarn后,会上传SPARK_JAR和SPARK_YARN_APP_JAR到hadoop节点,&yarn根据任务情况来分配资源,在nodemanage节点上来启动org.apache.spark.deploy.yarn.WorkerLauncher工作节点来执行spark任务,执行完成后退出。
介绍完毕,下班回家。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 yarn和mapreduce 的文章

 

随机推荐