Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 Dataproc映像版本1.4-debian9(预览)缺少AWS S3 JAR(org.apache.hadoop.fs.s3a.S3AFileSystem)_Amazon S3_Google Cloud Platform_Google Cloud Dataproc - Fatal编程技术网

Amazon s3 Dataproc映像版本1.4-debian9(预览)缺少AWS S3 JAR(org.apache.hadoop.fs.s3a.S3AFileSystem)

Amazon s3 Dataproc映像版本1.4-debian9(预览)缺少AWS S3 JAR(org.apache.hadoop.fs.s3a.S3AFileSystem),amazon-s3,google-cloud-platform,google-cloud-dataproc,Amazon S3,Google Cloud Platform,Google Cloud Dataproc,使用图像版本1.3-debian9显示JAR可用(附屏幕截图) 使用图像版本预览(1.4-debian9)给出以下错误消息(附加屏幕截图): 用于创建Dataproc群集的命令: gcloudataproc clusters create ${CLUSTER_NAME} --bucket ${BUCKET} --zone us-east1-d --master-machine-type n1-standard-4 --master-boot-disk-size 1TB --num-workers

使用图像版本1.3-debian9显示JAR可用(附屏幕截图)

使用图像版本预览(1.4-debian9)给出以下错误消息(附加屏幕截图):

用于创建Dataproc群集的命令:

gcloudataproc clusters create ${CLUSTER_NAME} --bucket ${BUCKET} --zone us-east1-d --master-machine-type n1-standard-4 --master-boot-disk-size 1TB --num-workers 3 --worker-machine-type n1-standard-4 --worker-boot-disk-size 1TB --image-version=preview --scopes 'https://www.googleapis.com/auth/cloud-platform' --project ${PROJECT} --initialization-actions gs://dataproc-initialization-actions/python/pip-install.sh,gs://dataproc-initialization-actions/connectors/connectors.sh --metadata 'gcs-connector-version=1.9.16' --metadata 'bigquery-connector-version=0.13.16' --optional-components=ANACONDA,JUPYTER
截图:

这与中描述的相同根本原因有关

特别是,在使用Spark 2.4的Dataproc 1.4中,Hadoop依赖项现在捆绑在
/usr/lib/Spark/lib
下,通常这些依赖项版本可能不同于
/usr/lib/Hadoop/lib
/usr/lib/Hadoop mapreduce/lib
下的Hadoop类版本,这里的问题是,默认情况下,一些辅助依赖项,如AWS连接器(可能还有Azure等连接器)不会自动包含在Spark提供的lib dir中

然而,这两个问题的答案都不理想。下载您自己版本的AWS jarfile可能会很麻烦,而且您可能会遇到版本不兼容问题。或者,将完整的
hadoop类路径
添加到
SPARK_DIST_类路径
中会使SPARK类路径受到hadoop依赖项的完整重复集的污染,这也可能会导致版本不兼容问题(并阻止打包SPARK自己的hadoop依赖项副本的更改)

相反,您可以将Dataproc初始化操作用于以下操作:

#!/bin/bash
# Name this something like add-aws-classpath.sh

AWS_SDK_JAR=$(ls /usr/lib/hadoop-mapreduce/aws-java-sdk-bundle-*.jar | head -n 1)

cat << EOF >> /etc/spark/conf/spark-env.sh
SPARK_DIST_CLASSPATH="\${SPARK_DIST_CLASSPATH}:/usr/lib/hadoop-mapreduce/hadoop-aws.jar"
SPARK_DIST_CLASSPATH="\${SPARK_DIST_CLASSPATH}:${AWS_SDK_JAR}"
EOF
#/bin/bash
#将其命名为add-aws-classpath.sh
AWS_SDK_JAR=$(ls/usr/lib/hadoop mapreduce/AWS java SDK bundle-*.JAR | head-n1)
cat>/etc/spark/conf/spark-env.sh
SPARK\u DIST\u CLASSPATH=“\${SPARK\u DIST\u CLASSPATH}:/usr/lib/hadoop mapreduce/hadoop aws.jar”
SPARK\u DIST\u CLASSPATH=“\${SPARK\u DIST\u CLASSPATH}:${AWS\u SDK\u JAR}”
EOF
然后在集群创建时使用它--initialization actions=gs://mybucket/add aws classpath.sh

那么它应该又能工作了

通常,您可以将
/usr/lib/hadoop mapreduce/lib
的内容与
/usr/lib/spark/lib
的内容区分开来;您应该看到像hadoop mapreduce jar这样的东西出现在Dataproc 1.4的Spark中,而不是1.3中。因此,如果您遇到任何其他丢失的jar,您可以采用相同的方法来补充
SPARK\u DIST\u CLASSPATH

Dataproc可能会决定在未来的补丁版本1.4中默认修补此问题,但是使用init操作,无论底层系统是否也添加这些类路径,都应该是无害的

#!/bin/bash
# Name this something like add-aws-classpath.sh

AWS_SDK_JAR=$(ls /usr/lib/hadoop-mapreduce/aws-java-sdk-bundle-*.jar | head -n 1)

cat << EOF >> /etc/spark/conf/spark-env.sh
SPARK_DIST_CLASSPATH="\${SPARK_DIST_CLASSPATH}:/usr/lib/hadoop-mapreduce/hadoop-aws.jar"
SPARK_DIST_CLASSPATH="\${SPARK_DIST_CLASSPATH}:${AWS_SDK_JAR}"
EOF