Hadoop 无法从给定路径读取架构:hdfs://...avsc
我尝试通过以下步骤创建配置单元表:Hadoop 无法从给定路径读取架构:hdfs://...avsc,hadoop,hive,hdfs,sqoop,Hadoop,Hive,Hdfs,Sqoop,我尝试通过以下步骤创建配置单元表: 使用sqoop将数据加载到hdfs(完成) sqoop还创建了一个avsc文件,我将其上传到hdfs 在配置单元中,我希望使用以下语句创建一个表: 命令: CREATE EXTERNAL TABLE kontoauszug ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.av
CREATE EXTERNAL TABLE kontoauszug
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 'hdfs:///user/tki/KONTOAUSZUG'
TBLPROPERTIES ('avro.schema.url'='hdfs://m1.hdp2/user/tki/KONTOAUSZUG.avsc');
我收到以下错误:
FAILED: Execution Error, return code 1 from
org.apache.hadoop.hive.ql.exec.DDLTask.
java.lang.RuntimeException: MetaException(message:org.apache.hadoop.hive.serde2.SerDeException
Encountered AvroSerdeException determining schema.
Returning signal schema to indicate problem: Unable to read schema from given path: hdfs://m1.hdp2/user/tki/KONTOAUSZUG.avsc)
这是否意味着找不到KONTOAUSZUG.avsc?我反复检查过它是否可用
它的内容是:
[hadoop@m1 hive]$ cat KONTOAUSZUG.avsc
{
"type" : "record",
"name" : "KONTOAUSZUG",
"doc" : "Sqoop import of KONTOAUSZUG",
"fields" : [ {
"name" : "FK_PROCESS_ID_INS",
"type" : [ "null", "string" ],
"default" : null,
"columnName" : "FK_PROCESS_ID_INS",
"sqlType" : "2"
}, {
"name" : "FK_SOURCE_ID",
"type" : [ "null", "string" ],
"default" : null,
"columnName" : "FK_SOURCE_ID",
"sqlType" : "2"
}, {
"name" : "SRC_STM_ID",
"type" : [ "null", "string" ],
"default" : null,
"columnName" : "SRC_STM_ID",
"sqlType" : "2"
}, {
"name" : "FK_PROCESS_ID_UPD",
"type" : [ "null", "string" ],
"default" : null,
"columnName" : "FK_PROCESS_ID_UPD",
"sqlType" : "2"
}, {
"name" : "BUCHUNGSDATUM",
"type" : [ "null", "long" ],
"default" : null,
"columnName" : "BUCHUNGSDATUM",
"sqlType" : "93"
}, {
"name" : "BUCHUNGSTEXT",
"type" : [ "null", "string" ],
"default" : null,
"columnName" : "BUCHUNGSTEXT",
"sqlType" : "12"
}, {
"name" : "SOLL",
"type" : [ "null", "string" ],
"default" : null,
"columnName" : "SOLL",
"sqlType" : "2"
}, {
"name" : "HABEN",
"type" : [ "null", "string" ],
"default" : null,
"columnName" : "HABEN",
"sqlType" : "2"
}, {
"name" : "FK_KONTO_ID",
"type" : [ "null", "string" ],
"default" : null,
"columnName" : "FK_KONTO_ID",
"sqlType" : "2"
}, {
"name" : "EINGABE_MANUELL_F",
"type" : [ "null", "string" ],
"default" : null,
"columnName" : "EINGABE_MANUELL_F",
"sqlType" : "2"
} ],
"tableName" : "KONTOAUSZUG"
}
在
CREATE
table语句中,您使用了三个斜杠:hdfs://而不是hdfs://:
(……)'hdfs:///user/tki/KONTOAUSZUG“TBLProperty(…)
此外,如果您是从namenode服务器获取模式,我认为应该在主机url之后编写端口
'avro.schema.url'='hdfs://m1.hdp2:端口/user/tki/KONTOAUSZUG.avsc'
查看详细信息。而且,这是一个访问错误。请检查avsc目录以获得正确的权限,然后重试
hdfs://m1.hdp2/user/tki/KONTOAUSZUG.avsc您的
CREATE
语句在我看来很好-您确定能够列出.avsc
文件吗hadoop fs-ls/user/tki/KONTOAUSZUG.avsc
减少斜杠或指定端口都不能解决问题。我必须补充一点,我确实在另一个(预配置的cloudera)VM上成功运行了相同的语句。还有其他想法吗?尝试使用avro.schema.literal
而不是url
-例如-这对错误没有意义,但您可能会注意到一些不同的行为:创建存储为avro位置的外部表kontoauszug'hdfs:///user/tki/KONTOAUSZUG“TBLProperty”('avro.schema.url'='hdfs://m1.hdp2/user/tki/KONTOAUSZUG.avsc);