Лучший способ скопировать 20Gb CSV-файл на Кассандру
У меня есть огромный CSV-файл 20 ГБ для копирования в Cassandra, конечно, мне нужно справиться с ошибками (если сервер или приложение Transfer/Load аварийно завершает работу).
Мне нужно перезапустить обработку (или другой узел или нет) и продолжить передачу без запуска файла CSV с его начала.
Какой самый лучший и простой способ сделать это?
с помощью команды Copy CQLSH? используя flume или sqoop? или используя нативное Java-приложение, используя spark...?
большое спасибо
3 ответа
Если бы это был я, я бы разбил файл.
Я бы выбрал предпочтительный способ загрузки любых данных CSV, игнорируя проблемы огромного размера файла и обработки ошибок. Например, я бы использовал скрипт на python и собственный драйвер и протестировал его с помощью нескольких строк csv, чтобы убедиться, что он может быть вставлен из крошечного файла csv с реальными данными.
Затем я написал бы сценарий, чтобы разбить файл на части управляемого размера, как бы вы их ни определяли. Я бы попробовал несколько размеров чанка, чтобы получить размер файла, который загружается примерно за минуту. Может быть, вам понадобятся сотни кусков для 20 ГБ, но, вероятно, не тысячи.
Затем я бы разбил весь файл на куски такого размера и перебрал их, записывая, как это происходит. При возникновении любой ошибки исправьте проблему и просто начните загрузку снова с последнего успешно загруженного блока, найденного в файле журнала.
Вот два соображения, которые я бы попробовал сначала, так как они просты и содержательны:
- cqlsh COPY была значительно улучшена в 2.1.13, 2.2.5, 3.0.3 и 3.2+. Если вы решили использовать его, убедитесь, что у вас одна из этих версий или новее.
- Другой вариант - использовать загрузчик cassandra от Brian Hess, который является эффективным способом массовой загрузки в и из файлов csv эффективным способом.
Я думаю, что CQLSH не обрабатывает случай сбоя приложения, так почему бы не использовать оба решения, представленные выше, разбить файл на несколько управляемых кусков и использовать команду copy cqlsh для импорта данных?