Spark ThriftServerを実行しているため、Hiveテーブルに保存したデータに対してSpark SQLコマンドを実行できます。Spark Thriftserverが正しいHiveデータベースに接続していません
私は私の現在のテーブルを表示するbeeline
を起動します。
[email protected]~$ beeline
!connect jdbc:hive2://mn:10000
show tables;
+------------+--------------+--+
| tableName | isTemporary |
+------------+--------------+--+
+------------+--------------+--+
出力にはテーブルが私のデータベースに存在しないことを示しています。私は(非推奨)CLI hive
を使用した場合
はしかし、私は別の出力を得る:
[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)
私はHDFSは私のハイブストア内のテーブルがあることを示しているようビーラインからの出力は、間違っている知っています。私は私のスパークThriftserver(私はデータを照会するタブローを使用しています)に接続するとき、私は私の現在のスキーマ内のすべての表を参照してくださいしようとすると、
[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
はまた、何のテーブルが現れません。
beeline CLIとSpark Thriftserverが共有する構成上の問題があるような気がしますが、それが何であるか分かりません。 ThriftserverがローカルのHiveインストールを指していることは間違いありませんが、Thriftserverを介してテーブルを表示できる唯一の時間は、(HDFSに格納されているテーブルではなく)マシンにローカルに格納されているテーブルを指していたからです。私はビーラインの内側にこれらのテーブルを作成していたので、ビーラインが正しく設定されているとは思わないので、テーブルはHDFSではなくローカルで作成されていました。私はSparkSQLが動作しているポートにBeelineを接続していたので、その2つのソフトウェアが同じ問題を抱えている理由を説明していると思います。
Thriftserverが正しいHiveインストールで動作するように設定する必要のある設定は何ですか?私はハイブコマンドがいくつかの設定ファイルを読み込むことに気付きました。それには答えが含まれていましたか?
ご協力いただきまして誠にありがとうございます。
EDIT:
<?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>
私は私のハイブ-site.xmlファイルをチェックし、私が使用しているクラスタがメタストアデータベースは、私はビーラインが接続抱えている同じマシン上にないので、(リモートのリレーショナル・データベースのメタストアを使用するように設定され/ Thriftserverが実行されています)。これは私の問題と関連がありますか? – npp1993
はい、まさにそれが理由です。別のメタストアdbを使用してクラスタに接続しているBeelineを使用する場合、hive-site.xmlに同じメタストアdb conn strなどを設定する必要があります。リモートmetastore dbがプライベートネットワークにある場合は、sshそれを使用するトンネルでなければ、 'beeline'しか使用できません。ネイティブCLIの' hive'は正しいメタストアを取得できません。 – chutium
それでは、メトロストアがマシン 'w7'にあり、Thriftserverがマシン' mn'で実行されている場合は、このコマンドを使ってbeelineに接続する必要があります: '!connect jdbc:hive2:// w7:10000'?代わりに、hive-site.xmlに基づいてポート9083に接続する必要がありますか?私は本当に助けに感謝します。 – npp1993