iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
AI & Data

Apache NiFi - 讓你輕鬆設計 Data Pipeline系列 第 18

Day18 NiFi - 與 AWS Athena & AWS Redshift 對接設定

今天來介紹的是如何透過 NiFi 來與 Athena 和 Redshift 來取得或寫入資料,其實兩個設定都很類似,怎麼說呢?讓我們繼續看下去。

Athena & Redshift Introduction

Athena 是一個底層為 Presto 為底所建立起來的 Search Engine,它幫助 User 可以輕鬆透過 SQL 來查詢 s3 的資料。

而 Redshift 是 AWS 的 DataWarehouse,他是以 PostgreSQL 為底,它本身可以儲存資料,也可以透過 Redshift Spenctrum 來建立 external table 對 S3 資料做查詢,一樣支援用 SQL 做查詢等操作。

簡單來說,兩個差別在於 Athena 本身不儲存 data,因為他是去對 S3 的資料做操作; Redshift 本身則是會儲存資料。此外,Redshift 因為他是以 PostgreSQL 為底,所以兩邊 SQL 在有些 Query 會有點小差異。

事前作業

簡單概要介紹一下兩個服務之後,接下來該如何在 Nifi 來使用他們呢?這邊我先幫大家整理了一個表格,待會就會用到:

Athena Redshit
JDBC Driver link Athena JDBC Redshift JDBC
Driver Class Name com.simba.athena.jdvc.Driver com.amazon.redshift.jdbc42.Driver
DB Connection URL jdbc:awsathena://AwsRegion=[region];User=[AwsAccessKeyID];Password=[AwsSecretAccessKey];S3OutputLocation=[s3_folder] jdbc:redshift://nifi-redshift-cluster-testing.creydll8nevp.ap-northeast-1.redshift.amazonaws.com:5439/dev;AccessKeyID=[access_key_id];SecretAccessKey=[secret_access_key];Region=[region]

待會如果我們要在 NiFi 對這兩個服務做操作的時候,需要先下載這兩個服務的 JDBC Driver,讀者們可以點閱相關連結做下載。此外,我也有整理個別 JDBC Driver 的 class name 以及 connection URL,待會就可以輕鬆設定完成。

How to use?

首先我們現在 Controller Service 新增2個 DBCPConnectionPool,個別 for Athena 和 Redshift:

再來,我們先對 AthenaConnectionPool 來做設定,只要設定好三個參數:

  • Database Conncetion URL
    填入 jdbc:awsathena://AwsRegion=[region];User=[AwsAccessKeyID];Password=[AwsSecretAccessKey];S3OutputLocation=[s3_folder],記得要填上自己的 key 相關資訊
  • Database Driver Calss Name
    填入 com.simba.athena.jdvc.Driver
  • Database Driver Location(s)
    填上剛剛下載的 JDBC Driver 在 Container 上的哪一個路徑。

設定完沒問題就可按下 Apply,接著 RedshiftConnectionPool 也是同樣的設定方式:

  • Database Conncetion URL
    填入 jdbc:redshift://nifi-redshift-cluster-testing.creydll8nevp.ap-northeast-1.redshift.amazonaws.com:5439/dev;AccessKeyID=[access_key_id];SecretAccessKey=[secret_access_key];Region=[region],記得要填上自己的 key 相關資訊
  • Database Driver Calss Name
    填入 com.amazon.redshift.jdbc42.Driver
  • Database Driver Location(s)
    填上剛剛下載的 JDBC Driver 在 Container 上的哪一個路徑。

全部設定完後,就可以 Enabled 起來了。接著如何在 Processor 做應用呢?我們這邊套用PutSQL作為簡單範例,先來看一下它的設定:

  • JDBC Connection Pool
    選擇剛剛建立好的 DB Connection Controller Service
  • SQL Statement
    這邊可以如同 Athena 或 Redshift 來去執行 SQL 指令,如此一來就會取得對應的 Record。

其實其他相關的 SQL Processor 都是一樣的操作,ex. QueryDatabaseTableRecord, ExecuteSQL 等,都是只要指定好先前建立好的 Controller Service,接著就可以用 SQL 去對服務的資料做操作,這樣是不是十分簡單呢?

小總結

今天這篇比較要去注意的是 JDBC Driver 的下載與設定,因為有牽動到 Controller Service,所以相較於其他服務是比較繁瑣的,因為沒有原生的 Processor 可以做使用。
但只要設定好其實用起來並不會太難,同時你也會發現這樣的設定流程與我們先前在整合 RDB 的操作其實很類似,都是要透過 JDBC Driver 才能去做 DB 等載體去做操作,所以倘若未來有沒支援的 Processor 時,或許 JDBC 這樣的方式能解決你的問題。

Reference


上一篇
Day17 NiFi - 與 AWS S3 & AWS lambda 對接設定
下一篇
Day19 NiFi - 與 AWS SNS & AWS SQS 對接設定
系列文
Apache NiFi - 讓你輕鬆設計 Data Pipeline30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言