[問題] AWS執行Python腳本問題

作者: TZULIU (消費券收購商)   2019-03-01 03:48:48
[背景]
我有80多萬筆html檔案,每個檔案即是一個當初爬過的網頁內容,
目前已經產生了一個vocabulary list,
裡面是從80多萬筆html檔案找到的所有字彙,約有20萬筆(非英文字符已經刪除),
我打算把這個vocabulary list匹配每個html檔,再統計每個字彙在該html檔中的次數,
最後再把這個80萬*20萬的資料輸出成csv檔(SQL還正在摸索),
無奈我的筆電記憶體撐不住這麼大量的資料處理,
所以現在把念頭動到AWS上面。
[AWS相關知識]
我目前對於AWS只有非常基礎的理解,
S3: 可以在AWS上建立新的bucket並上傳檔案;可以使用boto3進行一樣的工作
EC2: 可以在AWS上建立新的instance並且透過本地電腦連結後使用python;
可以使用boto3進行一樣的工作;可以讓遠端server上傳並直接執行Python腳本
[問題]
目前的構想是先把80萬筆html檔案上傳到S3 bucket,
然後藉由EC2 instance直接執行我先寫好的Python腳本,
待所有檔案都讀取過後,
一併將資料輸出成csv檔並儲存在S3 bucket底下。
我的問題是:
如果依照我的計畫進行,我的個人電腦必須不能中斷連結,
否則所有進行中的遠端工作全部刪除,
除非使用terminal multiplier
作者: bibo9901 (function(){})()   2019-03-01 04:13:00
800k * 200k * (4byte整數) = 640 GB 就算s3能放得下你也沒辦法真的拿來計算. 事實上這個大矩陣是很sparse的
作者: TakiDog (多奇狗)   2019-03-01 04:14:00
這個數量用csv ...
作者: bibo9901 (function(){})()   2019-03-01 04:15:00
用稀疏矩陣甚至dict存都很容易
作者: TZULIU (消費券收購商)   2019-03-01 04:31:00
可以請兩位高手繼續開示怎麼做比較好嗎?使用AWS RDS?存成dict那之後呼叫的時候,要怎麼補上0呢?
作者: ripple0129 (perry tsai)   2019-03-01 05:25:00
你是不是需要的答案是python xxx.py &多&就可以背景執行
作者: TZULIU (消費券收購商)   2019-03-01 05:32:00
樓上r大說的也是,所以只要連結到instance之後,在commandline 打指令後面加&就行了,但要怎麼看log?另一方面,我也是自己第一次處理這麼大量的資料,想請問有經驗的人到底該怎麼做比較好
作者: TitanEric (泰坦)   2019-03-01 11:46:00
nohup python xxx.py &> log& 參考一下&> log是將stdout跟stderr輸出到log這個檔案
作者: legendmtg (CLANNAD)   2019-03-01 12:07:00
用lambda啊 bucket上檔案建立就會自動執行了https://github.com/Miserlou/Zappa用這個設定很簡單
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2019-03-01 12:14:00
你需要的是重設計整個架構 可以把更完整的資訊甚至code貼上來 或直接找會的人 既然會輸出到CSV 分批處理不就好了有什麼理由一定要全部做完一次寫入?題外話 要開這樣等級的機器很燒錢的....
作者: sma1033 (死馬)   2019-03-01 13:39:00
到了這個架構等級,資源的分配很重要,你要獲得比PC強的運算效能,就是要花$,而且不便宜如果是AWS上不用錢(或是很便宜)的運算服務,好像不會比不錯的個人電腦強多少,要用到比個人電腦強很多的$就很貴
作者: Plot3D (3D做圖)   2019-03-02 00:27:00
可以 tmux還不錯不推薦nohup
作者: agogoman (cocorosie)   2019-03-03 03:13:00
推Sunal, python可以做streaming, 英文單字平均長度不到5個字, 串成dict, 然後每個html去mapping, mapping完streaming落地, 記憶體的使用應該比你想像的小很多.

Links booklink

Contact Us: admin [ a t ] ucptt.com