任務(wù)描述
本關(guān)任務(wù):使用Scala編寫一個(gè)找出README.md
文件中包含'a'的行數(shù)和包含'b'的行數(shù)的程序,并使用Maven對(duì)程序進(jìn)行編譯打包提交到Saprk上。
相關(guān)知識(shí)
在終端中執(zhí)行如下命令創(chuàng)建一個(gè)文件夾 sparkapp3作為應(yīng)用程序根目錄:
cd ~ # 進(jìn)入用戶主文件夾
mkdir ./sparkapp3 # 創(chuàng)建應(yīng)用程序根目錄
mkdir -p ./sparkapp3/src/main/scala # 創(chuàng)建所需的文件夾結(jié)構(gòu)
在./sparkapp3/src/main/scala下建立一個(gè)名為SimpleApp.scala的文件(vim ./sparkapp3/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/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))
}
}
該程序計(jì)算 /usr/local/spark/README
文件中包含 “a” 的行數(shù) 和包含 “b” 的行數(shù)。代碼第8行的 /usr/local/spark 為 Spark 的安裝目錄,如果不是該目錄請(qǐng)自行修改。不同于 Spark shell,獨(dú)立應(yīng)用程序需要通過(guò) val sc = new SparkContext(conf)
初始化 SparkContext,SparkContext 的參數(shù) SparkConf 包含了應(yīng)用程序的信息。 該程序依賴Spark Java API,因此我們需要通過(guò)Maven進(jìn)行編譯打包。在./sparkapp3目錄中新建文件pom.xml,命令如下:
cd ~/sparkapp3
vim pom.xml
然后,在pom.xml文件中添加如下內(nèi)容,用來(lái)聲明該獨(dú)立應(yīng)用程序的信息以及與Spark的依賴關(guān)系:
<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.12</artifactId>
<version>3.0.2</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.12.10</scalaVersion>
<args>
<arg>-target:jvm-1.8</arg>
</args>
</configuration>
</plugin>
</plugins>
</build>
</project>
為了保證Maven能夠正常運(yùn)行,先執(zhí)行如下命令檢查整個(gè)應(yīng)用程序的文件結(jié)構(gòu):
cd ~/sparkapp3
find .
文件結(jié)構(gòu)應(yīng)該是類似如下的內(nèi)容:
.
./pom.xml
./src
./src/main
./src/main/scala
./src/main/scala/SimpleApp.scala
接下來(lái),我們可以通過(guò)如下代碼將整個(gè)應(yīng)用程序打包成JAR包(注意:計(jì)算機(jī)需要保持連接網(wǎng)絡(luò)的狀態(tài),而且首次運(yùn)行打包命令時(shí),Maven會(huì)自動(dòng)下載依賴包,需要消耗幾分鐘的時(shí)間):
cd ~/sparkapp3 #一定把這個(gè)目錄設(shè)置為當(dāng)前目錄
/usr/local/maven/bin/mvn package
如果屏幕返回如下信息,則說(shuō)明生成JAR包成功:
生成的應(yīng)用程序JAR包的位置為~/sparkapp3/target/simple-project-1.0.jar
。如果運(yùn)行Maven編譯打包過(guò)程很慢,是因?yàn)樾枰絿?guó)外網(wǎng)站下載很多的依賴包,國(guó)外網(wǎng)站速度很慢,因此,要花費(fèi)很長(zhǎng)時(shí)間。為了加快速度,可以更改為國(guó)內(nèi)的倉(cāng)庫(kù)地址。 最后,我們就可以將生成的 jar 包通過(guò) spark-submit 提交到 Spark 中運(yùn)行了,命令如下:
/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp3/target/simple-project-1.0.jar
#上面命令執(zhí)行后會(huì)輸出太多信息,可以不使用上面命令,而使用下面命令查看想要的結(jié)果
/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp3/target/simple-project-1.0.jar > step5.txt #結(jié)果輸出到step5.txt中
cat step5.txt
得到的結(jié)果如下:
Lines with a: 71, Lines with b: 38
到此,就順利完成 Spark 應(yīng)用程序的Maven編譯打包運(yùn)行了。
編程要求
根據(jù)提示,完成Maven對(duì)Sacal進(jìn)行打包。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-521066.html
開始你的任務(wù)吧,祝你成功!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-521066.html
到了這里,關(guān)于使用Maven對(duì)Scala獨(dú)立應(yīng)用程序進(jìn)行編的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!