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'
我正在努力构建公司的新数据湖,并试图找到最好和最新的选择来在这里工作。 因此,我找到了一个非常好的解决方案来使用 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'