林子雨 實驗3 中的兩道操作題(操作步驟解析)
目錄:
一、在 spark-shell 中讀取 Linux 系統本地文件
三、編寫獨立應用程序,讀取 HDFS 系統文件(此處有sbt安裝教程——>Spark之Scala獨立應用編程 )
環境:
Hadoop 2.6.0以上
java JDK 1.7以上
Spark 3.0.0-preview2
sbt 0.13.9
一、在 spark-shell 中讀取 Linux 系統本地文件“/home/hadoop/test1.txt”,然后統計出文件的行數:
1、首先啟動spark-shell進入Spark-shell模式:(進入spark目錄下后 輸入命令 bin/spark-shell 啟動spark-shell模式)
2、加載text文件(spark創建sc,可以加載本地文件和HDFS文件創建RDD)
val textFile = sc.textFile("file:///home/hadoop/test1.txt") #注意file:后是三個“/”
注意:加載HDFS文件和本地文件都是使用textFile,區別是添加前綴(hdfs://和file://)進行標識。
3、獲取RDD文件textFile所有項(文本文件即總共行數)的計數(還有很多其他的RDD操作,自行百度)
textFile.count() #統計結果顯示 1 行
二、在 spark-shell 中讀取 HDFS 系統文件“/home/hadoop/test.csv(也可以是txt文件)”(如果該文件不存在, 請先創建),然后,統計出文件的行數:
方法一:
1、加載text文件(spark創建sc,可以加載本地文件和HDFS文件創建RDD)
val textFile = sc.textFile("hdfs:///home/hadoop/test.csv") #注意hdfs:后是三個“/”
注意:加載HDFS文件和本地文件都是使用textFile,區別是添加前綴(hdfs://和file://)進行標識。
2、獲取RDD文件textFile所有項的計數
textFile.count() #統計結果顯示 1 行
方法二:(Spark shell 默認是讀取 HDFS 中的文件,需要先上傳文件到 HDFS 中,否則會有“org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/hadoop/README.md”的錯誤。)
1、省去方法一中第一步的命令(1)中的“hdfs://”,其他部分相同,命令如下:
三、編寫獨立應用程序,讀取 HDFS 系統文件“/user/hadoop/test.txt”(如果該文件不存在, 請先創建),然后,統計出文件的行數;通過 sbt 工具將整個應用程序編譯打包成 JAR 包, 並將生成的 JAR 包通過 spark-submit 提交到 Spark 中運行命令:
1、首先輸入 :quit 命令退出spark-shell模式:
2、在終端中執行如下命令創建一個文件夾 sparkapp3 作為應用程序根目錄:
cd ~ # 進入用戶主文件夾
mkdir ./sparkapp3 # 創建應用程序根目錄
mkdir -p ./sparkapp3/src/main/scala # 創建所需的文件夾結構
3、在 ./sparkapp3/src/main/scala 下建立一個名為 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 = "hdfs://localhost:9000/home/hadoop/test.csv"
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2)
val num = logData.count()
println("這個文件有 %d 行!".format(num))
}
}
4、該程序依賴 Spark API,因此我們需要通過 sbt 進行編譯打包。 ./sparkapp3 中新建文件 simple.sbt(vim ./sparkapp3/simple.sbt
),添加內容如下,聲明該獨立應用程序的信息以及與 Spark 的依賴關系:
name := "Simple Project"
version := "1.0"
scalaVersion := "2.12.10"
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.0.0-preview2"
注意:文件 simple.sbt 需要指明 Spark 和 Scala 的版本,如下圖所示:
5、使用 sbt 打包 Scala 程序
(1)為保證 sbt 能正常運行,先執行如下命令檢查整個應用程序的文件結構:
cd ~/sparkapp3 #進入sparkapp3目錄下
find . #顯示整個應用程序的文件結構
(2)文件結構應如下圖所示:
(3)接着,我們就可以通過如下代碼將整個應用程序打包成 JAR:
/usr/local/sbt/sbt package
(4)打包成功的話,會輸出如下圖內容:
生成的 jar 包的位置為 ~/sparkapp3/target/scala-2.12/simple-project_2.12-1.0.jar。(scala-2.12和simple-project_2.12-1.0.jar處可能有所不同,讀者只需要到對應的文件夾下對應查找即可)(~為主文件夾:點擊虛擬機的 進入就是主文件夾)
4、通過 spark-submit 運行程序
(1)最后,我們就可以將生成的 jar 包通過 spark-submit 提交到 Spark 中運行了,命令如下:(紅線部分就是上邊說的生成的jar包的位置)
/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp3/target/scala-2.12/simple-project_2.12-1.0.jar 2>&1 | grep "這個文件有"
(2)最終得到的結果如下:
本博客參考:
Spark快速入門指南-Spark安裝與基礎使用 http://dblab.xmu.edu.cn/blog/spark-quick-start-guide/
大數據原理與應用 第十六章 Spark 學習指南 http://dblab.xmu.edu.cn/blog/804-2/