2013-12-10 2 views
1

Я хочу обработать данные в hdfs, я пытаюсь создать таблицу с использованием внешнего ключевого слова, тогда я получаю следующую ошибку, можете ли вы предоставить решение для этого.Как создать таблицу с использованием внешнего ключевого слова в кусте

hive> create EXTERNAL table samplecv(id INT, name STRING) 
     row format serde 'com.bizo.hive.serde.csv.CSVSerde' 
    with serdeproperties (
     "separatorChar" = "\t", 
     "quoteChar"  = "'", 
     "escapeChar" = "\\" 
    ) 
    LOCATION '/home/siva/jobportal/sample.csv'; 

Я получаю следующее сообщение об ошибке, может у обеспечить решение этой

FAILED: Error in metadata: MetaException(message:Got exception: org.apache.hadoop.ipc.RemoteException java.io.FileNotFoundException: Parent path is not a directory: /home/siva/jobportal/sample.csv 

ответ

1

пожалуйста, вы можете подтвердить, что этот путь на HDFS?

Более подробная информация о создании внешних таблиц в улье: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ExternalTables

+0

Точно. Этот маршрут выглядит как локальный каталог, а не как каталог HDFS. Как сказал Абхиджит, подтвердите это. Если данные локальные, поместите их в HDFS с помощью «hdfs dfs -put» и укажите внешнюю таблицу в каталог. После этого «ЗАГРУЗИТЬ» файл в таблице и будет перемещен в каталог EXTERNAL. – oteCortes

0

Я использую следующий для XML разбора serde в улье ---

CREATE EXTERNAL TABLE XYZ(
X STRING, 
Y STRING, 
Z ARRAY<STRING> 
) 
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe' 
WITH SERDEPROPERTIES (
"column.xpath.X"="/XX/@X", 
"column.xpath.Y"="/YY/@Y" 
) 
STORED AS 
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' 
LOCATION '/user/XXX' 
TBLPROPERTIES (
"xmlinput.start"="<xml start", 
"xmlinput.end"="</xml end>" 
); 
0

На данный момент улей только позволяет вам установить directory в качестве места расположения при добавлении раздела. Здесь вы пытаетесь установить файл в качестве местоположения раздела. Обходной путь, который я использую, состоит в том, чтобы сначала добавить раздел с фиктивным/несуществующим каталогом (Hive не требует, чтобы каталог существовал, пока он задан как местоположение раздела), а затем используйте изменить расположение разделов таблицы, чтобы изменить раздел места в нужный файл. Удивительно, что Hive не заставляет местоположение быть каталогом при установке местоположения существующего раздела так, как он делает, добавляя новый раздел. Итак, в вашем случае это будет выглядеть так:

alter table samplecv add partition (id='11', name='somename') location '/home/siva/jobportal/somedirectory' 
alter table samplecv partition (id='11', name='somename') set location '/home/siva/jobportal/sample.csv' 
0

Улей всегда ожидает имя каталога в пути местоположения вместо имени файла.

создайте свой файл внутри каталога, например внутри /home/siva/jobportal/sample/sample.csv, а затем попробуйте выполнить команду ниже, чтобы создать таблицу улья.

create EXTERNAL table samplecv(id INT, name STRING) 
row format serde 'com.bizo.hive.serde.csv.CSVSerde' 
with serdeproperties (
"separatorChar" = "\t", 
"quoteChar"  = "'", 
"escapeChar" = "\\" 
) 
LOCATION '/home/siva/jobportal/sample'; 

В случае, если вы получаете какие-либо ошибки просто положить файл в HDFS и попробовать, он должен работать.

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