zeppelin+minio+Delta Lake 配置

1.配置minio

minio安装

第一步,进入/opt 目录,创建minio文件夹

cd /opt

mkdir minio

第二步,wget下载安装包:

命令 :wget https://dl.minio.io/server/minio/release/linux-amd64/minio

第三步,进入minio文件夹创建log文件

cd /minio

touch minio.log

第四步,赋予minio文件执行权限

chmod 777 minio

第五步,编辑minio

vim /etc/profile

添加

set minio environment

export MINIO_ROOT_USER=fileadmin

export MINIO_ROOT_PASSWORD=fileadmin

生效:source /etc/profile;

第六步,设置minio后台启动(指定端口)

vim start.sh

nohup ./minio server /opt/minio/data --console-address :9090 --address :9001 > /opt/minio/minio.log 2>&1 &

('2>&1’表示现在标准输出直接输入到/opt/minio/minio.log 中,而2>&1是将标准错误重定向到标准输出,‘nohup’和末尾’&'组合使用表示脱离终端后继续执行)

启动start.sh文件 命令: sh start.sh

注:要开放9090和9001端口,可以更改这个端口,然后验证浏览器ip:9090即可 ,如果正常登录进去,账号密码fileadmin

基于zeppelin 配置minio

现在zeppelin 创建%spark.conf

如果当前node是运行的。需要重启

重启后,重新执行环境参数。如果你不想每次那么麻烦,你就设置全局变量

val rdd = sc.textFile("s3a://bat/aa.txt")
 rdd.foreach(println)

执行代码后报错:

ava.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2667) at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3431) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3466) at org.apache.hadoop.fs.FileSystem.access$300(FileSystem.java:174) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3574) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3521) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:540) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:365) at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:275) at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:244) at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:332) at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:205) at org.apache.spark.rdd.RDD.$anonfun$partitions$2(RDD.scala:300) at scala.Option.getOrElse(Option.scala:189) at org.apache.spark.rdd.RDD.partitions(RDD.scala:296) at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:49)

这个是因为缺少两个包:spark 连接s3,如果有hadoop 可以在hadoop里面改,如果没有,需要加载aws的包。

 


wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.2.0/hadoop-aws-3.2.0.jar
wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.375/aws-java-sdk-bundle-1.11.375.jar
 
mv aws-java-sdk-bundle-1.11.375.jar ./jars
mv hadoop-aws-3.2.0.jar ./jars

放到spark 的lib下面

在spark 的defalut.xml 配置如下:

spark.hadoop.fs.s3a.access.key=fileadmin
spark.hadoop.fs.s3a.secret.key=fileadmin
spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.endpoint=http://192.168.2.114:9001 

 折腾一天还是不行,最后用spark-shell

spark-shell \
 --packages io.delta:delta-core_2.12:2.2.0,org.apache.hadoop:hadoop-aws:3.2.0 \
 --conf spark.delta.logStore.class=org.apache.spark.sql.delta.storage.S3SingleDriverLogStore \
--conf spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider \
 --conf spark.hadoop.fs.s3a.access.key=fileadmin \
 --conf spark.hadoop.fs.s3a.secret.key=fileadmin \
 --conf spark.hadoop.fs.s3a.endpoint=http://192.168.2.114:9001\
 --conf spark.hadoop.fs.s3a.connection.ssl.enabled=false

加上 参数:

spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider

不知道这个参数是干嘛的,但是加上就可以了。

delta 的配置:

bin/spark-sql --packages io.delta:delta-core_2.12:2.0.0 --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"

 

针对版本不一样,造成各种问题 ,基于spark 3.2.4 的版本,hadoop-aws:3.3.1 , 要不然就写入不了数据,这个对版本匹配不是很友好,delta 的版本只能是2.0.0

spark-shell \
--packages io.delta:delta-core_2.12:2.0.0,org.apache.hadoop:hadoop-aws:3.3.1 \
 --conf spark.delta.logStore.class=org.apache.spark.sql.delta.storage.S3SingleDriverLogStore \
--conf spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider \
 --conf spark.hadoop.fs.s3a.access.key=fileadmin \
 --conf spark.hadoop.fs.s3a.secret.key=fileadmin \
 --conf spark.hadoop.fs.s3a.endpoint=http://192.168.2.114:9001 \
 --conf spark.hadoop.fs.s3a.connection.ssl.enabled=false \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog

zeppelin 整合minio+delta

接下来在zeppelin 配置,记得spark.conf 需要重新刷新配置

接下来:用spark编辑器,%spark 

spark.range(500).write.format("delta").save("s3a://bat/bb")

接下来,通过查询语句:

%spark
spark.read.format("delta").load("s3a://bat/aa").show()

 总结:

通过zeppelin 可以实现在minio 对象存储上面进行spark操作,可以操作各种文件,同时也可以支持数据湖delta 的开发,为啥选择delta ,没有选择hudi和iceberg ,原因是hudi 配置太多,目前社区吧hudi做成数据库,脱离了数据湖的概念,bug比较多,iceberg 是开放格式,可以当标准,但是发展比较慢,delta性能优化比较好,并且使用公司比较多,大家都选稳定版本的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值