我在 Kubernetes 上創(chuàng)建了一個包含 3 個工作人員的 Spark 集群和一個附加的 JupyterHub 部署,以便我可以運行大量查詢。我的 parquet 文件存儲在 IBM Cloud Object Storage (COS) 中,當我運行一個簡單的代碼從 COS 讀取數(shù)據(jù)時,我收到以下錯誤:無法讀取頁腳: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。所以...檢查您保存的文件格式和閱讀器格式是否對齊。

慕標琳琳
TA貢獻1830條經驗 獲得超9個贊
嘗試重新啟動您的系統(tǒng)或服務器,它會在它之后工作。
我遇到了同樣的問題。它通常在您升級 Java 版本時發(fā)生,但是 spark lib 仍然指向舊的 Java 版本。重新啟動服務器/系統(tǒng)可以解決問題。

嚕嚕噠
TA貢獻1784條經驗 獲得超7個贊
發(fā)現(xiàn)我的問題的問題,集群中的所有工作人員都無法使用所需的庫。
有兩種方法可以解決這個問題:
確保在 spark-submit 命令上添加依賴項,以便將其分發(fā)到整個集群,在這種情況下,它應該在
kernel.json
位于 Jupyterhub 的文件中完成/usr/local/share/jupyter/kernels/pyspark/kernel.json
(假設您創(chuàng)建了該文件)。
或者
為集群中的每個工作人員和驅動程序添加對 SPARK_HOME 目錄的依賴
/jars
項(如果您沒有這樣做)。
我使用了第二種方法。在創(chuàng)建 docker 映像期間,我添加了庫,因此當我啟動集群時,所有容器都已經具有所需的庫。
添加回答
舉報
0/150
提交
取消