2016-09-27 20 views
10

我們試圖使用ThriftServer從spark 2.0.0中的spark temp表中查詢數據。以編程方式避免以創建的上下文啓動HiveThriftServer2

首先,我們創建了SparkSession並啓用了Hive支持。 目前,我們開始ThriftServer與sqlContext這樣的:

HiveThriftServer2.startWithContext(spark.sqlContext()); 

我們有註冊臨時表火花流 「spark_temp_table」:

StreamingQuery streamingQuery = streamedData.writeStream() 
              .format("memory") 
              .queryName("spark_temp_table") 
              .start(); 

隨着直線,我們能夠看到的臨時表(運行SHOW TABLES );

當我們想用這種方法運行第二個工作(第二個sparkSession)時,我們必須從不同的端口啓動第二個ThriftServer。

我這裏有兩個問題:

  1. 有沒有辦法有一個端口上一個ThriftServer可以訪問所有的臨時表在不同的sparkSessions?

  2. HiveThriftServer2.startWithContext(spark.sqlContext());注有@DeveloperApi。有沒有什麼方法可以編程方式啓動不帶代碼的上下文服務器?
    我看到有配置--conf spark.sql.hive.thriftServer.singleSession=true在啓動時傳遞給ThriftServer(sbin/start-thriftserver.sh),但我不明白如何定義這個作業。我試圖在sparkSession構建器中設置此配置屬性,但直線沒有顯示臨時表。

+2

回答你的問題之前,我會問一個問題:)你真的需要開始'ThriftServer'「編程」? – user1314742

+0

@ user1314742不,我們不需要(也不想 - 試圖避免'HiveThriftServer2.startWithContext(spark.sqlContext());')。我們實際上試圖啓動'sbin/start-thriftserver。sh'與單一會議,但沒有運氣。基本上我們需要的是通過Spark JDBC服務器訪問'temp'表並且查詢'temp'表(從具有'JDBC'連接的不同應用程序)查詢 – VladoDemcak

+0

當我們全部使用'master local''時可以看到臨時表? – VladoDemcak

回答

5

有沒有辦法有一個端口上一個ThriftServer可以訪問所有的臨時表在不同的sparkSessions?

編號ThriftServer使用特定會話和臨時表只能在此會話中訪問。這是爲什麼:

直線沒有顯示臨時表。

當您啓動獨立服務器與sbin/start-thriftserver.sh

spark.sql.hive.thriftServer.singleSession並不意味着您會爲多個服務器獲得一個會話。它對與單個Thrift服務器的所有連接使用相同的會話。可能的用例:

  • 你開始節儉服務器。
  • client1連接到此服務器並創建臨時表foo
  • 客戶機程序連接到該服務器,並讀取foo
+0

謝謝你的回答,現在我非常感謝你!我在這裏還有一個問題。比方說,我希望'client1'作爲* spark spark作業*。是否有可能獲得'thriftserver session',或者我可以如何將流作業連接到以'sbin/start-thriftserver.sh'開頭的運行節點服務器? – VladoDemcak

+0

我不認爲這是可能的,但我可能是錯的。 – 2016-11-20 13:14:47

+0

@VladoDemcak您是否發現了以編程方式運行HiveThriftServer2的其他方法?我有一個非常相似的用例,不知道我可能在這裏只是選錯了一個工具。 – Roman