无法从avro文件创建Hive表

时间:2014-10-08 18:29:09

标签: hive create-table avro

我可以使用以下语法在avro文件上创建一个表而没有任何错误。这是一个在冷杉的空桌子。

CREATE EXTERNAL TABLE  tableName 
PARTITIONED BY (ingestiondatetime BIGINT, recordtype STRING)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serd2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
TABLEPROPERTIES ('avro.schema.url'='hdfs:///user/file.avsc');

当我添加LOCATION行以指向实际的avro文件位置时,我收到权限错误

CREATE EXTERNAL TABLE  tableName 
PARTITIONED BY (ingestiondatetime BIGINT, recordtype STRING)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serd2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION '/local/avro_dir/'
TABLEPROPERTIES ('avro.schema.url'='hdfs:///user/file.avsc');

错误是

> FAILED:  Error in metadata.....  
> org.apache.hadoop.security.AccessControlException: Permission denied: 
> user=hive, access=WRITE, inode="/" hdfs:supergroup:drwxr-xr-x

我和我一起经营蜂巢。我对hdfs:/的权限是敞开的(777)。 hive在哪里写信,认为它没有权限?

3 个答案:

答案 0 :(得分:2)

它试图以hive用户身份执行此操作。

这是错误&它试图告诉你什么

权限被拒绝:user = hive,access = WRITE,inode =“/”hdfs:supergroup:drwxr-xr-x

例外告诉你: 它是谁: user = hive 用户尝试做什么: access = WRITE 正在访问的是什么: inode =“/” 该位置的权限:   的 HDFS:超组的。drwxr-XR-X

  

运行hadoop fs -ls -la /

您描述的权限(777)未反映在错误消息中。错误消息中的权限表明每个人都已阅读&执行,但不写。

正如Amar所​​说,看到完整的命令会有所帮助!

如果这是我,那将是因为我在该位置有一个拼写错误,而hive正在尝试创建该目录。

如果你跑 hadoop fs -ls [your LOCATION property ] ..位置是否存在?

祝你好运!

Brian

答案 1 :(得分:0)

TABLEPROPERTIES应该是TBLPROPERTIES

对于那些使用API​​的人来说,&#34 ;;"是不允许的,至少我的Spark和Hive版本,但你知道这种变化有多快。

答案 2 :(得分:0)

您当前的用户是hive,它没有inode =" /"

的写入权限

从命令提示符启动配置单元之前 尝试通过编写

将当前用户更改为hdfs

导出HADOOP_USER_NAME = hdfs