日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spark 写tidb_优秀的数据工程师,怎么用Spark在TiDB上做OLAP分析

發(fā)布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark 写tidb_优秀的数据工程师,怎么用Spark在TiDB上做OLAP分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

TiDB 是一款定位于在線事務處理/在線分析處理的融合型數(shù)據(jù)庫產品,實現(xiàn)了一鍵水平伸縮,強一致性的多副本數(shù)據(jù)安全,分布式事務,實時 OLAP 等重要特性。

TiSpark 是 PingCAP 為解決用戶復雜 OLAP 需求而推出的產品。它借助 Spark 平臺,同時融合 TiKV 分布式集群的優(yōu)勢。

直接使用 TiSpark 完成 OLAP 操作需要了解 Spark,還需要一些開發(fā)工作。那么,有沒有一些開箱即用的工具能幫我們更快速地使用 TiSpark 在 TiDB 上完成 OLAP 分析呢?

目前開源社區(qū)上有一款工具 Waterdrop,項目地址 https://github.com/InterestingLab/waterdrop ,可以基于Spark,在 TiSpark 的基礎上快速實現(xiàn) TiDB 數(shù)據(jù)讀取和 OLAP 分析。

使用Waterdrop操作TiDB

在我們線上有這么一個需求,從 TiDB 中讀取某一天的網(wǎng)站訪問數(shù)據(jù),統(tǒng)計每個域名以及服務返回狀態(tài)碼的訪問次數(shù),最后將統(tǒng)計結果寫入 TiDB 另外一個表中。 我們來看看Waterdrop是如何實現(xiàn)這么一個功能的。

Waterdrop

Waterdrop 是一個非常易用,高性能,能夠應對海量數(shù)據(jù)的實時數(shù)據(jù)處理產品,它構建在 Spark 之上。Waterdrop 擁有著非常豐富的插件,支持從 TiDB、Kafka、HDFS、Kudu 中讀取數(shù)據(jù),進行各種各樣的數(shù)據(jù)處理,然后將結果寫入 TiDB、ClickHouse、Elasticsearch 或者 Kafka 中。

準備工作

1. TiDB 表結構介紹

Input(存儲訪問日志的表)

CREATE TABLE access_log (

domain VARCHAR(255),

datetime VARCHAR(63),

remote_addr VARCHAR(63),

http_ver VARCHAR(15),

body_bytes_send INT,

status INT,

request_time FLOAT,

url TEXT

)

+-----------------+--------------+------+------+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------------+--------------+------+------+---------+-------+

| domain | varchar(255) | YES | | NULL | |

| datetime | varchar(63) | YES | | NULL | |

| remote_addr | varchar(63) | YES | | NULL | |

| http_ver | varchar(15) | YES | | NULL | |

| body_bytes_send | int(11) | YES | | NULL | |

| status | int(11) | YES | | NULL | |

| request_time | float | YES | | NULL | |

| url | text | YES | | NULL | |

+-----------------+--------------+------+------+---------+-------+

Output(存儲結果數(shù)據(jù)的表)

CREATE TABLE access_collect (

date VARCHAR(23),

domain VARCHAR(63),

status INT,

hit INT

)

+--------+-------------+------+------+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+--------+-------------+------+------+---------+-------+

| date | varchar(23) | YES | | NULL | |

| domain | varchar(63) | YES | | NULL | |

| status | int(11) | YES | | NULL | |

| hit | int(11) | YES | | NULL | |

+--------+-------------+------+------+---------+-------+

2. 安裝 Waterdrop

有了 TiDB 輸入和輸出表之后, 我們需要安裝 Waterdrop,安裝十分簡單,無需配置系統(tǒng)環(huán)境變量 1. 準備 Spark環(huán)境 2. 安裝 Waterdrop 3. 配置 Waterdrop

以下是簡易步驟,具體安裝可以參照Quick Start

# 下載安裝Spark

cd /usr/local

wget https://archive.apache.org/dist/spark/spark-2.1.0/spark-2.1.0-bin-hadoop2.7.tgz

tar -xvf https://archive.apache.org/dist/spark/spark-2.1.0/spark-2.1.0-bin-hadoop2.7.tgz

wget

# 下載安裝Waterdrop

https://github.com/InterestingLab/waterdrop/releases/download/v1.2.0/waterdrop-1.2.0.zip

unzip waterdrop-1.2.0.zip

cd waterdrop-1.2.0

vim config/waterdrop-env.sh

# 指定Spark安裝路徑

SPARK_HOME=${SPARK_HOME:-/usr/local/spark-2.1.0-bin-hadoop2.7}

實現(xiàn) Waterdrop 處理流程

我們僅需要編寫一個 Waterdrop 配置文件即可完成數(shù)據(jù)的讀取、處理、寫入。

Waterdrop 配置文件由四個部分組成,分別是 Spark、Input、Filter 和 Output。Input 部分用于指定數(shù)據(jù)的輸入源,Filter 部分用于定義各種各樣的數(shù)據(jù)處理、聚合,Output 部分負責將處理之后的數(shù)據(jù)寫入指定的數(shù)據(jù)庫或者消息隊列。

整個處理流程為 Input -> Filter -> Output,整個流程組成了 Waterdrop 的 處理流程(Pipeline)。以下是一個具體配置,此配置來源于線上實際應用,但是為了演示有所簡化。

Input (TiDB)

這里部分配置定義輸入源,如下是從 TiDB 一張表中讀取數(shù)據(jù)。

input {

tidb {

database = "nginx"

pre_sql = "select * from nginx.access_log"

table_name = "spark_nginx_input"

}

}

Filter

在Filter部分,這里我們配置一系列的轉化, 大部分數(shù)據(jù)分析的需求,都是在Filter完成的。Waterdrop 提供了豐富的插件,足以滿足各種數(shù)據(jù)分析需求。這里我們通過 SQL 插件完成數(shù)據(jù)的聚合操作。

filter {

sql {

table_name = "spark_nginx_log"

sql = "select count(*) as hit, domain, status, substring(datetime, 1, 10) as date from spark_nginx_log where substring(datetime, 1, 10)='2019-01-20' group by domain, status, substring(datetime, 1, 10)"

}

}

Output (TiDB)

最后, 我們將處理后的結果寫入TiDB另外一張表中。TiDB Output是通過JDBC實現(xiàn)的

output {

tidb {

url = "jdbc:mysql://127.0.0.1:4000/nginx?useUnicode=true&characterEncoding=utf8"

table = "access_collect"

user = "username"

password = "password"

save_mode = "append"

}

}

Spark

這一部分是 Spark 的相關配置,主要配置 Spark 執(zhí)行時所需的資源大小以及其他 Spark 配置。

我們的 TiDB Input 插件是基于 TiSpark 實現(xiàn)的,而 TiSpark 依賴于 TiKV 集群和 Placement Driver (PD)。因此我們需要指定 PD 節(jié)點信息以及 TiSpark 相關配置spark.tispark.pd.addresses和spark.sql.extensions。

spark {

spark.app.name = "Waterdrop-tidb"

spark.executor.instances = 2

spark.executor.cores = 1

spark.executor.memory = "1g"

# Set for TiSpark

spark.tispark.pd.addresses = "localhost:2379"

spark.sql.extensions = "org.apache.spark.sql.TiExtensions"

}

運行 Waterdrop

我們將上述四部分配置組合成我們最終的配置文件conf/tidb.conf

spark {

spark.app.name = "Waterdrop-tidb"

spark.executor.instances = 2

spark.executor.cores = 1

spark.executor.memory = "1g"

# Set for TiSpark

spark.tispark.pd.addresses = "localhost:2379"

spark.sql.extensions = "org.apache.spark.sql.TiExtensions"

}

input {

tidb {

database = "nginx"

pre_sql = "select * from nginx.access_log"

table_name = "spark_table"

}

}

filter {

sql {

table_name = "spark_nginx_log"

sql = "select count(*) as hit, domain, status, substring(datetime, 1, 10) as date from spark_nginx_log where substring(datetime, 1, 10)='2019-01-20' group by domain, status, substring(datetime, 1, 10)"

}

}

output {

tidb {

url = "jdbc:mysql://127.0.0.1:4000/nginx?useUnicode=true&characterEncoding=utf8"

table = "access_collect"

user = "username"

password = "password"

save_mode = "append"

}

}

執(zhí)行命令,指定配置文件,運行 Waterdrop ,即可實現(xiàn)我們的數(shù)據(jù)處理邏輯。Local./bin/start-waterdrop.sh --config config/tidb.conf --deploy-mode client --master 'local[2]'yarn-client./bin/start-waterdrop.sh --config config/tidb.conf --deploy-mode client --master yarnyarn-cluster./bin/start-waterdrop.sh --config config/tidb.conf --deploy-mode cluster -master yarn

如果是本機測試驗證邏輯,用本地模式(Local)就可以了,一般生產環(huán)境下,都是使用yarn-client或者yarn-cluster模式。

檢查結果

mysql> select * from access_collect;

+------------+--------+--------+------+

| date | domain | status | hit |

+------------+--------+--------+------+

| 2019-01-20 | b.com | 200 | 63 |

| 2019-01-20 | a.com | 200 | 85 |

+------------+--------+--------+------+

2 rows in set (0.21 sec)

總結

在這篇文章中,我們介紹了如何使用 Waterdrop 從 TiDB 中讀取數(shù)據(jù),做簡單的數(shù)據(jù)處理之后寫入 TiDB 另外一個表中。僅通過一個配置文件便可快速完成數(shù)據(jù)的導入,無需編寫任何代碼。

除了支持 TiDB 數(shù)據(jù)源之外,Waterdrop 同樣支持Elasticsearch, Kafka, Kudu, ClickHouse等數(shù)據(jù)源。

于此同時,我們正在研發(fā)一個重要功能,就是在 Waterdrop 中,利用 TiDB 的事務特性,實現(xiàn)從 Kafka 到 TiDB 流式數(shù)據(jù)處理,并且支持端(Kafka)到端(TiDB)的 Exactly-Once 數(shù)據(jù)一致性。

希望了解 Waterdrop 和 TiDB,ClickHouse、Elasticsearch、Kafka結合使用的更多功能和案例,可以直接進入項目主頁 https://github.com/InterestingLab/waterdrop或者聯(lián)系項目負責人:Garyelephan 微信: garyelephant RickyHuo 微信: chodomatte1994

總結

以上是生活随笔為你收集整理的spark 写tidb_优秀的数据工程师,怎么用Spark在TiDB上做OLAP分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: a点w片| 美日毛片| 久久麻豆精品 | 欧美午夜精品久久久久久孕妇 | 精品久久久久久久久久 | 玖玖色在线 | 看国产黄色片 | 精品熟女一区二区 | 真实新婚偷拍xxxxx | 天天看天天爽 | 人人爱人人澡 | 久久精品国产亚洲av久 | 国产综合欧美 | 成人免费xxxxxx视频 | 噼里啪啦免费看 | 久久精品视频在线观看 | 国产日韩一级片 | 国产高潮av | 国产亚洲精品久久久久婷婷瑜伽 | 日韩不卡一二区 | 欧美做爰全过程免费观看 | 性猛╳xxx乱大交 | 国产乱淫av一区二区三区 | 欧美日本色 | 高潮毛片无遮挡免费看 | 香蕉视频污在线观看 | 91超碰在| 阿v天堂2014| 欧美一区二区三区视频在线 | 久久精品一区二区三区不卡牛牛 | 人妻一区二区三区四区 | 麻豆成人入口 | 美女扒开腿让人桶爽 | 嫩草视频国产 | 免费美女视频网站 | 大尺度电影在线 | 98精品视频 | 亚洲乱码国产乱码精品精98午夜 | 亚欧在线视频 | 日韩精品一区二区三区av | 亚洲精品~无码抽插 | av色综合| 色婷婷av一区二区三区之红樱桃 | 高清乱码免费 | 国产精品一区二区三区四 | 麻豆伊甸园 | 国产欧美一区二区精品性色 | 国产精品综合久久 | 国产乱妇4p交换乱免费视频 | 久热国产视频 | 国产精选91 | 麻豆综合 | 国产精品成人一区二区网站软件 | 国产日韩一区二区在线观看 | 一区二区三区视频播放 | 亚洲精品国产免费 | 国产精品视频99 | 岛国大片在线观看 | av图区 | 欧美综合在线观看 | 成人短视频在线播放 | 亚洲欧美日韩中文在线 | 欧美成人综合色 | 久久中文视频 | 久久精品视频16 | 欧美成在线观看 | 丝袜制服一区 | 亚洲情侣av | 无码精品人妻一二三区红粉影视 | 狠狠夜夜| 国产精品国产三级国产aⅴ下载 | 日韩成人中文字幕 | 国产成人精品视频在线观看 | 影音先锋成人网 | 成年视频在线 | 蜜桃av噜噜一区二区三区网址 | 九九精品在线观看 | 国产成人精品一区在线播放 | 一级免费黄色 | 欧美午夜激情视频 | 色噜噜一区二区三区 | 欧美mv日韩mv国产网站 | 99国产精品99久久久久久 | 少妇久久久久久 | 91视频看看 | 熟妇一区二区三区 | 亚洲欧美另类一区 | 成人黄色一级片 | 国产乱色 | 男人的天堂av网 | 欧美插插视频 | 国产精品111 | 欧美成人久久久 | 一色av | 欧美激情视频在线 | 国产精品二区三区 | 欧洲精品免费一区二区三区 | 青青草久久 | 欧美性视频网站 |