delta-lake搏斗记录
——在调试delta-lake的时候遇到大大小小各种可怕并且难以解决的奇怪问题特此记录:
写在最前面:
delta-lake项目中关于spark,hadoop,delta-core各种相关的版本配置对于新手来说十分头疼,在搜索各类资源之后,他的官方发布网址是开发delta-lake相关内容必备的
https://github.com/delta-io/delta/releases
在这个网站中是官方发布的版本历史,相关的版本匹配信息,以及各个版本官方不太详细的使用手册都可以再此找到。
建议使用的是Delta Lake 1.0.0以后,也就是对应Apache Spark 3.1之后,应为在此之后才支持python去安装delta-spark。
一.本地单节点运行中的问题
问题1:
一个容易忘记的环境变量的添加:
当遇到如下问题的时候可以尝试添加以下环境变量解决:
在添加以下PYSPARK_PYTHON之后可能可以解决:
可以看到他正常运行拉。
问题2:
No FileSystem for scheme “D”:
这实际上是一个常见的问题,往往能到遇到这个问题的时候离开成功提交第一个作业以及不远了。
在网上有不同的解释,但就此也记录在此贴中。
在提交作业的时候一开始我的写法是:
spark-submit --packages "io.delta:delta-core_2.12:1.0.1" D:/spark/test.py
此时出现报错,经过纠正正确的写法应该是:
spark-submit --packages "io.delta:delta-core_2.12:1.0.1" file:///D:/spark/test.py
为了保险起见在脚本中的路径最好也这样写。
问题3:
在提交的代码中这个所谓的delta-core中到底些什么版本:
在一开始运行作业的时候,由于目前delta-lake相关的可读性较高的新手帖子较少,在装配spark,hadoop等等的时候版本配置研究花费了不少时间。到了提交作业的时候delta-core的版本又成了拦路虎。对此就这个问题进行一个不严谨的解答。
delta-core和spark具有比较强的联系性,在根据官方文档第一次运行delta-lake依赖的spark时候,也就是以下语句(根据spark版本选择一个大概的delta-core去运行,比如spark3.1就改为core_2.12:1.0.0【根据开头的文档选择】)的时候:
pyspark --packages io.delta:delta-core_2.12:2.2.0 --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
或者之后运行正常的时候,在启动的时候都会出现一个路径(打码部分为用户名):
打开这个路径(C:\Users\用户名.ivy2)可以发现这个文件夹里面有相关的包,似乎下载的内容,或者安装时候自己安装的delta-core就在此处【至于是安装的时候产生的还是第一次运行的时候下载的时候产生的,本人还不是很明确,但显然这些文件是与这个问题相关的】:
因此使用的时候应该在这些自己有的包中选择,而不是随意网上抄一段带码运行。
比如:可能会搜到的一个教程是教程
其中的提交任务代码是:
笔者一开始就按这个方式运行,浪费了不少时间。值得一提的是,在交互式运行的时候,也就是pyspark shell命令行方式运行而不是submit方式运行的时候似乎不会对此问题报错。
问题4:
:WARN SparkEnv: Exception while deleting Spark temp dir:
:ERROR ShutdownHookManager: Exception while deleting Spark temp dir:
无论在命令行模式运行或者提交任务方式模式运行的时候,都遇到了这个错误,网络上的解决方案较多,但似乎都比较复杂。
这个错误对代码运行的过程中似乎并没有什么实际的影响,但是对于电脑环境似乎会起到恶化作用。首先在临时文件文件夹(在报错中也会显示,这里是C:\Users\用户名\AppData\Local\Temp)中每运行一次会产生一个关于spark的临时文件,占用储存。
此外,当他存储到一定数量的时候似乎会有几率导致pyspark运行失败【具体原因不明】。
目前解决方案是手动删掉,相关比较靠谱的网页链接也附上解决方案1,
解决方案2 ,讨论。若网友们有比较简单且可靠的解决方案可在评论区分享以下,tks。
二.虚拟机运行中的问题与记录
Note1:
:首先记录一下在windows单节点上运行成功之后,在linux虚拟机上首次运行的画面
在虚拟机上我用anaconda环境创建了两个虚拟环境,一个是base,另一个是pyspark,这里为了记录利用base(实际时使用了另建立的pyspark环境)环境运行一下来获得首次运行的画面从而记录一下现象:
----更新中 2023-02-20
学不懂,弃更了(2023-04-09)