2014-04-22 11 views
5

Kiedy próbuję przesłać duży plik csv do CKAN magazyn danych nie powiedzie się i pojawi się następujący komunikatCKAN: Przesyłanie do magazynu danych nie powiodło się; Zasób zbyt duży, aby pobrać

Error: Resource too large to download: 5158278929 > max (10485760). 

Zmieniłem maksimum w megabajtach a zasoby przesłać do

ckan.max_resource_size = 5120 

w

/etc/ckan/production.ini

Co jeszcze trzeba zmienić, aby przesłać duże csv do ckan.

Zrzut ekranu: Error: Resource too large to download: 5158278929 > max (10485760)

+0

Czy możesz dokładniej określić, co dokładnie zrobiłeś, aby przesłać plik do magazynu danych? Na przykład, czy używasz datapusher tutaj? Lub datastorer? Czy masz na myśli to, że próbowałeś przesłać go do magazynu plików? Jakiej wersji CKAN używasz? –

+0

Staramy się przesłać csv do datastore. Używając ckan wersji 2.2 –

+0

@SeanHammond zobacz zrzut ekranu błędu w zaktualizowanym pytaniu. Pomóż mi znaleźć błąd. –

Odpowiedz

4

Ten komunikat o błędzie pochodzi z DataPusher, a nie z samego CKAN: https://github.com/ckan/datapusher/blob/master/datapusher/jobs.py#L250. Niestety wygląda na to, że maksymalny rozmiar pliku DataPusher jest zakodowany na 10 MB: https://github.com/ckan/datapusher/blob/master/datapusher/jobs.py#L28. Przesyłanie większych plików do DataStore nie jest obsługiwane.

Dwa możliwe obejścia może być:

  1. Użyj DataStore API aby dodać dane samodzielnie.

  2. Zmień MAX_CONTENT_LENGTH na linii w kodzie źródłowym DataPusher, który został połączony z powyższym, na coś większego.

+0

Dzięki Sean. Zmieniłem MAX_CONTENT_LENGTH vale na dużą wartość (5 GB), po czym wystąpił następujący błąd Błąd: [u "Plik" /usr/lib/ckan/datapusher/lib/python2.7/site-packages/apscheduler/scheduler.py " , wiersz 512, w _run_job \ n retval = job.func (* job.args, ** job.kwargs) \ n ', u' Plik "/ usr/lib/ckan/datapusher/src/datapusher/datapusher/jobs. py ", wiersz 261, w push_to_datastore \ nf = cStringIO.StringIO (response.read()) \ n ', u' Plik" /usr/lib/python2.7/socket.py ", wiersz 358, w ​​odczycie \ n buf.write (dane) \ n ', u "MemoryError (' out of memory ',)"] –

+0

W twoim komputerze (tym, na którym uruchamiasz datapusher) zabrakło pamięci podczas próby załadowania pliku. Wygląda na to, że datapser podtrzymuje cały plik w pamięci podczas pobierania go z CKAN i/lub CKAN przechowuje cały plik w pamięci, dostarczając go do pobrania. Domyślam się, że pobieranie strumieniowe, które pozwoli uniknąć tego rodzaju błędu, nie jest obsługiwane. Więc jeśli chcesz przesłać plik 5GB do DataStore przy użyciu DataPusher, potrzebujesz więcej niż 5 GB pamięci. –

+2

Nadal można używać interfejsu DataStore API, z którym łączyłem się w powyższej odpowiedzi, aby dodać plik do pliku DataStore bit po bicie, zamiast wszystkich naraz. –

Powiązane problemy