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

Thi*_*dim 15 amazon-s3 amazon-web-services amazon-emr apache-spark aws-glue

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

我做的过程是:

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

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

3 - 检查与胶水数据目录相关的EMR表,它运行良好.Spark和Hive都可以​​访问.

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

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序列化lib 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序列化lib org.apache.hadoop.hive.ql.io.orc.OrcSerde

因此,这不适用于从Hive或Spark读取.它适用于雅典娜.我已经更改了配置,但对Hive或Spark没有任何影响.

有人遇到过这个问题?

Thi*_*dim 4

出色地,

几周后,我发布了这个问题,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'
Run Code Online (Sandbox Code Playgroud)