2016-08-26 3 views
0

В приложении Oozie Hive2, я пытаюсь загрузить таблицу hive из файлов .csv, находящихся в сжатом файле .zip. Чтобы читать файлы внутри * .zip через рабочий процесс действий Oozie Hive, действие Hive предоставляет элемент тега «архив». Просто нужно объявить файл Zip в теге элемента «архивного», как показано ниже,oozie - Использование файла архива в действии hive

<archive>${ZipfilePath}#unzipFile</archive> 

Ссылки после «#» в элементе «архив» является имя временной папки для чтения распакованных файлов. В .csv файлы внутри .zip может быть считаны со ссылкой на пути «unzipFile /.csv»

Издания является - улого действия не может найти путь, упомянутый в архиве элемента. По умолчанию Hive ищет распакованную папку «HDFS: // nameservice1/пользователь/ульи /» место и ошибки как

"Error: Error while compiling statement: FAILED: SemanticException Line  1:17 Invalid path ''unzipFile/file.csv'': No files matching path hdfs://nameservice1/user/hive/unzipFile/file.csv (state=42000,code=40000" 

Но я смог успешно протестировать «архивный» тег с помощью действия оболочки и ' кот»файл в

cat unzipFile/file.csv 
+0

О, мой. Инструкция Oozie '' работает как опция '-archives' командной строки Hadoop или команда« добавить архивы ». Он предназначен для отправки ** упакованных библиотек и/или файлов конфигурации **. Не файлы данных. –

+0

Hadoop не поддерживает ZIP для файлов данных, потому что это в первую очередь формат ** archive **, со многими файлами, упакованными в один ZIP. И это разрушает всю парадигму MapReduce. Таким образом, вы должны распаковать свои файлы перед загрузкой в ​​HDFS * (обратите внимание, что вы можете GZip отдельные файлы, расширение '.gz' распознается автоматически) * –

+0

Спасибо за ваш ответ. Просто потому, что oozie Shell action смог прочитать * .csv из архива, я был убежден, что он должен работать так же для Hive. – SaRu

ответ

0

с Oozie улей действие выполняется в кластере, а не на краю узла, все вспомогательные файлы, должен быть в пути HDFS. Это действие куста будет выполняться в любом узле, выбранном Oozie во время выполнения. Загрузите файл в путь hdfs, чтобы он был доступен с любого узла в кластере

0

Действие оболочки скопирует файл локально в контейнер, в котором выполняется скрипт. Вот почему он действительно работает.

Hive2:

LOAD DATA [LOCAL] INPATH 

После того, как файл был перемещен в контейнер, вы должны использовать LOCAL.

Смежные вопросы