IllegalArgumentException, Неправильная ФС при записи модели ML в s3 из Spark (Scala)

Я создал модель:

val model = pipeline.fit(commentLower)

и я пытаюсь записать это на s3:

sc.hadoopConfiguration.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
sc.hadoopConfiguration.set("fs.s3.awsAccessKeyId", "MYACCESSKEY")
sc.hadoopConfiguration.set("fs.s3.awsSecretAccessKey", "MYSECRETKEY")
model.write.overwrite().save("s3n://sparkstore/model")

но я получаю эту ошибку:

Name: java.lang.IllegalArgumentException
Message: Wrong FS: s3n://sparkstore/model, expected: file:///
StackTrace: org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:645)
org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:80)
org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:529)
org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:747)
org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:524)
org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:409)
org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1400)
org.apache.spark.ml.util.MLWriter.save(ReadWrite.scala:80)

Я также попытался использовать встроенный ключ доступа:

model.write.overwrite().save("s3n://MYACCESSKEY:MYSECRETKEY@/sparkstore/model")

Как записать модель (или любой файл в этом отношении) в s3 из Spark?


person Ross Lewis    schedule 16.09.2016    source источник


Ответы (2)


У меня нет подключения к S3 для проверки. Но вот что я думаю, вы должны использовать: -

val hconf=sc.hadoopConfiguration
hconf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hconf.set("fs.s3.awsAccessKeyId", "MYACCESSKEY")
hconf.set("fs.s3.awsSecretAccessKey", "MYSECRETKEY")

Когда я делаю df.write.save("s3://sparkstore/model"), я получаю Name: org.apache.hadoop.fs.s3.S3Exception Message: org.jets3t.service.S3ServiceException: S3 HEAD request failed for '/model' - ResponseCode=403, ResponseMessage=Forbidden StackTrace: org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.handleServiceException(Jets3tNativeFileSystemStore.java:229) org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.retrieveMetadata(Jets3tNativeFileSystemStore.java:111) s

что заставляет меня поверить, что он распознал протокол s3 для s3 fs. Но это не удалось аутентификации, что очевидно.

Надеюсь, это решит вашу проблему.

Спасибо, Чарльз.

person charles gomes    schedule 16.09.2016
comment
Спасибо за отзыв! Однако у меня нет проблем с сохранением фрейма данных. Проблема связана с PipelineModels. Я добавляю ответ, который нашел в другом месте. - person Ross Lewis; 20.09.2016

Это не совсем то, что я хотел сделать, но я нашел похожую тему с похожей проблемой:

Как сохранить модели из конвейера ML в S3 или HDFS?

Вот что я в итоге сделал:

sc.parallelize(Seq(model), 1).saveAsObjectFile("swift://RossL.keystone/model")
val modelx = sc.objectFile[PipelineModel]("swift://RossL.keystone/model").first()
person Ross Lewis    schedule 19.09.2016