CDH 集群機器上部署 Jupyter notebook 使用 Pyspark 讀取 Hive 數據庫
開始直接在 CDH Pyspark 的環境裏面運行 Ipython 。
spark = SparkSession .builder .master(‘yarn‘) .appName(‘md_day_dump_users‘) \ .enableHiveSupport() .getOrCreate()
In [3]: spark.sql(‘show databases‘).show()
+------------+
|databaseName|
+------------+
| default|
+------------+
可以用看到,我們直接使用這個配置去讀取 hive 數據庫並不能獲得我們想要的數據庫,而是只能讀取到一個 default 默認數據庫。
很明顯是我們現在的 client 端還並沒有得到 hive metastore 數據庫的數據。無法知曉現在 hive 數據庫的情況。
所以我們需要為其添加一些參數讓他能讀取到 hive 的 metastore,通過訪問 hive 的 metastore.uris 就可以用獲取,我們使用配置
spark = SparkSession .builder .master(‘yarn‘) .appName(‘md_day_dump_users‘) .config("hive.metastore.uris", "thrift://ryze-1:9083") .enableHiveSupport() .getOrCreate() spark.sql("show databases").show() +-------------+ | databaseName| +-------------+ |ads_algorithm| | analytics_db| | course| | default| |dw_dim_global| | dw_matrix| | member| | pay| | recommend| | sensors| | tmp| | user| | yanzhi| +-------------+
替換當前的配置,就可以了。
在 ipython 跑通整個流程之後,剩下的我們就是在當前權限用戶下安裝 Jupyter 。按照官方教程來安裝,註意我們使用的是 Python2.7.x 所以要選擇 2.7.x 的安裝方法,最終我的同事折騰了一下還替換掉一個 kernal 搞定。跑起來之後就可以從服務器上直接通過 SparkSession 來方便的使用 Spark 測試跑數據或者出數據了。
另外需要註意的一點是,由於我們使用的是 CDH ,可以非常方便的動態配置資源池,在為了不影響其他同步任務的情況下,我為 Jupyter 配置了單獨的支援池,可以和其他池子裏面的任務互不影響。因為這個腳本可能起多個,所以如果我們起得太多可能會影響到正常的同步腳本和任務使用資源。
使用特定的池也很簡單,指定參數 .config(‘spark.yarn.queue‘, ‘root.jupyter‘) 即可。
Reference:
https://stackoverflow.com/questions/51128243/hive-databases-only-list-default-db hive-databases-only-list-default-db
https://stackoverflow.com/questions/31980584/how-to-connect-to-a-hive-metastore-programmatically-in-sparksql how-to-connect-to-a-hive-metastore-programmatically-in-sparksql
https://stackoverflow.com/questions/48646097/setting-yarn-queue-in-pyspark setting-yarn-queue-in-pyspark
CDH 集群機器上部署 Jupyter notebook 使用 Pyspark 讀取 Hive 數據庫