• 使用IntelliJ Idea开发Spark应用程序



    未经许可,禁止以任何形式转载,若要引用,请标注链接地址
    全文共计3704字,阅读大概需要3分钟

    一、实验目的

    掌握使用IntelliJ Idea开发Spark应用程序的过程。

    二、实验内容

    1、使用IntelliJ Idea开发本地Spark应用程序。
      2、部署分布式Spark应用程序。

    三、实验原理

    首先创建Spark应用程序,在本地运行并测试;然后修改Spark应用程序,访问分布式文件系统HDFS;最后将项目打为jar包,部署到Spark集群上执行。

    四、实验环境

    硬件:x86_64 ubuntu 16.04服务器
      软件:JDK1.8,Spark-2.3.2,Hadoop-2.7.3,IntelliJ Idea

    五、实验步骤

    5.1 启动IntelliJ Idea并创建spark项目

    1、启动IntelliJ Idea。在终端窗口下,执行以下命令:

    1.	$ cd /opt/idea-IC-191.7479.19/bin
    2.	$ ./idea.sh
    
    • 1
    • 2

    2、在Idea中创建scala项目,并命名为”helloscala”,其它都默认即可。

    3、依次选择”File | Project structure…”菜单项,进入项目结构界面。如下图所示:
    在这里插入图片描述

    4、Spark程序开发和运行,需要依赖Spark相关的jar包。按图中所示依次选择,手动导入spark的jar包到项目中。如下图所示:
    在这里插入图片描述

    5、要引入的jar包位于Spark安装目录的jars目录下(本实验中位于”/opt/spark/jars/“目录下)。之后一直点击【OK】按钮即可导包成功。如下图所示:
    在这里插入图片描述

    6、查看成功导入的部分jar包。如下图所示:
    在这里插入图片描述

    5.2 数据准备

    我们将构建一个简单的程序,它根据莎士比亚的文集执行单词计数。因此,我们需要保存此shakespeare.txt数据集的两个副本。一个在项目中用于本地系统测试,另一个在HDFS (Hadoop分布式文件系统)中用于集群测试。
      1. 将shakespeare.txt拷贝到项目的resources目录下。打开一个终端窗口,执行如下命令:

    1.	$ cp /data/dataset/shakespeare.txt ~/IdeaProjects/helloscala/src/
    
    • 1

    2. 将shakespeare.txt上传到HDFS目录下。执行如下的命令执行上传:

    1.	$ start-dfs.sh
    2.	$ hdfs dfs -mkdir -p /data/dataset/
    3.	$ hdfs dfs -put /data/dataset/shakespeare.txt  /data/dataset/
    
    • 1
    • 2
    • 3

    5.3 编写spark代码

    1、选中spark_project1项目的src目录上,单击右键,依次选择”New | Scala Class”,创建Scala类。如下图所示:
    在这里插入图片描述

    2、在弹出的对话框中,命名”HelloScala”,并选择”Object”类型。如下图所示:
    在这里插入图片描述

    3、打开”HelloScala.scala”源文件,编辑代码如下:

    1.	import org.apache.spark.{SparkConf, SparkContext}
    2.	     
    3.	object HelloScala {
    4.	     
    5.	  def main(args: Array[String]) {
    6.	     
    7.	    // 创建一个SparkContext来初始化Spark
    8.	    val conf = new SparkConf()
    9.	    conf.setMaster("local")
    10.	    conf.setAppName("Word Count")
    11.	    val sc = new SparkContext(conf)
    12.	     
    13.	    // 将文本加载到Spark RDD中,它是文本中每一行的分布式表示
    14.	    val textFile = sc.textFile("src/shakespeare.txt")
    15.	     
    16.	    // 执行单词计数
    17.	    val counts = textFile.flatMap(line => line.split(" "))
    18.	                      .map(word => (word, 1))
    19.	                      .reduceByKey(_ + _)
    20.	     
    21.	    counts.foreach(println)
    22.	    System.out.println("全部单词: " + counts.count());
    23.	  }
    24.	
    25.	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    4、运行程序。右键单击文本编辑器并选择”Run ‘HelloScala’”来运行程序。这将运行Spark作业并打印莎士比亚作品中出现的每个单词的频率,预期输出如下:
    在这里插入图片描述

    注意我们设置了这一行代码:

    1.	conf.setMaster("local")
    
    • 1

    这告诉Spark使用这台计算机在本地运行,而不是在分布式模式下运行。要在多台机器上运行Spark,我们需要更改此值。

    5.4 部署分布式Spark应用程序

    在生产环境中,Spark通常会处理存储在HDFS等分布式文件系统中的数据。Spark通常也以集群模式运行。
      1. 修改源代码如下:

    1.	import org.apache.spark.{SparkConf, SparkContext}
    2.	     
    3.	object HelloScala {
    4.	  def main(args: Array[String]): Unit = {     
    5.	    // 创建一个SparkContext来初始化Spark
    6.	    val conf = new SparkConf().setAppName("Word Count")
    7.	    val sc = new SparkContext(conf)
    8.	     
    9.	    // 修改输入和输出文件路径为HDFS上的路径(请把其中的localhost换为当前的机器名)
    10.	    val input = "hdfs://localhost:9000/data/dataset/shakespeare.txt"
    11.	    val output = "hdfs://localhost:9000/data/dataset/shakespeareWordCount"
    12.	     
    13.	    // 将文本加载到Spark RDD中,它是文本中每一行的分布式表示
    14.	    val textFile = sc.textFile(input)
    15.	     
    16.	    // 进行单词计数
    17.	    val counts = textFile.flatMap(line => line.split(" "))
    18.	                         .map(word => (word, 1))
    19.	                         .reduceByKey(_ + _)
    20.	     
    21.	    counts.foreach(println)
    22.	    System.out.println("全部单词: " + counts.count())
    23.	     
    24.	    counts.saveAsTextFile(output)
    25.	  }
    26.	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    这告诉Spark读写HDFS,而不是本地。

    5.5 打包程序

    我们将把这些代码打包到一个已编译的jar文件中,该文件可以部署在Spark集群上。jar是一个压缩文件,它包含我们的代码和代码工作所需的所有依赖项。
      1、依次选择”File | Project Structure…”菜单项,进入项目结构界面。如下图所示:
    在这里插入图片描述

    2、按图中选择依次点击进行打包,如图13所示
    在这里插入图片描述

    3、在弹出的对话框,Main Class框中选择 HelloScala,其它保持默认即可,点击【OK】。如下图所示:
    在这里插入图片描述

    4、返回到项目结构界面,把项目依赖的所有jar包都删除,只导出类文件,点击【OK】按钮。如下图所示:
    在这里插入图片描述

    5、点击”Build | Build Artifacts”菜单项进行编译。如下图所示:
    在这里插入图片描述

    6、按图中所示选择即开始编译。如下图所示:
    在这里插入图片描述

    5.6 集群运行jar包

    1、启动Spark集群。在终端窗口下,执行以下命令:

    1.	$ cd /opt/spark
    2.	$ ./sbin/start-all.sh
    
    • 1
    • 2

    2、提交作业执行。使用spark-submit运行我们的代码。我们需要指定主类、要运行的jar和运行模式(集群)。(注意:请将下面命令中的localhost替换为虚拟机当前的机器名)

    1.	$ spark-submit --class HelloScala  --master spark://localhost:7077 /root/IdeaProjects/helloscala/out/artifacts/helloscala_jar/helloscala.jar
    
    • 1

    控制台应该打印莎士比亚作品中出现的每个单词的频率,如下所示:

    (comutual,1)
    (ban-dogs,1)
    (rut-time,1)
    (ORLANDO],4)
    (Deceitful,1)
    (commits,3)
    (GENTLEWOMAN,4)
    (honors,10)
    (returnest,1)
    (topp’d?,1)
    (compass?,1)
    (toothache?,1)
    (miserably,1)
    (hen?,1)
    (luck?,2)
    (call’d,162)
    (lecherous,2)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    此外,可通过HDFS或Web UI查看输出文件的内容:

    1.	$ hdfs dfs -cat /data/dataset/shakespeareWordCount/part-00000
    
    • 1

    — END —

  • 相关阅读:
    幻读是什么,幻读有什么问题
    安装python中tensorflow和keras==2.2.0的路程
    Opencv实现的三次样条曲线(Cubic Spline)插值
    SLAM程序Linux版第一节
    【C++】const关键字的作用
    Spring5学习笔记
    Nacos创建用户并鉴权图文教程
    Kotlin读书笔记之函数式kotlin
    static关键字总结-C/C++
    苯硫酚荧光探针 激发波长465 nm
  • 原文地址:https://blog.csdn.net/qq_44807756/article/details/125613679