day01 PySpark
day01 PySpark
今日內容:
-
1- Spark的基本內容 (了解 其中關于特點需要記錄)
-
2- Spark的環境搭建(參考部署文檔, 一步步配置成功即可)
-
3- 基于pycharm完成PySpark的入門案例(掌握-- 理解每一個API有什么作用)
1. Spark的基本內容
1.1. Spark的基本介紹
-
MapReduce: 分布式計算引擎
正因為MR存在這樣的一些弊端, 對于市場而言, 希望能夠出現一款效率更高, 對迭代計算支持更加良好, 同時更利于上手一個大規模分布式計算的引擎, 而Spark其實就是在這樣的背景下產生了
?
Spark是一款大規模分布式的計算引擎, 主要來源于 加州大學伯克利分校一幫博士導師產生一篇論文 來產出的一款基于內存計算的分布式引擎, 整個Spark核心: RDD(彈性的分布式數據集)
Spark是基于scala(基于Java)語言編寫的
RDD: 彈性分布式數據集, 目前可以理解為就是一個龐大的容器, 整個計算方案計算規則都是在這個RDD中定義處理
Spark目前貢獻給Apache, 稱為Apache旗下頂級開源項目: https://spark.apache.org/4
?
為什么說Spark執行效率比較高呢?
1- Spark提供了全新數據結構: RDD ? 讓程序員從原來的數據操作者變更規則的定義者, 整個內部實施全部spark程序基于規則自動化完成, 整個計算全部都是在RDD中運行的, 迭代計算會更加方便 還可以基于內存進行計算 ? 2- Spark基于線程運行的, 而MR是基于進程運行的, 線程的啟動和銷毀要高于進程的啟動和銷毀?
1.2. Spark的發展史
?
?
pyspark: 本質上就是一個python的庫, 使用python語言操作spark, 必須要下載pyspark?
1.3. Spark的特點
-
1- 速度快
-
2- 易用性
-
3- 通用型
?
-
4- 隨處運行
?
2. Spark的環境安裝
2.0 從教育項目環境恢復到基礎課環境
目標網絡信息:
1- 了解網段 : ip中第三段 目前是 192.168.88 ? (所有虛擬機必須都是此網段下)查看虛擬機的ip地址即可: ifconfig 2- 了解此網段下的網關地址: 需要到虛擬機中查看網關(所有的服務器必須指向同一個網關)網關地址查看文件位置: /etc/sysconfig/network-scripts/ifcfg-ens33查看此文件vim /etc/sysconfig/network-scripts/ifcfg-ens33?
修改外部的網絡:
-
1- 修改VMware的網絡編輯器:
?
?
?
-
2- 修改windows的網絡適配器
?
?
?
-
3- 即可在fineShell 或者 CRT 或者其他各種連接工具進行連接操作:
-
4- 連接后, 請測試網絡是否暢通
?
2.1. Local模式安裝
local模式主要是用于開發測試環境, 不能作為生產環境
local本質上就是一個JVM進程程序 在這個程序中, 運行多個線程來分布式處理
local模式是一種單機模式, 僅適合于小量數據集的處理, 無法處理大規模數據
?
?
整個Loca模式Spark環境搭建操作, 請參考<<Spark部署文檔>> 即可
?
?
?
如何退出客戶端程序: 嚴禁使用 ctrl + z (這不是退出, 而是掛載在了后臺)
推薦使用以下的方式嘗試退出客戶端: ctrl + c ctrl+ d :quit !quit quit :exit !exit exit?
2.2. PySpark庫安裝
pyspark 是python下的一個庫, 如果需要安裝pyspark, 首先需要先保證有python的環境, 而且當前這個spark版本要求python的環境必須為3以上版本, 而目前虛擬機的版本為 Python2的版本
?
此時, 需要先安裝python3的版本, 目前在虛擬機中, 需要安裝的python版本為: 3.8.8
此處在安裝python環境的時候, 我們不在采用原有的直接安裝python包的方式, 而且是選擇使用 anaconda (數據科學庫) 原因:1: anaconda是一個數據科學庫, 這個庫包含有python的環境 + python各種進行數據分析的庫, 可以節省一部分關于數據科學庫安裝操作2: anaconda提交一套完善的虛擬環境, 可以基于anaconda構建多套互相隔離的虛擬環境(沙箱環境),可以在不同環境中安裝不同的python的版本, 以及安裝不同的python包整個Loca模式Spark環境搭建操作, 請參考<<Spark部署文檔>> 即可
?
注意1:
每一個節點都需要安裝 python的環境, 但是pyspark庫僅需要在node1安裝即可, 因為spark框架內部以及集成了pyspark庫, 提交到spark環境中, 運行的時候, 不需要python環境中pyspark, 此時安裝pyspark僅僅是為了讓pycharm去加載, 然后能夠編寫代碼.以及在本地客戶端上進行直接測試操作
?
注意2:
如果大家直接使用 后續的快照, 那么所有的環境都是已經安裝完成的, 大家可以直接使用即可,但是由于我的失誤, 安裝pyspark庫的時候, 不小心安裝為3.2.0版本, 并不是3.1.2 導致版本不一致,會存在兼容問題, 需要卸載掉pyspark 重新安裝如何卸載? pip uninstall pyspark如何安裝呢?pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark==3.1.2?
?
擴展: anaconda的常用命令
安裝庫: conda install 包名pip install -i 鏡像地址 包名卸載庫: conda uninstall 包名pip uninstall 包名設置 anaconda下載的庫的鏡像地址: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --set show_channel_urls yes如何使用anaconda構建虛擬(沙箱)環境:1- 查看當前有那些虛擬環境: conda env list2- 如何創建一個新的虛擬環境 conda create 虛擬環境名稱 python=版本號例如: 創建一個pyspark_env 虛擬環境 conda create -n pyspark_env python=3.83- 如何進入虛擬環境(激活) source activate pyspark_env 或者 conda activate pyspark_env4- 如何退出虛擬環境: deactivate pyspark_env 或者 conda deactivate?
2.3 Spark集群模式架構
?
?
3. 基于pycharm完成PySpark入門案例
?
3.0 如何清理遠端環境
?
?
?
接下來, 還需要清理遠端地址:
?
?
?
清理后, 重新配置當前項目使用遠端環境:
?
?
?
?
?
?
全部點擊ok關閉即可
?
?
設置自動上傳
?
?
?
3.1 pycharm如何連接遠程環境
背景說明:
一般在企業中, 會存在兩套線上環境, 一套環境是用于開發(測試)環境, 一套環境是用于生產環境, 首先一般都是先在開發測試環境上進行編寫代碼, 并且在此環境上進行測試, 當整個項目全部開發完成后, 需要將其上傳到生產環境, 面向用于使用如果說還是按照之前的本地模式開發方案, 每個人的環境有可能都不一致, 導致整個團隊無法統一一套開發環境進行使用, 從而導致后續在進行測試 上線的時候, 出現各種各樣環境問題pycharm提供了一些解決方案: 遠程連接方案, 允許所有的程序員都去連接遠端的測試環境的, 確保大家的環境都是統一, 避免各種環境問題發生, 而且由于連接的遠程環境, 所有在pycharm編寫代碼, 會自動上傳到遠端環境中, 在執行代碼的時候, 相當于是直接在遠端環境上進行執行操作操作實現: 本次這里配置遠端環境, 指的連接虛擬機中虛擬環境, 可以配置為 base環境, 也可以配置為 pyspark_env虛擬環境, 但是建議配置為 base環境, 因為base環境自帶python包更全面一些
?
項目名為: sz30_pyspark_parent (強烈建議與我項目名一致)
?
?
?
?
?
?
創建項目后, 設置自動上傳操作
?
校驗是否有pyspark
?
?
?
ok 后, 就可以在項目上創建子項目進行干活了: 最終項目效果圖
?
最后, 就可以在 main中編寫今日代碼了, 比如WordCount代碼即可
?
擴展: 關于pycharm 專業版 高級功能
-
1- 直接連接遠端虛擬機, 進行文件上傳, 下載 查看等等操作
?
?
-
2- 可以模擬shell控制臺:
?
?
?
?
-
3- 模擬datagrip操作:
?
3.2 WrodCount代碼實現_local
3.2.1 WrodCount案例流程實現
?
3.2.2 代碼實現
# 演示 pyspark的入門案例: WordCount from pyspark import SparkContext, SparkConf import osos.environ['SPARK_HOME'] = '/export/server/spark' os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3' os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3' # 快捷鍵: main + 回車 if __name__ == '__main__':print("pyspark的入門案例: WordCount")# 1- 創建Spark核心對象: SparkContextconf = SparkConf().setMaster('local[*]').setAppName('wordCount')sc = SparkContext(conf=conf)# 2- 首先讀取數據# 此處的路徑地址, 不應該這樣寫, 因為后續有可能無法加載到, 建議添加文件協議# 如果讀取本地文件: file:///# 如何讀取HDFS文件: hdfs://node1:8020/# 注意, 由于我們采用連接遠程環境的方案, 代碼的執行最終是運行在遠端環境, 所以說此處所說的本地文件指定 遠程環境中本地文件rdd_init = sc.textFile('file:///export/data/workspace/sz30_pyspark_parent/_01_pyspark_base/data/words.txt')# 此處讀的過程中, 采用一行行的讀取, 將每一行收集回來,放置到一個列表中"""['hello world hello hadoop','hadoop hello world hive','hive hive hadoop','hadoop hadoop hive','hive hadoop hello hello','sqoop hive hadoop hello hello','hello world hello hadoop','hadoop hello world hive','hive hive hadoop' ]"""# 3- 對每一行的數據執行切割操作,轉換為一個個列表# 一對一的轉換操作: map#rdd_map = rdd_init.map(lambda line: line.split())# 預估一下結果:"""[['hello,world,hello,hadoop'],['hadoop,hello,world,hive'],['hive,hive,hadoop'] ] 給我的感覺就是比較胖 大的列表套了一個小的列表希望結果: 扁平化處理 [hello,world,hello,hadoop,hadoop,hello,world,hive,hive,hive,hadoop ]"""# map轉換增強版, 用于進行一對多的轉換操作, 相當于 先執行map操作. 然后執行flat(扁平化操作)rdd_flatmap = rdd_init.flatMap(lambda line: line.split())# 4- 將每一個單詞轉換為 (單詞,1)rdd_map = rdd_flatmap.map(lambda word:(word,1))# 期望結果:"""[(hello,1),(world,1),(hello,1),(hadoop,1),(hadoop,1)] """# 5- 根據key進行分組聚合統計操作rdd_res = rdd_map.reduceByKey(lambda agg,curr: agg+curr)print(rdd_res.collect())?
可能出現的錯誤:
?
無法加載到java_home 原因: 目前pycharm連接遠程的python環境, 執行python的代碼, 最終是將代碼運行在遠端環境的, 但是在遠端環境中, 可能存在多個python環境, 以及內部加載的 .bashrc中環境信息, 但是這個環境中壓根就沒有 JAVA_HOME 安裝pyspark庫同步安裝了另一個 py4j的庫, spark程序運行, 需要將python的代碼 轉換為java代碼從而運行(只有其中一部分)解決方案? 需要在bashrc中配置相關的環境信息第一步: 需要修改 虛擬機中 .bashrc文件: vim ~/.bashrc在文件中, 添加以下兩行內容:export JAVA_HOME=/export/server/jdk1.8.0_241/export PYSPARK_PYTHON=/root/anaconda3/bin/python3第二步: 重新加載bashrcsource ~/.bashrc第三步: 需要在代碼中添加以下內容,用于鎖定遠程版本 (放置在mian函數的上面)os.environ['SPARK_HOME'] = '/export/server/spark'os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'?
?
3.3 [擴展] 部署windows開發環境(不需要做)
-
1- 第一步: 需要安裝Python 環境 , 建議使用anaconda 來安裝即可
-
2- 第二步: 在Python安裝pySpark
?
-
3- 第三步: 配置 hadoop的環境
?
首先, 需要將 hadoop-3.3.0 放置到一個沒有中文, 沒有空格的目錄下接著將目錄中bin目錄下有一個 hadoop.dll文件, 放置在c:/windows/system32 目錄下 (配置后, 需要重啟電腦)最后, 將這個hadoop3.3.0 配置到環境變量中:?
?
配置后, 一定一直點確定退出, 否則就白配置了....
-
4-第四步: 配置spark本地環境
?
首先, 需要將 spark-3.1.2... 放置到一個沒有中文, 沒有空格的目錄下最后, 將這個 spark-3.1.2... 配置到環境變量中:?
?
配置后, 一定一直點確定退出, 否則就白配置了....
-
5-配置pySpark環境
?
?
配置后, 一定一直點確定退出, 否則就白配置了....
?
-
6- 配置 jdk的環境:
?
首先: 需要將 jdk1.8 放置在一個沒有中文, 沒有空格的目錄下接著:要在環境變量中配置 JAVA_HOME, 并在path設置?
?
?
?
?
總結
以上是生活随笔為你收集整理的day01 PySpark的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ this指针
- 下一篇: 【C语言】qsort函数的使用和模拟实现