我正在努力建立公司的新数据湖,并试图找到在这里工作的最佳和最新选择。所以,我找到了一个很好的解决方案来使用 EMR + S3 + Athena + Glue。
我做的过程是:
1 - 运行 Apache Spark 脚本以在 Orc 存储的 S3 中生成按日期划分的 3000 万行。
2 - 运行 Athena 查询以创建外部表。
3 - 检查与 Glue 数据目录连接的 EMR 表,它运行良好。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 上没有效果。
有人遇到过这个问题吗?