本機使用sparkshell測試s3讀寫數據小記



//step1 下載spark,我官網下載的spark2.4.4 hadoop2.7.3預編譯版本 解壓即可以使用
//這里需要注意一點,我本機安裝了最新的openjdk13,執行sparksql的時候報錯,
//解決方法修改spark-env.sh 更新JAVA_HOME=/PATH/TO/JDK8 后解決問題
//step2 使用docker 搭建自有的s3環境
docker run -p 9000:9000 --name minio1 \
-e "MINIO_ACCESS_KEY=minio" \
-e "MINIO_SECRET_KEY=minio123" \
-v /Users/student2020/data/minio/data/:/data \
minio/minio server /data

//step3
//登錄localhost:9000 輸入minio/minion123進去,點擊右下角的加號創建一個bucket名字為test
//后面備用,測試生成的數據放在test桶中

//step4 使用sparkshell 測試生成數據 重寫數據 壓縮數據 清理數據的全過程
//因為我本機下載的是spark2.4hadoop2.7.3預編譯版本,所以下面配置hadoop-aws:2.7.3
//本機已經在/etc/profile中添加了SPARK_HOME,所以可以直接執行下面命令,否則請進入SPARK_HOME/bin
//目錄下執行
spark-shell \
 --packages io.delta:delta-core_2.11:0.5.0,org.apache.hadoop:hadoop-aws:2.7.3 \
 --conf spark.delta.logStore.class=org.apache.spark.sql.delta.storage.S3SingleDriverLogStore \
 --conf spark.hadoop.fs.s3a.access.key=minio \
 --conf spark.hadoop.fs.s3a.secret.key=minio123 \
 --conf spark.hadoop.fs.s3a.endpoint=127.0.0.1:9000 \
 --conf spark.hadoop.fs.s3a.connection.ssl.enabled=false
 //因為自己搭建的minio沒有啟用安全認證 沒使用ssl,所以最后一項需要配置好,否則執行會報錯

//測試寫入一些數據到s3中
//以下代碼直接貼入到spark-shell窗口中回車等待即可
spark.range(500).write.format("delta").save("s3a://test/df001/")
spark.range(1500).write.format("delta").mode("overwrite").save("s3a://test/df001/")
spark.range(11500).write.format("delta").mode("overwrite").save("s3a://test/df001/")
 
 //經過幾次寫入,發現文件夾s3a://test/df001/下面有數十個文件
 //小文件過多是個問題,會對文件系統和查詢的性能造成不良影響

/*壓縮數據 根據delta lake官方文檔推薦的最佳實踐  */
val path="s3a://test/df001/"
spark.read
.format("delta")
.load(path)
.repartition(5)
.write
.option("dataChange", "false")
.format("delta")
.mode("overwrite")
.save(path)

//清理過期的過數 或刪除過多的小文件
import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark,path)
//保證在執行此操作的時候,沒有insert|update|delete|optimize等操作,否則delta table數據會受損
//設置下面的配置為false,否則執行報錯
spark.conf.set("spark.databricks.delta.retentionDurationCheck.enabled", false)
//默認清除的是168小時之前的數據 即7*24小時之前的數據,這里測試的時候,短時間內多項操作,保留六分鍾之內寫入的數據
deltaTable.vacuum(0.1)

//再次檢查 s3a://test/df001/ 下面的目錄 ,變成了五個



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM