pyspark启动遇到的问题及解决方法

问题1:启动出现的问题
问题2:pyspark启动后tab键无法补全问题

问题1:启动出现的问题

现象1:

/usr/local/spark-2.3.3/bin/pyspark: 行 45: python:未找到命令 env: “python”: 没有那个文件或目录


现象2:

Python 3.8.10 (default, Sep 28 2021, 16:10:42)
[GCC 9.3.0] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
Traceback (most recent call last):
File “/usr/local/spark-2.3.0/python/pyspark/shell.py”, line 31, in
from pyspark import SparkConf
File “/usr/local/spark-2.3.0/python/pyspark/init.py”, line 46, in
from pyspark.context import SparkContext
File “/usr/local/spark-2.3.0/python/pyspark/context.py”, line 31, in
from pyspark import accumulators
File “/usr/local/spark-2.3.0/python/pyspark/accumulators.py”, line 97, in
from pyspark.cloudpickle import CloudPickler
File “/usr/local/spark-2.3.0/python/pyspark/cloudpickle.py”, line 146, in
_cell_set_template_code = _make_cell_set_template_code()
File “/usr/local/spark-2.3.0/python/pyspark/cloudpickle.py”, line 127, in _make_cell_set_template_code
return types.CodeType(
TypeError: an integer is required (got type bytes)
spark无法正常运行

原因:

spark版本与python版本不兼容:

解决办法:

  1. 创建python组,将python3.8和python2.7加入候选项

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2
    
  2. 列出python组中的所有候选项。

    sudo update-alternatives --config python
    #选择python2.7版本
    要维持当前值[*]请按<回车键>,或者键入选择的编号:1
    

列出候选项

  1. 更新源、 更新已安装的包

    sudo apt-get update
    sudo apt-get upgrade
    

    注意:在进行upgrade操作时如果更新速度特别慢,不要犹豫换镜像源,更改方法参考下面这篇博文:ubuntu更改镜像源(软件源)

  2. 启动pyspark查看是否有spark的图标

    pyspark
    

-----------------------------------------------------手动分界线-----------------------------------------------------------------

如果未出现spark的图标继续向下操作



进入pyspark所在的目录,修改pyspark所依赖的python版本。

cd /usr/local/spark-2.3.0/bin
sudo vi pyspark

修改图中所示内容(注意要对应自己的python版本,我的python为2.7,我就改为python2.7)保存退出。
修改pyspark启动所需要的python版本

source ./pyspark

启动后出现spark的图标,搞定!!!

问题2:使用pyspark时,发现tab键无法补全

原因:python2未提供tab键补全功能

解决办法:

在python用户扩展包中新建一个文件tab.py

sudo vi /usr/lib/python2.7/dist-packages/tab.py

内容如下:

try:
    import readline
except ImportError:
    print("Module readline not available.")
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

保存退出后追加环境变量。

echo "PYTHONSTARTUP=/usr/lib/python2.7/dist-packages/tab.py" >> ~/.bashrc

更新一下环境变量:

source ~/.bashrc

再次输入pyspark进行测试会发现Tab键补全功能又能使用了,真香!!!

参考内容:

Linux下切换python2和python3

python终端下添加Tab键补全功能

### 原因 PySpark启动过程涉及多个组件之间的交互,在Linux系统下可能会因为多种因素导致启动速度变慢。具体原因如下: - **依赖库加载时间过长**:当首次运行PySpark时,会初始化一系列环境变量并加载所需的Java和Python库,这一步骤可能消耗较多时间[^1]。 - **网络配置问题**:如果集群节点间的通信存在延迟或不稳定情况,则会影响整个框架的响应效率;另外,默认情况下某些版本的Hadoop/YARN设置可能导致不必要的DNS查找操作,从而拖慢启动流程[^3]。 - **资源分配不当**:不合理的内存、CPU核心数设定使得Executor无法获得足够的计算能力来快速完成任务准备阶段的工作。 - **数据本地化策略影响**:为了提高性能,Spark倾向于让Task尽可能靠近其所要处理的数据所在位置执行(即Data Locality),但如果调度器未能有效实现这一点也会造成额外开销。 ```bash # 检查当前使用的Python解释器及其路径 which python python --version ``` ### 解决方案 针对上述提到的各种可能性,可以采取以下措施优化PySpark在Linux上的启动表现: #### 调整配置参数 通过修改`spark-env.sh`文件中的相关选项来改善启动体验: - 设置合适的`SPARK_DAEMON_MEMORY`值以确保Driver/Executor有足够的堆外空间可用; - 减少日志级别至WARN以上减少I/O负担; - 如果确认内部网路稳定可靠的话可考虑关闭外部连接验证机制加快握手过程。 ```properties export SPARK_DAEMON_MEMORY=8g export PYSPARK_PYTHON=/usr/bin/python3 export PYTHONPATH=$PYTHONPATH:/path/to/spark/python/lib/py4j-src.zip ``` #### 优化网络环境 对于多台机器组成的分布式架构而言,应保证各成员间能够高效互通无阻塞现象发生。可以通过调整/etc/hosts映射表简化域名解析步骤或是利用NTP服务同步所有主机的时间戳防止由于时差引发的一致性错误。 ```bash # 编辑 hosts 文件增加静态IP地址对应关系 sudo nano /etc/hosts ``` #### 数据预取与缓存 提前下载好常用第三方包并将它们加入到工作目录下的site-packages里边去,这样每次调用就不必再临时安装一遍了。同时开启广播变量功能把频繁访问的小规模集合对象放到内存中共享给各个子进程读取。 ```python from pyspark.sql import SparkSession spark = ( SparkSession.builder.appName("OptimizedApp") .config("spark.executor.memory", "8g") .config("spark.driver.maxResultSize", "0") # 取消返回结果大小限制 .getOrCreate() ) broadcast_var = spark.sparkContext.broadcast({"key": "value"}) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值