web-dev-qa-db-ja.com

SparkSQLでプログラムでHiveメタストアに接続する方法は?

SparkSQLでHiveContextを使用し、リモートHiveメタストアに接続しようとしています。Hiveメタストアを設定する唯一の方法は、クラスパスにHive-site.xmlを含めることです(または/ etc/spark /にコピーします) conf /)。

Hive-site.xmlを含めずにJavaコードでこのパラメーターをプログラムで設定する方法はありますか?その場合、使用するSpark構成は何ですか?

18
amarouni

Spark 1.xの場合、次のように設定できます。

System.setProperty("Hive.metastore.uris", "thrift://METASTORE:9083");

final SparkConf conf = new SparkConf();
SparkContext sc = new SparkContext(conf);
HiveContext hiveContext = new HiveContext(sc);

または

final SparkConf conf = new SparkConf();
SparkContext sc = new SparkContext(conf);
HiveContext hiveContext = new HiveContext(sc);
hiveContext.setConf("Hive.metastore.uris", "thrift://METASTORE:9083");

ハイブがKerberos化されている場合は更新

HiveContextを作成する前にこれらを設定してみてください:

System.setProperty("Hive.metastore.sasl.enabled", "true");
System.setProperty("Hive.security.authorization.enabled", "false");
System.setProperty("Hive.metastore.kerberos.principal", hivePrincipal);
System.setProperty("Hive.metastore.execute.setugi", "true");
29
amarouni

spark 2.0。+では、次のようになります。

「Hive.metastore.uris」を自分のものに置き換えることを忘れないでください。これは、Hiveメタストアサービスが既に開始されていることを前提としています(ハイブサーバーではありません)。

 val spark = SparkSession
          .builder()
          .appName("interfacing spark sql to Hive metastore without configuration file")
          .config("Hive.metastore.uris", "thrift://localhost:9083") // replace with your hivemetastore service's thrift url
          .enableHiveSupport() // don't forget to enable Hive support
          .getOrCreate()

        import spark.implicits._
        import spark.sql
        // create an arbitrary frame
        val frame = Seq(("one", 1), ("two", 2), ("three", 3)).toDF("Word", "count")
        // see the frame created
        frame.show()
        /**
         * +-----+-----+
         * | Word|count|
         * +-----+-----+
         * |  one|    1|
         * |  two|    2|
         * |three|    3|
         * +-----+-----+
         */
        // write the frame
        frame.write.mode("overwrite").saveAsTable("t4")
18
pgirard

私も同じ問題に直面しましたが、解決しました。 Spark 2.0 Versionでこの手順に従うだけです

Step1:Hive-site.xmlファイルをHive confフォルダーからspark conf。 enter image description here

ステップ2:spark-env.shファイルを編集し、mysqlドライバーを設定します。 (MysqlをHiveメタストアとして使用している場合。) enter image description here

または、MySQLドライバーをMaven/SBTに追加します(使用する場合)

Step3:作成するときspark session add enableHiveSupport()

val spark = SparkSession.builder.master( "local")。appName( "testing")。enableHiveSupport().getOrCreate()

サンプルコード:

package sparkSQL

/**
  * Created by venuk on 7/12/16.
  */

import org.Apache.spark.sql.SparkSession

object hivetable {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder.master("local[*]").appName("hivetable").enableHiveSupport().getOrCreate()

    spark.sql("create table hivetab (name string, age int, location string) row format delimited fields terminated by ',' stored as textfile")
    spark.sql("load data local inpath '/home/hadoop/Desktop/asl' into table hivetab").show()
    val x = spark.sql("select * from hivetab")
    x.write.saveAsTable("hivetab")
  }
}

出力:

enter image description here

4
Venu A Positive

Sparkバージョン:2.0.2

Hiveバージョン:1.2.1

以下のJava SparkからHiveメタストアに接続するコードが機能しました:

import org.Apache.spark.sql.SparkSession;

public class SparkHiveTest {

    public static void main(String[] args) {

        SparkSession spark = SparkSession
                  .builder()
                  .appName("Java Spark Hive Example")
                  .config("spark.master", "local")
                  .config("Hive.metastore.uris",                
                   "thrift://maxiqtesting123.com:9083")
                  .config("spark.sql.warehouse.dir", "/apps/Hive/warehouse")
                  .enableHiveSupport()
                  .getOrCreate();

        spark.sql("SELECT * FROM default.survey_data limit 5").show();
    }
}
2
Mukund Tripathi

以下のコードは私のために働いた。ローカルメタストアのHive.metastore.urisの構成は無視できます。sparkはスペアウェアハウスディレクトリにローカルでHiveオブジェクトを作成します。

import org.Apache.spark.sql.SparkSession;

object spark_Hive_support1 
{
  def main (args: Array[String]) 
   {
    val spark = SparkSession
      .builder()
      .master("yarn")
      .appName("Test Hive Support")
      //.config("Hive.metastore.uris", "jdbc:mysql://localhost/metastore")
      .enableHiveSupport
      .getOrCreate();

    import spark.implicits._

    val testdf = Seq(("Word1", 1), ("Word4", 4), ("Word8", 8)).toDF;
    testdf.show;
    testdf.write.mode("overwrite").saveAsTable("WordCount");
  }
}
2