Spark2.0.1 on yarn with hue 集羣安裝部署(六)hue+hive+sparksql

hue+hive+sparksql

1、 配置hue

cd /bigdata/hue/desktop/conf
vim /hue.ini

配置hive與hue整合,找到[beeswax]修改內容如下:

[beeswax]

  # Host where HiveServer2 is running.
  # If Kerberos security is enabled, use fully-qualified domain name (FQDN).
  hive_server_host=bigdata1

  # Port where HiveServer2 Thrift server runs on.
  hive_server_port=10000

  # Hive configuration directory, where hive-site.xml is located
  hive_conf_dir=/bigdata/hive/conf

  # Timeout in seconds for thrift calls to Hive service
  server_conn_timeout=120

注:hive_server_host=bigdata1 #指向運行hue的主機
hive_server_port=10000 #端口號
hive_conf_dir=/bigdata/hive/conf #執行hive配置文件的路徑

2、啓動hue

/bigdata/hue/build/env/bin/supervisor

3、啓動hive的matestore服務

hive --service metastore

4、 啓動sparkSql Server

cd /bigdata/spark/sbin
./start-thriftserver.sh --master yarn --deploy-mode client

使用以下命令查看是否啓動成功(注:啓動過程比較長,需要等待數秒才能查看到結果):
netstat -nltp | grep 10000
這裏寫圖片描述

啓動sparkSql server是爲了支持sql查詢,否則點擊install spark出現以下錯誤。
這裏寫圖片描述

當開啓sparkSql Server服務時,點擊install spark會向default數據庫中插入四張表。

5、測試sparksql

1)、打開notebook

如果notebook打不開,首先查詢後臺日誌,查看是否報錯,如果確定沒有報錯。則可能是前臺原因導致,首先排查瀏覽器是否兼容,可更換不同瀏覽器進行測試。如果網速過慢也可能導致notebook無法正常打開,此時可以打開開發者工具查看是否有js腳本或其他什麼資源加載超時的,剛搭建好的時候就出現網速過慢足足加載了1分多鐘還未加載完成,導致部分js加載超時,無法正常顯示,如果是網速原因,多刷新下網頁就出來了。
這裏寫圖片描述

2)、左側導航欄測試

這裏寫圖片描述

左側側邊欄無法加載數據庫和數據庫中的表,查看後臺日誌。
這裏寫圖片描述

16/11/01 18:17:20 INFO Query: Reading in results for query “org.datanucleus.store.rdbms.query.SQLQuery@0” since the connection used is closing
16/11/01 18:17:20 INFO MetaStoreDirectSql: Using direct SQL, underlying DB is DERBY

這兩句表示使用derby數據庫。主要因爲thriftserver運行時,客戶端訪問直接訪問derby數據庫,所以只看到一個default數據庫,且並未顯示那4張表,而不是直接訪問mysql中的matestore數據庫中的數據。
該問題可能是spark存在的一個bug未解決,具體查看如下:
具體查看:https://issues.apache.org/jira/browse/SPARK-9686

解決方案:
使用hiveserver2代替spark的thriftserver。

3)、使用hive的hvieserver2代替thriftserver

停止thriftserver

$SPARK_HOME/sbin/stop-thriftserver.sh

啓動hiveserver2

hive --service hiveserver2

這裏寫圖片描述

4)、創建數據庫

網址:http://blog.cloudera.com/blog/2015/10/how-to-use-hues-notebook-app-with-sql-and-apache-spark-for-analytics/
csv文件下載地址:http://www.bayareabikeshare.com/datachallenge

導航欄找到DataBrowers,打開metastore tables進入metastore manager管理頁面。
這裏寫圖片描述

點擊右上角的+號按鈕,添加數據庫。
這裏寫圖片描述
創建數據庫:bikeshare
創建成功後,選擇bikeshare數據庫,爲該數據庫創建表:

點擊右上角的,create table from file,導入trips表。

這裏寫圖片描述
然後next,進入step2,next進入step3,在step3中可以修改字段類型,名稱。
這裏寫圖片描述
然後點擊create table便可以創建成功了。

然後導入stations表。
進入notebook,選擇sql選項執行以下sql便可以得到結果。

SELECT startterminal, startstation, COUNT(1) AS count FROM bikeshare.trips GROUP BY startterminal, startstation ORDER BY count DESC LIMIT 10;

返回:
這裏寫圖片描述

執行:

SELECT
 s.station_id,
 s.name,
 s.lat,
 s.long,
 COUNT(1) AS count
FROM `bikeshare`.`trips` t
JOIN `bikeshare`.`stations` s ON s.station_id = t.endterminal
WHERE t.startterminal = 70
GROUP BY s.station_id, s.name, s.lat, s.long
ORDER BY count DESC LIMIT 10

返回:
這裏寫圖片描述

執行:

SELECT
    hour,
    COUNT(1) AS trips,
    ROUND(AVG(duration) / 60) AS avg_duration
FROM (
    SELECT
        CAST(SPLIT(SPLIT(t.startdate, ' ')[1], ':')[0] AS INT) AS hour,
        t.duration AS duration
    FROM `bikeshare`.`trips` t
    WHERE
        t.startterminal = 70
        AND
        t.duration IS NOT NULL
    ) r
GROUP BY hour
ORDER BY hour ASC;

返回:
這裏寫圖片描述
至此hue與hive便整合成功了。但是由於hive是在mapreduce中運行,自然速度是不理想了。雖然,我們不能使用sparksql來獲取導航欄數據庫、數據庫表、已經表字段的數據,那麼我們單單執行查詢能不能把sparksql整合進來呢,答案是可以的。

6、整合sparksql

1)、配置hue

cd /bigdata/hue/desktop/conf
vim /hue.ini

找到[spark]選項進行修改:

[spark]
  # Host address of the Livy Server.
 #livy_server_host=bigdata1

  # Port of the Livy Server.
 #livy_server_port=8998

  # Configure Livy to start in local 'process' mode, or 'yarn' workers.
 #livy_server_session_kind=yarn

  # Host of the Sql Server
 sql_server_host=bigdata1

  # Port of the Sql Server
 sql_server_port=10008

可以看到,有專門的sparksql配置。

打開sparksql選項:

 # One entry for each type of snippet. The first 5 will appear in the wheel.
  [[interpreters]]
    # Define the name and how to connect and execute the language.

    [[[hive]]]
      # The name of the snippet.
      name=Hive
      # The backend connection to use to communicate with the server.
      interface=hiveserver2

    [[[impala]]]
      name=Impala
      interface=hiveserver2

    [[[sparksql]]]
       name=SparkSql
       interface=hiveserver2

找到[[interpreters]]中的[[[sparksql]]]選項卡,把註釋去掉。這樣在notebook的選項卡中就能找到sparksql選項了。

配置spark:

vim $SPARK_HOME/conf/hive-site.xml

添加如下內容,將thriftserver的端口號更改成10008

<property>
    <name>hive.server2.thrift.port</name>
    <value>10008</value>
    <description>Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.</description>
  </property>

重啓hue,已經spark的thriftserver服務。
打開notebook,隨意執行一條sql語句,發現不起作用,任務依然通過hive執行,啓動的是mapreduce任務。
經過查看hue源碼,這裏是hue的一個bug。
具體修改如下:

vim $HUE_HOME/desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

將該方法:

  def _get_db(self, snippet):
    if snippet['type'] == 'hive':
      name = 'beeswax'
    elif snippet['type'] == 'impala':
      name = 'impala'
    else:
      name = 'spark-sql'

    return dbms.get(self.user, query_server=get_query_server_config(name=name))

中的name = ‘spark-sql’修改成name=’sparksql’。保存退出,重啓hue,然後運行sparksql便可以成功了。
不過此處還存在一個問題,第一次啓動spark的thriftserver,並執行第一sql查詢,會報錯,通過日誌分析,應該是第一次查詢derby數據庫,導致沒有對應的數據庫已經表,後續的查詢表成功連接到metastore了。


歡迎拍磚,能力有限,相互學習,相互進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章