Как программно подключиться к метафору улья в SparkSQL?
Я использую HiveContext с SparkSQL, и я пытаюсь подключиться к удаленному метастоуму улья, единственный способ установить метастабильность улья - это включить hive-site.xml в путь к классам (или скопировать его в/etc/искровым/CONF/).
Есть ли способ установить этот параметр программно в Java-коде без включения hive-site.xml? Если да, то какую конфигурацию Spark использовать?
Ответы
Ответ 1
Для 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");
Обновление Если ваш куст Kerberized:
Попробуйте установить их перед созданием 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");
Ответ 2
В искры 2.0. + он должен выглядеть примерно так:
Не забудьте заменить "hive.metastore.uris" на свой. Эта предположим, что у вас уже запущена услуга метапосадки улей (не hiveserver).
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 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")
Ответ 3
Я тоже столкнулся с такой же проблемой, но решил. Просто выполните следующие действия в версии Spark 2.0
Шаг1: Скопируйте файл hive-site.xml из папки Hive conf, чтобы вызвать conf.
![введите описание изображения здесь]()
Шаг 2: отредактируйте файл spark-env.sh и настройте свой драйвер mysql. (Если вы используете Mysql в качестве метастара улья).
![введите описание изображения здесь]()
Или добавьте драйверы MySQL в Maven/SBT (если они используются)
Шаг 3:. Когда вы создаете искровую сессию, добавьте 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")
}
}
Вывод:
![введите описание изображения здесь]()
Ответ 4
Ниже код работал для меня. Мы можем игнорировать конфигурацию hive.metastore.uris
для локального метастаза, спарк создаст объекты hive.metastore.uris
в каталоге запасного хранилища локально.
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");
}
}
Ответ 5
Версия Spark: 2.0.2
Улей версия: 1.2.1
Ниже Java-код работал для подключения к Hive metastore от Spark:
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();
}
}