¿Cómo conectar Spark SQL al metastore remoto de Hive (a través del protocolo de ahorro) sin hive-site.xml?

Resuelto amarouni asked hace 9 años • 11 respuestas

Estoy usando HiveContext con SparkSQL y estoy intentando conectarme a un metastore remoto de Hive, la única forma de configurar el metastore de Hive es incluyendo el archivo hive-site.xml en el classpath (o copiándolo en /etc/spark/ configuración/).

¿Hay alguna manera de configurar este parámetro mediante programación en un código Java sin incluir hive-site.xml? Si es así, ¿cuál es la configuración de Spark a utilizar?

amarouni avatar Aug 13 '15 13:08 amarouni
Aceptado

Para Spark 1.x, puede configurar con:

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

O

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

Actualice si su Hive está Kerberizado :

Intente configurarlos antes de crear 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");
amarouni avatar Aug 13 '2015 16:08 amarouni

En Spark 2.0.+ debería verse así:

No olvides reemplazar "hive.metastore.uris" por el tuyo. Esto supone que ya tiene iniciado un servicio de metastore de Hive (no un servidor de 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")
pgirard avatar Nov 28 '2016 16:11 pgirard