2017-06-29 13 views
0

sparkプログラムからハイブテーブルをロードしようとしています。 これまで、sparkシェルを使用してデータをHiveテーブルにロードしました。それを学んだ後、私はあなたが下で見ることができる日食の火花プログラムを書いた。Spark-Hiveプログラムでデータベースの詳細を追加する方法

import org.apache.spark.sql.SparkSession 
import org.apache.spark.sql.SaveMode 

object SuperSpark { 
    case class partclass(id:Int, name:String, salary:Int, dept:String, location:String) 
    def main(argds: Array[String]) { 
    val warehouseLocation = "file:${system:user.dir}/spark-warehouse" 
    val sparkSession = SparkSession.builder.master("local[2]").appName("Saving data into HiveTable using Spark") 
         .enableHiveSupport() 
         .config("hive.exec.dynamic.partition", "true") 
         .config("hive.exec.dynamic.partition.mode", "nonstrict") 
         .config("hive.metastore.warehouse.dir", "/user/hive/warehouse") 
         .config("spark.sql.warehouse.dir", warehouseLocation) 
         .getOrCreate() 
    import sparkSession.implicits._ 

    val partfile = sparkSession.read.textFile("partfile") 
    val partdata = partfile.map(p => p.split(",")) 
    val partRDD = partdata.map(line => partclass(line(0).toInt, line(1), line(2).toInt, line(3), line(4))) 
    val partDF = partRDD.toDF() 
    partDF.write.mode(SaveMode.Append).insertInto("parttab") 
    } 
} 

私は混乱していた時点では、私がローカルホスト/ IPアドレス、ポート番号、データベース名のように、プログラム内でのデータベースの詳細を追加する必要があり

  1. です。
  2. 私はSparkバージョン2.1.1を使用しています。これは '/ usr/local/spark'のリリースノート(Harkop 2.6.4用に構築されたSpark 2.1.1)のリリースノートです。 HiveContextオブジェクトを使用してHiveテーブルと対話する必要がありますか?

これらは私のpom.xmlでの依存関係は、次のとおりです。

<dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-core_2.11</artifactId> 
    <version>2.1.1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-sql_2.11</artifactId> 
    <version>2.1.1</version> 
    <scope>provided</scope> 
</dependency> 

は、誰もが私をさらに進めることができる方法を教えてもらえますか?

+3

あなたのコードは、Spark 1.6と互換性がありませんし、すべてのポンポンの依存は、Sparkを指します2.1.1。 1.6では 'SparkSession'を持っていないので、このコードはSpark 1.6で動かないでしょう。あなたの質問の2番目の部分に答えると、はい、あなたは 'HiveContext'を使う必要があります。詳細については、[この質問では](https://stackoverflow.com/questions/30664008/how-to-save-dataframe-directly-to-hive) – philantrovert

+0

@philantrovert質問のバージョンの詳細を更新しました。 「/ usr/local/spark」フォルダ内のリリースノートファイルからその情報を入手しました 私のコードは私が言及したバージョンと互換性がありますか?その場合、プログラムでは何が必要ですか? – Sidhartha

+0

Spark 2.1を使用している場合は、コードは問題ありません。私の前のコメントに記載されたリンクに従ってください。テーブルをハイブに保存する方法の詳細を見つけることができます。 – philantrovert

答えて

0

私はあなたがメタストアのurisを提供する必要があると思います。あなたは(あなたが標準のMavenの構造を以下している場合、それはリソースフォルダに配置することができます)あなたのスパークアプリケーションを実行し、そこからリソースクラスパス上の

  • 使用ハイブ-site.xmlの:2つのオプションがあります。

    <configuration> 
    <property> 
        <name>hive.metastore.uris</name> 
        <value>thrift://192.168.1.134:9083</value> 
    </property> 
    <property> 
        <name>hive.metastore.warehouse.dir</name> 
        <value>/user/hive/warehouse</value> 
    </property> 
    
    あなたの火花コードで

  • 、このようなプロパティを使用してSparkSessionオブジェクトを設定します。

    の.config( "hive.metastore.uris"、 "倹約://192.168.1.134:9083")

関連する問題