作者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/cn.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