Pyspark java.lang.NoClassDefFoundError:com/aliyun/oss/ServiceException

Pyspark java.lang.NoClassDefFoundError:com/aliyun/oss/ServiceException,pyspark,open-source,alibaba-cloud,Pyspark,Open Source,Alibaba Cloud,带有Aliyun预构建SDK的Pypark似乎不起作用 环境: 虚拟机上的Apache Spark 2.2.0 在同一用户帐户下创建的OSS 东京地区(ap-东北-1) 这是我的代码片段 命令: /opt/spark/bin/pyspark --master="mesos://${MASTER}" --executor-memory 12g --jars /home/admin/aliyun-emapreduce-sdk/prebuild/emr-core-1.1.3-SNAPSHOT.ja

带有Aliyun预构建SDK的Pypark似乎不起作用

环境:

  • 虚拟机上的Apache Spark 2.2.0
  • 在同一用户帐户下创建的OSS
  • 东京地区(ap-东北-1)
这是我的代码片段

命令:

/opt/spark/bin/pyspark --master="mesos://${MASTER}" --executor-memory 12g --jars /home/admin/aliyun-emapreduce-sdk/prebuild/emr-core-1.1.3-SNAPSHOT.jar,/home/admin/aliyun-emapreduce-sdk/prebuild/emr-sdk_2.10-1.1.3-SNAPSHOT.jar --conf "spark.hadoop.fs.oss.impl"="com.aliyun.fs.oss.nat.NativeOssFileSystem"
Pypark代码:

from pyspark import SparkConf
conf = SparkConf()
conf.set("spark.hadoop.fs.oss.impl", "com.aliyun.fs.oss.nat.NativeOssFileSystem")
conf.set("spark.executor.memory", "12g")
conf.set("spark.python.worker.memory", "8g")
from pyspark.sql import SparkSession
spark = SparkSession.builder.config(conf=conf).getOrCreate()

# read from local hdfs
df = spark.read.parquet("hdfs://10.1.185.28:9000/User/admin/nyc/yellow.parquet")
# [failed] write to Aliyun OSS
outPathBase = "oss://MyOSSID:MySecretKey@oss-ap-northeast-1-internal.aliyuncs.com/test"
df.write.parquet(outPathBase+"/yellow.parquet")
这里是这样的错误

Py4JJavaError: An error occurred while calling o74.parquet.
: java.lang.NoClassDefFoundError: com/aliyun/oss/ServiceException
    at com.aliyun.fs.oss.nat.JetOssNativeFileSystemStore.initialize(JetOssNativeFileSystemStore.java:107)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at 
(snip)
Caused by: java.lang.ClassNotFoundException: com.aliyun.oss.ServiceException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

有什么建议吗?

哪个地区?哪种服务(E-mapReduce或MaxCompute)?您是从哪里获得“的语法的?”oss://MyOSSID:MySecretKey@oss-ap-northeast-1-internal.aliyuncs.com/test“?我假设这个问题是E-MapReduce。您是否为E-MapReduce创建了应用程序角色?有一个预定义的角色“AliyunEmrEcsDefaultRole”,它将为EMR提供对OSS的写入权限。在我前面的问题中,您指定的OSS行用于HDFS工具。您将使用常规语法,例如“oss://mybucket/path/file“以及RAM应用程序角色。查看E-MapReduce元服务。谢谢你的回复。我已经在VM中部署了原始Spark。日本(ap-东北-1)地区。我的语法来自。和。好的,我看到了您使用的语法。我总是使用RAM角色,从不将访问密钥放入源代码中。查看您正在使用的端点。您正在使用Intranet端点在同一区域内进行数据传输。我认为您需要使用Internet端点,除非E-MapReduce实例和OSS bucket都在同一地区,但即使它们在同一地区,也要尝试更改。您的访问密钥是否具有OSS写入权限?而且SDK似乎没有包含OSS异常的类:com.aliyun.OSS.ServiceException