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了。
歡迎拍磚,能力有限,相互學習,相互進步