2017-03-02 2 views
1

私は適切なIAMロールを持つec2インスタンスで稼働するワーカーとs3から多くのcsvファイルを読み込もうとします(他のスクリプトと同じバケットから読むことができます)。 私は、このコマンドを使用して、プライベートバケットから自分のデータを読み取るしようとすると:ec2ワーカーのd3 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で鍵と秘密を渡すかどうかは同じです。

storage_options={'anon': True}でパブリックs3バケット(ニューヨークのタクシーデータ)から読んだ場合、すべてが問題なく表示されます。

問題がどのようなものだと思いますが、私は労働者が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に何かを提出することをお勧めします。私がこの問題を試すと、すべてうまく動作します。あなたは[ダスクグラフを手動で調べる]ことができます(http://dask.pydata.org/en/latest/inspect.html)。 – MRocklin

答えて

0

dd.read_csv('s3://...')を呼び出すと、ローカルマシンは列名、dtypesなどを推測するために少しデータを読み込みます。ただし、ワーカーはデータの大部分を直接読み込みます。

分散スケジューラを使用する場合、Daskはローカルマシンにデータをロードせず、ワーカーに送り出しません。あなたが示唆するように、これは非効率的です。

時間の経過に関する詳細については、web diagnostic pagesをご覧ください。

+0

はい、私はウェブの診断ページをチェックしていました。私は少量のcsvsを監視してネットワークインターフェースを監視していましたが、しばらくの間、マシンが何かをec2にアップロードしていて、それが終わったら、タスクは期待通りに稼動し始め、診断ページに表示されました。 さらに多くのcsvsで実行していると、アップロードがまったく完了しませんでした。何が起こっているのか分かりません。すべてのデータがアップロードされていると推測されましたが、何が起こっているのか分かりません。 – zseder

関連する問題