<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文演示了使用外部表整合 Vertica 和 Apache Hudi。 在演示中我們使用 Spark 上的 Apache Hudi 將資料攝取到 S3 中,並使用 Vertica 外部表存取這些資料。
Apache Hudi 是一種變更資料捕獲 (CDC) 工具,可在不同時間線將事務記錄在表中。 Hudi 代表 Hadoop Upserts Deletes and Incrementals,是一個開源框架。 Hudi 提供 ACID 事務、可延伸的後設資料處理,並統一流和批次處理資料處理。
以下流程圖說明了該過程。 使用安裝在 Apache Spark 上的 Hudi 將資料處理到 S3,並從 Vertica 外部表中讀取 S3 中的資料更改。
Apache Spark 環境。 使用具有 1 個 Master 和 3 個 Worker 的 4 節點叢集進行了測試。 按照在多節點叢集上設定 Apache Spark 中的說明安裝 Spark 叢集環境。 啟動 Spark 多節點叢集。
Vertica 分析資料庫。 使用 Vertica Enterprise 11.0.0 進行了測試。
AWS S3 或 S3 相容物件儲存。 使用 MinIO 作為 S3 儲存桶進行了測試。
需要以下 jar 檔案。將 jar 複製到 Spark 機器上任何需要的位置,將這些 jar 檔案放在 /opt/spark/jars 中。
Hadoop - hadoop-aws-2.7.3.jar
AWS - aws-java-sdk-1.7.4.jar
在 Vertica 資料庫中執行以下命令來設定存取儲存桶的 S3 引數:
SELECT SET_CONFIG_PARAMETER('AWSAuth', 'accesskey:secretkey'); SELECT SET_CONFIG_PARAMETER('AWSRegion','us-east-1'); SELECT SET_CONFIG_PARAMETER('AWSEndpoint','<S3_IP>:9000'); SELECT SET_CONFIG_PARAMETER('AWSEnableHttps','0');
endpoint可能會有所不同,具體取決於 S3 儲存桶位置選擇的 S3 物件儲存。
要將 Vertica 與 Apache Hudi 整合,首先需要將 Apache Spark 與 Apache Hudi 整合,設定 jars,以及存取 AWS S3 的連線。 其次,將 Vertica 連線到 Apache Hudi。 然後對 S3 儲存桶執行 Insert、Append、Update 等操作。
按照以下部分中的步驟將資料寫入 Vertica。
在 Apache Spark 上設定 Apache Hudi 和 AWS S3
設定 Vertica 和 Apache Hudi 整合
在 Apache Spark 機器中執行以下命令。
這會下載 Apache Hudi 包,設定 jar 檔案,以及 AWS S3
/opt/spark/bin/spark-shell --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer"--packages org.apache.hudi:hudi-spark3-bundle_2.12:0.9.0,org.apache.spark:spark-avro_2.12:3.0.1
匯入Hudi的讀、寫等所需的包:
import org.apache.hudi.QuickstartUtils._ import scala.collection.JavaConversions._ import org.apache.spark.sql.SaveMode._ import org.apache.hudi.DataSourceReadOptions._ import org.apache.hudi.DataSourceWriteOptions._ import org.apache.hudi.config.HoodieWriteConfig._
使用以下命令根據需要設定 Minio 存取金鑰、Secret key、Endpoint 和其他 S3A 演演算法和路徑。
spark.sparkContext.hadoopConfiguration.set("fs.s3a.access.key", "*****") spark.sparkContext.hadoopConfiguration.set("fs.s3a.secret.key", "*****") spark.sparkContext.hadoopConfiguration.set("fs.s3a.endpoint", "http://XXXX.9000") spark.sparkContext.hadoopConfiguration.set("fs.s3a.path.style.access", "true") sc.hadoopConfiguration.set("fs.s3a.signing-algorithm","S3SignerType")
建立變數來儲存 MinIO 的表名和 S3 路徑。
val tableName = 「Trips」 val basepath = 「s3a://apachehudi/vertica/」
準備資料,使用 Scala 在 Apache spark 中建立範例資料
val df = Seq( ("aaa","r1","d1",10,"US","20211001"), ("bbb","r2","d2",20,"Europe","20211002"), ("ccc","r3","d3",30,"India","20211003"), ("ddd","r4","d4",40,"Europe","20211004"), ("eee","r5","d5",50,"India","20211005"), ).toDF("uuid", "rider", "driver","fare","partitionpath","ts")
將資料寫入 AWS S3 並驗證此資料
df.write.format("org.apache.hudi"). options(getQuickstartWriteConfigs). option(PRECOMBINE_FIELD_OPT_KEY, "ts"). option(RECORDKEY_FIELD_OPT_KEY, "uuid"). option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath"). option(TABLE_NAME, tableName). mode(Overwrite). save(basePath)
使用 Scala 執行以下命令以驗證是否從 S3 儲存桶中正確讀取資料。
spark.read.format("hudi").load(basePath).createOrReplaceTempView("dta") spark.sql("select _hoodie_commit_time, uuid, rider, driver, fare,ts, partitionpath from dta order by uuid").show()
在 vertica 中建立一個外部表,其中包含來自 S3 上 Hudi 表的資料。 我們建立了“旅行”表。
CREATE EXTERNAL TABLE Trips ( _hoodie_commit_time TimestampTz, uuid varchar, rider varchar, driver varchar, fare int, ts varchar, partitionpath varchar ) AS COPY FROM 's3a://apachehudi/parquet/vertica/*/*.parquet' PARQUET;
執行以下命令以驗證正在讀取外部表:
以下部分包含為檢視 Vertica 中更改的資料而執行的一些操作的範例。
在這個例子中,我們使用 Scala 在 Apache spark 中執行了以下命令並附加了一些資料:
val df2 = Seq( ("fff","r6","d6",50,"India","20211005") ).toDF("uuid", "rider", "driver","fare","partitionpath","ts")
執行以下命令將此資料附加到 S3 上的 Hudi 表中:
df2.write.format("org.apache.hudi"). options(getQuickstartWriteConfigs). option(PRECOMBINE_FIELD_OPT_KEY, "ts"). option(RECORDKEY_FIELD_OPT_KEY, "uuid"). option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath"). option(TABLE_NAME, tableName). mode(Append). save(basePath)
在這個例子中,我們更新了一條 Hudi 表的記錄。 需要匯入資料以觸發並更新資料:
val df3 = Seq( ("aaa","r1","d1",100,"US","20211001"), ("eee","r5","d5",500,"India","20211001") ).toDF("uuid", "rider", "driver","fare","partitionpath","ts")
執行以下命令將資料更新到 S3 上的 HUDI 表:
df3.write.format("org.apache.hudi"). options(getQuickstartWriteConfigs). option(PRECOMBINE_FIELD_OPT_KEY, "ts"). option(RECORDKEY_FIELD_OPT_KEY, "uuid"). option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath"). option(TABLE_NAME, tableName). mode(Append). save(basePath)
以下是 spark.sql 的輸出:
以下是 Vertica 輸出:
執行以下指向特定時間戳的 spark 命令:
val dd = spark.read .format("hudi") .option("as.of.instant", "20211007092600") .load(basePath)
使用以下命令將資料寫入 S3 中的 parquet:
dd.write.parquet("s3a://apachehudi/parquet/p2")
在此範例中,我們正在讀取截至“20211007092600”日期的 Hudi 錶快照。
dd.show
通過在 parquet 檔案上建立外部表從 Vertica 執行命令。
以上就是Vertica整合Apache Hudi重磅使用指南的詳細內容,更多關於Vertica整合Apache Hudi的資料請關注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