最近參加了一個大數據開發的培訓,整理一下在培訓過程中,老師一直說的一個案例。案例比較簡單,使用 MapReduce、hive、Spark 等框架進行計算,對框架有一個簡單的了解。現在對這個案例進行一個簡單的整理,方便後期學習。
原始數據
數據按照逗號(,)分割,每列數據說明如下:
序號 說明 備註
1 學號
2 姓名
3 性別
4 年齡
5 上學期成績 學科成績以&分割,學科=成績
6 下學期成績 學科成績以&分割,學科=成績
統計第一學期數學成績及格和不及格的人數
數據結構相對比較簡單,分析每行數據中的第一學期數學成績,判斷其中數據成績是否及格,如果及格,則統計及格的人數,不及格統計不及格的人數。
在正式開始這項工作時,首先要保證自己的環境可以正常運行,hadoop 集群、mysql、hive、spark 集群可以正常運行。
進入 hadoop 的 sbin 目錄: 1.啟動 DFS
./start-dfs.sh
2.啟動 yarn
./start-yarn.sh
3.啟動 hive,進入 hive 的 bin 目錄
啟動hive的metastore服務hive --service metastore &34;Math_Score_Pass&34;Math_Score_Not_Pass&34;,&34;&&34;=&34;StudentScoreCount&39;,&將本地文件導入hiveload data local inpath &39; into table student;39;HDFS路徑&39;/root/2020/01/student&39;&&39;=&39;&&39;=&39;&&39;=&39;&&39;=&34;Spark Student Score&34;local[2]&34;Math_Score_Pass&34;Math_Score_Not_Pass&34;,&34;&&34;=&34;Math_Score_Pass&34;Math_Score_Not_Pass",1),然後使用 reduceByKey 將所有的結果進行累加,最後保存到 HDFS 的指定目錄。
spark-submit \ --master local \ --class com.spark.StudentScore \ original-spark-training-1.0-SNAPSHOT.jar \ /data/student /data/spark/studentscore/
查看 hdfs 結果結果目錄::
hdfs dfs -ls /data/spark/studentscore/
HDFS結果
HDFS結果
查看 HDFS 結果內容:
hdfs dfs -cat /data/spark/studentscore/par*
HDFS結果內容
在結果目錄中,發現產生了 2 個 part-0000* 的文件,我們要看一下 具體是什麼原因產生的: 查閱相關資料,發現從 hdfs 中讀取文件,源碼默認的分區數是 2,分區數決定最終的結果
在默認的 textfile 中,如果從 hdfs 中讀取文件,源碼中默認的分區數是 2,如果想改變分區數,可以在 textfile 中設置第二個參數「分區數」
查看 textFile 源碼
查看 hadoopFile 源碼
其中 defaultMinPartitions 為定義的默認分區數:
spark 的實現代碼可以在 github 上進行下載spark-training[2]
[1] hadoop-training: https://github.com/fulinmao/hadoop-training/
[2] spark-training: https://github.com/fulinmao/spark-training/