Лучший способ скопировать 20Gb CSV-файл на Кассандру

У меня есть огромный CSV-файл 20 ГБ для копирования в Cassandra, конечно, мне нужно справиться с ошибками (если сервер или приложение Transfer/Load аварийно завершает работу).

Мне нужно перезапустить обработку (или другой узел или нет) и продолжить передачу без запуска файла CSV с его начала.

Какой самый лучший и простой способ сделать это?

с помощью команды Copy CQLSH? используя flume или sqoop? или используя нативное Java-приложение, используя spark...?

большое спасибо

3 ответа

Если бы это был я, я бы разбил файл.

Я бы выбрал предпочтительный способ загрузки любых данных CSV, игнорируя проблемы огромного размера файла и обработки ошибок. Например, я бы использовал скрипт на python и собственный драйвер и протестировал его с помощью нескольких строк csv, чтобы убедиться, что он может быть вставлен из крошечного файла csv с реальными данными.

Затем я написал бы сценарий, чтобы разбить файл на части управляемого размера, как бы вы их ни определяли. Я бы попробовал несколько размеров чанка, чтобы получить размер файла, который загружается примерно за минуту. Может быть, вам понадобятся сотни кусков для 20 ГБ, но, вероятно, не тысячи.

Затем я бы разбил весь файл на куски такого размера и перебрал их, записывая, как это происходит. При возникновении любой ошибки исправьте проблему и просто начните загрузку снова с последнего успешно загруженного блока, найденного в файле журнала.

Вот два соображения, которые я бы попробовал сначала, так как они просты и содержательны:

  1. cqlsh COPY была значительно улучшена в 2.1.13, 2.2.5, 3.0.3 и 3.2+. Если вы решили использовать его, убедитесь, что у вас одна из этих версий или новее.
  2. Другой вариант - использовать загрузчик cassandra от Brian Hess, который является эффективным способом массовой загрузки в и из файлов csv эффективным способом.

Я думаю, что CQLSH не обрабатывает случай сбоя приложения, так почему бы не использовать оба решения, представленные выше, разбить файл на несколько управляемых кусков и использовать команду copy cqlsh для импорта данных?

Другие вопросы по тегам