Невозможно использовать OrcFile.createReader для чтения из S3 - PullRequest
0 голосов
/ 10 марта 2020

У меня проблемы с чтением файла OR C из S3 с параметром OrcFile.createReader. Я сейчас использую hive-exe c -2.2.0.jar и мне интересно, поддерживается ли это вообще? Я пропускаю какие-либо настройки? Смотрите код ниже. Любая помощь приветствуется.

String accessKey = "***";
String secretKey = "***";

Configuration configuration = new Configuration();
configuration.set("fs.s3.awsAccessKeyId", accessKey);
configuration.set("fs.s3.awsSecretAccessKey", secretKey);
configuration.set("fs.defaultFS", "s3://<bucket>");

//configuration.set("fs.default.name", "s3://<bucket>");
//configuration.set("fs.s3.impl", "org.apache.hadoop.fs.s3.S3FileSystem");
FileSystem fs = FileSystem.get(configuration);

Reader reader = OrcFile.createReader(new Path("/some/path/file.orc"), OrcFile.readerOptions(configuration).filesystem(fs));

Исключение - java .io.IOException: такого файла нет.

Кажется, что для ReaderImpl требуется либо fileMetadata, либо OrcTail (оба из которых нулевые). Что-нибудь, чего мне не хватает?

Обновление: мне удалось вытащить исключение из файла не найден, создав объект s3 с дополнительной информацией (также исправить ключ) с помощью --metadata = "fs = Had * * тысяча двадцать-один, FS-тип = блок, FS-версия = 1" . См. --Metadata.

Кажется неправильным / странным, что тип файла или c на s3 должен иметь эти значения для успешного извлечения метаданных.

Конечно после это препятствует получению данных, возможно потому, что форматы файлов различаются (?).

в INode пакета org. apache .had oop .fs.s3;

public static INode deserialize(InputStream in) throws IOException {
        if (in == null) {
            return null;
        } else {
            DataInputStream dataIn = new DataInputStream(in);
            INode.FileType fileType = FILE_TYPES[dataIn.readByte()];

dataIn.readByte возвращает большее значение (FILE_TYPES - массив размера 2).

...