說明:本文圖片較多,耐心等待加載。(建議用電腦)
注意所有打開的文件都要記得保存。
?第一步:準備工作
本文是在之前Hadoop搭建完集群環境后繼續進行的,因此需要讀者完成我之前教程的所有操作。
以下所有操作均在Master主機進行。
?第二步:安裝 Spark2.4.0
1.首先需要下載Spark安裝文件,在虛擬機打開瀏覽器粘貼下面的地址
Index of /dist/spark
?2.找到2.4.0,點擊
3.點擊?spark-2.4.0-bin-without-hadoop.tgz
?第三步:安裝Spark(Local模式)
1.打開終端輸入粘貼以下命令:(注意最后一句是你的用戶名)
sudo tar -zxf ~/下載/spark-2.4.0-bin-without-hadoop.tgz -C /usr/local/
cd /usr/local
sudo mv ./spark-2.4.0-bin-without-hadoop/ ./spark
sudo chown -R hadoop:hadoop ./spark # 此處的 hadoop 為你的用戶名
?2.繼續在終端輸入以下命令:
cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
3.繼續在終端入:
vim ./conf/spark-env.sh
在第一行添加以下配置信息:
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
?記得保存退出。
4.驗證Spark是否安裝成功。出現如下界面即成功
cd /usr/local/spark
bin/run-example SparkPi 2>&1 | grep "Pi is"
第四步:使用 Spark Shell 編寫代碼
?1.啟動Spark Shell
在終端繼續輸入:
cd /usr/local/spark
bin/spark-shell
?
2.加載text文件
?在終端繼續輸入:
val textFile = sc.textFile("file:///usr/local/spark/README.md")
3.簡單RDD操作
終端可以輸入:
//獲取RDD文件textFile的第一行內容
textFile.first()
//獲取RDD文件textFile所有項的計數
textFile.count()
//抽取含有“Spark”的行,返回一個新的RDD
val lineWithSpark = textFile.filter(line => line.contains("Spark"))
//統計新的RDD的行數
lineWithSpark.count()
//找出文本中每行的最多單詞數
textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
?4.退出Spark Shell
輸入:
:quit
?第五步:獨立應用程序編程
(一)使用sbt對Scala獨立應用程序進行編譯打包
1. 安裝sbt
說明一下,因為這個地址下載之前版本的時候,是從github拉取得,我這里在虛擬機下載很慢,就直接在主機進行下載(魔法),然后放到共享文件夾,然后拖到下載目錄。
在虛擬機的瀏覽器復制下面地址
Download | sbt
?找到sbt-1.3.8.tgz。
我這里在共享文件夾,(不知道在哪里的翻前面的教程第一章)?
?然后拖到下載里
在終端中執行如下命令:?(注意下面的hadoop,是你自己的用戶名)
sudo mkdir /usr/local/sbt
cd ~/下載
sudo tar -zxvf ./sbt-1.3.8.tgz -C /usr/local
cd /usr/local/sbt
sudo chown -R hadoop /usr/local/sbt
cp ./bin/sbt-launch.jar ./
?
使用下面命令創建一個Shell腳本文件?
vim /usr/local/sbt/sbt
添加以下內容到文件?
#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
?保存后,還需要為該Shell腳本文件增加可執行權限:繼續執行以下命令
chmod u+x /usr/local/sbt/sbt
最后,可以使用如下命令查看sbt版本信息:?
注意出現以下界面極為成功,但是需等待時間很長,取決于你的網速,博主這里網速較慢就去刷了10分鐘抖音,大家也可以去了。記的回來哈!
有想提速解決這個問題的的,可以去看看教程里給的博客,我這里就“苦等”了。(刷dy)
./sbt sbtVersion
?
Scala應用程序代碼
?在終端中執行如下命令創建一個文件夾 sparkapp 作為應用程序根目錄:
cd ~
mkdir ./sparkapp
mkdir -p ./sparkapp/src/main/scala
繼續輸入
vim ./sparkapp/src/main/scala/SimpleApp.scala
?文件添加這些內容
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConfobject SimpleApp {
? ? def main(args: Array[String]) {
? ? ? ? val logFile = "file:///usr/local/spark/README.md" // Should be some file on your system
? ? ? ? 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))
? ? }
}
保存退出。 繼續輸入下面的命令:
cd ~/sparkapp
vim simple.sbt
在文本添加以下內容
name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.12"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
保存退出,繼續輸入以下:?
cd ~/sparkapp
find .
?出現以上界面成功。
使用 sbt 打包 Scala 程序
接著,我們就可以通過如下命令將整個應用程序打包成 JAR(首次運行同樣需要下載依賴包 ):
/usr/local/sbt/sbt package
??出現以上界面成功。
通過 spark-submit 運行程序,終端輸入以下命令:
/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar 2>&1 | grep "Lines with a:"
??出現以上界面成功。?
(二)使用Maven對Java獨立應用程序進行編譯打包
1. 安裝Maven
在虛擬機瀏覽器粘貼一下地址
Index of /dist/maven/maven-3
找到 3.6.3
繼續?
?繼續
在終端繼續輸入下面的命令:?(注意最后一句是你的用戶名)
sudo unzip ~/下載/apache-maven-3.6.3-bin.zip -d /usr/local
cd /usr/local
sudo mv apache-maven-3.6.3/ ./maven
sudo chown -R hadoop-202202810203- ./maven
?
2. Java應用程序代碼?
cd ~
mkdir -p ./sparkapp2/src/main/java
vim ./sparkapp2/src/main/java/SimpleApp.java
在文件里添加以下內容:
/*** SimpleApp.java ***/
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.SparkConf;public class SimpleApp {
? ? public static void main(String[] args) {
? ? ? ? String logFile = "file:///usr/local/spark/README.md"; // Should be some file on your system
? ? ? ? SparkConf conf = new SparkConf().setMaster("local").setAppName("SimpleApp");
? ? ? ? JavaSparkContext sc = new JavaSparkContext(conf);
? ? ? ? JavaRDD<String> logData = sc.textFile(logFile).cache();?
? ? ? ? long numAs = logData.filter(new Function<String, Boolean>() {
? ? ? ? ? ? public Boolean call(String s) { return s.contains("a"); }
? ? ? ? }).count();?
? ? ? ? long numBs = logData.filter(new Function<String, Boolean>() {
? ? ? ? ? ? public Boolean call(String s) { return s.contains("b"); }
? ? ? ? }).count();?
? ? ? ? System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
? ? }
}
?繼續在終端輸入:
cd ~/sparkapp2
vim pom.xml
在文件里添加在下面的內容
<project>
????<groupId>cn.edu.xmu</groupId>
????<artifactId>simple-project</artifactId>
????<modelVersion>4.0.0</modelVersion>
????<name>Simple Project</name>
????<packaging>jar</packaging>
????<version>1.0</version>
????<repositories>
????????<repository>
????????????<id>jboss</id>
????????????<name>JBoss Repository</name>
????????????<url>http://repository.jboss.com/maven2/</url>
????????</repository>
????</repositories>
????<dependencies>
????????<dependency> <!-- Spark dependency -->
????????????<groupId>org.apache.spark</groupId>
????????????<artifactId>spark-core_2.11</artifactId>
????????????<version>2.4.0</version>
????????</dependency>
????</dependencies>
</project> ?
?為了保證maven能夠正常運行,先執行如下命令檢查整個應用程序的文件結構:
保存退出,繼續在終端輸入以下命令
find .
????出現下面的結構
繼續輸入?下面的命令
大家可以去刷15分鐘抖音了,這里也很慢哈。
/usr/local/maven/bin/mvn package
?出現下面的界面極為成功。
通過spark-submit 運行程序?,繼續在終端輸入
/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp2/target/simple-project-1.0.jar 2>&1 | grep "Lines with a"
??出現下面的界面極為成功。
?(三)使用Maven對Scala獨立應用程序進行編譯打包
?Scala應用程序代碼
在終端中執行如下命令創建一個文件夾 sparkapp3作為應用程序根目錄:
cd ~ # 進入用戶主文件夾
mkdir ./sparkapp3 # 創建應用程序根目錄
mkdir -p ./sparkapp3/src/main/scala # 創建所需的文件夾結構
繼續輸入:
vim ./sparkapp3/src/main/scala/SimpleApp.scala
在文件欸添加下面的內容
/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConfobject SimpleApp {
? ? def main(args: Array[String]) {
? ? ? ? val logFile = "file:///usr/local/spark/README.md" // Should be some file on your system
? ? ? ? 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))
? ? }
}
使用Maven進行編譯打包
在終端中執行如下命令
cd ~/sparkapp3
vim pom.xml
?在文件里添加下面的內容
<project>
????<groupId>cn.edu.xmu</groupId>
????<artifactId>simple-project</artifactId>
????<modelVersion>4.0.0</modelVersion>
????<name>Simple Project</name>
????<packaging>jar</packaging>
????<version>1.0</version>
????<repositories>
????????<repository>
????????????<id>jboss</id>
????????????<name>JBoss Repository</name>
????????????<url>http://repository.jboss.com/maven2/</url>
????????</repository>
????</repositories>
????<dependencies>
????????<dependency> <!-- Spark dependency -->
????????????<groupId>org.apache.spark</groupId>
????????????<artifactId>spark-core_2.11</artifactId>
????????????<version>2.4.0</version>
????????</dependency>
????</dependencies>
??<build>
????<sourceDirectory>src/main/scala</sourceDirectory>
????<plugins>
??????<plugin>
????????<groupId>org.scala-tools</groupId>
????????<artifactId>maven-scala-plugin</artifactId>
????????<executions>
??????????<execution>
????????????<goals>
??????????????<goal>compile</goal>
????????????</goals>
??????????</execution>
????????</executions>
????????<configuration>
??????????<scalaVersion>2.11.12</scalaVersion>
??????????<args>
????????????<arg>-target:jvm-1.8</arg>
??????????</args>
????????</configuration>
????</plugin>
????</plugins>
</build>
</project>
繼續執行下面的內容
find .
??出現上面的界面極為成功。
繼續在終端輸入:
大家可以去刷15分鐘抖音了,這里也很慢哈。
/usr/local/maven/bin/mvn package
出現上面的界面極為成功。?
通過 spark-submit 運行程序
繼續在終端輸入:
/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp3/target/simple-project-1.0.jar 2>&1 | grep "Lines with a:"
出現如上界面即為成功。?