Azure HDInsight 中 Apache Spark 叢集上的 Jupyter Notebook 核心
HDInsight Spark 叢集提供核心,您可以搭配 Apache Spark 上的 Jupyter Notebook 來測試您的應用程式。 核心是執行並解譯程式代碼的程式。 這三個核心包括:
- PySpark - 適用於以 Python2 撰寫的應用程式。 (僅適用於Spark 2.4版本叢集)
- PySpark3 - 適用於以 Python3 撰寫的應用程式。
- Spark - 適用於以 Scala 撰寫的應用程式。
在本文中,您將瞭解如何使用這些核心,以及使用這些核心的優點。
必要條件
HDInsight 中的 Apache Spark 叢集。 如需指示,請參閱在 Azure HDInsight 中建立 Apache Spark 叢集。
在 Spark HDInsight 上建立 Jupyter Notebook
從 Azure 入口網站 選取您的Spark叢集。 如需指示,請參閱列出和顯示叢集。 [概觀] 檢視隨即開啟。
從 [概觀] 檢視的 [叢集儀錶板] 方塊中,選取 [Jupyter Notebook]。 出現提示時,輸入叢集的系統管理員認證。
注意
您也可以在瀏覽器中開啟下列 URL,以連線到 Spark 叢集上的 Jupyter Notebook。 使用您叢集的名稱取代 CLUSTERNAME :
https://CLUSTERNAME.azurehdinsight.net/jupyter
選取 [ 新增],然後選取 [Pyspark]、 [PySpark3] 或 [Spark ] 來建立筆記本。 使用適用於 Scala 應用程式的 Spark 核心、適用於 Python2 應用程式的 PySpark 核心,以及適用於 Python3 應用程式的 PySpark3 核心。
注意
針對Spark 3.1,只有 PySpark3 或 Spark 可供使用。
- 筆記本隨即開啟,其中包含您選取的核心。
使用核心的優點
以下是在Spark HDInsight叢集上搭配 Jupyter Notebook 使用新核心的一些優點。
默認內容。 使用 PySpark、 PySpark3 或 Spark 核心時,您不需要在開始使用應用程式之前明確設定 Spark 或 Hive 內容。 根據預設,這些內容可供使用。 這些內容如下:
sc - 適用於 Spark 內容
sqlContext - 適用於 Hive 內容
因此,您 不需要 執行如下的語句來設定內容:
sc = SparkContext('yarn-client') sqlContext = HiveContext(sc)
相反地,您可以直接在應用程式中使用預設內容。
單元格魔術。 PySpark 核心提供一些預先定義的“magics”,這是您可以呼叫
%%
的特殊命令(例如,%%MAGIC
<args>
。 magic 命令必須是程式代碼儲存格中的第一個字,並允許多行內容。 魔術字應該是單元格中的第一個字。 在magic之前新增任何專案,甚至是批注,都會導致錯誤。 如需魔術的詳細資訊,請參閱 這裡。下表列出可透過核心取得的不同魔術。
魔法 範例 描述 說明 %%help
使用範例和描述產生所有可用魔術的數據表 info %%info
輸出目前 Livy 端點的工作階段資訊 設定 %%configure -f
{"executorMemory": "1000M"
,"executorCores": 4
}設定用來建立會話的參數。 如果已建立會話,強制旗標 ( -f
) 是強制性的,這可確保已卸除並重新建立會話。 查看 Livy 的 POST /sessions 要求本文 ,以取得有效參數的清單。 參數必須以 JSON 字串的形式傳入,而且必須在 magic 之後的下一行,如範例數據行所示。sql %%sql -o <variable name>
SHOW TABLES
針對 sqlContext 執行 Hive 查詢。 -o
如果傳遞 參數,查詢的結果會以 Pandas 資料框架的形式保存在 %%local Python 內容中。本機 %%local
a=1
稍後行中的所有程式代碼都會在本機執行。 不論您使用哪一個核心,程式代碼都必須是有效的 Python2 程序代碼。 因此,即使您在建立筆記本時選取 了 PySpark3 或 Spark 核心,如果您在 %%local
數據格中使用 magic,該單元格必須只有有效的 Python2 程式代碼。記錄 %%logs
輸出目前 Livy 工作階段的記錄。 delete %%delete -f -s <session number>
刪除目前 Livy 端點的特定工作階段。 您無法刪除針對核心本身啟動的工作階段。 清理 %%cleanup -f
刪除目前 Livy 端點的所有會話,包括此筆記本的會話。 強制旗標 -f 是必要的。 注意
除了 PySpark 核心新增的 magic 之外,您也可以使用 內建的 IPython 魔術,包括
%%sh
。 您可以使用%%sh
magic在叢集前端節點上執行文稿和程式代碼區塊。自動視覺效果。 Pyspark 核心會自動將 Hive 和 SQL 查詢的輸出可視化。 您可以選擇數種不同類型的視覺效果,包括 Table、Pie、Line、Area、Bar。
%%sql magic 支援的參數
magic %%sql
支援不同的參數,可用來控制您在執行查詢時收到的輸出類型。 下表列出輸出。
參數 | 範例 | 描述 |
---|---|---|
-o | -o <VARIABLE NAME> |
使用此參數將查詢的結果保存在 %%local Python 內容中,做為 Pandas 資料框架。 數據框架變數的名稱是您指定的變數名稱。 |
-q | -q |
使用此參數來關閉儲存格的視覺效果。 如果您不想自動視覺化儲存格的內容,而只想將它擷取為資料框架,請使用 -q -o <VARIABLE> 。 如果您想要關閉視覺效果而不擷取結果(例如執行 SQL 查詢,例如 CREATE TABLE 語句),請使用 -q 而不指定 -o 自變數。 |
-m | -m <METHOD> |
其中 METHOD 是 take 或 sample (預設值為 take)。 如果方法是 take ,核心會從 MAXROWS 所指定的結果數據集頂端挑選元素(本表稍後所述)。 如果方法是 sample,則核心會根據 -r 參數隨機取樣數據集的專案,如下表所述。 |
-r | -r <FRACTION> |
這裡 FRACTION 是介於 0.0 和 1.0 之間的浮點數。 如果 SQL 查詢的範例方法為 sample ,則核心會為您隨機取樣結果集元素的指定分數。 例如,如果您使用自變數 -m sample -r 0.01 執行 SQL 查詢,則會隨機取樣 1% 的結果數據列。 |
-n | -n <MAXROWS> |
MAXROWS 是整數值。 核心會將輸出數據列數目限制為 MAXROWS。 如果 MAXROWS 是負數,例如 -1,則結果集中的數據列數目不會受到限制。 |
範例:
%%sql -q -m sample -r 0.1 -n 500 -o query2
SELECT * FROM hivesampletable
上述語句會執行下列動作:
- 從 hivesampletable選取所有記錄。
- 因為我們使用 -q,所以會關閉自動啟用。
- 因為我們使用
-m sample -r 0.1 -n 500
,它會隨機取樣 hivesampletable 中 10% 的數據列,並將結果集的大小限製為 500 個資料列。 - 最後,因為我們使用它
-o query2
也會將輸出儲存到名為 query2 的數據框架中。
使用新核心時的考慮
無論您使用哪一個核心,讓執行中的筆記本都會取用叢集資源。 有了這些核心,因為內容是預設的,只是結束筆記本並不會終止內容。 因此,叢集資源會繼續使用。 最佳做法是當您完成使用筆記本時,從筆記本的 [檔案] 功能表使用 [關閉和停止] 選項。 關閉會終止內容,然後結束筆記本。
筆記本儲存在哪裡?
如果您的叢集使用 Azure 儲存體 作為預設記憶體帳戶,Jupyter Notebook 會儲存至 /HdiNotebooks 資料夾下的記憶體帳戶。 您可以從記憶體帳戶存取您從 Jupyter 內建立的筆記本、文字檔和資料夾。 例如,如果您使用 Jupyter 來建立資料夾 myfolder
和筆記本 myfolder/mynotebook.ipynb,您可以在記憶體帳戶記憶體取該筆記本 /HdiNotebooks/myfolder/mynotebook.ipynb
。 反轉也是真的,也就是說,如果您直接將筆記本上傳至位於 /HdiNotebooks/mynotebook1.ipynb
的記憶體帳戶,也會從 Jupyter 看到筆記本。 即使刪除叢集之後,筆記本仍會保留在記憶體帳戶中。
注意
HDInsight 叢集與 Azure Data Lake 儲存體,因為預設記憶體不會將筆記本儲存在相關聯的記憶體中。
筆記本儲存至記憶體帳戶的方式與 Apache Hadoop HDFS 相容。 如果您透過 SSH 連線到叢集,您可以使用檔案管理命令:
Command | 描述 |
---|---|
hdfs dfs -ls /HdiNotebooks |
# 列出根目錄的所有專案 – 從首頁看到此目錄中的所有專案 |
hdfs dfs –copyToLocal /HdiNotebooks |
# 下載 HdiNotebooks 資料夾的內容 |
hdfs dfs –copyFromLocal example.ipynb /HdiNotebooks |
# 將 Notebook example.ipynb 上傳至根資料夾,使其可從 Jupyter 看見 |
無論叢集使用 Azure 儲存體 或 Azure Data Lake 儲存體 做為預設記憶體帳戶,Notebook 也會儲存在位於 的叢集前端節點上/var/lib/jupyter
。
支援的瀏覽器
Spark HDInsight 叢集上的 Jupyter Notebook 僅支援 Google Chrome。
建議
新的核心處於不斷演進階段,隨著時間推移而成熟。 因此,API 可能會隨著這些核心的成熟而變更。 我們很感激您在使用這些新核心時擁有的任何意見反應。 意見反應有助於塑造這些核心的最終版本。 您可以在本文底部的 [意見反應] 區段底下留下您的意見/意見反應。