Ich benutze einen Spark ThriftServer, damit ich Spark SQL-Befehle für Daten ausführen kann, die ich in einer Hive-Tabelle gespeichert habe.Spark Thriftserver stellt keine Verbindung zur richtigen Hive-Datenbank her
Als ich beginnen die beeline
meine aktuellen Tabellen zu zeigen:
[email protected]~$ beeline
!connect jdbc:hive2://mn:10000
show tables;
+------------+--------------+--+
| tableName | isTemporary |
+------------+--------------+--+
+------------+--------------+--+
Die Ausgabe zeigt, dass es keine Tabellen in meiner Datenbank sind.
Allerdings, wenn ich die (veraltet) CLI hive
verwendet, erhalte ich unterschiedliche Ausgabe:
[email protected]:~$ hive
Logging initialized using configuration in jar:file:/opt/cloudera/parcels/CDH-5.4.4-1.cdh5.4.4.p0.4/jars/hive-common-1.1.0-cdh5.4.4.jar!/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive> show tables;
OK
table_1
table_2
Time taken: 1.683 seconds, Fetched: 6 row(s)
Ich weiß, die Ausgabe von Beeline nicht korrekt ist, wie HDFS zeigt, dass es Tabellen in meiner Hive speichern.
[email protected]:~$ hadoop fs -ls /user/hive/warehouse
Found 9 items
drwxrwxrwt - cloudera hive 0 2015-07-30 13:20 /user/hive/warehouse/table_1
drwxrwxrwt - cloudera hive 0 2015-08-04 16:28 /user/hive/warehouse/table_2
Außerdem, wenn ich meine Funken verbinden Thriftserver (I Tableau bin mit den Daten abzufragen), zeigen keine Tabellen, wenn ich versuche, alle Tabellen in meinem aktuellen Schema zu sehen.
Ich habe das Gefühl, dass es ein Konfigurationsproblem gibt, das der Beeline CLI und der Spark Thriftserver teilen, aber ich bin mir nicht sicher, was es ist. Ich bin mir ziemlich sicher, dass der Thriftserver auf eine lokale Hive-Installation zeigt, da ich nur über den Thriftserver Tabellen anzeigen konnte, die auf lokal auf der Maschine gespeicherte Tabellen zeigten (anstatt in HDFS gespeicherte Tabellen). Ich hatte diese Tabellen innerhalb von beeline erstellt, und da ich bedenke, dass beeline nicht korrekt konfiguriert ist, wurden die Tabellen lokal anstatt in HDFS erstellt. Ich hatte Beeline Verbindung zu dem Port, auf dem SparkSQL läuft, also denke ich, das erklärt, warum diese beiden Teile der Software das gleiche Problem haben.
Welche Konfiguration sollte ich einstellen, damit der Thriftserver mit der richtigen Hive-Installation funktioniert? Ich habe festgestellt, dass der Hive-Befehl einige Konfigurationsdateien lädt, würde das die Antwort enthalten?
Jede Hilfe wird sehr geschätzt.
EDIT:
Hier ist meine hive-Datei site.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--Autogenerated by Cloudera Manager-->
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://w7:9083</value>
</property>
<property>
<name>hive.metastore.client.socket.timeout</name>
<value>300</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.warehouse.subdir.inherit.perms</name>
<value>true</value>
</property>
<property>
<name>hive.enable.spark.execution.engine</name>
<value>false</value>
</property>
<property>
<name>hive.conf.restricted.list</name>
<value>hive.enable.spark.execution.engine</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>-1</value>
</property>
<property>
<name>hive.exec.reducers.bytes.per.reducer</name>
<value>67108864</value>
</property>
<property>
<name>hive.exec.copyfile.maxsize</name>
<value>33554432</value>
</property>
<property>
<name>hive.exec.reducers.max</name>
<value>1099</value>
</property>
<property>
<name>hive.metastore.execute.setugi</name>
<value>true</value>
</property>
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.zookeeper.quorum</name>
<value>mn</value>
</property>
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>mn</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hive.zookeeper.namespace</name>
<value>hive_zookeeper_namespace_hive</value>
</property>
<property>
<name>hive.cluster.delegation.token.store.class</name>
<value>org.apache.hadoop.hive.thrift.MemoryTokenStore</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
</property>
<property>
<name>hive.server2.use.SSL</name>
<value>false</value>
</property>
</configuration>
überprüfte ich meine hive-site.xml-Datei und die Cluster I eine Remote-relationalen Datenbank Metastore verwenden bin mit konfiguriert (so die Metastore Datenbank ist nicht auf der gleichen Maschine, die ich/der Thriftserver läuft gerade). Könnte das mit meinen Problemen zusammenhängen? – npp1993
Ja, genau das ist der Grund. Mit beeline verbinden Sie sich mit dem Cluster mit einer anderen metasore db, sollten Sie den gleichen metasore db conn str etc. in Ihrer hive-site.xml setzen, wenn die entfernte metasore db in einem privaten Netzwerk ist, müssen Sie einen ssh erstellen tunnel, um es zu verwenden, andernfalls können Sie nur "beeline" verwenden, da der native CLI 'hive' nicht in der Lage ist, den richtigen Metastasen zu erhalten. – chutium
Also, um zu klären: Wenn der Metastream auf der Maschine 'w7' ist, aber der Thriftserver auf der Maschine' mn' läuft, sollte ich mich mit dem folgenden Befehl mit beeline verbinden: '! Connect jdbc: hive2: // w7: 10000'? Sollte ich stattdessen eine Verbindung zu Port 9083 basierend auf meiner hive-site.xml herstellen? Ich schätze die Hilfe sehr. – npp1993