У меня проблемы с чтением файла 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).