2017-10-21 93 views
2

J'essaie d'accéder à HIVE de l'application d'étincelle avec scala.Comment accéder à la table existante dans Hive?

Mon code:

val hiveLocation = "hdfs://master:9000/user/hive/warehouse" 
val conf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[*]").set("spark.sql.warehouse.dir",hiveLocation) 

val sc = new SparkContext(conf) 
val spark = SparkSession 
    .builder() 
    .appName("SparkHiveExample") 
    .master("local[*]") 
    .config("spark.sql.warehouse.dir", hiveLocation) 
    .config("spark.driver.allowMultipleContexts", "true") 
    .enableHiveSupport() 
    .getOrCreate() 
println("Start of SQL Session--------------------") 

spark.sql("select * from test").show() 
println("End of SQL session-------------------") 

Mais il se termine par un message d'erreur

tableau ou non trouvé

mais quand je lance show tables; sous la console de ruche, je peux voir cette table et peut exécuter Select * from test. Tous sont dans l'emplacement "utilisateur/ruche/entrepôt". Juste pour tester, j'ai essayé de créer une table aussi à partir de l'étincelle, juste pour trouver l'emplacement de la table.

val spark = SparkSession 
     .builder() 
    .appName("SparkHiveExample") 
    .master("local[*]") 
    .config("spark.sql.warehouse.dir", hiveLocation) 
    .config("spark.driver.allowMultipleContexts", "true") 
    .enableHiveSupport() 
    .getOrCreate() 
println("Start of SQL Session--------------------") 
spark.sql("CREATE TABLE IF NOT EXISTS test11(name String)") 
println("End of SQL session-------------------") 

Ce code a également exécuté correctement (avec la note de réussite), mais chose étrange est que je peux trouver ce tableau de la console ruche.

Même si j'utilise select * from TBLS; dans mysql (dans ma configuration j'ai configuré mysql comme métastore pour ruche), je n'ai pas trouvé ces tables qui sont créées à partir de spark.

L'emplacement de l'étincelle est-il différent de celui de la console Hive?

Qu'est-ce que je dois faire si j'ai besoin d'accéder à la table existante dans la ruche de l'étincelle?

+0

pouvez-vous faire 'spark.sql (« select * from .test ») montrent () ' – mrsrinivas

+0

même résultat et plus je peux créer une table à partir de l'étincelle et peut faire" insérer dans "mais la console de la ruche ne montre aucune table avec ce nom. La grande confusion est que d'où ces tables sont-elles sauvées? – Biswajit

Répondre

2

du spark sql programming guide: (I mis en évidence les parties pertinentes)

Configuration de la Ruche se fait en plaçant votre ruche site.xml, core-site.xml (pour la configuration de la sécurité), et hdfs-site.xml (pour la configuration HDFS) dans conf /.

Lorsque l'on travaille avec la ruche, il faut instancier SparkSession avec le soutien de la ruche , y compris la connectivité à un Metastore persistante ruche, support pour SerDes la ruche, ruche fonctions définies par l'utilisateur. Les utilisateurs qui ont n'ont pas de déploiement Hive existant peuvent toujours activer le support Hive. Lorsqu'ils ne sont pas configurés par la ruche-site.xml, le contexte automatiquement crée metastore_db dans le répertoire courant et crée un répertoire configuré par spark.sql.warehouse.dir, qui est par défaut dans le répertoire -entrepôt étincelle dans la répertoire courant que l'application Spark est a commencé

vous devez ajouter un fichier de configuration hive-site.xml au resource dir. ici est les valeurs minimales nécessaires à étincelle pour travailler avec la ruche (définir l'hôte à l'hôte de la ruche).

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
<configuration> 
    <property> 
     <name>hive.metastore.uris</name> 
     <value>thrift://host:9083</value> 
     <description>IP address (or fully-qualified domain name) and port of the metastore host</description> 
    </property> 

</configuration> 
+0

Merci beaucoup, vous avez sauvé ma journée, c'est le cas, je peux exécuter et connecter mon ruche existant mis en place après avoir fait face à hive-site.xml dans spark conf.Mais quand je cours le code d'IDE, intellij dans mon cas, (ne pas soumettre), comment puis-je ajouter hive-site.xml dans mon code, une idée? – Biswajit

+0

vous avez 2 options. vous pouvez ajouter le fichier au répertoire resources (même emplacement que les fichiers configs) ou définir cette valeur en tant que propriété système (avant d'initialiser la session spark), c'est-à-dire 'System.setProperty (" hive.metastore.uris "," thrift: // host: 9083 ")' – lev

+0

@Biswajit, si vous trouvez cette réponse utile, envisagez de la marquer comme une réponse pour aider le futur lecteur à mieux naviguer sur le site – lev