我是一名具有相当不错的RDBMS体验的python开发人员。我需要处理大量的数据(大约500GB)。数据在s3桶中大约有1200个csv文件。我用Python编写了一个脚本,并可以在服务器上运行它。但是,它太慢了。根据目前的速度和数据量,大概需要50天时间才能完成所有文件(当然,在此之前的截止日期是好的)。并行处理大量数据
注:处理是那种东西你的基本ETL型 - 没有什么可怕的幻想。我可以很容易地将它压入PostgreSQL中的临时模式,然后将脚本运行到它。但是,从我的初始测试来看,这将会变慢。
注意:一个全新的PostgreSQL 9.1数据库将是它的最终目的地。
所以,我在想试图旋转了一堆EC2实例,试图成批运行它们(并行)。但是,我从来没有做过以前,所以我一直在四处寻找的想法是这样的,等
同样,我是一个Python开发,所以它看起来像布+博托可能是有前途的。我不时使用boto,但从来没有使用Fabric的经验。
我从阅读/研究中了解到,这对于Hadoop来说可能是一项很好的工作,但我不知道它并且无法承担这项工作,并且时间线不允许学习曲线或招聘有人。我也不应该这样,这是一次性交易。所以,我不需要构建一个非常优雅的解决方案。我只需要它的工作,并能够在今年年底前完成所有数据。
另外,我知道这不是一个简单的计算器,各种问题(像“我怎样才能扭转蟒蛇名单”)。但是,我期望的是有人阅读这篇文章,“说,我做了类似的事情,并使用XYZ ......太棒了!”
我想我问的是有没有人知道我可以用来完成此任务的任何东西(鉴于我是Python开发人员,并且我不知道Hadoop或Java - 并且拥有时间紧迫,防止我学习一门新技术,如Hadoop的或学习一门新语言)
感谢您的阅读。我期待着任何建议。
布+博托的确看起来像这个任务的良好结合。也可以在每个实例上并行执行任务(除非您希望有1200个实例,每个文件一个实例),也许可以使用'multiprocessing'模块中的'Pool'。此外,解析文件和编辑结果的方式可能会对总时间产生很大影响。你看过“numpy”吗? – goncalopp
所以没有人试图重复可能的建议 - 你能描述一下你在现有脚本中做了什么太慢 - 所以我们不知道该走下去吗:) –
@JonClements - 看起来像一个公平的请求。基本上,我尝试了两种方法。我已经尝试将数据放入临时模式中,并将其编入索引(根据需要)并对其运行查询以“按摩”数据并将其转换为请求的格式。这太慢了,因为我认为索引比PostgreSQL缓存大得多。注意:我在Heroku上运行一个小的PostgreSQL实例。 (接下来的评论会继续) –