作者TZULIU (消費券收購商)
看板Python
標題[問題] AWS執行Python腳本問題
時間Fri Mar 1 03:48:48 2019
[背景]
我有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---screen或tmux (目前正在學習中),
想請問各位有AWS經驗的高手們,我這樣的計畫可行嗎?
如果不是很理想,想請問各位高手有沒有更好的做法?
或者是用Lambda(打算學)來做會比較好嗎?
[AWS心得]
不用多說,AWS真的功能超多樣、超強,
同時基本的大概念並不複雜,
不過實際學習起來對於我這種非資工背景的新手還是相當吃力。
首先,雖然AWS對於各種服務提供相當詳盡的基本教學文檔,
可是對於專業觀念和名詞(遠端連結、專端機、伺服器管理等等)不熟的使用者(我),
理解真的非常有限。
第二,使用者社群程度太好,很常找不到可以回答新手問題的(相對)簡單答案,
當然,我真心認為我本人的問題比較大,不過,
以「如何讓EC2 instance直接執行python腳本為例」,
我面臨到的狀況是,
大部分google提供的結果都是告訴你再去使用(學)其他的外掛工具,
可是這樣的做法對於我這種超新手其實沒有比較直觀,
也是找了一陣子才發現如何透過command line來執行。
想請問各位高手有學習的方法或心得可以分享嗎?
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 168.150.122.93
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1551383330.A.511.html
※ 編輯: TZULIU (168.150.122.93), 03/01/2019 03:49:07
※ 編輯: TZULIU (168.150.122.93), 03/01/2019 03:49:42
※ 編輯: TZULIU (168.150.122.93), 03/01/2019 03:52:29
1F:→ bibo9901: 800k * 200k * (4byte整數) = 640 GB 就算s3能放得下 03/01 04:13
2F:→ bibo9901: 你也沒辦法真的拿來計算. 事實上這個大矩陣是很sparse的 03/01 04:14
3F:→ TakiDog: 這個數量用csv ... 03/01 04:14
4F:→ bibo9901: 用稀疏矩陣甚至dict存都很容易 03/01 04:15
5F:→ TZULIU: 可以請兩位高手繼續開示怎麼做比較好嗎?使用AWS RDS? 03/01 04:31
6F:→ TZULIU: 存成dict那之後呼叫的時候,要怎麼補上0呢? 03/01 04:33
7F:推 ripple0129: 你是不是需要的答案是python xxx.py & 03/01 05:25
8F:→ ripple0129: 多&就可以背景執行 03/01 05:26
9F:→ TZULIU: 樓上r大說的也是,所以只要連結到instance之後,在command 03/01 05:32
10F:→ TZULIU: line 打指令後面加&就行了,但要怎麼看log?另一方面,我也 03/01 05:33
11F:→ TZULIU: 是自己第一次處理這麼大量的資料,想請問有經驗的人到底該 03/01 05:33
12F:→ TZULIU: 怎麼做比較好 03/01 05:33
13F:推 TitanEric: nohup python xxx.py &> log& 參考一下 03/01 11:46
14F:→ TitanEric: &> log是將stdout跟stderr輸出到log這個檔案 03/01 11:47
15F:推 legendmtg: 用lambda啊 bucket上檔案建立就會自動執行了 03/01 12:07
17F:→ legendmtg: 用這個設定很簡單 03/01 12:07
18F:推 Sunal: 你需要的是重設計整個架構 可以把更完整的資訊甚至code 03/01 12:14
19F:→ Sunal: 貼上來 或直接找會的人 既然會輸出到CSV 分批處理不就好了 03/01 12:15
20F:→ Sunal: 有什麼理由一定要全部做完一次寫入? 03/01 12:16
21F:→ Sunal: 題外話 要開這樣等級的機器很燒錢的.... 03/01 12:17
22F:推 sma1033: 到了這個架構等級,資源的分配很重要,你要獲得比PC 03/01 13:39
23F:→ sma1033: 強的運算效能,就是要花$,而且不便宜 03/01 13:40
24F:→ sma1033: 如果是AWS上不用錢(或是很便宜)的運算服務,好像不會比 03/01 13:41
25F:→ sma1033: 不錯的個人電腦強多少,要用到比個人電腦強很多的$就很貴 03/01 13:42
26F:推 Plot3D: 可以 tmux還不錯 03/02 00:27
27F:推 Plot3D: 不推薦nohup 03/02 00:29
28F:→ agogoman: 推Sunal, python可以做streaming, 英文單字平均長度不到 03/03 03:13
29F:→ agogoman: 5個字, 串成dict, 然後每個html去mapping, mapping完 03/03 03:14
30F:→ agogoman: streaming落地, 記憶體的使用應該比你想像的小很多. 03/03 03:15