これは、JDBCを使用してリモートデータベースからデータを接続して読み取るSpark SQL機能を使用することで可能と考えています。
徹底的にR & Dを実行した後、JDBCを使用して2つの異なるハイブ環境に接続し、ハイブテーブルを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
}
他のパラメータは、load中にpartitionColumnの設定などのSqlContextを使用して設定することもできます。スパーク参照ドキュメントの 'JDBCに他のデータベース'セクション下に詳細: https://spark.apache.org/docs/1.3.0/sql-programming-guide.html
のEclipseからビルド・パス:
私は
使用を試していない何
環境1のHiveContextと環境2のSqlContextの一覧
これが役に立つと願っています。
回避策のちょっとしたアイデア:とにかくHiveデータがHDFSに常駐している場合は、ファイルまたはディレクトリにDataFrameを作成できますか?つまり、sc.wholeTextFiles( 'hdfs:// host/usr/hive/warehouse/mytable') 'はHiveテーブルの内容を表示します。確かに、メタデータの快適性は失われますが、うまくいく可能性があります。 – mehmetminanc
私は自分自身に同じ質問をして、たくさん検索し、スパークのコードを読んでいます - これまでは、少なくとも同じSparkContextでは不可能であるとほとんど確信しています:( –
@ karthik-manchala私はセットアップを試みましたSpark-Hiveを実行してHortonWorks Sandboxを走らせましたが、いくつかのエラーが出ていますが、これで私を助けてくれますか? –