Spark—idea

Posted Triumph-CP

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark—idea相关的知识,希望对你有一定的参考价值。

ideal—Spark

新建工程

新建maven工程,添加scala

添加依赖

去官网查询依赖


pom添加依赖并下载 spark-core

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.12</artifactId>
    <version>3.1.2</version>
</dependency>

重复步骤下载spark-sql

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.12</artifactId>
    <version>3.1.2</version>
    <scope>provided</scope>
</dependency>

spark-hive

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.12</artifactId>
    <version>3.1.2</version>
    <scope>provided</scope>
</dependency>

spark-graphx

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-graphx -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-graphx_2.12</artifactId>
    <version>3.1.2</version>
</dependency>

mysql-connector-java

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>

安装完成

新建SparkDemo的scala object

sc对象

object SparkDemo 
  def main(args: Array[String]): Unit = 
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkDemo")
    val sc: SparkContext = SparkContext.getOrCreate(conf)
    println(sc)
  


去除红色的字段,去

D:\\environment\\server\\apache-maven-3.6.1\\repository\\org\\apache\\spark\\spark-core_2.12\\3.1.2\\spark-core_2.12-3.1.2.jar!\\org\\apache\\spark\\log4j-defaults.properties

将-defaults删除,然后将

val spark: SparkSession = SparkSession.builder().master("local[*]").appName("SparkSessionDemo").getOrCreate()
    println(spark)

    val rdd: RDD[Int] = sc.parallelize(1 to 10)
    rdd.collect().foreach(println)
    val pNum: Int = rdd.getNumPartitions
    println("分区数量:" + pNum)

可能会出现报错,参考这位老哥的解决办法

Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$——红目香薰

wordcount

val dataString: RDD[String] = sc.makeRDD(Array("hello world", "hello java", "hello scala", "hello spark", "hello hello"))
    dataString.collect().foreach(println)
    dataString.flatMap(x => x.split(" ")).map(x => (x,1)).reduceByKey(_+_).collect.foreach(println)
  

打架包


将代码编译打包,上传到虚拟机的opt目录下

执行

[root@cp145 opt]# spark-submit --class org.example.WordCount --master local[*] ./sparkstu-1.0-SNAPSHOT.jar

分区

def main(args: Array[String]): Unit = 
    val conf: SparkConf = new SparkConf().setAppName("partitions").setMaster("local[5]")
    val sc: SparkContext = SparkContext.getOrCreate(conf)


    val rdd: RDD[Int] = sc.parallelize(1 to 20)
    rdd.glom().collect.foreach(x => println(x.toList))

    println("---------假分区----------")

    val rdd2: RDD[Int] = rdd.coalesce(3,false)
    rdd2.glom().collect.foreach(x => println(x.toList))

    println("---------真分区----------")

    val rdd3: RDD[Int] = rdd.coalesce(3,true)
    rdd3.glom().collect.foreach(x => println(x.toList))

    println("---------真分区----------")
    val rdd4: RDD[Int] = rdd.repartition(3)
    rdd4.glom().collect.foreach(x => println(x.toList))
  

Intellij Idea搭建Spark开发环境

Spark快速入门指南 – Spark安装与基础使用中介绍了Spark的安装与配置,在那里还介绍了使用spark-submit提交应用,不过不能使用vim来开发Spark应用,放着IDE的方便不用。这里介绍使用Intellij Idea搭建Spark的开发环境。

1、Intellij Idea的安装

由于Spark安装在Ubuntu环境中,这里的Idea也安装在Ubuntu中。首先是下载,到官网下载即可。下载完后解压到待安装的目录:

sudo tar -zxvf ideaIU-2016.1.tar.gz -C /usr/local/

我解压在了/usr/local目录下,然后更改文件夹名:

mv ideaIU-2016.1 idea
然后修改文件的用户和用户组:

sudo chown -R hadoop:hadoop idea
这里的hadoop是我的用户名和组名。这样idea就安装成功了。

为了启动idea,进入idea/bin目录,执行里面的idea.sh:

bin/idea.sh
这样就可以启动idea。不过这样不方便,可以在桌面新建文件idea.desktop,输入如下内容:

[Desktop Entry]
Name=IdeaIU
Comment=Rayn-IDEA-IU
Exec=/usr/local/idea/bin/idea.sh
Icon=/usr/local/idea/bin/idea.png
Terminal=false
Type=Application
Categories=Developer;
这样就创建了一个桌面快捷方式。

2、maven的安装与配置

Maven 是一个项目管理和构建自动化工具。作为一个程序员,都有过为了使用某个功能而在项目中添加jar包的经历,使用的框架多了,需要添加的jar包也多,而maven能够自动为我们添加需要的jar包。首先在maven官网上下载maven:

下载之后在Downloads目录下有如下文件:

liu@Binja:~/Downloads$ ls
apache-maven-3.3.9-bin.tar.gz
解压到待安装的目录:

liu@Binja:~/Downloads$ sudo tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /usr/local/
同样,修改文件夹名和用户名:

liu@Binja:/usr/local$ sudo mv apache-maven-3.3.9/ maven
liu@Binja:/usr/local$ sudo chown -R liu:liu maven
liu@Binja:/usr/local$ ll maven
total 52
drwxr-xr-x  6 liu  liu   4096  3月 28 20:24 ./
drwxr-xr-x 12 root root  4096  3月 28 20:26 ../
drwxr-xr-x  2 liu  liu   4096  3月 28 20:24 bin/
drwxr-xr-x  2 liu  liu   4096  3月 28 20:24 boot/
drwxr-xr-x  3 liu  liu   4096 11月 11 00:38 conf/
drwxr-xr-x  3 liu  liu   4096  3月 28 20:24 lib/
-rw-r--r--  1 liu  liu  19335 11月 11 00:44 LICENSE
-rw-r--r--  1 liu  liu    182 11月 11 00:44 NOTICE
-rw-r--r--  1 liu  liu   2541 11月 11 00:38 README.txt
liu@Binja:/usr/local$ 
然后将maven添加到环境变量中:

sudo vim ~/.bashrc
在最后添加下面的内容:

export PATH=$PATH:/usr/local/maven/bin

使更改生效:

liu@Binja:/usr/local$ source ~/.bashrc
这样maven就安装好了。

3、用刚安装的maven配置idea

起始idea自带了maven,这里配置自己安装的maven。

一次选择File->Setting->Build,Execution,Deployment->Build Tools->Maven,如下图:


在右侧里的Maven home directory里设置Maven的安装目录,就我这里是/usr/local/maven,在User settings file里设置Mavne的配置文件,我这里使用默认的文件,在Local repository里设置本地包的管理仓库,选择右侧的Override后,可以自定义自己的仓库目录,以后Maven自动下载的包就会存放在这里。

单击OK后maven就配置完了。然后就可以创建一个maven项目。

4、创建maven项目

依次选择File->New->New Project,出现如下界面:


左侧可以选择项目的类型,这里选择Maven,右侧可以选择是否使用模板,勾选上面的Create from archetype后,就可以在下面选择项目模板,这里选择Scala的模板。

一路next之后,这里填一下groupID和artifactID,名字随便取:


然后一路next,填写上项目的名字,OK就可以了。

这样新项目就创建成功了,新项目的文件结构如下图:


其中的pom.xml就是配置我们项目的依赖包的。src是项目存放代码的目录,下面有两个结构相同的目录main和test,其中我们在main目录下编写代码,test编写测试代码,这里先不使用测试,可以将test目录删除。右侧展示的就是pom.xml文件的内容:


勾选右上角的Enable Auto-Import,这样Idea就会自动下载项目所需的依赖包。还要注意中间的Scala版本,选择自己使用的版本。

在下图中的dependencies标签下可以添加项目的依赖:


每一个依赖都在一个dependency标签下,其中包括groupID、artifactID和version。如果不知道依赖包的这些内容的话,可以在这里进行查询,查询结果就有这些信息。比如要查询spark的依赖,有如下的结果:


选择要添加的依赖,进入后选择相应的版本号,下面就有maven需要的一些信息,同时还包括其它包管理工具的信息,比如sbt:


就可以复制到pom.xml文件中了。

maven会自动下载pom.xml中添加的依赖包,不用我们自己添加,省去了很多麻烦。

之后就可以写代码了,在src/main/scala/com/liu下新建Scala类,选择类型为Object,填写类名,就可以编写代码了。作为示例,这里是一个wordcount的例子:

package com.liu

/**
  * Created by hadoop on 16-3-28.
  */
import org.apache.spark.{SparkContext,SparkConf}
object Test {
  def main(args:Array[String]): Unit ={
    val conf=new SparkConf()
    val sc=new SparkContext(conf)
    val text=sc.textFile("file:///usr/local/spark/README.md")
    val result=text.flatMap(_.split(' ')).map((_,1)).reduceByKey(_+_).collect()
    result.foreach(println)
  }
}
这里不介绍代码的具体含义。代码写好后,需要生成jar包并提交到spark上运行。

下面的步骤来生成jar包。依次选择File->Project Structure->Artifacts,如下图:


单击中间的绿色加号,选择JAR->from modules with dependencies,如下图:


在Main Class中选择项目的主要类,OK即可。结果如下:


中间的Output Layout会列出所有的依赖包,我们要提交到Spark上,所以不需要这里的Spark和Hadoop依赖包,删除来节约空间,不过不要删除最后的compile output,要不然就生不成jar包了。点击OK完成配置。

之后选择Build->Build Artifact->Build,就可以生成jar包了,结果如下图:


上图中多了一个out文件夹,下面有一个jar包,表明生成成功。

5、提交Spark应用

生成了jar包后就可以使用spark-submit来提交应用了,使用如下命令:

spark-submit --class "com.liu.Test" ~/SparkDemo.jar
就可以提交应用。结果如下:


表明运行成功,列出了单词的计数统计。

至此,Spark的Idea开发环境搭建成功。

以上是关于Spark—idea的主要内容,如果未能解决你的问题,请参考以下文章

本地IDEAspark程序远程读取hive数据

Scala和Spark的大数据分析

使用Scala和Spark进行大数据分析

学习Scala 进击大数据Spark生态圈

大数据系列文章合辑Spark和Scala相关

大数据Spark学习:Scala基础第一课