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