通过 AWS Glue Crawler 识别并存储在数据目录中的表的异常

Posted

技术标签:

【中文标题】通过 AWS Glue Crawler 识别并存储在数据目录中的表的异常【英文标题】:Exception with Table identified via AWS Glue Crawler and stored in Data Catalog 【发布时间】:2018-01-26 16:16:09 【问题描述】:

我正在努力构建公司的新数据湖,并试图找到在这里工作的最佳和最新选择。 所以,我找到了一个很好的解决方案来使用 EMR + S3 + Athena + Glue。

我做的过程是:

1 - 运行 Apache Spark 脚本以在 Orc 存储的 S3 中生成按日期划分的 3000 万行。

2 - 运行 Athena 查询以创建外部表。

3 - 检查了 EMR 中与 Glue 数据目录连接的表格,它运行良好。 Spark 和 Hive 都可以访问。

4 - 在按日期分区的其他文件夹中生成另外 3000 万行。兽人格式

5 - 运行识别新表的 Glue Crawler。添加到数据目录中,Athena 能够进行查询。但 Spark 和 Hive 无法做到这一点。请参阅下面的异常:

火花 Caused by: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.hive.ql.io.orc.OrcStruct

蜂巢 Error: java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: Error evaluating audit_id (state=,code=0)

我正在检查是否有任何序列化问题,我发现了这个:

手动创建表(配置):

输入格式 org.apache.hadoop.hive.ql.io.orc.OrcInputFormat

输出格式 org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat

Serde 序列化库 org.apache.hadoop.hive.ql.io.orc.OrcSerde

orc.compress SNAPPY

使用 Glue Crawler 创建的表格:

输入格式 org.apache.hadoop.mapred.TextInputFormat

输出格式 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

Serde 序列化库 org.apache.hadoop.hive.ql.io.orc.OrcSerde

因此,这无法从 Hive 或 Spark 中读取。它适用于雅典娜。我已经更改了配置,但在 Hive 或 Spark 上没有任何效果。

有人遇到过这个问题吗?

【问题讨论】:

你的胶水爬虫表的 TBLPROPERTIES 下是否有 'classification'='orc'? 是的,它是用兽人分类创建的。 【参考方案1】:

嗯,

几周后,我发布了这个问题,AWS 解决了这个问题。正如我上面所展示的,问题是真实存在的,这是 Glue 的一个错误。

由于是新产品,有时还是会出现一些问题。

但这已得到妥善解决。现在查看表格的属性:

ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'

【讨论】:

以上是关于通过 AWS Glue Crawler 识别并存储在数据目录中的表的异常的主要内容,如果未能解决你的问题,请参考以下文章

将文件上传到 S3 存储桶后,AWS Glue Crawler 的基于事件的触发器?

如何使用 AWS Glue Crawler 读取 PostgreSQL 表分区?

AWS Athena 从 S3 的 GLUE Crawler 输入 csv 创建的表中返回零记录

AWS Glue Crawler无法提取CSV标头

AWS Glue Crawler 将 json 文件分类为 UNKNOWN

使用CloudFormation上的JdbcTargets指定Glue :: Crawler