簡體   English   中英

Spark Thriftserver無法連接到正確的Hive數據庫

[英]Spark Thriftserver not connecting to correct Hive database

我正在運行Spark ThriftServer,以便我可以針對存儲在Hive表中的數據執行Spark SQL命令。

當我開始beeline顯示我當前的表:

user@mn~$ beeline
!connect jdbc:hive2://mn:10000
show tables;
+------------+--------------+--+
| tableName  | isTemporary  |
+------------+--------------+--+ 
+------------+--------------+--+

輸出顯示我的數據庫中沒有表。

但是,如果我使用(已棄用)CLI hive ,我會得到不同的輸出:

user@mn:~$ 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)

我知道beeline的輸出是不正確的,因為HDFS顯示我的Hive存儲中有表。

user@mn:~$ 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

此外,當我連接到我的Spark Thriftserver(我使用Tableau查詢數據)時,當我嘗試查看當前架構中的所有表時,不會顯示任何表。

我覺得直布CLI和Spark Thriftserver共享存在某種配置問題,但我不確定它是什么。 我很確定Thriftserver指向本地Hive安裝,因為我唯一能夠通過Thriftserver顯示表,它指向本地存儲在機器上的表(而不是存儲在HDFS中的表)。 我在beeline中創建了這些表,因為我認為沒有正確配置beeline,所以表是在本地而不是在HDFS中創建的。 我確實已經直接連接到運行SparkSQL的端口,所以我想這就解釋了為什么這兩個軟件都有同樣的問題。

我應該設置什么配置才能使Thriftserver與正確的Hive安裝一起工作? 我注意到hive命令加載了一些配置文件,是否包含答案?

任何幫助是極大的贊賞。

編輯:

這是我的hive-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>

您需要使用關系數據庫作為hive的Metastore,並確保在運行hiveserver2的服務器上的hive-site.xml中設置了數據庫conn str。

https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin可能會有所幫助

您需要在hive-site.xml設置以下屬性; 示例使用mariaDb驅動程序和mysql。

  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hostname:3306/hive?createDatabaseIfNotExist=true</value>
    <description>username to use against metastore database</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.mariadb.jdbc.Driver</value>
    <description>username to use against metastore database</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>username</value>
    <description>username to use against metastore database</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>password</value>
    <description>password to use against metastore database</description>
  </property>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM