安装spark

Warning

以下代码中的$是linux的shell中的标识符,不是命令内容。

  1. 安装Spark之前需要安装Java环境和Hadoop环境。注意选择without-hadoop版本如:spark-3.4.2-bin-without-hadoop.tgz

下载地址:http://spark.apache.org

  1. 复制安装包spark-3.4.2-bin-without-hadoop.tgz至路径 ~/software/
  2. 解压缩安装包到(~/module/)
$ tar –xvzf ~/software/spark-3.4.2-bin-without-hadoop.tgz –C  ~/module/

改名

$ mv ./spark-3.4.2-bin-without-hadoop/ ./spark  
  1. 配置Spark 的Classpath。
$ cd ~/module/spark/conf
$ cp spark-env.sh.template spark-env.sh

编辑该配置文件,在文件最后面加上如下一行内容:

export SPARK_DIST_CLASSPATH=$(/home/hadoop/module/hadoop-3.3.6/bin/hadoop classpath

保存配置文件后,就可以启动、运行Spark了。Spark包含多种运行模式。这里使用本地模式运行Spark。若需要使用HDFS中的文件,则在使用Spark前需要启动Hadoop。


Standalone模式

  1. 配置works
$ cp workers.template workers

2.配置spark-env.sh 加入

export JAVA_HOME=/home/hadoop/module/jdk1.8.0_202
export HADOOP_CONF_DIR=/home/hadoop/module/hadoop-3.3.6/etc/hadoop
SPARK_MASTER_HOST=localhost
SPARK_MASTER_PORT=7077
  1. 启动standalone模式
$ ./sbin/start-master.sh
$ ./sbin/start-workers.sh spark://localhost:7077

Spark Shell

  • Spark Shell 提供了简单的方式来学习Spark API
  • Spark Shell可以以实时、交互的方式来分析数据
  • Spark Shell支持Scala和Python
  1. 在~/.bashrc中配置环境变量
export SPARK_HOME=/home/hadoop/module/spark
export PATH=$PATH:$SPARK_HOME/bin
  1. 运行 spark-shell
$ spark-shell

Spark应用程序

在Spark Shell中进行编程主要是方便对代码进行调试,但需要以逐行代码的方式运行。一般情况下,会选择将调试后代码打包成独立的Spark应用程序,提交到Spark中运行。 采用Scala编写的程序需要使用sbt(Simple Build Tool)进行打包,sbt的安装配置步骤如下:

1.下载https://www.scala-sbt.org/download/ https://github.com/sbt/sbt/releases/download/v1.9.9/sbt-1.9.9.tgz

从win移动到wsl里(此代码需要根据自己电脑调整)

$ cp /mnt/d/Download_Files/Firefox_Download/sbt-1.9.9.tgz ~/software

2.解压缩,配置环境变量

$ tar –xvzf sbt-1.9.9.tgz –C ~/module/sbt

修改.bashrc

export PATH=$PATH:~/module/sbt/bin

我们以一个简单的程序为例,介绍如何打包并运行Spark程序,该程序的功能是统计文本文件中包含字母a和字b的各有多少行,具体步骤如下:

  1. 创建程序根目录,并创建程序所需的文件夹结构,命令如下:
$ mkdir ~/sparkapp
$ mkdir –p ~/sparkapp/src/main/scala
  1. 创建scala文件(~/sparkapp/src/main/scala/SimpleApp.scala),通过cd和vim即可

写入

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
 object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "file:///home/hadoop/module/spark/README.md" // 用于统计的文本文件
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}
 
  1. 然后创建一个simple.sbt文件(文件路径:~/sparkapp/simple.sbt),用于声明该应用程序的信息以及与Spark的依赖关系,具体内容如下:
name := "Simple Project"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.0“

4.使用sbt对该应用程序进行打包,命令如下

$ cd ~/sparkapp
$ ~/module/sbt/sbt/bin/sbt package
  1. 有了最终生成的jar包后,再通过spark-submit就可以提交到Spark中运行了,命令如下:
$ ~/module/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.10/simple-project_2.10-1.0.jar

成功?

如果运行后,能在众多输出中看一行关于a和b的词频统计,说明成功完成配置并且任务执行成功。


补充-不同spark模式下提交simpleapp任务

start-dfs.sh
start-yarn.sh

本地模式

~/module/spark/bin/spark-submit   --class "SimpleApp"   --master local   ~/sparkapp/target/scala-2.10/simple-project_2.10-1.0.jar

standalone模式

~/module/spark/sbin/start-master.sh # 之后即可在 http://localhost:8080/ 上面查看进展
 
~/module/spark/sbin/start-worker.sh spark://localhost:7077
 
~/module/spark/bin/spark-submit   --class "SimpleApp"   --master spark://localhost:7077   --executor-memory 1G   --total-executor-cores 2   ~/sparkapp/target/scala-2.10/simple-project_2.10-1.0.jar

成功?

如果运行后,能在众多输出中看一行关于a和b的词频统计,说明成功完成配置并且任务执行成功。