当我尝试使用spark应用程序在表上进行并发读/写操作时,出现以下错误:
19/10/28 15:26:49 WARN TaskSetManager: Lost task 213.0 in stage 6.0 (TID 407, prod.internal, executor 3): java.io.FileNotFoundException: Item not found: 'gs://bucket/db_name/table_name/p1=xxx/part-1009-54ad3fbb-5eed-43ba-a7da-fb875382897c.c000'. If you enabled STRICT generation consistency, it is possible that the live version is still available but the intended generation is deleted.
at com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageExceptions.getFileNotFoundException(GoogleCloudStorageExceptions.java:38)
at com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl.open(GoogleCloudStorageImpl.java:631)
我正在使用Google Cloud Dataproc 1.4版和库存的hadoop组件版本。
我以前是在PARQUET表的同一分区上进行读写,但是它曾经引发刷新表错误。现在,我使用的是ORC
格式表,但是错误仍然存在。使用Spark应用程序对蜂巢表进行并发读写的任何解决方案?
答案 0 :(得分:1)
第一个错误行指示在存储桶中找不到您的文件,您可能需要调查一下。确保检查文件夹是否存在,并确保文件和请求的版本可访问。
对于“ STRICT生成一致性”,这很可能与云存储有关并由连接器产生,更确切地说与“严格一致性操作”有关。 https://cloud.google.com/storage/docs/consistency
您是否查看了错误日志以了解为什么会发生此错误?您在哪种类型的环境上运行应用程序?
这可能是与您要实现的并发机制有关的Hive问题。 https://cwiki.apache.org/confluence/display/Hive/Locking
此外,我建议您进一步研究在Cloud Dataproc上使用Apache Hive的建议和功能。如果需要从位于多个位置的Hive服务器访问Hive数据,也可以考虑使用多区域存储桶。 https://cloud.google.com/solutions/using-apache-hive-on-cloud-dataproc
答案 1 :(得分:0)
您可以尝试运行;
spark.sql("refresh table your_table")
在您的读/写操作之前声明它可以“偶尔”工作。