为了账号安全,请及时绑定邮箱和手机立即绑定

java.io.IOException:尝试从 IBM Cloud Object Storag

java.io.IOException:尝试从 IBM Cloud Object Storag

冉冉说 2022-06-23 20:19:53
我在 Kubernetes 上创建了一个包含 3 个工作人员的 Spark 集群和一个附加的 JupyterHub 部署,以便我可以运行大量查询。我的 parquet 文件存储在 IBM Cloud Object Storage (COS) 中,当我运行一个简单的代码从 COS 读取数据时,我收到以下错误:无法读取页脚:java.io.IOException:无法读取文件 FileStatus{path=file:/path/myfile.parquet/_common_metadata; 的页脚;是目录=假;长度=413;复制=0;块大小=0;修改时间=0;访问时间=0;所有者=; 组=; 权限=rw-rw-rw-; isSymlink=false} 在 parquet.hadoop.ParquetFileReader.readAllFootersInParallel我已将所有必需的库添加到/jars驱动程序中 SPARK_HOME 目录的目录中。这是我用来连接的代码:# Initial Setup - Onceimport osfrom pyspark import SparkConf, SparkContextfrom pyspark.sql import SparkSessionspark_session = SparkSession(sc)credentials_staging_parquet = {  'bucket_dm':'mybucket1',  'bucket_eid':'bucket2',  'secret_key':'XXXXXXXX',  'iam_url':'https://iam.ng.bluemix.net/oidc/token',  'api_key':'XXXXXXXX',  'resource_instance_id':'crn:v1:bluemix:public:cloud-object-storage:global:a/XXXXX:XXXXX::',  'access_key':'XXXXX',  'url':'https://s3-api.us-geo.objectstorage.softlayer.net'}conf = {    'fs.cos.service.access.key': credentials_staging_parquet.get('access_key'),    'fs.cos.service.endpoint': credentials_staging_parquet.get('url'),    'fs.cos.service.secret.key': credentials_staging_parquet.get('secret_key'),    'fs.cos.service.iam.endpoint': credentials_staging_parquet.get('iam_url'),    'fs.cos.service.iam.service.id': credentials_staging_parquet.get('resource_instance_id'),    'fs.stocator.scheme.list': 'cos',    'fs.cos.impl': 'com.ibm.stocator.fs.ObjectStoreFileSystem',    'fs.stocator.cos.impl': 'com.ibm.stocator.fs.cos.COSAPIClient',    'fs.stocator.cos.scheme': 'cos',    'fs.cos.client.execution.timeout': '18000000',    'fs.stocator.glob.bracket.support': 'true'}hadoop_conf = sc._jsc.hadoopConfiguration()for key in conf:    hadoop_conf.set(key, conf.get(key))parquet_path = 'store/MY_FILE/*'cos_url = 'cos://{bucket}.service/{parquet_path}'.format(bucket=credentials_staging_parquet.get('bucket_eid'), parquet_path=parquet_path)df2 = spark_session.read.parquet(cos_url)
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

我收到了类似的错误,并在 Google 上找到了这篇文章。接下来,我意识到我有一个文件格式问题,其中保存的文件是 Avro,文件阅读器是 Orc。所以...检查您保存的文件格式和阅读器格式是否对齐。



查看完整回答
反对 回复 2022-06-23
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

尝试重新启动您的系统或服务器,它会在它之后工作。

我遇到了同样的问题。它通常在您升级 Java 版本时发生,但是 spark lib 仍然指向旧的 Java 版本。重新启动服务器/系统可以解决问题。


查看完整回答
反对 回复 2022-06-23
?
噜噜哒

TA贡献1784条经验 获得超7个赞

发现我的问题的问题,集群中的所有工作人员都无法使用所需的库。

有两种方法可以解决这个问题:

  • 确保在 spark-submit 命令上添加依赖项,以便将其分发到整个集群,在这种情况下,它应该在kernel.json位于 Jupyterhub 的文件中完成/usr/local/share/jupyter/kernels/pyspark/kernel.json(假设您创建了该文件)。

或者

  • 为集群中的每个工作人员和驱动程序添加对 SPARK_HOME 目录的依赖/jars项(如果您没有这样做)。

我使用了第二种方法。在创建 docker 映像期间,我添加了库,因此当我启动集群时,所有容器都已经具有所需的库。


查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号