Какая конфигурация необходима для получения данных из хранилища объектов 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)