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

  1. 從 Azure 入口網站 選取您的Spark叢集。 如需指示,請參閱列出和顯示叢集。 [概觀] 檢視隨即開啟。

  2. 從 [概觀] 檢視的 [叢集儀錶板] 方塊中,選取 [Jupyter Notebook]。 出現提示時,輸入叢集的系統管理員認證。

    Jupyter Notebook on Apache Spark.

    注意

    您也可以在瀏覽器中開啟下列 URL,以連線到 Spark 叢集上的 Jupyter Notebook。 使用您叢集的名稱取代 CLUSTERNAME

    https://CLUSTERNAME.azurehdinsight.net/jupyter

  3. 選取 [ 新增],然後選取 [Pyspark]、 [PySpark3] 或 [Spark ] 來建立筆記本。 使用適用於 Scala 應用程式的 Spark 核心、適用於 Python2 應用程式的 PySpark 核心,以及適用於 Python3 應用程式的 PySpark3 核心。

    Kernels for Jupyter Notebook on Spark.

注意

針對Spark 3.1,只有 PySpark3Spark 可供使用。

Kernels for Jupyter Notebook on Spark HDI4.0.

  1. 筆記本隨即開啟,其中包含您選取的核心。

使用核心的優點

以下是在Spark HDInsight叢集上搭配 Jupyter Notebook 使用新核心的一些優點。

  • 默認內容。 使用 PySparkPySpark3Spark 核心時,您不需要在開始使用應用程式之前明確設定 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 程序代碼。 因此,即使您在建立筆記本時選取 了 PySpark3Spark 核心,如果您在 %%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> 其中 METHODtakesample (預設值為 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 可能會隨著這些核心的成熟而變更。 我們很感激您在使用這些新核心時擁有的任何意見反應。 意見反應有助於塑造這些核心的最終版本。 您可以在本文底部的 [意見反應] 區段底下留下您的意見/意見反應。

下一步