Ответ 1
Я думаю, что это возможно, используя возможности Spark SQL для подключения и чтения данных из удаленных баз данных с помощью JDBC.
После исчерпывающих R и D я смог успешно подключиться к двум различным средам куста, используя JDBC, и загружать таблицы улья как DataFrames в Spark для дальнейшей обработки.
Сведения о средах
Hadoop-2.6.0
апач улей-2.0.0-бен
искровым 1.3.1-бен-hadoop2.6
Пример кода HiveMultiEnvironment.scala
import org.apache.spark.SparkConf
import org.apache.spark.sql.SQLContext
import org.apache.spark.SparkContext
object HiveMultiEnvironment {
def main(args: Array[String]) {
var conf = new SparkConf().setAppName("JDBC").setMaster("local")
var sc = new SparkContext(conf)
var sqlContext = new SQLContext(sc)
// load hive table (or) sub-query from Environment 1
val jdbcDF1 = sqlContext.load("jdbc", Map(
"url" -> "jdbc:hive2://<host1>:10000/<db>",
"dbtable" -> "<db.tablename or subquery>",
"driver" -> "org.apache.hive.jdbc.HiveDriver",
"user" -> "<username>",
"password" -> "<password>"))
jdbcDF1.foreach { println }
// load hive table (or) sub-query from Environment 2
val jdbcDF2 = sqlContext.load("jdbc", Map(
"url" -> "jdbc:hive2://<host2>:10000/<db>",
"dbtable" -> "<db.tablename> or <subquery>",
"driver" -> "org.apache.hive.jdbc.HiveDriver",
"user" -> "<username>",
"password" -> "<password>"))
jdbcDF2.foreach { println }
}
// todo: business logic
}
Другие параметры также могут быть установлены во время загрузки с использованием SqlContext, например, для установки partitionColumn. Подробности, найденные в разделе 'JDBC для других баз данных в справочном документе Spark: https://spark.apache.org/docs/1.3.0/sql-programming-guide.html
Построить путь из Eclipse:
Что я не пробовал
Использование HiveContext для среды 1 и SqlContext для среды 2
Надеюсь, это будет полезно.