在spark-shell中运行代码 编写Spark独立应用程序 在集群上运行Spark应用程序

一、在spark-shell中运行代码

1、Spark Shell 提供了简单的方式来学习Spark API Spark Shell可以以实时、交互的方式来分析数据 Spark Shell支持Scala和Python

2、Spark shell命令

使用Spark单机模式,只需要进入Spark安装目录执行:./bin/spark-shell --master <master-url>

<master-url>是可以替换的参数

./bin/spark-shell --master <master-url>

这样就表示只用了一个Worker去运行Spark,那么显然就没有并行化

./bin/spark-shell --master local

因为我们的电脑一般是多核CPU那么我想使用多线程的话,就可以用[*]使用 逻辑CPU的多个线程来运行Spark,那么这个*也能被具体数字代替

./bin/spark-shell --master local[*]

 Standalone模式(独立集群模式)

./bin/spark-shell -- master spark://127.0.0.1:7077

--jars: 这个参数用于把相关的JAR包添加到CLASSPATH中;如果有多个jar包,可以使用逗号分隔符连接它们

./bin/spark-shell --mster local[*] --jars wordcount.jar

 

可以执行“spark-shell --help”命令,获取完整的选项列表

spark-shell --help

二、编写Spark独立应用程序

使用 Scala 编写的程序需要使用 sbt或Maven 进行编译打包

安装编译打包工具

生产环境中我们常用的是sbt和Maven两种软件对代码进行打包编译。然后使用spark-submit命令提交jar包到集群或者单机环境中运行。

1.安装sbt

sbt是一款Spark用来对scala编写程序进行打包的工具,Spark 中没有自带 sbt,需要下载安装

解压sbt: tar -zxf sbt-0.13.18.tgz

tar -zxf sbt-0.13.18.tgz

将sbt移动到/usr/local/目录,,并进入目录 sudo mv sbt /usr/local/ cd /usr/local/sbt

sudo mv sbt /usr/local/ 
cd /usr/local/sbt

创建sbt脚本

vim sbt
#添加一下代码
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar /usr/local/sbt/bin/sbt-launch.jar "$@"   #红字绝对路径是sbt安装目录

 

将脚本设置为可执行 chmod u+x sbt

chmod u+x sbt

 

设置sbt更新国内镜像

vim conf/sbtopts
#添加以下代码
-Dsbt.override.build.repos=true
-Dsbt.repository.config=path_to_repositories_file

创建sbt国内镜像文件

cd /usr/local/sbt
vim repositories
#添加以下代码
[repositories]
local
huaweicloud-maven: https://repo.huaweicloud.com/repository/maven/
maven-central: https://repo1.maven.org/maven2/
sbt-plugin-repo: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]

首次运行sbt脚本,更新sbt

./sbt sbt-version

 

编写Spark应用程序代码

1、创建应用程序目录

cd ~
mkdir ./sparkapp
mkdir -p ./sparkapp/src/main/scala

 2、创建scala代码文件SimpleApp.scala

vim  ./sparkapp/src/main/scala/SimpleApp.scala
#完整代码
 
/* SimpleApp.scala */
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:///usr/local/spark-2.1.0/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))
    }
}

编译打包

使用sbt打包

sbt打包必须满足的条件:

1. 在我们的应用程序文件夹根目录下

2. 打包文件必须以.sbt结尾

3. 所以我们使用 vim ./sparkapp/simple.sbt 构建打包文件

vim ./sparkapp/simple.sbt
name:="XXX"   #应用程序的名称是什么
version:="1.0"           #应用程序当前版本号
scalaVersion:="2.11.8"   #当前scala的版本
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0" 
#依赖于GroupID为"org.apache.spark",artifact号是是2.1.0,这样就会自动去网上把相关的jar包下载下来使用

 #关于%: 在今后的书写过程中,要注意%的使用 1. %%代表不固定版本 2. %代表指定版本

检查目录结构:

cd ~/sparkapp/
find .

 

打包 cd ~/sparkapp /usr/local/sbt/sbt package

cd ~/sparkapp
/usr/local/sbt/sbt package

 

生成的Jar包位置 在当前的应用程序目录下有一个 /target/scala-2.11 子目录 这个目录下有一个子目录,里面的simple-project开头的文件就是打包好的jar包

  

 通过spark-submit运行程序

进入spark安装目录使用 ./bin/spark-submit 命令上传jar包到Spark运行,注意这里的jar包可以放在任意一种spark运行模式运行 除基本命令以外,spark-submit命令还有许多可以添加参数

使用以下命令提交jar包作业

/usr/local/spark-2.1.0/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar 2>&1 | grep "Lines with a:" 
注意结尾 2>&1 | grep "Lines with a:"是Linux管道命令,可以过滤一些不必要的信息

三、在集群上运行Spark应用程序

1. 打开集群

打开hadoop 然后再打开spark

2. 提交作业

cd /usr/local/spark-2.1.0 bin/spark-submit  \

--class org.apache.spark.examples.SparkPi  \

--master spark://192.168.131:7077  \

examples/jars/spark-examples_2.11-2.1.0.jar  100  2>&1  |  grep  "Pi is roughly"

cd /usr/local/spark-2.1.0 bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://192.168.131:7077 examples/jars/spark-examples_2.11-2.1.0.jar  100  2>&1  |  grep  "Pi is roughly"

提交作业(YARN模式)

集群中运行Spark-shell

猜你喜欢

转载自blog.csdn.net/weixin_56814370/article/details/124672424