Pysparkからリモートハイブサーバーに格納されているテーブルを読み書きする必要があります。このリモートハイブについて私が知っているのは、Dockerの下で動作するということだけです。 Iがtableのmetastoreのurlを持っPyspark:リモートハイブウェアハウスロケーション
::Hadoop HueからIがIがからsome dataをselectするtry iris
tableため2 urlsをfoundき
http://xxx.yyy.net:8888/metastore/table/mytest/iris
及びtableのlocationのurl:
hdfs://quickstart.cloudera:8020/user/hive/warehouse/mytest.db/iris
なぜ最後のURLにquickstart.cloudera:8020
が含まれているのかわかりません。これはHiveがDockerの下で動作するからでしょうか?ハイブテーブルPysparkのチュートリアルへのアクセスを議論
は書いている:
https://spark.apache.org/docs/latest/sql-programming-guide.html#hive-tables
をハイブで作業する場合、1は、永続的なハイブメタストアへの接続など、ハイブサポートでハイブのSERDESのサポートをSparkSessionをインスタンス化する必要があり、 Hiveユーザー定義関数既存のHive展開を持たないユーザーは、Hiveサポートを有効にできます。 hive-site.xmlで設定されていない場合、コンテキストは自動的に現在のディレクトリにmetastore_dbを作成し、spark.sql.warehouse.dirで設定されたディレクトリを作成します。デフォルトでは、Sparkアプリケーションが現在のディレクトリにあるディレクトリspark-が開始される。 hive-site.xmlのhive.metastore.warehouse.dirプロパティは、Spark 2.0.0以後廃止予定です。代わりに、spark.sql.warehouse.dirを使用して、ウェアハウス内のデータベースのデフォルトの場所を指定します。 Sparkアプリケーションを起動するユーザーに書き込み権限を与える必要があるかもしれません。私は得ることができた私の場合は
hive-site.xml
はhive.metastore.warehouse.dir
もspark.sql.warehouse.dir
もない性質を持っていません。
from os.path import expanduser, join, abspath
from pyspark.sql import SparkSession
from pyspark.sql import Row
// warehouseLocation points to the default location for managed databases and tables
val warehouseLocation = new File("spark-warehouse").getAbsolutePath
spark = SparkSession \
.builder \
.appName("Python Spark SQL Hive integration example") \
.config("spark.sql.warehouse.dir", warehouse_location) \
.enableHiveSupport() \
.getOrCreate()
そして、私の場合は
は、warehouseLocation
のためではなく、正しい値と、上記のコードに似て実行した後に、私は私が、その後することができると思う:
スパークチュートリアルでは、リモートハイブテーブルにアクセスするには、次のコードを使用することを示唆していますdo:
spark.sql("use mytest")
spark.sql("SELECT * FROM iris").show()
ここで、リモートHive倉庫の場所はどこにありますか?リモートHiveテーブルでPysparkを動作させるには?
更新
hive-site.xml
は、次のプロパティがあります。127.0.0.1はClouder]ドッキングウィンドウのアプリを実行しドッカーlocalhostですよう
...
...
...
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://127.0.0.1/metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
...
...
...
<property>
<name>hive.metastore.uris</name>
<value>thrift://127.0.0.1:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
だから、見えます。 Hive倉庫にまっすぐに行くのを助けません。
Cloudera HiveがDockerアプリとして動作する場合、Hiveウェアハウスにアクセスする方法。
Pysparkのドキュメント(私の質問に引用を参照)は、 'ウェアハウス'の場所を指定する必要性について語っています。それはハイブ 'metastore'と同じですか?私の質問への更新をご覧ください。 – dokondr