国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Flink SQL 實戰:HBase 的結合應用

大數據
本文主要介紹 HBase 和 Flink SQL 的結合使用。HBase 作為 Google 發表 Big Table 論文的開源實現版本,是一種分布式列式存儲的數據庫,構建在 HDFS 之上的 NoSQL 數據庫,非常適合大規模實時查詢,因此 HBase 在實時計算領域使用非常廣泛。

本文主要介紹 HBase 和 Flink SQL 的結合使用。HBase 作為 Google 發表 Big Table 論文的開源實現版本,是一種分布式列式存儲的數據庫,構建在 HDFS 之上的 NoSQL 數據庫,非常適合大規模實時查詢,因此 HBase 在實時計算領域使用非常廣泛。可以實時寫 HBase,也可以利用 buckload 一把把離線 Job 生成 HFile Load 到HBase 表中。而當下 Flink SQL 的火熱程度不用多說,Flink SQL 也為 HBase 提供了 connector,因此 HBase 與 Flink SQL 的結合非常有必要實踐實踐。

當然,本文假設用戶有一定的 HBase 知識基礎,不會詳細去介紹 HBase 的架構和原理,本文著重介紹 HBase 和 Flink 在實際場景中的結合使用。主要分為兩種場景,第一種場景:HBase 作為維表與 Flink Kafka table 做 temporal table join 的場景;第二種場景:Flink SQL 做計算之后的結果寫到 HBase 表,供其他用戶查詢的場景。因此,本文介紹的內容如下所示:

  • HBase 環境準備
  • 數據準備
  • HBase 作為維度表進行 temporal table join的場景
  • Flink SQL 做計算寫 HBase 的場景
  • 總結

01 HBase 環境準備

由于沒有測試的 HBase 環境以及為了避免污染線上 Hbase 環境。因此,自己 build一個 Hbase docker image(大家可以 docker pull guxinglei/myhbase 拉到本地),是基于官方干凈的 ubuntu imgae 之上安裝了 Hbase 2.2.0 版本以及 JDK1.8 版本。

啟動容器,暴露 Hbase web UI 端口以及內置 zk 端口,方便我們從 web 頁面看信息以及創建 Flink Hbase table 需要 zk 的鏈接信息。

  1. docker run -it --network=host -p 2181:2181 -p 60011:60011 docker.io/guxinglei/myhbase:latest bash 

 

進入容器,啟動 HBase 集群,以及啟動 rest server,后續方便我們用 REST API 來讀取 Flink SQL 寫進 HBase 的數據。

  1. # 啟動hbase 集群bin/start-hbase.sh# 后臺啟動restServerbin/hbase-daemon.sh start rest -p 8000 

 

02 數據準備

由于 HBase 環境是自己臨時搞的單機服務,里面沒有數據,需要往里面寫點數據供后續示例用。在 Flink SQL 實戰系列第二篇中介紹了如何注冊 Flink Mysql table,我們可以將廣告位表抽取到 HBase 表中,用來做維度表,進行 temporal table join。因此,我們需要在 HBase 中創建一張表,同時還需要創建 Flink HBase table, 這兩張表通過 Flink SQL 的 HBase connector 關聯起來。

在容器中啟動 HBase shell,創建一張名為 dim_hbase 的 HBase 表,建表語句如下所示:

  1. # 在hbase shell創建 hbase表 
  2. hbase(main):002:0> create 'dim_hbase','cf' 
  3. Created table dim_hbase 
  4. Took 1.3120 seconds 
  5. => Hbase::Table - dim_hbase 

 

在 Flink 中創建 Flink HBase table,建表語句如下所示:

  1. # 注冊 Flink Hbase table 
  2. DROP TABLE IF EXISTS flink_rtdw.demo.hbase_dim_table; 
  3. CREATE TABLE flink_rtdw.demo.hbase_dim_table ( 
  4.   rowkey STRING, 
  5.   cf ROW < adspace_name STRING >, 
  6.   PRIMARY KEY (rowkey) NOT ENFORCED 
  7. WITH ( 
  8. 'connector' = 'hbase-1.4'
  9. 'table-name' = 'dim_hbase'
  10. 'sink.buffer-flush.max-rows' = '1000'
  11. 'zookeeper.quorum' = 'localhost:2181' 
  12. ); 

Flink MySQL table 和 Flink HBase table 已經創建好了,就可以寫抽取數據到HBase 的 SQL job 了,SQL 語句以及 job 狀態如下所示:

  1. # 抽取Mysql數據到Hbase表中 
  2.  
  3.  
  4. insert into 
  5.   hbase_dim_table 
  6. select 
  7. CAST (ID as VARCHAR), 
  8. ROW(name
  9. from 
  10.   mysql_dim_table; 

 

03 HBase 作為維表與 Kafka做 temporal join 的場景

在 Flink SQL join 中,維度表的 join 一定繞不開的,比如訂單金額 join 匯率表,點擊流 join 廣告位的明細表等等,使用場景非常廣泛。那么作為分布式數據庫的 HBase 比 MySQL 作為維度表用作維度表 join 更有優勢。在 Flink SQL 實戰系列第二篇中,我們注冊了廣告的點擊流,將 Kafka topic 注冊 Flink Kafka Table,同時也介紹了 temporal table join 在 Flink SQL 中的使用;那么本節中將會介紹 HBase 作為維度表來使用,上面小節中已經將數據抽取到 Hbase 中了,我們直接寫 temporal table join 計算邏輯即可。

作為廣告點擊流的 Flink Kafa table 與 作為廣告位的 Flink HBase table 通過廣告位 Id 進行 temporal table join,輸出廣告位 ID 和廣告位中文名字,SQL join 邏輯如下所示:

  1. select adsdw_dwd_max_click_mobileapp.publisher_adspace_adspaceId as publisher_adspace_adspaceId, 
  2.        hbase_dim_table.cf.adspace_name as publisher_adspace_name 
  3. from adsdw_dwd_max_click_mobileapp 
  4. left join hbase_dim_table FOR SYSTEM_TIME AS OF adsdw_dwd_max_click_mobileapp.procTime 
  5. on cast(adsdw_dwd_max_click_mobileapp.publisher_adspace_adspaceId as string) = hbase_dim_table.rowkey; 

temporal table join job 提交 Flink 集群上的狀態以及 join 結果如下所示:

04 計算結果 sink 到 HBase 作為結果的場景

上面小節中,HBase 作為維度表用作 temporal table join 是非常常見的場景,實際上 HBase 作為存儲計算結果也是非常常見的場景,畢竟 Hbase 作為分布式數據庫,底層存儲是擁有多副本機制的 HDFS,維護簡單,擴容方便, 實時查詢快,而且提供各種客戶端方便下游使用存儲在 HBase 中的數據。那么本小節就介紹 Flink SQL 將計算結果寫到 HBase,并且通過 REST API 查詢計算結果的場景。

進入容器中,在 HBase 中新建一張 HBase 表,一個 column family 就滿足需求,建表語句如下所示:

  1. # 注冊hbase sink table 
  2. create 'dwa_hbase_click_report','cf' 

 

建立好 HBase 表之后,我們需要在 Flink SQL 創建一張 Flink HBase table,這個時候我們需要明確 cf 這個 column famaly 下面 column 字段,在 Flink SQL實戰第二篇中,已經注冊好了作為點擊流的 Flink Kafka table,因此本節中,將會計算點擊流的 uv 和點擊數,因此兩個 column 分別為 uv 和 click_count,建表語句如下所示:

  1. # 注冊 Flink Hbase table 
  2. DROP TABLE IF EXISTS flink_rtdw.demo.dwa_hbase_click_report; 
  3. CREATE TABLE flink_rtdw.demo.dwa_hbase_click_report ( 
  4.   rowkey STRING, 
  5.   cf ROW < uv BIGINT, click_count BIGINT >, 
  6.   PRIMARY KEY (rowkey) NOT ENFORCED 
  7. WITH ( 
  8. 'connector' = 'hbase-1.4'
  9. 'table-name' = 'dwa_hbase_click_report'
  10. 'sink.buffer-flush.max-rows' = '1000'
  11. 'zookeeper.quorum' = 'hostname:2181' 
  12. ); 

 

前面點擊流的 Flink Kafka table 和存儲計算結果的 HBase table 和 Flink HBase table 已經準備了,我們將做一個1分鐘的翻轉窗口計算 uv 和點擊數,并且將計算結果寫到 HBase 中。對 HBase 了解的人應該知道,rowkey 的設計對 hbase regoin 的分布有著非常重要的影響,基于此我們的 rowkey 是使用 Flink SQL 內置的 reverse 函數進行廣告位 Id 進行反轉和窗口啟始時間做 concat,因此,SQL 邏輯語句如下所示:

  1. INSERT INTO dwa_hbase_click_report 
  2. SELECT 
  3. CONCAT(REVERSE(CAST(publisher_adspace_adspaceId AS STRING)) , 
  4. '_'
  5. CAST((UNIX_TIMESTAMP(DATE_FORMAT(TUMBLE_START(ets, INTERVAL '1' MINUTE),'yyyy-MM-dd HH:mm:ss')) * 1000) AS STRING) 
  6.   ) as rowkey,  
  7. ROW(COUNT(DISTINCT audience_mvid) , COUNT(audience_behavior_click_creative_impressionId)) as cf 
  8. FROM 
  9.   adsdw_dwd_max_click_mobileapp 
  10. WHERE publisher_adspace_adspaceId IS NOT NULL AND audience_mvid IS NOT NULL AND audience_behavior_click_creative_impressionId IS NOT NULL 
  11. GROUP BY 
  12.   TUMBLE(ets, INTERVAL '1' MINUTE), 
  13.   publisher_adspace_adspaceId; 

 

SQL job 提交之后的狀態以及結果 check 如下所示:

上述 SQL job 已經成功的將結算結果寫到 HBase 中了。對于線上的 HBase 服務來講,很多同事不一定有 HBase 客戶端的權限,從而也不能通過 HBase shell 讀取數據;另外作為線上報表服務顯然不可能通過 HBase shell 來通過查詢數據。因此,在實時報表場景中,數據開發工程師將數據寫入 HBase, 前端工程師通過 REST API 來讀取數據。前面我們已經啟動了 HBase rest server 進程,我們可以通 rest 服務提供讀取 HBase 里面的數據。

我們先 get 一條剛剛寫到 HBase 中的數據看看,如下所示:

下面我們開始通過 REST API 來查詢 HBase 中的數據,第一步,執行如下語句拿到 scannerId;首先需要將要查詢的 rowkey 進行 base64 編碼才能使用,后面需要將結果進行 base64 解碼

rowkey base64 編碼前:0122612_1606295280000 base64 編碼之后:MDEyMjYxMl8xNjA2Mjk1MjgwMDAw

  1. curl -vi -X PUT \ 
  2.          -H "Accept: text/xml" \ 
  3.          -H "Content-Type: text/xml" \ 
  4.          -d '<Scanner startRow="MDEyMjYxMl8xNjA2Mjk1MjgwMDAw" endRow="MDEyMjYxMl8xNjA2Mjk1MjgwMDAw"></Scanner>' \ 
  5. "http://hostname:8000/dwa_hbase_click_report/scanner" 

 

第二步,執行如下語句根據上條語句返回的 scannerID 查詢數據,可以看到返回的結果:

  1. curl -vi -X GET \ 
  2.          -H "Accept: application/json" \ 
  3. "http://hostname:8000/dwa_hbase_click_report/scanner/16063768141736ac0a8b5" 

 

第三步,查詢完畢之后,執行如下語句刪除該 scannerId:

  1. curl -vi -X DELETE \ 
  2.          -H "Accept: text/xml" \ 
  3. "http://hostname:8000/dwa_hbase_click_report/scanner/16063768141736ac0a8b5" 

 

五. 總結

在本篇文章中,我們介紹了 HBase 和 Flink SQL 的結合使用比較廣泛兩種的場景:作為維度表用以及存儲計算結果;同時使用 REST API 對 HBase 中的數據進行查詢,對于查詢用戶來說,避免直接暴露 HBase 的 zk,同時將 rest server 和 HBase 集群解耦。

作者簡介

余敖,360 數據開發高級工程師,目前專注于基于 Flink 的實時數倉建設與平臺化工作。對 Flink、Kafka、Hive、Spark 等進行數據 ETL 和數倉開發有豐富的經驗。

責任編輯:未麗燕 來源: Flink 中文社區
相關推薦

2024-11-08 16:13:43

Python開發

2019-05-05 09:03:06

HBase大數據存儲數據存儲

2010-08-06 10:49:46

RIP路由

2025-08-13 06:00:00

Flink SQLFlink大數據

2025-04-27 01:05:00

AI智能日志

2022-06-06 08:51:56

PandasSQLPython

2010-12-14 11:30:11

2014-07-14 13:36:23

HBase實戰

2023-10-24 20:32:40

大數據

2025-03-26 02:00:00

C#Docker開發

2021-12-09 06:59:24

FlinkSQL 開發

2022-05-15 09:57:59

Flink SQL時間語義

2022-05-18 09:02:28

Flink SQLSQL字符串

2022-04-22 09:05:12

蔚來汽車Flink實時數倉

2015-06-02 10:36:42

大數據

2009-06-04 20:38:15

MyEclipseWeblogicWeb應用管理

2018-08-26 22:39:08

單頁應用HATEOAS

2013-04-26 15:13:26

Ted YuHBase大數據全球技術峰會

2017-05-22 08:05:46

HBase阿里搜索實踐

2012-03-29 13:56:58

HBase數據庫
點贊
收藏

51CTO技術棧公眾號

亚洲美女尤物影院| 亚洲午夜极品| 亚洲国产精品欧美一二99| 男女日批视频在线观看| 91精品国产91久久久久久密臀 | **欧美大码日韩| 久久手机在线视频| 蜜臀va亚洲va欧美va天堂| 北条麻妃高清一区| 色中色综合网| 国产成人精品免高潮在线观看| 国产一区二区av在线| 国产亚洲精品美女| 伊人久久综合一区二区| 亚洲成人黄色在线| 白白色在线观看| 亚洲国产成人精品久久久国产成人一区 | 亚洲国产精品一区二区www在线| 无码日韩人妻精品久久蜜桃| 99视频精品免费视频| 蜜桃视频成人在线观看| 久久国产福利| 色播五月综合| 老司机免费视频一区二区 | 欧美一区二区三区四区五区 | 久久久久久黄色| 亚洲成熟丰满熟妇高潮xxxxx| 大白屁股一区二区视频| 8x8ⅹ国产精品一区二区二区| 风流少妇一区二区| 国产精品999视频| 久久精品无码一区二区三区 | 久久99精品久久只有精品| 亚洲区一区二区三区| 精品一区二区三区免费播放| xxxxxx在线观看| 99久久婷婷国产综合精品电影| 一区二区三区视频在线观看| 黄页视频在线观看| 色老头久久综合| 一本一道波多野毛片中文在线 | 免费观看又污又黄在线观看国产 | 免费av一区二区三区四区| 国产精品视频资源| 99精品欧美| 在线一区亚洲| 99久久婷婷国产综合精品电影 | 一区二区自拍| 亚洲精品人成| 99riav久久精品riav| 黄色成人羞羞视频| 欧美色另类天堂2015| 青青青草视频在线| 久久精品人人做人人爽| 美女毛片一区二区三区四区最新中文字幕亚洲 | 狠狠躁狠狠躁视频专区| 亚洲综合色婷婷| 成人高清网站| 国产视频精品自拍| 福利在线一区| 成人免费网站在线观看| 日日欢夜夜爽一区| 欧美女人性生活视频| 一卡二卡欧美日韩| а天堂中文在线官网| www.日韩系列| 色小子综合网| 精品久久免费观看| 亚洲精品日韩专区silk | 亚洲大型综合色站| 91在线三级| 668精品在线视频| 91久久夜色精品国产九色| 国产成人在线小视频| 亚洲午夜在线观看视频在线| 日本在线观看大片免费视频| 9191久久久久久久久久久| 久久超碰97中文字幕| 在线观看成人免费| 国产精品∨欧美精品v日韩精品| 女人天堂亚洲aⅴ在线观看| 五月天男人天堂| 美女100%一区| 欧美激情小视频| 伊人成人网在线看| aaaaaa亚洲| 日韩欧美综合在线| 亚洲免费成人av在线| 偷拍视频一区二区| 亚洲成人激情av| 日本欧美在线| 欧美国产综合视频| 国产精品国产馆在线真实露脸| 国内精品久久久久久野外| 欧美精品在线播放| 视频一区国产视频| 国产在线制服美女| 色综合亚洲精品激情狠狠| 亚洲高清不卡| 涩涩漫画在线观看| 亚洲女人初尝黑人巨大| 欧美日韩国产高清| www 四虎| 久久久av一区| 日本不卡中文字幕| 日本一卡二卡四卡精品| 久久久久久久久亚洲| 国产一区欧美日韩| 麻豆视频在线观看免费| 国产精品福利久久久| 26uuu久久天堂性欧美| 在线手机中文字幕| 久久这里精品国产99丫e6| 亚洲主播在线观看| 97精品资源在线观看| 一区二区三区在线视频111| 欧美性大战久久久久久久| 中文字幕精品影院| 免费在线观看毛片网站| 亚洲九九九在线观看| 美女日韩在线中文字幕| 一级片在线免费看| 国产成人综合精品| 国产精品家庭影院| 日韩免费高清视频网站| 成人免费播放器| 亚洲午夜av电影| 久久99精品久久久久| 午夜影院免费在线| 欧美精品亚洲| 777午夜精品免费视频| 午夜视频精品| 天堂中文在线8| 成人信息集中地欧美| 亚洲国产精品久久久男人的天堂| 涩爱av色老久久精品偷偷鲁| 欧美视频在线观看网站 | 91在线精品| 2019中文字幕在线| 中文乱码免费一区二区| 亚洲日本一区二区三区在线| 成人亚洲视频在线观看| 性日韩欧美在线视频| 亚洲靠逼com| 婷婷色综合网| 97人人在线| 久久久久久欧美精品色一二三四| 欧美日韩一区二区不卡| 视频一区免费在线观看| 男人的天堂免费在线视频| 男同互操gay射视频在线看| 亚洲午夜性刺激影院| 91香蕉视频污在线| 成人资源在线播放| a视频在线看| 激情视频一区二区| 亚洲成色777777在线观看影院| 久久精品国产在热久久| www.26天天久久天堂| 无限资源日本好片| 国产成人中文字幕| 欧美欧美欧美欧美| 精品一区二区三区免费| 国产视频网站一区二区三区| free性欧美1819hd| 亚洲a级在线播放观看| 日韩精品一区二区三区在线观看| 丁香另类激情小说| 日韩av三区| а√天堂中文在线资源bt在线| 欧美人与物videos另类| 色偷偷偷亚洲综合网另类 | 亚洲免费视频成人| 欧美一区激情| 亚洲精品一区| 成人免费淫片免费观看| 91视频最新| 日韩精品在线免费观看| 中文字幕不卡在线| 国产精品mv在线观看| 久久uomeier| 看黄色免费网站| 午夜午夜精品一区二区三区文| 欧美大码xxxx| 欧美三级韩国三级日本三斤| 99免费精品在线观看| 午夜精品久久久久久久四虎美女版| 免费在线看黄网站| 日韩av综合在线观看| 91亚洲午夜在线| 在线电影中文日韩| 一道本成人在线| 成人黄色网址在线观看| 99久久99久久精品国产片桃花| 97人人在线视频| 天堂资源在线观看| youjizz.com在线观看| 91中文在线视频| 美日韩丰满少妇在线观看| 欧美精选在线播放|