使用S3和EMR進(jìn)行簡(jiǎn)單的云計(jì)算
很少有流行語像大數(shù)據(jù)那樣引起人們的關(guān)注,這是有充分的理由的:全球經(jīng)濟(jì)依靠信息,而我們每天都在成倍地增加它。"云計(jì)算"也被廣泛使用。
但這還不是全部,您對(duì)坐在前面的投資者說。我們的數(shù)據(jù)-很大。有人揚(yáng)眉。您會(huì)聽到咳嗽聲。它在云端。房間立即鼓掌。
通常,這就是硅谷風(fēng)投會(huì)議的進(jìn)行方式,或者我聽說。
但是,大事令人生畏,我只是一個(gè)擁有Jupyter筆記本和夢(mèng)想的人。但是我記得:"我們都處于困境之中,但是我們當(dāng)中有些人正在看云"。奧斯卡·王爾德可能是這樣寫的。
因此,我開始了一個(gè)向上的旅程:谷歌搜索"如何云",然后谷歌搜索我的許多錯(cuò)誤消息,直到發(fā)現(xiàn)類似連貫的設(shè)置過程的東西,我將在此處詳細(xì)介紹,以便您也可以將頭放在云中 。
云到底是什么?
云計(jì)算使用互聯(lián)網(wǎng)(傳輸數(shù)據(jù)的"云")來告訴其他計(jì)算機(jī)該怎么做,而不是在您的計(jì)算機(jī)上本地執(zhí)行。當(dāng)公司談?wù)?云存儲(chǔ)"時(shí),它們就是通過Internet /云將數(shù)據(jù)發(fā)送到其他一些要存儲(chǔ)的計(jì)算機(jī)。
這個(gè)短語有點(diǎn)誤導(dǎo):您不會(huì)將數(shù)據(jù)發(fā)送到中間層來回浮動(dòng),直到再次需要它為止。沒有所謂的"無形存儲(chǔ)":無論是在磁盤,內(nèi)存還是寄存器中,所有現(xiàn)有字節(jié)都寫在某個(gè)地方的晶體管中。量子計(jì)算可能會(huì)改變這一點(diǎn),但是現(xiàn)在讓我們避免談?wù)撨@個(gè)令人痛苦的復(fù)雜主題。
因此,要通過云計(jì)算大數(shù)據(jù),我們需要一臺(tái)以上的計(jì)算機(jī)來運(yùn)行流程。幸運(yùn)的是,對(duì)于像我這樣的用戶,他們沒有硬件或現(xiàn)金來建立我們自己的服務(wù)器集群,有很多大型科技公司會(huì)以合理的價(jià)格租用處理能力(我的90 GB二氧化硫分析價(jià)格約為50美分)。您需要為所用的東西付費(fèi),因此可以輕松進(jìn)行存儲(chǔ)和計(jì)算。
對(duì)于大數(shù)據(jù)評(píng)估,我們需要:
· 數(shù)據(jù)
· 存放它的地方
· 在某個(gè)地方緊縮
我將列出從零到云的所有步驟。我使用MySQL來加載數(shù)據(jù),使用Amazon Web Services進(jìn)行存儲(chǔ)和集群設(shè)置,并使用Jupyter筆記本中的Spark進(jìn)行實(shí)際計(jì)算。在此過程中,我將鏈接到多個(gè)設(shè)置教程,所有這些都很好地完成了 解釋"我點(diǎn)擊要執(zhí)行此操作的那一點(diǎn)",否則這將是一個(gè)相當(dāng)棘手的問題。
獲取一些數(shù)據(jù)
獲得大量數(shù)據(jù)非常容易。如果您不想自己做,這里是可公開獲得的大數(shù)據(jù)集列表。我在一個(gè)MySQL服務(wù)器(也托管在AWS上)上有多年的NASA大氣讀數(shù),因此我將其導(dǎo)出到本地計(jì)算機(jī)上的一個(gè)巨大的.csv文件中。這花了5個(gè)小時(shí),但大型計(jì)算機(jī)的價(jià)格也是如此。
得到了您的數(shù)據(jù)?好。那是容易的部分。
信息桶
亞馬遜的簡(jiǎn)單存儲(chǔ)服務(wù)(S3)是遠(yuǎn)程數(shù)據(jù)存儲(chǔ)的行業(yè)標(biāo)準(zhǔn)。簡(jiǎn)單,靈活且便宜。您創(chuàng)建"存儲(chǔ)桶"并將數(shù)據(jù)放入其中。然后,您可以將這些存儲(chǔ)桶中的數(shù)據(jù)與其他AWS功能結(jié)合使用,就像我們稍后將介紹的那樣。
設(shè)置您的AWS亞馬遜帳戶可能是整個(gè)過程中最困難的部分。我遵循了公司的指南,該指南將指導(dǎo)您完成基本步驟;經(jīng)過五分鐘的困惑點(diǎn)擊后,我盯著自己的數(shù)字存儲(chǔ)桶。
我使用AWS Command Line Interface將數(shù)據(jù)倒入存儲(chǔ)桶;這是一種腳本和自動(dòng)化數(shù)據(jù)管道以進(jìn)行云集成的好方法。
# after pip installation & inputting the user keys you just created
# copy a file in working directory to designated bucket
$ aws s3 cp data.csv s3://big-data-bucket/
除此之外,您還可以僅在AWS網(wǎng)站控制臺(tái)上單擊存儲(chǔ)桶,然后單擊上載文件并從計(jì)算機(jī)中進(jìn)行選擇。
云計(jì)算機(jī)
我想做的實(shí)際分析涉及Spark。這是一種出色的分布式處理引擎,可以有效地組織集群中的多個(gè)節(jié)點(diǎn)來完成同一任務(wù)。我使用Docker在本地測(cè)試了Python API PySpark,因?yàn)樵跊]有虛擬環(huán)境的情況下安裝Spark就像在雷雨中放牧貓。它運(yùn)行良好,但是要在云中進(jìn)行實(shí)際計(jì)算,我需要建立一個(gè)節(jié)點(diǎn)集群-物理 機(jī)器或虛擬分區(qū)來處理我輸入的數(shù)字。
輸入Amazon Elastic MapReduce,這是一項(xiàng)便捷的服務(wù),可讓您在其龐大的服務(wù)器組中輕松創(chuàng)建集群。我們需要一個(gè)EC2安全密鑰對(duì),因此請(qǐng)轉(zhuǎn)到其指南,并查看Windows或Linux / Mac設(shè)置。
要設(shè)置其余的EMR,我遵循了官方指南。唯一棘手的部分是配置引導(dǎo)腳本以安裝我們將在Jupyter中使用的庫。有一些官方示例,但我喜歡Brent Lemiux設(shè)置中的示例:制作一個(gè)名為boot.sh的文本文件,然后粘貼此腳本,然后在所需的庫中進(jìn)行編輯:
#!/bin/bashsudo pip install -U \
numpy \
scikit-learn
# list all the libraries you need following this format
將文件上傳到您的S3存儲(chǔ)桶。從AWS控制臺(tái)開始創(chuàng)建新集群,然后單擊高級(jí)選項(xiàng)。進(jìn)行時(shí),請(qǐng)確保:
· 在"軟件配置"中:選中復(fù)選框以啟用Spark
· 在"常規(guī)選項(xiàng)"中:為集群命名并選擇其存儲(chǔ)桶
· 在"硬件選項(xiàng)"中:自定義節(jié)點(diǎn)的數(shù)量和復(fù)雜性。定價(jià)會(huì)相應(yīng)調(diào)整,因此我堅(jiān)持使用最便宜的m4.large
· 在"其他選項(xiàng)"中:添加自定義引導(dǎo)操作,然后選擇您之前創(chuàng)建的boot.sh
· 在"安全選項(xiàng)"中:選擇您之前創(chuàng)建的EC2密鑰,這樣就不會(huì)有人竊取您的集群
集群完成安裝所需的時(shí)間不到半小時(shí)。
歡迎來到云端
集群?jiǎn)?dòng)后,我們可以創(chuàng)建Jupyter筆記本并開始滾動(dòng)。在EMR控制臺(tái)網(wǎng)站上,單擊左側(cè)的筆記本,然后創(chuàng)建筆記本,選擇剛初始化的集群,然后將其打開。恭喜,您已成功上云。
當(dāng)您打開該群集的筆記本時(shí),它將實(shí)例化一個(gè)SparkSession對(duì)象作為spark,我們可以使用該對(duì)象加載數(shù)據(jù):
# spark's native read() method handles bucket loading
df = spark.read().csv("s3://big_data.csv")
# in .csv() specify your desired s3 bucket url
現(xiàn)在,我們有了一個(gè)并行化的彈性分布式數(shù)據(jù)框,它與我們從熊貓那里知道的普通數(shù)據(jù)框等效。出于多種原因,它們非常適合并行分布式處理,但是下一次我們將繼續(xù)討論。如果您想立即開始,這里有一個(gè)PySpark教程。
請(qǐng)記?。耗谠贫恕?duì)您內(nèi)心的內(nèi)容進(jìn)行復(fù)雜的轉(zhuǎn)換,因?yàn)閬嗰R遜正在做所有艱苦的工作,并且會(huì)按時(shí)收費(fèi)。完成操作后,請(qǐng)確保停止筆記本和群集,以免他們沒錢。
您現(xiàn)在是大數(shù)據(jù)的一部分,因此可以做一些有趣的事情。
下次,我將使用Spark在EMR上分析NASA的SO2數(shù)據(jù)集。
(本文翻譯自Mark Cleverley的文章《Big Data: Spark, AWS & SQL》,參考:https://medium.com/@
mark.s.cleverley/big-data-spark-aws-sql-3dd6f2a9abe)