小白学习Spark系列二:spark应用打包傻瓜式教程(IntelliJ+maven 和 pycharm+jar)
在做spark项目时,我们常常面临如何在本地将其打包,上传至装有spark服务器上运行的问题。下面是我在项目中尝试的两种方案,也踩了不少坑,两者相比,方案一比较简单,本博客提供的jar包适用于spark版本2.0以下的,如果jar包和版本不对应会出现找不到类或方法等错误提示信息,它主要借助于eclipse和现成的jar包进行打包应用,只能从官网上下载对应的jar包,局限很大。方案二是借助于IntelliJ + maven方式,它只要配置好pom.xml文件,在文件中写明自己的运行环境即可,通用(推荐),另外IntelliJ软件炒鸡好用,建议大家不要由于自己习惯哪款软件就先入为主。
1.准备工作
scala:在本机上装scala,下载链接 https://www.scala-lang.org/download/ ,如果是在windows下,请下载 msi 版本。
jdk:下载链接 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
如果是需要在本地打包后上传至装有spark的服务器上运行,则务必保证本地和服务器上版本保持一致,否则会导致找不到类或方法等错误。
2. 方案一:eclipse打jar包(适用于spark2.0以下)
(1)安装 eclipse和配置完java环境后,在工具栏 Help -> Install New Software,输入scala ,通过链接下载运行scala代码的插件。
(2)下载插件后,新建一个scala工程,测试Spark程序,统计单词个数。
(3)在工程下新建目录 lib,将两个jar包(hadoop-0.20.2-CDH3B4-core.jar,spark-assembly-1.6.3-SNAPSHOT-hadoop2.5.0-cdh5.3.2.jar)拷贝到 lib 下,选中这两个jar包右击 Build Path,加到Referenced Libraries中。
jar包下载链接:https://pan.baidu.com/s/1dQjJR8vtl01wp6JLEgRp3w 密码:20hh
(4)选中工程,右击,选中Export,选择JAR 文件->Next,只选择src文件,填写保存位置和名字。
(5)把jar包传到安装有spark的服务器目录下,写好submit脚本(如下图所示),这里我新建了Jar目录,把jar包放到该目录下,后面紧接着是传递给函数的一个参数(文件路径),执行该脚本。
(6)如果出现 找不到类等错误,一般就是版本出现了问题。我在eclipse中加载了hadoop和assmbly的jar包后也提示了该错误,当时没选择对scala的版本,可通过如下方式改变其版本,选中 scala library container后右击 properties,选择2.10.6版本。当然,你需要这些版本和服务器上装有的spark、scala、hadoop版本一致才可以。这种方式需要从网上找版本一致的jar包,体验很差,不推荐。
2. 方案二:IntelliJ + maven(推荐)
(1)安装IntelliJ
下载链接https://www.jetbrains.com/idea/download/#section=windows,选用右边的Community版本就ok。
(2)安装IntelliJ中的scala插件
如果在主界面可通过 File -> Settings -> Plugins -> Browse respositories 的方式安装scala插件,具体如下图所示。由于这里我已经安装完毕,所以没有显示 Install 按钮。如果刚装完 IntelliJ,进入初始界面,可选择右下方的Configure -> Plugins 来安装scala插件。
(3)新建maven项目
最新的IntelliJ中一般都会安装有maven,这里通过 File -> New -> Project -> Maven 新建maven项目,在配置maven页面需选中复选框,选择scala-archetype-simple:1.2 ,点击next,填写信息自己随意起名字就好,无碍。在配置maven环境这块需要勾选两个复选框,再选择合适的maven路径和setting files路径,一般是在安装IntelliJ目录下的plugins中可以找到。具体如下图所示:
(4)配置maven项目的pom.xml文件
注意:当你配置完xml信息后,右下角这里会提示import changes,点击它,等待页面最下面Running信息加载完就可以到下一步了。否则不能及时同步xml中的配置,会导致打包失败(亲测)。配置文件信息如下,方便大家自行粘贴。我这里配置的spark版本是 2.1.1, scala版本 2.11,hadoop 版本 2.7.3,这里需要和服务器上版本一致,如果不知道服务器上spark信息,可以输入命令行 spark-shell 查看。hadoop可通过 hadoop version 查看。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>Test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spark.version>2.1.1</spark.version>
<scala.version>2.11</scala.version>
<hadoop.version>2.7.3</hadoop.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
</build> </project>
pom.xml
(5)在test目录下右键选择scala script新建scala类,如果没有scala script,则新建一个空白文件,名字和文件中的类名需一致,这里随意起个名字WordCount,用 .scala 作为后缀名。然后会提示没有Scala SDK,按照提示点击Setup Scala SDK安装即可。scala文件内容如下。
package com.test import org.apache.spark.{SparkContext, SparkConf}
object WordCount {
def main(args: Array[String]) {
/**
* SparkContext 的初始化需要一个SparkConf对象
* SparkConf包含了Spark集群的配置的各种参数
*/
val conf = new SparkConf().setAppName("testRdd")//设置本程序名称
//.setMaster("local") 设置单线程模式
//Spark程序的编写都是从SparkContext开始的
val sc = new SparkContext(conf)
val data = sc.textFile("hdfs:///user/aisearch/user/zhengkaiyu001/graph_scala/conf/entity_params")//读取本地文件
data.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)//循环打印
}
}
这里注意下目录结构,com和test是上下级目录,这样在下面打包过程中会出现些问题,同时我会说下是怎么解决的。
(6)开始打包
- File -> Project Structure -> Artifacts -> + -> JRE -> From modules with dependencies -> ok ,具体信息如下图所示。
- 在通过Search by Name选择主类的时候,会自动提供出项目中是主类的可选项,但是如果上一步骤中的目录结构是上下级时,就没有自动提示信息,打包会失败。那该如何解决呢?原因其实没有根据 pom.xml 配置文件及时更新,所以打开配置文件可以选择删除一行,右下方出现 import changes 后点击,等待加载完毕后再把那行粘贴上(也可以调出maven project (file->setting->appearance->show tool windows bar)->clean 后,再选中项目右击->maven->Reimport)。这样目录就变为com.test。再重复打包过程就会有自动提示主类的信息,选择主类后点击ok。
- 在进行打包设置时,只留下'Test' compile output 和Test.jar包,将其他jar包都删除,output directory是jar包的输出路径。
- Build:这里注意是 Build Artifacts,选择build 或者 rebuild,其实rebuild的作用是当你变动了代码,可直接rebuild重新打包,无须重新配置打包环境。
- 打包过程中会提示错误信息,把多余的文件test目录下的和main目录下的App删除即可。
,
(7)运行
把输出的jar包上传至装有spark的服务器,这里我是新建了个目录,把jar包传到Jars目录下,运行命令见如下所示的脚本文件:
注意踩坑:
- 当配置pom.xml后一定要import changes(在打包过程中才会默认有选择的主类),如果应用没有及时import changes,你可以调出maven project (file->setting->appearance->show tool windows bar)->clean 后,再选中项目右击->maven->Reimport
- pom.xml文件中的版本号需要和服务器上的各版本一一对应
参考博客:
https://blog.csdn.net/xingyx1990/article/details/80752041
小白学习Spark系列二:spark应用打包傻瓜式教程(IntelliJ+maven 和 pycharm+jar)的更多相关文章
- Telegram学习解析系列(二):这我怎么给后台传输数据?
写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetwor ...
- Socket学习总结系列(二) -- CocoaAsyncSocket
这是系列的第二篇 这是这个系列文章的第二篇,要是没有看第一篇的还是建议看看第一篇,以为这个是接着第一篇梳理的 先大概的总结一下在上篇的文章中说的些内容: 1. 整理了一下做IM我们有那些途径,以及我们 ...
- ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解
前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...
- Spark系列—02 Spark程序牛刀小试
一.执行第一个Spark程序 1.执行程序 我们执行一下Spark自带的一个例子,利用蒙特·卡罗算法求PI: 启动Spark集群后,可以在集群的任何一台机器上执行一下命令: /home/spark/s ...
- Spark系列—01 Spark集群的安装
一.概述 关于Spark是什么.为什么学习Spark等等,在这就不说了,直接看这个:http://spark.apache.org, 我就直接说一下Spark的一些优势: 1.快 与Hadoop的Ma ...
- spring boot 学习笔记(二)之打包
一.叙述 spring boot 在 pom 中可以配置成 packaging 为 jar ,这样打包出来的就是一个 jar 包,可以通过 Java 命令直接运行, Java 命令为: java - ...
- [纯小白学习OpenCV系列]官方例程00:世界观与方法论
2015-11-11 ----------------------------------------------------------------------------------- 其实,写博 ...
- 学习CNN系列二:训练过程
卷积神经网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间精确的数学表达式,只要用已知的模式对卷积神经网络加以训练,网络就具有输入.输出之间映射的 ...
- Dubbo源码学习总结系列二 dubbo-rpc远程调用模块
dubbo本质是一个RPC框架,我们首先讨论这个骨干中的骨干,dubbo-rpc模块. 主要讨论一下几部分内容: 一.此模块在dubbo整体框架中的作用: 二.此模块需要完成的需求功能点及接口定义: ...
随机推荐
- lucene_04_解析语法查询
解析语法查询就是调用方法查询的原始查询 例如: 查询所有的查询器的语法为:*:*,因为lucene查询是根据term来做的,既是:key:value类型.*:*表示所有域中的所有值. api调用语法解 ...
- oracle到mysql的导数据方式(适用于任意数据源之间的互导)
http://www.wfuyu.com/Internet/19955.html 为了生产库释放部份资源, 需要将API模块迁移到mysql中,及需要导数据. 尝试了oracle to mysql工具 ...
- 【ACM】hdu_zs2_1007_Problem G _201308031028
Problem G Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Subm ...
- maven 自动部署到tomcat
使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,减少部署时间,方便快捷. 一.配置tomcat manager 1.编辑tomcat目录下,conf/tomc ...
- Map 遍历取值及jstl的取值
Map 遍历取值及jstl的取值 学习了:http://blog.csdn.net/yanjiaye520/article/details/17354239 1.Java map的便利取值 Java代 ...
- poj2299--归并排序求逆序数
/** \brief poj2299 * * \param date 2014/8/5 * \param state AC * \return memory 4640K time 3250ms ...
- 关于JOS 未对全部内存分页映射之前 物理地址映射问题的思考
在kern/pmap.c 里面会又以下这段代码,要知道boot_alloc只会分配线性地址,真正建立虚拟页和物理页映射关系的在后面的page_alloc. ////////////////////// ...
- 手游server之数据IO进化
这里数据IO是指游戏数据存盘和读取. 假设IO处理不好.server在IO时会导致.游戏卡顿较长的时间,严重影响游戏体验. 近期服务端刚好对IO这一块做了优化,把优化过程记录一下. 一 原始版 刚開始 ...
- Windows下Go语言LiteIDE下载及安装
下载地址为 https://www.golangtc.com/download/liteide 我下载的是liteidex32.1windows-qt4.zip,下载之后解压,并将liteide文件 ...
- oc15--文档安装
// // main.m // 修改项目模板 /* 工程名称: 文件名称: 创建者 : 创建时间: 版权 : 修改人 : 修改时间: */ #import <Foundation/Foundat ...