¿Cómo conectar Spark SQL al metastore remoto de Hive (a través del protocolo de ahorro) sin hive-site.xml?
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?
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");
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")