AWS 大數據實戰 Lab5 - 數據實時檢索(五)

在本練習中,您將學習如何使用 Amazon Kinesis 流式傳輸數據到 Elasticsearch 並進行分析,這是兩項徹底託管的基於雲的服務,用於實時傳輸大型分佈式數據流和查詢,分析等。linux

爲了使練習更加貼近實際業務場景,咱們將模擬從 EC2 的應用程序中生成交易訂單事件。redis

在此教程中,您將完成如下三個組件的實驗:json

• 建立Amazon Kinesis Data Stream
• 建立Amazon Kinesis Data Firehose
• 部署Amazon Elasticsearch緩存

本實驗的架構圖以下:安全

image-20210319221634997

構建寬表

由於 Elasticsearch 最多隻支持 2 個表的 Join 查詢,而咱們的表有 4 個,因此爲了更好的在 Elasticsearch 裏面使用,咱們經過腳本對數據進行了必定的處理,作成了寬表的模式。bash

準備表數據

登陸以前部署的 EC2 客戶端,上傳這三個文件,放到一個專門的目錄下,例如/home/ec2-user/csv架構

https://imgs.wzlinux.com/aws/tbl_address.csvapp

https://imgs.wzlinux.com/aws/tbl_customer.csv分佈式

https://imgs.wzlinux.com/aws/tbl_product.csvide

[ec2-user@ip-172-31-77-126 csv]$ ll
total 176
-rw-rw-r-- 1 ec2-user ec2-user 91306 Oct 30 09:53 tbl_address.csv
-rw-rw-r-- 1 ec2-user ec2-user 75857 Oct 30 09:53 tbl_customer.csv
-rw-rw-r-- 1 ec2-user ec2-user  6552 Oct 30 09:53 tbl_product.csv

加載進入緩存

登陸以前部署的 EC2 客戶端,上傳這三個文件,跟上一步的三個 csv 文件放到一個目錄下

https://imgs.wzlinux.com/aws/rds_address.sh

https://imgs.wzlinux.com/aws/rds_customer.sh

https://imgs.wzlinux.com/aws/rds_product.sh

啓動 redis 服務,安裝 unix2dos 工具

sudo amazon-linux-extras install redis4.0 -y
sudo systemctl enable redis
sudo systemctl start redis
sudo yum install dos2unix -y

執行以下腳本導入數據到 Redis(確保導入腳本和 csv 文件在同一個目錄下)

[ec2-user@ip-172-31-77-126 csv]$ sh rds_address.sh 
unix2dos: converting file ./tbl_address.rds to DOS format ...
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 3252
[ec2-user@ip-172-31-77-126 csv]$ sh rds_customer.sh 
unix2dos: converting file ./tbl_customer.rds to DOS format ...
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 4336
[ec2-user@ip-172-31-77-126 csv]$ sh rds_product.sh 
unix2dos: converting file ./tbl_product.rds to DOS format ...
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 500

生成流式數據寬表

登陸以前部署的 EC2 客戶端,上傳這個可執行文件(例如放到根目錄下),若是是其餘區域,請修改一下腳本。

https://imgs.wzlinux.com/aws/lab4.sh

執行腳本開始灌數據

sh lab4.sh kds-lab4 2021-03-19 &

lab4.sh 會往 kds 流裏面灌數據,格式爲

  • tid: 交易id
  • tno: 交易編號
  • tdate: 交易日期
  • uno: 客戶編號
  • pno: 產品編號
  • tnum: 交易數量
  • uname: 下單客戶的姓名
  • umobile: 下單客戶的手機號
  • ano: 下單配送地址編號
  • acity: 下單配送城市
  • aname: 下單配送地址
  • pclas: 產品類型
  • pname: 下單產品名稱
  • pprice: 單價
  • total: 總價(=tnum * pprice)
  • tuptime: 時間戳

以下僅供參考

{
    "tid": "D123",
    "tno": "DwGi20200904131249",
    "tdate": "2021-03-19",
    "uno": "U1030",
    "pno": "P1002",
    "tnum": 10,
    "uname": "張三",
    "umobile": "13800138000",
    "ano": "A1001",
    "acity": "深圳",
    "aname": "福田區**地址",
    "pclass": "MOBILE",
    "pname": "OPPO-Reno4",
    "pprice": 4999,
    "total": 4999,
    "tuptime": "2021-03-19T13:15:48Z"
}

檢查 lab4 開頭的日誌文件輸出,看是否運行正常,出現以下所示截圖表示正常 表構建完畢後以下圖所示

image-20210319223221281

寬表構建完畢,能夠開始在Elasticsearch裏面開始接受數據並進行實時檢索和可視化了。

實時檢索和可視化

本實驗演示經過 Kinesis Firehose 把流數據經過管道注入 Elasticsearch 實時檢索和可視化的過程。

導入數據

登陸並打開 Elasticsearch 控制檯,確保 ES 集羣狀態是有效。

image-20210319223347362

打開 Kinesis Firehose 控制檯,選擇建立傳輸流,設置傳輸流名字「lab4-kfh」,並選擇「kds-lab4」爲源

image-20210319223551632

下一步不對記錄進行任何處理(選默認值),在下一步的目標裏面選擇將數據送到 Elasticsearch,並選擇咱們部署的 ES 集羣,以及數據的索引名(此處爲 lab4),以下圖所示

image-20210319223717664

image-20210319223755169

須要配置 S3 轉存儲一份(或保留髮送失敗的記錄),配置對應桶和路徑便可

image-20210319223845729

接下來的緩衝區設置爲 1M 或者 60 秒便可(其餘所有默認)

image-20210319223941433

而後選擇審覈並建立傳送流便可,可是此時 KDF 的數據流尚未權限寫入 ES,由於 ES 開啓了精細訪問控制,咱們須要登錄到 Kibana 爲 KDF 的 Role 加上對 ES 的訪問權限。

登陸 ES 集羣添加權限

在咱們這裏,Kibana 地址爲以下,輸入咱們建立集羣時添加的 master 帳戶認證便可。

https://search-lab-es-lr5h4xkkutqsb4y6d4nvig5j2a.us-east-1.es.amazonaws.com/_plugin/kibana/

登陸 Elasticsearch 集羣后,打開安全-角色,咱們就選擇這個最高權限。

image-20210320132322991

點擊 all_access,進入 Mapped users

image-20210320132434957

建立角色映射,咱們把 KDF 的角色寫入到 Backend roles 裏面

image-20210320132534402

點擊映射保存

image-20210320132605809

建立 Index

點擊主菜單進入 Discover,選擇 Create index pattern

image-20210320132751946

系統已經發現了 Index 爲 lab4 的相關數據,咱們直接輸入 lab4 便可(注意:若是此處看不到數據,請略微等待,若是長時間等待依然沒有數據,請確認 Kinesis Firehose 的配置是否準確)

image-20210320132845825

接下來選擇tuptime爲時間戳便可

image-20210320132915472

經過選擇對應字段,咱們便可看到對應數據

image-20210320133208488

按時間維度查看

接下來咱們來建立第一個可視化圖表(按時間維度查看銷售額),首先建立一個視圖

image-20210320133350247

類型選擇 Vertical Bar

image-20210320133424335

類型選擇 數據源

image-20210320133454286

在 Y-axis 界面,aggregation下拉框選擇 sum,field 選擇 total,並備註爲總銷售額

image-20210320133613866

在 Buckets 界面,點擊 add,選擇 X-axis,Aggregation 選擇 Date Histogram,Field 選擇 tuptime,Minimum 選擇默認值 Auto(由於咱們輸入數據時間較短,因此難以造成例如以天爲單位的彙總數據)

image-20210320133756065

點擊更新後得到以下圖表,選擇左上角的保存

image-20210320133917863

設置保存名稱:time_revenue。注意:圖表的時間線,能夠根據要求在右上角位置進行修改。

按區域維度查看

這一次咱們選擇表格的方式(取銷售額排名前10的城市,選擇表格的形式)

image-20210320134053563

配置指標數據爲 total 列的和

image-20210320134136377

再點擊 add,建立 split rows,Sub-aggregation 選擇 terms,fields 選擇 acity.keyword,單擊更新按鈕

image-20210320134417244

得到的 Top 10 城市銷售金額表(注意:由於流數據一直在注入,因此數據會變),以下圖所示

image-20210320134448401

而後點擊左上角的「save」按鈕進行保存,輸入圖表的名稱 time_city

按產品維度查看


咱們選擇用餅圖的方式來按產品維度查看

image-20210320134540607

配置指標數據爲 total 列的和

image-20210320134616976

結合產品分類

image-20210320134737182

而且配置顯示標籤(若是未顯示標籤就只有圖,選中了標籤之後會顯示對應的備註和數據)

image-20210320134814341

得到以下圖所示的餅圖(顯示Top銷量的產品分類,以及其餘的彙總),保存成:time_pclass

image-20210320134853716

建立儀表盤


在上述章節的實驗過程當中,咱們建立了 3 個可視化報表

image-20210320134934720

這個章節,咱們把剛纔建立的圖表作成儀表盤。點擊左側按鈕,建立 Dashboard,點擊「create new dashboard」,點擊 add 按鈕,把剛纔的三個圖表添加進來

image-20210320135038193

添加已經建立好的各個圖表(並保存儀表盤,此處爲 MyLab4),效果以下

image-20210320135226800

能夠根據選擇右上角不一樣的時間區間得到不一樣的實時統計結果,各位熟悉 Elasticsearch 的學員能夠按照本身喜歡的方式在 ES 裏面構建各類圖表。

歡迎你們掃碼關注,獲取更多信息

AWS 大數據實戰 Lab5 - 數據實時檢索(五)

相關文章
相關標籤/搜索