注意:

搭配 Apache Spark Streaming 使用 OCI 資料流程,以可擴展且接近即時的應用程式處理 Kafka 主題

簡介

Oracle Cloud Infrastructure (OCI) 資料流程是名為 Apache Spark 之開源專案的託管服務。基本上,使用 Spark 時,您可以將它用於大量處理檔案、串流以及資料庫作業。您可以建置具有非常高可擴展處理的應用程式。Spark 可以調整及使用叢集化機器,以最少的組態對待工作。

您可以使用 Spark 作為託管服務 (資料流程),新增許多可擴展的服務來乘上雲端處理的強大功能。資料流程具有處理 Spark Streaming 的能力。

串流處理應用系統需要長期執行,且通常延續超過 24 小時,而且可能只要幾週或甚至幾個月即可。如果發生未預期的失敗狀況,串流應用程式必須從失敗點重新啟動,而不會產生不正確的運算結果。資料流程倚賴 Spark 結構化串流檢查點,以記錄可儲存在物件儲存的儲存桶中已處理的偏移量。

注意:如果您需要以批次策略的方式處理資料,可以閱讀此文章:使用 Oracle Cloud Infrastructure Data Flow 處理 Autonomous Database 和 Kafka 中的大型檔案

資料流程使用 -case.png

在本教學課程中,您可以看到最常用於處理資料磁碟區串流、查詢資料庫,以及合併 / 結合資料以形成記憶體中的另一個表格,或是將資料傳送至任何接近即時的目的地。您可以將此大量資料寫入資料庫和 Kafka 佇列中,此佇列具備非常低的成本和高效率的效能。

目標

必要條件

作業 1:建立物件儲存體結構

物件儲存將作為預設檔案儲存區域使用。您可以使用其他類型的檔案儲存區域,但物件儲存體是一種既簡單又低成本的方式,會以效能操控檔案。本教學課程中,兩應用系統都將從物件儲存體載入一個大型 CSV 檔案,其中顯示 Apache Spark 如何快速且智慧地處理大量資料。

  1. 建立區間:區間可用於組織及隔離您的雲端資源。您可以依據 IAM 原則將資源隔離。

    • 您可以使用此連結瞭解及設定區間的原則:管理區間

    • 建立一個區間以代管此教學課程中 2 個應用程式的所有資源。建立一個名為 analytics 的區間。

    • 前往 Oracle Cloud 主功能表,然後搜尋:身分識別與安全區間。在「區間」區段中,按一下建立區間並輸入名稱。 建立 -compartment.png

      注意:您必須授予使用者群組的存取權並加入您的使用者。

    • 按一下建立區間以包含您的區間。

  2. 在物件儲存中建立儲存桶:儲存桶是儲存物件的邏輯容器,因此用於此示範的所有檔案都將儲存在此儲存桶中。

    • 前往 Oracle Cloud 主功能表,然後搜尋儲存儲存桶。在「儲存桶」區段中,選取先前建立的區間 (分析)。

      選擇 -compartment.png

    • 按一下建立儲存桶 (Create Bucket) 。建立 4 個儲存桶:應用程式、資料、資料流程日誌、公事包

      建立 -bucket.png

    • 輸入這 4 個儲存桶的儲存桶名稱資訊,然後使用預設選項維護其他參數。

    • 針對每個儲存桶,按一下建立 (Create) 。您可以查看建立的儲存桶。

      儲存桶 -dataflow.png

注意: 複查儲存桶的 IAM 原則。如果您要在示範應用程式中使用這些儲存桶,就必須設定原則。您可以在這裡檢視概念與設定物件儲存體簡介IAM 原則

作業 2:建立 Autonomous Database

Oracle Cloud Autonomous Database 是 Oracle Database 的託管服務。本教學課程基於安全理由,應用程式將透過公事包連線至資料庫。

注意:請複查此處存取 Autonomous Database 的 IAM 原則:Autonomous Database 的 IAM 原則

作業 3:上傳 CSV 範例檔案

為了示範 Apache Spark 的強大功能,應用程式會讀取 1,000,000 行的 CSV 檔案。這個資料只會插入 Autonomous Data Warehouse 資料庫中,而且會在 Kafka 串流處理 (Oracle Cloud Streaming) 上發布。所有這些資源都可擴展,非常適合大量資料使用。

您可以順利匯入新的名為 GDPPERCAPTA 的表格。

adw-table-imported.png

作業 4:為您的 ADW ADMIN 密碼建立 Secret Vault

基於安全理由,ADW ADMIN 密碼將會儲存在 Vault 上。Oracle Cloud Vault 可以透過安全性代管此密碼,而且可以使用 OCI 認證在您的應用程式上存取此密碼。

注意:請從以下網址複查 OCI Vault 的 IAM 原則: OCI Vault IAM 原則

工作 5:建立 Kafka 串流處理 (Oracle Cloud Streaming)

Oracle Cloud Streaming 是一種類似託管串流服務的 Kafka。您可以使用 Kafka API 和通用 SDK 來開發應用系統。在本教學課程中,您將建立 Streaming 的執行處理,並將其設定為在兩個應用程式中執行,以發布及使用大量資料。

  1. 從 Oracle Cloud 主功能表,前往分析與 AI串流

  2. 將區間變更為分析。此示範中的每個資源都將在此區間上建立。這是更安全且更容易控制的 IAM。

  3. 按一下建立串流

    建立 -stream.png

  4. 將名稱輸入為 kafka_like (例如),您也可以使用預設值維護所有其他參數。

    儲存 - 建立 -stream.png

  5. 按一下建立以起始執行處理。

  6. 等待作用中狀態。現在,您可以使用此執行處理。

    注意:在串流建立處理作業中,您可以選取自動建立預設串流集區選項,以自動建立預設集區。

  7. 按一下 DefaultPool 連結。

    default-pool-option.png

  8. 檢視連線設定值。

    stream-conn-settings.png

    kafka-conn.png

  9. 將此資訊加註,如下一步將需要。

注意:請在此處複查 OCI Streaming 的 IAM 原則: OCI Streaming 的 IAM 原則

作業 6:產生 AUTH TOKEN 以存取 Kafka

您可以使用與 OCI IAM 上使用者關聯的認證權杖,存取 Oracle Cloud 中的 OCI 串流處理 (Kafka API) 和其他資源。在 Kafka 連線設定值中,SASL 連線字串有一個名為 password 的參數和 AUTH_TOKEN 的值,如上一個作業所述。若要啟用 OCI 串流的存取,您必須前往 OCI 主控台的使用者並建立 AUTH TOKEN。

  1. 從 Oracle Cloud 主功能表,前往身分識別與安全性使用者

    注意:請記住,建立 AUTH TOKEN 的使用者是使用您的 OCI CLI 設定的使用者,而且到目前為止所建立資源的所有 IAM 原則組態設定。資源為:

    • Oracle Cloud Autonomous Data Warehouse
    • Oracle Cloud 串流
    • Oracle Object Storage
    • Oracle 資料流程
  2. 按一下您的使用者名稱即可檢視詳細資訊。

    auth_token_create.png

  3. 按一下主控台左側的 Auth 權杖選項,然後按一下產生權杖

    注意:此步驟只會產生記號,在您完成此步驟之後將不會顯示。因此,請複製值並加以儲存。如果遺失權杖值,就必須重新產生認證權杖。

auth_token_1.png auth_token_2.png

作業 7:設定示範應用程式

本教學課程有一個示範應用程式,我們將為其設定所需的資訊。

  1. 使用下列連結下載應用程式:

  2. 在 Oracle Cloud 主控台中找到下列詳細資訊:

    • 租用戶命名空間

      租用戶 -namespace-1.png

      租用戶命名空間 -detail.png

    • 密碼加密密碼

      保存庫 -adw.png

      vault-adw-detail.png

      密語 -adw.png

    • 串流處理連線設定值

      kafka-conn.png

    • 認證權杖

      auth_token_create.png

      auth_token_2.png

  3. 開啟下載的壓縮檔 (Java-CSV-DB.zipJavaConsumeKafka.zip)。移至 /src/main/java/example 資料夾,找出 Example.java 代碼。

    代碼 -variables.png

    以下是需要使用您的租用戶資源值變更的變數。

    變數名稱 資源名稱 資訊標題
    bootstrapServers 串流處理連線設定值 啟動安裝伺服器
    streamPoolId 串流處理連線設定值 ocid1.streampool.oc1.iad..... SASL 連線字串中的值
    kafkaUsername 串流處理連線設定值 SASL 連線字串中 " " 的 usename 值
    kafkaPassword 認證權杖 值只會顯示在建立步驟中
    OBJECT_STORAGE_NAMESPACE 租用戶命名空間 租用戶
    命名空間 租用戶命名空間 租用戶
    PASSWORD_SECRET_OCID PASSWORD_SECRET_OCID OCID

備註:為此示範建立的所有資源皆位於美國 -ASHBURN-1 區域。存入您要使用的區域。如果您變更區域,則必須變更 2 個程式碼檔案中的 2 個點:

作業 8:瞭解 Java 程式碼

此教學課程使用 Java 建立,而且此程式碼也可移植到 Python。為了證明效率與擴展性,應用系統開發時會在整合流程的通用使用案例中展現一些可能性。因此,應用程式的程式碼會顯示下列範例:

此示範可以在您的本機機器中執行,並部署至「資料流程」執行處理,以作為工作執行。

注意:對於資料流程工作和本機機器,請使用 OCI CLI 組態存取 OCI 資源。在「資料流程」端,所有項目都已預先設定,因此不需要變更參數。在您的本機機器端,您必須安裝 OCI CLI 並設定租用戶、使用者和私密金鑰以存取您的 OCI 資源。

讓我們在區段中顯示 Example.java 程式碼:

作業 9:將您的應用程式以 Maven 封裝

在 Spark 中執行工作之前,必須先使用 Maven 封裝您的應用程式。

  1. 移至 /DataflowSparkStreamDemo 資料夾並執行此指令:

    mvn package

  2. 您可以看到 Maven 開始封裝。

    天文 -package-1a.png

  3. 如果一切都正確,您可以看到成功 (Success) 訊息。

    天文 -success-1a.png

作業 10:驗證執行

  1. 執行下列命令,在本機 Spark 機器中測試您的應用程式:

    spark-submit --class example.Example target/consumekafka-1.0-SNAPSHOT.jar

  2. 前往您的 Oracle Cloud Streaming Kafka 執行處理,然後按一下產生測試訊息來產生一些資料,以測試您的即時應用程式。

    測試 -kafka-1.png

  3. 您可以將此 JSON 訊息放入 Kafka 主題中。

    {"Organization Id": "1235", "Name": "Teste", "Country": "Luxembourg"}

    測試 -kafka-2.png

  4. 每次按一下產生時,都會傳送一則訊息給應用程式。您可以看到應用程式的輸出日誌,如下所示:

    • 這是從 kafka 主題讀取的資料。

      測試 -output-1.png

    • 這是 ADW 表格的合併資料。

      測試 -output-2.png

作業 11:建立並執行資料流程工作

現在,由於這兩個應用程式都會在您的本機 Spark 機器中成功執行,因此您可以將它們部署到您租用戶的 Oracle Cloud 資料流程中。

注意: 請參閱 Spark Streaming 文件,以設定對 Oracle Object Storage 和 Oracle Streaming (Kafka) 等資源的存取:啟用資料流程的存取權

  1. 將套裝程式上傳至物件儲存體。

    • 建立資料流程應用程式之前,您需要將 Java 使用者自建物件應用程式 (您的 ***-SNAPSHOT.jar 檔案) 上傳到名為 apps物件儲存儲存桶中。
  2. 建立資料流程應用程式。

    • 選取 Oracle Cloud 主功能表,然後前往分析與 AI資料流程。建立資料流程應用程式之前,請務必先選取您的分析區間。

    • 按一下建立應用程式

      create-dataflow-app.png

    • 填入如此類的參數。

      資料流程 -app.png

    • 按一下建立

    • 建立之後,按一下調整示範規模連結以檢視詳細資訊。若要執行工作,請按一下 RUN

      注意: 按一下顯示進階選項,即可啟用 Spark Stream 執行類型的 OCI 安全。

      進階 - options.png

  3. 啟用下列選項。

    主體 -execution.png

  4. 按一下執行以執行工作。

  5. 確認參數,然後再按一下執行 (Run)

    dataflow-run-job.png

    • 可以檢視工作的狀態。

      dataflow-run-status.png

    • 等到「狀態」變成成功 (Succeeded) ,您就可以看到結果。

      dataflow-run-success.png

確認

其他學習資源

探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。

如需產品文件,請造訪 Oracle Help Center