<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
自從計算機出現以來,我們一直在嘗試尋找計算機儲存一些資訊的方法,儲存在計算機上的資訊(也稱為資料)有多種形式,資料變得如此重要,以至於資訊現在已成為觸手可及的商品。多年來資料以多種方式儲存在計算機中,包括資料庫、blob儲存和其他方法,為了進行有效的業務分析,必須對現代應用程式建立的資料進行處理和分析,並且產生的資料量非常巨大!有效地儲存數PB資料並擁有必要的工具來查詢它以便使用它至關重要,只有這樣對該資料的分析才能產生有意義的結果。
巨量資料是一門處理分析方法、有條不紊地從中提取資訊或以其他方式處理對於典型資料處理應用程式軟體而言過於龐大或複雜的資料量的方法的學科。為了處理現代應用程式產生的資料,巨量資料的應用是非常必要的,考慮到這一點,本部落格旨在提供一個關於如何建立資料湖的小教學,該資料湖從應用程式的資料庫中讀取任何更改並將其寫入資料湖中的相關位置,我們將為此使用的工具如下:
我們將要構建的資料湖架構如下:
第一步是使用 Debezium 讀取關聯式資料庫中發生的所有更改,並將所有更改推播到 Kafka 叢集。
Debezium 是一個用於變更資料捕獲的開源分散式平臺,Debezium 可以指向任何關聯式資料庫,並且它可以開始實時捕獲任何資料更改,它非常快速且實用,由紅帽維護。
首先,我們將使用 docker-compose 在我們的機器上設定 Debezium、MySQL 和 Kafka,您也可以使用這些的獨立安裝,我們將使用 Debezium 提供給我們的 mysql 映象,因為其中已經包含資料,在任何生產環境中都可以使用適當的 Kafka、MySQL 和 Debezium 叢集,docker compose 檔案如下:
version: '2' services: zookeeper: image: debezium/zookeeper:${DEBEZIUM_VERSION} ports: - 2181:2181 - 2888:2888 - 3888:3888 kafka: image: debezium/kafka:${DEBEZIUM_VERSION} ports: - 9092:9092 links: - zookeeper environment: - ZOOKEEPER_CONNECT=zookeeper:2181 mysql: image: debezium/example-mysql:${DEBEZIUM_VERSION} ports: - 3307:3306 environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASS} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_USER_PASS} schema-registry: image: confluentinc/cp-schema-registry ports: - 8181:8181 - 8081:8081 environment: - SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS=kafka:9092 - SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=zookeeper:2181 - SCHEMA_REGISTRY_HOST_NAME=schema-registry - SCHEMA_REGISTRY_LISTENERS=http://schema-registry:8081 links: - zookeeper connect: image: debezium/connect:${DEBEZIUM_VERSION} ports: - 8083:8083 links: - kafka - mysql - schema-registry environment: - BOOTSTRAP_SERVERS=kafka:9092 - GROUP_ID=1 - CONFIG_STORAGE_TOPIC=my_connect_configs - OFFSET_STORAGE_TOPIC=my_connect_offsets - STATUS_STORAGE_TOPIC=my_connect_statuses - KEY_CONVERTER=io.confluent.connect.avro.AvroConverter - VALUE_CONVERTER=io.confluent.connect.avro.AvroConverter - INTERNAL_KEY_CONVERTER=org.apache.kafka.connect.json.JsonConverter - INTERNAL_VALUE_CONVERTER=org.apache.kafka.connect.json.JsonConverter - CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL=http://schema-registry:8081 - CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL=http://schema-registry:8081
DEBEZIUM_VERSION 可以設定為 1.8。 此外請確保設定 MYSQL_ROOT_PASS、MYSQL_USER 和 MYSQL_PASSWORD。
在我們繼續之前,我們將檢視 debezium 映象提供給我們的資料庫 inventory 的結構,進入資料庫的命令列:
docker-compose -f docker-compose-avro-mysql.yaml exec mysql bash -c 'mysql -u $MYSQL_USER -p$MYSQL_PASSWORD inventory'
在 shell 內部,我們可以使用 show tables 命令。 輸出應該是這樣的:
我們可以通過 select * from customers 命令來檢視客戶表的內容。 輸出應該是這樣的:
現在在建立容器後,我們將能夠為 Kafka Connect 啟用 Debezium 源聯結器,我們將使用的資料格式是 Avro 資料格式,Avro 是在 Apache 的 Hadoop 專案中開發的面向行的遠端過程呼叫和資料序列化框架。它使用 JSON 來定義資料型別和協定,並以緊湊的二進位制格式序列化資料。
讓我們用我們的 Debezium 聯結器的設定建立另一個檔案。
{ "name": "inventory-connector", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "tasks.max": "1", "database.hostname": "mysql", "database.port": "3306", "database.user": "MYSQL_USER", "database.password": "MYSQL_PASSWORD", "database.server.id": "184054", "database.server.name": "dbserver1", "database.include.list": "inventory", "database.history.kafka.bootstrap.servers": "kafka:9092", "database.history.kafka.topic": "schema-changes.inventory", "key.converter": "io.confluent.connect.avro.AvroConverter", "value.converter": "io.confluent.connect.avro.AvroConverter", "key.converter.schema.registry.url": "http://schema-registry:8081", "value.converter.schema.registry.url": "http://schema-registry:8081" } }
正如我們所看到的,我們已經在其中設定了資料庫的詳細資訊以及要從中讀取更改的資料庫,確保將 MYSQL_USER 和 MYSQL_PASSWORD 的值更改為您之前設定的值,現在我們將執行一個命令在 Kafka Connect 中註冊它,命令如下:
curl -i -X POST -H "Accept:application/json" -H "Content-type:application/json" http://localhost:8083/connectors/ -d @register-mysql.json
現在,Debezium 應該能夠從 Kafka 讀取資料庫更改。
下一步涉及使用 Spark 和 Hudi 從 Kafka 讀取資料,並將它們以 Hudi 檔案格式放入 Google Cloud Storage Bucket。 在我們開始使用它們之前,讓我們瞭解一下 Hudi 和 Spark 是什麼。
Apache Hudi 是一個開源資料管理框架,用於簡化增量資料處理和資料管道開發。 該框架更有效地管理資料生命週期等業務需求並提高資料質量。 Hudi 使您能夠在基於雲的資料湖上管理記錄級別的資料,以簡化更改資料捕獲 (CDC) 和流式資料攝取,並幫助處理需要記錄級別更新和刪除的資料隱私用例。 Hudi 管理的資料集使用開放儲存格式儲存在雲端儲存桶中,而與 Presto、Apache Hive 和/或 Apache Spark 的整合使用熟悉的工具提供近乎實時的更新資料存取
Apache Spark 是用於大規模資料處理的開源統一分析引擎。 Spark 為具有隱式資料並行性和容錯性的叢集程式設計提供了一個介面。 Spark 程式碼庫最初是在加州大學伯克利分校的 AMPLab 開發的,後來被捐贈給了 Apache 軟體基金會,該基金會一直在維護它。
現在,由於我們正在 Google Cloud 上構建解決方案,因此最好的方法是使用 Google Cloud Dataproc。 Google Cloud Dataproc 是一種託管服務,用於處理大型資料集,例如巨量資料計劃中使用的資料集。 Dataproc 是 Google 的公共雲產品 Google Cloud Platform 的一部分。 Dataproc 幫助使用者處理、轉換和理解大量資料。
在 Google Dataproc 範例中,預裝了 Spark 和所有必需的庫。 建立範例後,我們可以在其中執行以下 Spark 作業來完成我們的管道:
spark-submit --packages org.apache.hudi:hudi-spark3.1.2-bundle_2.12:0.10.1,org.apache.spark:spark-avro_2.12:3.1.2 --master yarn --deploy-mode client --class org.apache.hudi.utilities.deltastreamer.HoodieDeltaStreamer /usr/lib/hadoop/hudi-packages/hudi-utilities-bundle_2.12-0.10.1.jar --table-type COPY_ON_WRITE --op UPSERT --target-base-path gs://your-data-lake-bucket/hudi/customers --target-table hudi_customers --continuous --min-sync-interval-seconds 60 --source-class org.apache.hudi.utilities.sources.debezium.MysqlDebeziumSource --source-ordering-field _event_origin_ts_ms --hoodie-conf schema.registry.url=http://localhost:8081 --hoodie-conf hoodie.deltastreamer.schemaprovider.registry.url=http://localhost:8081/subjects/dbserver1.inventory.customers-value/versions/latest --hoodie-conf hoodie.deltastreamer.source.kafka.topic=dbserver1.inventory.customers --hoodie-conf bootstrap.servers=localhost:9092 --hoodie-conf auto.offset.reset=earliest --hoodie-conf hoodie.datasource.write.recordkey.field=id --hoodie-conf hoodie.datasource.write.partitionpath.field=id
這將執行一個 spark 作業,該作業從我們之前推播到的 Kafka 中獲取資料並將其寫入 Google Cloud Storage Bucket。 我們必須指定 Kafka 主題、Schema Registry URL 和其他相關設定。
可以通過多種方式構建資料湖。 我試圖展示如何使用 Debezium、Kafka、Hudi、Spark 和 Google Cloud 構建資料湖。 使用這樣的設定,可以輕鬆擴充套件管道以管理大量資料工作負載! 有關每種技術的更多詳細資訊,可以存取檔案。 可以自定義 Spark 作業以獲得更細粒度的控制。 這裡顯示的 Hudi 也可以與 Presto、Hive 或 Trino 整合。 客製化的數量是無窮無盡的。 本文提供了有關如何使用上述工具構建基本資料管道的基本介紹!
到此這篇關於基於Apache Hudi在Google雲構建資料湖平臺的文章就介紹到這了,更多相關Apache Hudi構建資料湖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45