(Spark)Spark 讀取文件系統的數據


林子雨 實驗3 中的兩道操作題(操作步驟解析)

目錄:

一、在 spark-shell 中讀取 Linux 系統本地文件

二、在 spark-shell 中讀取 HDFS 系統文件

三、編寫獨立應用程序,讀取 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.sbtvim ./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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM