2017-03-02 64 views
1

我尝试从s3中读取大量csv文件,并在ec2实例上运行具有正确IAM角色(可以从其他脚本的相同存储桶读取)的工作人员。 当我试图从一个私人斗用这个命令读取我自己的数据:对ec2工作者的dask s3访问

client = Client('scheduler-on-ec2') 
df = read_csv('s3://xyz/*csv.gz', 
       compression='gzip', 
       blocksize=None, 
       #storage_options={'key': '', 'secret': ''} 
      ) 
df.size.compute() 

数据是看起来像读取本地(本地Python解释器,而不是工人),然后被发送到工人(或调度? ),当工作人员收到组块时,他们运行计算并返回结果。通过或不通过密钥和秘密storage_options

当我从公共s3桶(NYC出租车数据)读取,与storage_options={'anon': True},一切看起来没问题。

您认为问题是什么?我应该重新配置更改以让工作人员直接从s3中读取?

s3fs正确安装,而这些都是根据DASK支持的文件系统:

>>>> dask.bytes.core._filesystems 
{'file': dask.bytes.local.LocalFileSystem, 
's3': dask.bytes.s3.DaskS3FileSystem} 

更新

监控网络接口后,它看上去就像是从解释上传到调度。数据帧(或包)中的分区越多,数据发送到调度程序的数据就越大。我认为这可能是计算图,但它确实很大。对于12个文件,它是2-3MB,对于30个文件,它是20MB,对于更大的数据(150个文件),将它发送到调度程序只需要很长的时间,我没有等待它。发送给调度器的还有哪些内容可以占用这些数据量?

+0

>还有什么被发送到调度程序,可以占用这些数据量?据我所知, 。没有。如果你可以生成一个可重现的[最小失败示例](http://stackoverflow.com/help/mcve),我建议在Github上提交一些东西。当我尝试这个问题时,一切运行良好。你可以尝试[手动检查dask图表](http://dask.pydata.org/en/latest/inspect.html)。 – MRocklin

回答

0

当您拨打dd.read_csv('s3://...')时,本地计算机将读取一点数据以猜测列名,dtypes等。然而,工作人员将直接读取大部分数据。

当使用分布式调度程序时,Dask不会在本地计算机中加载数据,然后将其抽出给工作人员。如你所说,这将是低效的。

您可能想查看web diagnostic pages以获取更多关于什么花费时间的信息。

+0

是的,我正在检查网页诊断页面。当我使用少量的csvs并监控我的网络接口时,我发现我的计算机正在向ec2上传一段时间,并且完成后,这些任务开始按照预期在工作人员上运行,并显示在诊断页面上。 当运行更多的csvs时,上传根本没有完成。我不确定发生了什么,只是猜测所有的数据都在上传,但我不知道底下发生了什么。 – zseder