当前位置: 首页 > news >正文

使用maven+eclipse构建spark项目

为什么80%的码农都做不了架构师?>>>   hot3.png

一、构建spark项目

maven构建scala项目

1.参考之前构建scala项目的步骤,先构建一个scala项目。

2.然后再加入spark版本的依赖。

  <dependency>

     <groupId>org.apache.spark</groupId>

     <artifactId>spark-core_2.10</artifactId>

     <version>1.5.0</version>

 </dependency>

注意spark版本要和集群上spark版本对应。spark-core_2.10不能写成spark-core_2.11,后面的2.10是和你的scala版本对应上的。如果spark的版本是从scala2.11编译的,则要写2.11。

3.把jdk和scala版本改成spark依赖的版本

<properties>

    <maven.compiler.source>1.7</maven.compiler.source>

    <maven.compiler.target>1.7</maven.compiler.target>

    <encoding>UTF-8</encoding>

    <scala.version>2.10.4</scala.version>

    <scala.compat.version>2.10</scala.compat.version>

  </properties>

注意scala.version和scala.compat.version版本要改成相同的,否则maven编译会报错,编译不过去。

4.spark程序代码如下:

object SparkMain {

  def main(args : Array[String]) {

    var sparkConf = new SparkConf();

    sparkConf.setAppName("sparkTest").setMaster("spark://bigdata1:7077,bigdata2:7077");

    val sc = new SparkContext(sparkConf);

    sc.addJar("D:\\programs\\scala-SDK-4.1.1-vfinal-2.11-win32.win32.x86_64\\workspace\\SparkTest\\target\\SparkTest-0.0.1-SNAPSHOT.jar");

    val hdfsRdd = sc.textFile("hdfs://bigdata1:9000/data/stbcontent/0");

    val mapRdd = hdfsRdd.flatMap(mySplit);

    var result = hdfsRdd.flatMap(mySplit).count();
    
    mapRdd.saveAsTextFile("hdfs://bigdata1:9000/data/stbformat1");

    println(result);

    sc.stop();

  }

}

注意此处的drivering program就是安装eclipse的这台机器了,所以路径都是针对eclipse。如果打包到集群上跑,那么路径就变成了linux那台机器了。所以我们查看4044端口的时候,就是window这台机器的ip了。

如果直接跑在本地windows下,需要添加hadoop的环境,添加完了之后,你就可以在windows上直接跑spark程序了,则spark代码如下:

object SeeSource {
  def main(args: Array[String]): Unit = {
    var sparkConf = new SparkConf();
    sparkConf.setAppName("seeSource").setMaster("local[2]");
    val sc = new SparkContext(sparkConf);
    println("aa");
    sc.stop();
  }
}

参考:在Eclipse上运行Spark(Standalone,Yarn-Client)

二、问题汇总

1.java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@d919109 rejected from java.util.concurrent.ThreadPoolExecutor@7b42ce0a

将sparkConf.setMaster里面master ip改成hostName,这样就不会出现这个错误了,如下:

sparkConf.setMaster("spark://bigdata1:7077,bigdata2:7077");

参考: java远程调用 spark服务出错

2.java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class

scala ide编译spark程序使用的scala版本和spark集群上的scala版本不一致。解决方法就是更改scala ide所使用的scala 版本

首先新增符合要求的scala版本,如下:

145356_SuPI_2260928.png

然后项目右键,选择scala compiler,选择刚刚新增的scala版本

145357_CL5F_2260928.png

参考:运行第一个SparkStreaming程序(及过程中问题解决)

3.java.lang.ClassNotFoundException: com.bigdata.test22.SparkTest$$anonfun$1

出现这个错误是spark standalone集群中,我们运行的类在worker节点没有,所以worker节点就会报找不到类这个错误,需要将我们的spark程序打包放到集群的每个节点上,然后在sparkConf加上如下代码:

sparkConf.addJar("D:\\programs\\scala-SDK-4.1.1-vfinal-2.11-win32.win32.x86_64\\workspace\\SparkTest\\target\\SparkTest-0.0.1-SNAPSHOT.jar"); 

注意,一般我们使用ide来测试spark的话,如果是在linux编程,ide和spark在同一个节点上,那么使用sparkConf.setMaster("local[2]"),只在一台机器上跑,就不存在找不到类的问题了。

spark java api通过run as java application运行的方法

 

转载于:https://my.oschina.net/cjun/blog/633285

相关文章:

  • pull解析和sax解析的差别
  • eclipse中JS文件乱码
  • JavaScript设计模式与开发实践系列之策略模式
  • 颜色名列表
  • 设计模式简介
  • 获取坐标封装 getPos
  • 修改vsftp默认端口
  • struts2标签报错问题
  • freeipa
  • cordova plugin数据传递概要
  • 全球顶级技术博客(转)
  • Java使用代理发送Http请求
  • adb_相关目录
  • js api 实现钉钉免登
  • Vmware vSphere 6.0之ESXI安装配置
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 78. Subsets
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • eclipse(luna)创建web工程
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java程序员幽默爆笑锦集
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • jQuery(一)
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Laravel核心解读--Facades
  • nodejs实现webservice问题总结
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpringBoot 实战 (三) | 配置文件详解
  • web标准化(下)
  • 爱情 北京女病人
  • 翻译--Thinking in React
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何用vue打造一个移动端音乐播放器
  • 使用 QuickBI 搭建酷炫可视化分析
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微信开放平台全网发布【失败】的几点排查方法
  • 怎么将电脑中的声音录制成WAV格式
  • elasticsearch-head插件安装
  • 阿里云重庆大学大数据训练营落地分享
  • 容器镜像
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​马来语翻译中文去哪比较好?
  • # include “ “ 和 # include < >两者的区别
  • #android不同版本废弃api,新api。
  • #pragma once与条件编译
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (poj1.2.1)1970(筛选法模拟)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (solr系列:一)使用tomcat部署solr服务
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)ObjectiveC 深浅拷贝学习