Sqoop Snappy сжатия не работает
У меня есть следующий скрипт sqoop, который должен получить данные в паркет и использовать сжатие Snappy.
sqoop import \
--hive-drop-import-delims \
--fields-terminated-by '\001' \
--connect '<Connection URL>' \
--query 'select * from <db_name>.<table_name> where $CONDITIONS' \
--username <username> \
--password <password> \
--split-by '<split-by-key>' \
-m=4 \
--input-null-string '' \
--input-null-non-string '' \
--inline-lob-limit 0 \
--target-dir <hdfs/location/where/files/should/land> \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \
--as-parquetfile \
--map-column-java NOTES_DETAIL=String,NOTES=String \
Когда сценарий успешно завершен, я захожу в папку hdfs ['hdfs/location/where/files/should/land'] и вижу, что ни snappy сжатие не применено, ни файл _SUCCUSS не отображаются. Почему это происходит?
Это то, что я вижу, когда я перечисляю файлы в этой папке
21cbd1a6-d58b-4fdc-b332-7433e582ce0b.parquet
3956b0ff-58fd-4a87-b383-4fecc337a72a.parquet
3b42a1a9-4aa7-4668-bdd8-41624dec5ac6.parquet
Как вы можете видеть ни.snappy в имени файла, ни _SUCCESS файла.
1 ответ
Вы не увидите при расширении файла Parquet, какое сжатие использовалось. В файлах Parquet данные внутренне сжимаются кусками. При выборе кодека вы указываете, какой кодек следует использовать для каждого блока во всем файле. Тем не менее, спецификация Parquet позволяет вам изменять кодек сжатия в каждом блоке данных, таким образом, вы можете смешивать кодеки сжатия внутри файла Parquet. Некоторые инструменты производят .snappy.parquet
файлы, чтобы указать выбранный уровень сжатия, но это только декоративно, поскольку информация о сжатии хранится в метаданных файла.
Чтобы проверить, был ли ваш файл Parquet сжат snappy, проверьте файлы, используя parquet-tools
,
Включите сжатие, используя параметр ниже:
-z - сжать
Ссылка: https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html