Какая конфигурация необходима для получения данных из хранилища объектов SWIFT в Spark

Я просматриваю документ, но все же очень сложно понять, как получить данные из swift.

Я настроил swift в моей машине с одним linux. Используя приведенную ниже команду, я могу получить список контейнеров,

swift -A https://acc.objectstorage.softlayer.net/auth/v1.0/ -U username -K список паролей

Я видел много блогов для blumix ( https://console.ng.bluemix.net/docs/services/AnalyticsforApacheSpark/index-gentopic1.html) и написал следующий код

sc.textFile("swift://container.myacct/file.xml")

Я ищу, чтобы интегрировать в Java искру. Где нужно настроить учетные данные хранилища объектов в коде Java. Есть ли пример кода или блог?

1 ответ

Этот блокнот иллюстрирует несколько способов загрузки данных с использованием языка Scala. Scala работает на JVM. Классы Java и Scala можно смешивать независимо от того, находятся ли они в разных проектах или в одном и том же. Изучение механизма взаимодействия кода Scala с хранилищем объектов Openstack Swift поможет вам составить Java-эквивалент.

В приведенном выше блокноте приведены некоторые шаги, иллюстрирующие настройку и извлечение данных из экземпляра Openstack Swift Object Storage с использованием библиотеки Stocator с использованием языка Scala. Быстрый URL разлагается на:

swift2d :// container . myacct / filename.extension
  ^            ^          ^            ^
stocator     name of   namespace    object storage
protocol     container               filename

импорт

import org.apache.spark.SparkContext
import scala.util.control.NonFatal
import play.api.libs.json.Json

val sqlctx = new SQLContext(sc)
val scplain = sqlctx.sparkContext

Образцы кредитов

// @hidden_cell
var credentials = scala.collection.mutable.HashMap[String, String](
  "auth_url"->"https://identity.open.softlayer.com",
  "project"->"object_storage_3xxxxxx3_xxxx_xxxx_xxxx_xxxxxxxxxxxx",
  "project_id"->"6xxxxxxxxxx04fxxxxxxxxxx6xxxxxx7",
  "region"->"dallas",
  "user_id"->"cxxxxxxxxxxaxxxxxxxxxx1xxxxxxxxx",
  "domain_id"->"cxxxxxxxxxxaxxyyyyyyxx1xxxxxxxxx",
  "domain_name"->"853255",
  "username"->"Admin_cxxxxxxxxxxaxxxxxxxxxx1xxxxxxxxx",
  "password"->"""&M7372!FAKE""",
  "container"->"notebooks",
  "tenantId"->"undefined",
  "filename"->"file.xml"
)

Вспомогательный метод

def setRemoteObjectStorageConfig(name:String, sc: SparkContext, dsConfiguration:String) : Boolean = {
    try {
        val result = scala.util.parsing.json.JSON.parseFull(dsConfiguration)
        result match {
            case Some(e:Map[String,String]) => {
                val prefix = "fs.swift2d.service." + name
                val hconf = sc.hadoopConfiguration
                hconf.set("fs.swift2d.impl","com.ibm.stocator.fs.ObjectStoreFileSystem")
                hconf.set(prefix + ".auth.url", e("auth_url") + "/v3/auth/tokens")
                hconf.set(prefix + ".tenant", e("project_id"))
                hconf.set(prefix + ".username", e("user_id"))
                hconf.set(prefix + ".password", e("password"))
                hconf.set(prefix + "auth.method", "keystoneV3")
                hconf.set(prefix + ".region", e("region"))
                hconf.setBoolean(prefix + ".public", true)
                println("Successfully modified sparkcontext object with remote Object Storage Credentials using datasource name " + name)
                println("")
                return true
            }
            case None => println("Failed.")
                return false
        }
    }
    catch {
       case NonFatal(exc) => println(exc)
           return false
    }
}

Загрузить данные

val setObjStor = setRemoteObjectStorageConfig("sparksql", scplain, Json.toJson(credentials.toMap).toString)
val data_rdd = scplain.textFile("swift2d://notebooks.sparksql/" + credentials("filename"))
data_rdd.take(5)
Другие вопросы по тегам