• 本机使用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/ 下面的目录 ,变成了五个


  • 相关阅读:
    Mac系统下安装和卸载HomeBrew的方法
    .NET笔试题集(五)
    .NET笔试题集(四)
    .NET笔试题集(二)
    .NET笔试题集(三)
    .NET笔试题集(一)
    C# 文件操作方法
    MD5 加密的两种方法
    jquery 元素选择器集合
    Jquery元素追加和删除
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/12153390.html
Copyright © 2020-2023  润新知