Table 通过 AWS Glue Crawler 识别并存储在 Data Catalog 中的异常

Exception with Table identified via AWS Glue Crawler and stored in Data Catalog

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

我做的过程是:

1 - 运行 Apache Spark 脚本生成 3000 万行,按 Orc 存储的 S3 上的日期分区。

2 - 运行 创建外部 table.

的 Athena 查询

3 - 检查了与 Glue Data Catalog 连接的 EMR 的 table,它运行良好。 Spark 和 Hive 都能访问。

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

5 - 运行 识别新 table 的 Glue Crawler。添加到 Data Catalog 并且 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)

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

Table 手动创建(配置):

输入格式 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

Table 使用 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 没有影响。

有人遇到过这个问题吗?

嗯,

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

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

不过这个问题已经妥善解决了。现在查看 table 的属性:

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'