我可以使用以下语法在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在哪里写信,认为它没有权限?
答案 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