使用Intellij idea编写Spark应用程序(Scala+Maven)

使用Intellij idea编写Spark应用程序(Scala+Maven)

对Scala代码进行打包编译时,可以采用Maven,也可以采用sbt,相对而言,业界更多使用sbt。这里介绍IntelliJ IDEA和Maven的组合使用方法。IntelliJ IDEA和SBT的组合使用方法,请参考“使用Intellij Idea编写Spark应用程序(Scala+SBT)”。

安装 IntelliJ IDEA

本次运行系统为Ubuntu16.04。

我们可以访问官网下载安装包。文件较大,一般需要20分钟左右。有两种下载选择,我们选择下载正版,教程将使用试用版的idea。

下载后,我们把压缩包解压并且改名。

cd ~/下载sudo tar -zxvf ideaIU-2016.3.4.tar.gzsudo mv idea-IU-163.12024.16 /usr/local/Intellij

然后打开Intellij文件夹,并且使用其bin文件夹下的idea.sh打开程序。

cd /usr/local/Intellij/bin./idea.sh

会出现如图界面。
intellIJ idea 开发 Spark程序

选择Ecalute for free进入免费试用版。
接下来要把程序放到启动栏里快捷启动。
首先进入到applications文件夹下,并且编辑idea.desktop文件

cd /usr/share/applicationssudo gedit idea.desktop

在打开的文档里添加如下内容

[Desktop Entry]Encoding=UTF-8Version=1.0Name=IntelliJ IDEAGenericName=Java IDEComment=IntelliJ IDEA is a code-centric IDE focused on developer    productivity. The editor deeply understands your code and knows its way around the codebase, makes great suggestions right when you need them, and is always ready to help you shape your code.Exec=/usr/local/Intellij/bin/idea.shIcon=/usr/local/Intellij/bin/idea.pngTerminal=falseType=ApplicationCategories=Development;IDE

然后在启动栏里选择查找程序的那个应用(一般在启动栏第一个)。搜索Intellij即可找到程序,点击就可以启动idea。这时候就可以把程序锁定到启动栏使用了。如果搜索没找到,请重启系统。

在Intellij里安装scala插件,并配置JDK,scala SDK

首先如图打开plugins界面。
intellIJ Idea plugins界面

然后我们点击Install JetBrain Plugins…如下图

安装JetBrain插件

搜索并安装scala。
等待安装完成后我们就可以配置JDK跟scala SDK。

配置JDK

首先打开 Project Structure,如下图。
IntellIJ Idea 配置JDK

添加JDK(这里默认已经安装JDK并且配置了环境变量),操作按下面两张图。
添加JDK

配置JDK

配置全局Scala SDK

还是在Project Structure界面,操作如下。
配置全局scala sdk

配置全局SDK

然后右键已经添加的SDK选择Copy to Project Libraries…OK确认。如图
Copy to Project Libraries

配置好后就可以创建工程文件了。

创建Maven工程文件

点击初始界面的Create New Project进入如图界面。并按图创建Maven工程文件。
intellij创建maven空间

填写GroupId:dblab;以及ArtifactId:WordCount,如图
填写groupid

然后按下图填写各项,这一步容易出错请认真填写。
填写projectname

到此创建工程文件完成。

前置的一些配置

将scala框架添加到项目

在IDEA启动后进入的界面中,可以看到界面左侧的项目界面,已经有一个名称为WordCount的工程。请在该工程名称上右键单击,在弹出的菜单中,选择Add Framework Surport ,在左侧有一排可勾选项,找到scala,勾选即可。

创建WordCount文件夹,并作为sources root

在src文件夹下创建一个WordCount文件夹。
右键新建的文件夹,按图把该文件夹设置为sources root。
source root设置

两次的代码黏贴

黏贴wordcount代码到WordCount.scala

然后就可以通过右键刚刚设置为sources root的wordcount文件夹,就有了new->scala class的选项。
我们新建一个scala class,并且命名WordCount,选着为object类型。
创建scala类

打开建好的WordCount.scala文件,清空!然后黏贴以下代码:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object WordCount {def main(args: Array[String]) {val inputFile =  "file:///usr/local/spark/mycode/wordcount/word.txt"val conf = new SparkConf().setAppName("WordCount").setMaster("local")val sc = new SparkContext(conf)val textFile = sc.textFile(inputFile)val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)wordCount.foreach(println)}
}

黏贴pom.xml代码

现在清空pom.xml,把以下代码黏贴到pom.xml里。

<?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>dblab</groupId><artifactId>WordCount</artifactId><version>1.0-SNAPSHOT</version><properties><spark.version>2.1.0</spark.version><scala.version>2.11</scala.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-streaming_${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-mllib_${scala.version}</artifactId><version>${spark.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.scala-tools</groupId><artifactId>maven-scala-plugin</artifactId><version>2.15.2</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.6.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.19</version><configuration><skip>true</skip></configuration></plugin></plugins></build>
</project>

黏贴好后,右键点击工程文件夹,更新一下,按下图操作。
更新文件夹

这时候注意要记得点击右下角的“Import Changes Enables Auto-Import ”中的”Enables Auto-Import”。如图。
enables auto-import

等待一段时间,可以看底部的进度条。等执行完毕,我们再进行后面的操作。

运行WordCount程序

在WordCount.scala代码窗口内的任意位置,右键点击,可以唤出菜单,选择Run ‘WordCount’。运行的结果如下。注意根据代码,你必须有/usr/local/spark/mycode/wordcount/word.txt这个文件。输出信息较多,你可以拖动一下寻找结果信息。

运行wordcount

打包WordCount程序的jar包

首先打开File->Project Structure。如图。
Project Structure

然后选择Artifacts->绿色加号->Jar->From moduleswith dependencies…如图
From moduleswith dependencies

选择Main Class,如图
选择main class

然后因为只是在Spark上运行的,所以要删除下图红框里多余的部分,保留WordCount.jar以及‘WordCount’ compile output。小提示,这里可以利用Ctrl+A全选功能,选中全部选项,然后,配合Crtl+鼠标左键进行反选,也就是按住Ctrl键的同时用鼠标左键分别点击WordCount.jar和‘WordCount’ compile output,从而不选中这两项,最后,点击页面中的删除按钮(是一个减号图标),这样就把其他选项都删除,只保留了WordCount.jar以及‘WordCount’ compile output。
引入jar包

然后点击Apply,再点击OK,如图
引入jar包

接着就可以导出Jar包了。选择Build->Build Artifacts…,在弹出的窗口选择Bulid就可以了。如下图:
程序打包

导出的Jar包会在工程文件“/home/wordcount/”目录下的“out/artifacts/WordCount_jar”目录下。把他复制到/home/hadoop目录下。也就是主文件夹目录下,如下图
scala打包后路径

实际上,可以用命令来复制WordCount.jar文件,请打开一个Linux终端,输入如下命令:

cd ~cp /home/hadoop/WordCount/out/artifacts/WordCount_jar/WordCount.jar /home/hadoop

然后在终端执行以下命令,运行Jar包:

cd ~/usr/local/spark/bin/spark-submit --class WordCount /home/hadoop/WordCount.jar

运行结果如下(输出的信息较多请上下翻一下就能找到),要求还是跟上述一样要有那个文件存在。

spark scala wordcount运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/562745.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day 14 JDBC

JDBC 1、简单入门 Statement2、preparedStatement3、主键回显4、批量操作5、事务6、Druid6.1 工具类V16.2 工具类V26.3 1、简单入门 Statement 步骤: 1、注册驱动 2、创建连接 3、创建 Statement对象 4、编写sql语句 并且发送sql语句获得结果集 5、解析结果集 6、释放资源 注意…

jmeter使用方法---自动化测试

HTTP信息头管理器 一个http请求会发送请求到服务器&#xff0c;请求里面包含&#xff1a;请求头、请求正文、请求体&#xff0c;请求头就是信息头Authorization头的主要用作http协议的认证。 Authorization的作用是当客户端访问受口令保护时&#xff0c;服务器端会发送401状态…

微光图像增强算法学习记录(一)

微光图像增强&#xff08;LLIE&#xff09;旨在恢复照明并提高微光图像的可见性&#xff0c;本文对阅读的文献进行记录和分享&#xff0c;帮助回顾和大家建立学习资料。 文献一摘要及前沿摘选主要贡献网络结构实验结论 文献二摘要 文献三摘要主要贡献网络架构实验 文献四摘要实…

C++一维数组练习oj(2)

这时上次的C一维数组练习&#xff1a;C一维数组练习oj-CSDN博客 这到题目我承认非常难&#xff01;当然这只是我认为&#xff0c;因为我只学到了一维数组&#xff01; 对于你们来说可能不难。 好了我不客套了。 这题我们可以将他理解为一条时间轴&#xff1a; 时间轴上小李每1…

分布式搜索引擎ES-RestClient查询文档快速入门

RestClient查询文档快速入门 文章目录 RestClient查询文档快速入门1.1、match_all1.2、全文检索查询1.3、精确查询1.4、复合查询-boolean query1.5、排序和分页1.6、高亮&#xff08;解析查询高亮结果&#xff09; 1.1、match_all package cn.mannor.hotel;import org.apache.…

深度学习pytorch——多层感知机反向传播(持续更新)

在讲解多层感知机反向传播之前&#xff0c;先来回顾一下多输出感知机的问题&#xff0c;下图是一个多输出感知机模型&#xff1a; 课时44 反向传播算法-1_哔哩哔哩_bilibili 根据上一次的分析深度学习pytorch——感知机&#xff08;Perceptron&#xff09;&#xff08;持续更新…

基于python+vue的街道办管理系统flask-django-php-nodejs

在此基础上&#xff0c;结合现有街道办管理体系的特点&#xff0c;运用新技术&#xff0c;构建了以 python为基础的街道办管理信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;根据需求分析结果进行了系统的设计&#xff0c;并将其划分为管理员和用户二种角色和多个主…

分布式搜索引擎-DSL查询文档

分布式搜索引擎-DSL查询文档 文章目录 分布式搜索引擎-DSL查询文档1、DSL Query的分类1.1、全文检索查询1.2、精确查询1.3、地理查询1.4、复合查询1.5、Function Score Query1.6、复合查询Boolean Query 2、搜索结果处理2.1、排序2.2、分页2.3、深度分页2.4、高亮 1、DSL Query…

Fabric Measurement

Fabric Measurement 布料测量

SpringBoot 文件上传(二)

上一节讲解了如何利用MultipartFile接收浏览器端上传的文件&#xff0c;这节讲解服务器端如何将文件保存到本地目录下&#xff0c;下节讲解服务端如何将文件保存在阿里云上。 本节需要解决两个难点&#xff1a; 文件重名问题文件大小限制问题 存储文件 首先解决如何存储文件…

【Qt】使用Qt实现Web服务器(七):动态模板引擎

1、示例 2、源码 2.1 模板配置参数 配置文件中关于模板配置参数如下 path为存放模板的目录suffix为模板文件后缀[templates] path=templates suffix=.tpl encoding=UTF-8 cacheSize=1000000

案例实践 | 基于长安链的煤质检测智慧实验室

案例名称-煤质检测智慧实验室 ■ 建设单位 国能数智科技开发&#xff08;北京&#xff09;有限公司 ■ 用户群体 煤炭生产单位、电力单位、化工单位等产业链上下游单位 ■ 应用成效 化验效率提升50%&#xff0c;出验时间缩短40%&#xff0c;提高化验数据市场公信力 案例…