如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖

這篇文章給大家介紹如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

十載的延平網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整延平建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“延平網(wǎng)站設(shè)計(jì)”,“延平網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

背景

現(xiàn)今大數(shù)據(jù)存儲(chǔ)和處理需求越來越多樣化,在后 Hadoop 時(shí)代,如何構(gòu)建一個(gè)統(tǒng)一的數(shù)據(jù)湖存儲(chǔ),并在其上進(jìn)行多種形式的數(shù)據(jù)分析,成了企業(yè)構(gòu)建大數(shù)據(jù)生態(tài)的一個(gè)重要方向。怎樣快速、一致、原子性地在數(shù)據(jù)湖存儲(chǔ)上構(gòu)建起 Data Pipeline,成了亟待解決的問題。并且伴隨云原生時(shí)代到來,云原生天生具有的自動(dòng)化部署和交付能力也正催化這一過程。下面就主要介紹如何利用 Iceberg 與 Kubernetes 打造新一代云原生數(shù)據(jù)湖。

何為 Iceberg

ApacheIceberg是一種用于大型分析數(shù)據(jù)集的開放表格式。Iceberg向Presto和Spark添加了一些表,這些表使用了一種與SQL表類似的高性能格式。

Apache Iceberg 是由 Netflix 開發(fā)開源的,其于2018年11月16日進(jìn)入 Apache 孵化器,是 Netflix 公司數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)。Iceberg 本質(zhì)上是一種專為海量分析設(shè)計(jì)的表格式標(biāo)準(zhǔn),可為主流計(jì)算引擎如 Presto、Spark 等提供高性能的讀寫和元數(shù)據(jù)管理能力。Iceberg 不關(guān)注底層存儲(chǔ)(如 HDFS)與表結(jié)構(gòu)(業(yè)務(wù)定義),它為兩者之間提供了一個(gè)抽象層,將數(shù)據(jù)與元數(shù)據(jù)組織了起來。

Iceberg 主要特性包括:

  • ACID:具備 ACID 能力,支持 row level update/delete;支持 serializable isolation 與 multiple concurrent writers

  • Table Evolution:支持 inplace table evolution(schema & partition),可像 SQL 一樣操作 table schema;支持 hidden partitioning,用戶無需顯示指定

  • 接口通用化:為上層數(shù)據(jù)處理引擎提供豐富的表操作接口;屏蔽底層數(shù)據(jù)存儲(chǔ)格式差異,提供對(duì) Parquet、ORC 和 Avro 格式支持

依賴以上特性,Iceberg 可幫助用戶低成本的實(shí)現(xiàn) T+0 級(jí)數(shù)據(jù)湖。

Iceberg on Kubernetes

傳統(tǒng)方式下,用戶在部署和運(yùn)維大數(shù)據(jù)平臺(tái)時(shí)通常采用手動(dòng)或半自動(dòng)化方式,這往往消耗大量人力,穩(wěn)定性也無法保證。Kubernetes 的出現(xiàn),革新了這一過程。Kubernetes 提供了應(yīng)用部署和運(yùn)維標(biāo)準(zhǔn)化能力,用戶業(yè)務(wù)在實(shí)施 Kubernetes 化改造后,可運(yùn)行在其他所有標(biāo)準(zhǔn) Kubernetes 集群中。在大數(shù)據(jù)領(lǐng)域,這種能力可幫助用戶快速部署和交付大數(shù)據(jù)平臺(tái)(大數(shù)據(jù)組件部署尤為復(fù)雜)。尤其在大數(shù)據(jù)計(jì)算存儲(chǔ)分離的架構(gòu)中,Kubernetes 集群提供的 Serverless 能力,可幫助用戶即拿即用的運(yùn)行計(jì)算任務(wù)。并且再配合離在線混部方案,除了可做到資源統(tǒng)一管控降低復(fù)雜度和風(fēng)險(xiǎn)外,集群利用率也會(huì)進(jìn)一步提升,大幅降低成本。

我們可基于 Kubernetes 構(gòu)建 Hadoop 大數(shù)據(jù)平臺(tái): 如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖 在近幾年大熱的數(shù)據(jù)湖領(lǐng)域,通過傳統(tǒng) Hadoop 生態(tài)構(gòu)建實(shí)時(shí)數(shù)據(jù)湖,受制于組件定位與設(shè)計(jì),較為復(fù)雜與困難。Iceberg 的出現(xiàn)使得依賴開源技術(shù)快速構(gòu)建實(shí)時(shí)數(shù)據(jù)湖成為可能,這也是大數(shù)據(jù)未來發(fā)展方向 - 實(shí)時(shí)分析、倉(cāng)湖一體與云原生。引入 Iceberg 后,整體架構(gòu)變?yōu)椋?如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖 Kubernetes 負(fù)責(zé)應(yīng)用自動(dòng)化部署與資源管理調(diào)度,為上層屏蔽了底層環(huán)境復(fù)雜性。Iceberg + Hive MetaStore + HDFS 實(shí)現(xiàn)了基于 Hadoop 生態(tài)的實(shí)時(shí)數(shù)據(jù)湖,為大數(shù)據(jù)應(yīng)用提供數(shù)據(jù)訪問及存儲(chǔ)。Spark、Flink 等計(jì)算引擎以 native 的方式運(yùn)行在 Kubernetes 集群中,資源即拿即用。與在線業(yè)務(wù)混部后,更能大幅提升集群資源利用率。

如何構(gòu)建云原生實(shí)時(shí)數(shù)據(jù)湖

架構(gòu)圖

如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖

  • 資源層:Kubernetes 提供資源管控能力

  • 數(shù)據(jù)層:Iceberg 提供 ACID、table 等數(shù)據(jù)集訪問操作能力

  • 存儲(chǔ)層:HDFS 提供數(shù)據(jù)存儲(chǔ)能力,Hive MetaStore 管理 Iceberg 表元數(shù)據(jù),Postgresql 作為 Hive MetaStore 存儲(chǔ)后端

  • 計(jì)算層:Spark native on Kubernetes,提供流批計(jì)算能力

創(chuàng)建 Kubernetes 集群

首先通過官方二進(jìn)制或自動(dòng)化部署工具部署 Kubernetes 集群,如 kubeadm,推薦使用騰訊云創(chuàng)建 TKE 集群。 如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖 推薦配置為:3 臺(tái) S2.2XLARGE16(8核16G)實(shí)例

部署 Hadoop 集群

可通過開源 Helm 插件或自定義鏡像在 Kubernetes 上部署 Hadoop 集群,主要部署 HDFS、Hive MetaStore 組件。在騰訊云 TKE 中推薦使用 k8s-big-data-suite 大數(shù)據(jù)應(yīng)用自動(dòng)化部署 Hadoop 集群。 如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖 k8s-big-data-suite 是我們基于生產(chǎn)經(jīng)驗(yàn)開發(fā)的大數(shù)據(jù)套件,可支持主流的大數(shù)據(jù)組件在 Kubernetes 上一鍵部署。部署之前請(qǐng)先按照要求做集群初始化:

# 標(biāo)識(shí)存儲(chǔ)節(jié)點(diǎn),至少三個(gè)
$ kubectl label node xxx storage=true

部署成功后,連入 TKE 集群查看組件狀態(tài):

$ kubectl  get po
NAME                                                   READY   STATUS      RESTARTS   AGE
alertmanager-tkbs-prometheus-operator-alertmanager-0   2/2     Running     0          6d23h
cert-job-kv5tm                                         0/1     Completed   0          6d23h
elasticsearch-master-0                                 1/1     Running     0          6d23h
elasticsearch-master-1                                 1/1     Running     0          6d23h
flink-operator-controller-manager-9485b8f4c-75zvb      2/2     Running     0          6d23h
kudu-master-0                                          2/2     Running     2034       6d23h
kudu-master-1                                          2/2     Running     0          6d23h
kudu-master-2                                          2/2     Running     0          6d23h
kudu-tserver-0                                         1/1     Running     0          6d23h
kudu-tserver-1                                         1/1     Running     0          6d23h
kudu-tserver-2                                         1/1     Running     0          6d23h
prometheus-tkbs-prometheus-operator-prometheus-0       3/3     Running     0          6d23h
superset-init-db-g6nz2                                 0/1     Completed   0          6d23h
thrift-jdbcodbc-server-1603699044755-exec-1            1/1     Running     0          6d23h
tkbs-admission-5559c4cddf-w7wtf                        1/1     Running     0          6d23h
tkbs-admission-init-x8sqd                              0/1     Completed   0          6d23h
tkbs-airflow-scheduler-5d44f5bf66-5hd8k                1/1     Running     2          6d23h
tkbs-airflow-web-84579bc4cd-6dftv                      1/1     Running     2          6d23h
tkbs-client-844559f5d7-r86rb                           1/1     Running     6          6d23h
tkbs-controllers-6b9b95d768-vr7t5                      1/1     Running     0          6d23h
tkbs-cp-kafka-0                                        3/3     Running     2          6d23h
tkbs-cp-kafka-1                                        3/3     Running     2          6d23h
tkbs-cp-kafka-2                                        3/3     Running     2          6d23h
tkbs-cp-kafka-connect-657bdff584-g9f2r                 2/2     Running     2          6d23h
tkbs-cp-schema-registry-84cd7cbdbc-d28jk               2/2     Running     4          6d23h
tkbs-grafana-68586d8f97-zbc2m                          2/2     Running     0          6d23h
tkbs-hadoop-hdfs-dn-6jng4                              2/2     Running     0          6d23h
tkbs-hadoop-hdfs-dn-rn8z9                              2/2     Running     0          6d23h
tkbs-hadoop-hdfs-dn-t68zq                              2/2     Running     0          6d23h
tkbs-hadoop-hdfs-jn-0                                  2/2     Running     0          6d23h
tkbs-hadoop-hdfs-jn-1                                  2/2     Running     0          6d23h
tkbs-hadoop-hdfs-jn-2                                  2/2     Running     0          6d23h
tkbs-hadoop-hdfs-nn-0                                  2/2     Running     5          6d23h
tkbs-hadoop-hdfs-nn-1                                  2/2     Running     0          6d23h
tkbs-hbase-master-0                                    1/1     Running     3          6d23h
tkbs-hbase-master-1                                    1/1     Running     0          6d23h
tkbs-hbase-rs-0                                        1/1     Running     3          6d23h
tkbs-hbase-rs-1                                        1/1     Running     0          6d23h
tkbs-hbase-rs-2                                        1/1     Running     0          6d23h
tkbs-hive-metastore-0                                  2/2     Running     0          6d23h
tkbs-hive-metastore-1                                  2/2     Running     0          6d23h
tkbs-hive-server-8649cb7446-jq426                      2/2     Running     1          6d23h
tkbs-impala-catalogd-6f46fd97c6-b6j7b                  1/1     Running     0          6d23h
tkbs-impala-coord-exec-0                               1/1     Running     7          6d23h
tkbs-impala-coord-exec-1                               1/1     Running     7          6d23h
tkbs-impala-coord-exec-2                               1/1     Running     7          6d23h
tkbs-impala-shell-844796695-fgsjt                      1/1     Running     0          6d23h
tkbs-impala-statestored-798d44765f-ffp82               1/1     Running     0          6d23h
tkbs-kibana-7994978d8f-5fbcx                           1/1     Running     0          6d23h
tkbs-kube-state-metrics-57ff4b79cb-lmsxp               1/1     Running     0          6d23h
tkbs-loki-0                                            1/1     Running     0          6d23h
tkbs-mist-d88b8bc67-s8pxx                              1/1     Running     0          6d23h
tkbs-nginx-ingress-controller-87b7fb9bb-mpgtj          1/1     Running     0          6d23h
tkbs-nginx-ingress-default-backend-6857b58896-rgc5c    1/1     Running     0          6d23h
tkbs-nginx-proxy-64964c4c79-7xqx6                      1/1     Running     6          6d23h
tkbs-postgresql-5b9ddc464c-xc5nn                       1/1     Running     1          6d23h
tkbs-postgresql-ha-pgpool-5cbf85d847-v5dsr             1/1     Running     1          6d23h
tkbs-postgresql-ha-postgresql-0                        2/2     Running     0          6d23h
tkbs-postgresql-ha-postgresql-1                        2/2     Running     0          6d23h
tkbs-prometheus-node-exporter-bdp9v                    1/1     Running     0          6d23h
tkbs-prometheus-node-exporter-cdrqr                    1/1     Running     0          6d23h
tkbs-prometheus-node-exporter-cv767                    1/1     Running     0          6d23h
tkbs-prometheus-node-exporter-l82wp                    1/1     Running     0          6d23h
tkbs-prometheus-node-exporter-nb4pk                    1/1     Running     0          6d23h
tkbs-prometheus-operator-operator-f74dd4f6f-lnscv      2/2     Running     0          6d23h
tkbs-promtail-d6r9r                                    1/1     Running     0          6d23h
tkbs-promtail-gd5nz                                    1/1     Running     0          6d23h
tkbs-promtail-l9kjw                                    1/1     Running     0          6d23h
tkbs-promtail-llwvh                                    1/1     Running     0          6d23h
tkbs-promtail-prgt9                                    1/1     Running     0          6d23h
tkbs-scheduler-74f5777c5d-hr88l                        1/1     Running     0          6d23h
tkbs-spark-history-7d78cf8b56-82xg7                    1/1     Running     4          6d23h
tkbs-spark-thirftserver-5757f9588d-gdnzz               1/1     Running     4          6d23h
tkbs-sparkoperator-f9fc5b8bf-8s4m2                     1/1     Running     0          6d23h
tkbs-sparkoperator-f9fc5b8bf-m9pjk                     1/1     Running     0          6d23h
tkbs-sparkoperator-webhook-init-m6fn5                  0/1     Completed   0          6d23h
tkbs-superset-54d587c867-b99kw                         1/1     Running     0          6d23h
tkbs-zeppelin-controller-65c454cfb9-m4snp              1/1     Running     0          6d23h
tkbs-zookeeper-0                                       3/3     Running     0          6d23h
tkbs-zookeeper-1                                       3/3     Running     0          6d23h
tkbs-zookeeper-2                                       3/3     Running     0          6d23h
注意

當(dāng)前 TKE k8s-big-data-suite 1.0.3 在初始化 Postgresql 時(shí),缺少對(duì) Hive transaction 的支持,從而導(dǎo)致 Iceberg 表創(chuàng)建失敗。請(qǐng)先執(zhí)行以下命令手動(dòng)修復(fù):

$ kubectl  get pod | grep postgresql
tkbs-postgresql-5b9ddc464c-xc5nn                       1/1     Running            1          7d18h
$ kubectl exec tkbs-postgresql-5b9ddc464c-xc5nn -- psql -c "UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'metastore';SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'metastore'"; kubectl exec tkbs-postgresql-5b9ddc464c-xc5nn -- psql -c "drop database metastore"; kubectl exec tkbs-postgresql-5b9ddc464c-xc5nn -- psql -c "create database metastore"
$ kubectl get pod | grep client
tkbs-client-844559f5d7-r86rb                           1/1     Running     7          7d18h
$ kubectl exec tkbs-client-844559f5d7-r86rb -- schematool -dbType postgres -initSchema

集成 Iceberg

當(dāng)前 Iceberg 對(duì) Spark 3.0 有較好支持,對(duì)比 Spark 2.4 有以下優(yōu)勢(shì): 如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖 所以我們默認(rèn)采用 Spark 3.0 作為計(jì)算引擎。Spark 集成 Iceberg,首先需引入 Iceberg jar 依賴。用戶可在提交任務(wù)階段手動(dòng)指定,或?qū)?jar 包直接引入 Spark 安裝目錄。為了便于使用,我們選擇后者。筆者已打包 Spark 3.0.1 的鏡像,供用戶測(cè)試使用:ccr.ccs.tencentyun.com/timxbxu/spark:v3.0.1。

我們使用 Hive MetaStore 管理 Iceberg 表信息,通過 Spark Catalog 訪問和使用 Iceberg 表。在 Spark 中做如下配置:

spark.sql.catalog.hive_prod = org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.hive_prod.type = hive
spark.sql.catalog.hive_prod.uri = thrift://metastore-host:port

若使用 TKE k8s-big-data-suite 套件部署 Hadoop 集群,可通過 Hive Service 訪問 Hive MetaStore:

$ kubectl  get svc | grep hive-metastore
tkbs-hive-metastore                                 ClusterIP      172.22.255.104   <none>           9083/TCP,8008/TCP                                             6d23h

Spark 配置變更為:

spark.sql.catalog.hive_prod = org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.hive_prod.type = hive
spark.sql.catalog.hive_prod.uri = thrift://tkbs-hive-metastore

創(chuàng)建和使用 Iceberg 表

執(zhí)行 spark-sql 進(jìn)行驗(yàn)證:

$ spark-sql --master k8s://{k8s-apiserver} --conf spark.kubernetes.container.image=ccr.ccs.tencentyun.com/timxbxu/spark:v3.0.1 --conf spark.sql.catalog.hive_prod=org.apache.iceberg.spaparkCatalog --conf spark.sql.catalog.hive_prod.type=hive --conf spark.sql.catalog.hive_prod.uri=thrift://tkbs-hive-metastore --conf spark.sql.warehouse.dir=hdfs://tkbs-hadoop-hdfs-nn/iceberg

各參數(shù)含義如下:

  • --master k8s://{k8s-apiserver}:Kubernetes 集群地址

  • --conf spark.kubernetes.container.image=ccr.ccs.tencentyun.com/timxbxu/spark:v3.0.1:Spark Iceberg 鏡像

  • --conf spark.sql.catalog.hive_prod.type=hive:Spark Catalog 類型

  • --conf spark.sql.catalog.hive_prod.uri=thrift://tkbs-hive-metastore:Hive MetaStore 地址

  • --conf spark.sql.warehouse.dir=hdfs://tkbs-hadoop-hdfs-nn/iceberg:Spark 數(shù)據(jù)地址

創(chuàng)建 Iceberg 表:

spark-sql> CREATE TABLE hive_prod.db.table (id bigint, data string) USING iceberg;

查看是否創(chuàng)建成功:

spark-sql> desc hive_prod.db.table;
20/11/02 20:43:43 INFO BaseMetastoreTableOperations: Refreshing table metadata from new version: hdfs://10.0.1.129/iceberg/db.db/table/metadata/00000-1306e87a-16cb-4a6b-8ca0-0e1846cf1837.metadata.json
20/11/02 20:43:43 INFO CodeGenerator: Code generated in 21.35536 ms
20/11/02 20:43:43 INFO CodeGenerator: Code generated in 13.058698 ms
id    bigint
data    string
# Partitioning
Not partitioned
Time taken: 0.537 seconds, Fetched 5 row(s)
20/11/02 20:43:43 INFO SparkSQLCLIDriver: Time taken: 0.537 seconds, Fetched 5 row(s)

查看 HDFS 是否存在表信息:

$ hdfs dfs -ls /iceberg/db.db
Found 5 items
drwxr-xr-x   - root supergroup          0 2020-11-02 16:37 /iceberg/db.db/table

查看 Postgresql 是否存在表元數(shù)據(jù)信息:

$ kubectl get pod | grep postgresql
tkbs-postgresql-5b9ddc464c-xc5nn                       1/1     Running     1          7d19h$ kubectl exec tkbs-postgresql-5b9ddc464c-xc5nn -- psql -d metastore -c 'select * from "TBLS"'

向 Iceberg 表插入數(shù)據(jù):

spark-sql> INSERT INTO hive_prod.db.table VALUES (1, 'a'), (2, 'b');

查看是否插入成功:

spark-sql> select * from hive_prod.db.table;
...
1    a
2    b
Time taken: 0.854 seconds, Fetched 2 row(s)
20/11/02 20:49:43 INFO SparkSQLCLIDriver: Time taken: 0.854 seconds, Fetched 2 row(s)

查看 Kubernetes 集群 Spark 任務(wù)運(yùn)行狀態(tài):

$ kubectl get pod | grep spark
sparksql10-0-1-64-ed8e6f758900de0c-exec-1              1/1     Running            0          86s
sparksql10-0-1-64-ed8e6f758900de0c-exec-2              1/1     Running            0          85s

Iceberg Spark 支持的更多操作可見:https://iceberg.apache.org/spark/

通過以上步驟,我們即可在 Kubernetes 上快速部署生產(chǎn)可用的實(shí)時(shí)數(shù)據(jù)湖平臺(tái)。

關(guān)于如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

本文題目:如何使用Iceberg與Kubernetes打造云原生數(shù)據(jù)湖
URL地址:http://muchs.cn/article10/ihjddo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站改版網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、企業(yè)網(wǎng)站制作、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站