Linux 下搭建 Spark3 + Jupyter 环境
最近想着来玩一玩大数据, 前段时间集中过了一遍 java, 最近又看了一些基础的 scala, 我感觉吧, 我都不想学. 还是觉得用 sql, javascript, python 这种脚本语言操作起来顺手, 但这并不影响对这个大数据生态的理解和学习. 这里主要是来记录一下 spark + jupyter 环境的搭建, 说实话还折腾了好久才搞定. 主要是做个记录而已.
前置条件
- linux 环境, 我这里用的是 centos
- 安装了hadoop, 我这里用 hadoop3.2.0 搭建了一个 1主2从的伪分布式集群环境
- 用的是 VM 虚拟机, 我用的是 windows 环境, 用的终端工具是
SecureCRT
贼好用 - 克隆了一个
客户端节点
出来, 上面可以安装各类程序, 通过yarn
来进行集群调度即可
安装 Spark on Yarn
用的是一个老版本 3.2.1, 从官网 https://archive.apache.org/dist/spark/spark-3.2.1/
下载 spark-3.2.1-bin-hadoop3.2.tgz
这个带 hadoop 的版本即可.
上传到客户端节点 /data/soft/
目录下, 然后进行解压
tar -zxvf spark-3.2.1-bin-hadoop3.2.tgz
将它改个简短一点的名字, 叫 spark3
吧
mv spark-3.2.1-bin-hadoop3.2 spark3
重命名 spark-env.sh.template
cd spark3/conf
mv spark-env.sh.template spark-env.sh
配置上 JAVA_HOME 和 Hadoop 的配置目录即可.
vi spark-env
export JAVA_HOME=/data/soft/jdk1.8
export HADOOP_CONF_DIR=/data/soft/hadoop-3.2.0/etc/hadoop
:wq
这样就配置好了, 然后来配置一些环境变量方便后面使用, 我用的是 centos, 这里直接配置系统环境变量即可
vi /etc/profile
在末尾配置上
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
export JAVA_HOME=/data/soft/jdk1.8
export HADOOP_HOME=/data/soft/hadoop-3.2.0
export HADOOP_CONF_DIR=/data/soft/hadoop-3.2.0/etc/hadoop
export SPARK_HOME=/data/soft/spark3
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_CONF_DIR:$SPARK_HOME/bin:$PATH
然后执行文件让其生效
source /etc/profile
这样全局环境变量也配置好了.
安装 conda 环境
主要是为了省事, 一并安装上 python3 和 jupyter. 用原生的话不是太好操作.
也是从官网下载, https://www.anaconda.com/download/success
注意这里我们选择 Linux 版的 Miniconda
它就只包含了 python3 + conda 只有 140M 就很好, 全套的话有 1GB. 没有必要全下, 后面要用的话, 用 conda install xxx
就行了.
将下载的文件 Miniconda3-latest-Linux-x86_64.sh
也放到 data/soft
目录下, 其实放哪都行, 然后执行文件一直回车就安装好了.
bash Miniconda3-latest-Linux-x86_64.sh
如果不指定的话, 它就默认安装在 /root/miniconda3
这里.
进入 conda 的默认虚拟环境 base
conda activate
然后来创建一个名为 py38
的虚拟环境, 就安装一个 python3.8 嘛, 当然 3.9, 3.10 都是可以滴.
conda create -n py38 python=3.8
等待之后,验证一下就行了.
conda activate py38
python --version
显示:
Python 3.8.20
这样虚拟环境也就成功啦. 然后是几个常用的 conda 命令
创建是虚拟环境: conda create -n py38 python=3.8
查看虚拟环境: conda env list
删除虚拟环境: conda env remove --name env_name
进入虚拟环境: conda activate py38
退出虚拟环境: conda deactivate
查看安装的包: conda list
安装新的包: conda install xxx
最后是来寻找一下虚拟环境中 python 的位置, 等下配置需要用.
conda activate py38
which python
可以看到, python 的执行目录在
/root/miniconda3/envs/py38/bin/python
配置 pyspark
- 在虚拟环境中, 配置上 Jdk, Spark, Hadoop 的环境变量
- 将Spark 里面的 pyspark 包直接 copy 到 python 的 site-packages 下, 这样等同于
pip install
先在虚拟环境下配置上 spark 等路径 (当前用户)
vi ~/.bashrc
在尾部追加, 和之前在 /etc/profile
的配置一样的, 主要是为了在虚拟环境中能找到 spark
export JAVA_HOME=/data/soft/jdk1.8
export SPARK_HOME=/data/soft/spark3
export PYSPARK_PYTHON=/root/miniconda3/envs/py38/bin/python
export HADOOP_HOME=/data/soft/hadoop-3.2.0
export HADOOP_CONF_DIR=/data/soft/hadoop-3.2.0/etc/hadoop
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_CONF_DIR:$SPARK_HOME/bin:$PYSPARK_PYTHON:$PATH
然后是本篇最关键的一步, 安装 pyspark 注意这里不要去 conda install pyspark
, 这有2个坑
- 如果版本不兼容或者少什么东西的话, 就很难搞
- pyspark 特别大, 200多M, 就镜像源也不是很靠谱
解决这个问题的核心是理解 python 中通过 pip 或者 conda install
的本质是将别人的安装包下载下来,
解压安装到 python 安装包目录lib/site-packages
目录下, 就能进行 import xxx
.
pip /conda insatall A => Dowload A -> python's lib/site-packages
那既然是这样, 直接将 Spark 目录下的 python/pyspark
复制到 python 对应的 site-packages
即可, 这样还绝对兼容和适配 !
对比 Java 中的 Maven 也是一样的操作.
先下载一个 maven 安装包到本地, 然后构建 maven 项目, 在 pom.xml 中, 找到远程仓库的 jdk 链接.
然后就会自动下载对应的 JDK 到本地目录了, 这样就可以直接引用.
后面进行编译, 打包啥的, 其实和 Python 是一样的思路. 或者说几乎所有的都是这样, 掌握了原理就很简单.
这里比较麻烦的就是找这个 conda 下的 python 的虚拟环境, 刚建的 py38
的 site-package 在这里.
/root/miniconda3/envs/py38/lib/python3.8/site-packages/
最后就简单了, 直接 spark 中将对应的文件 copy 过去即可.
cp -r /data/spark/python/lib/py4j-*.zip /root/miniconda3/envs/py38/libpython3.8/site-packages/
cp -r /data/soft/spark3/python/pyspark /root/miniconda3/envs/py38/lib/python3.8/site-packages/
大功搞成!
安装 Jupyter 环境
也是先进入虚拟环境:
conda activate py38
然后直接安装 jupyter
conda install jupyter
等待安装好后, 对 jupyter 进行一些配置, 先生成一个配置文件
jupyter notebook --generate-config
然后打开文件
vi ~/.jupyter/jupyter_notebook_config.py
配置上一些基础设置, 主要是 允许远程访问, 设置远程端口 和禁止用浏览器自动打开等.
# 允许远程访问
c.NotebookApp.ip = '0.0.0.0'
# 设置端口
c.NotebookApp.port = 8888
# 禁用浏览器自动打开
c.NotebookApp.open_browser = False
# 设置基础 URL(可选)
# c.NotebookApp.base_url = '/jupyter/'
# 禁用 token 认证(注意:这会使 Jupyter Notebook 更容易被未授权访问)
c.NotebookApp.token = ''
这里要补充一下, 如果是挂在云服务器的, 有极大的安全风险, 还是要访问加密的.
引导设置密码: jupyter
(py38) youge@VM-12-5-ubuntu:~/soft/hadoop-3.2.0$ jupyter server password
Enter password: ax62xxx?
Verify password:
[JupyterPasswordApp] Wrote hashed password to /home/youge/.jupyter/jupyter_server_config.json
vi /home/youge/.jupyter/jupyter_server_config.json 去拿到这个哈希后的密码, 填充到上面的 c.NotebookApp.token = '' 即可
然后直接启动 jupyter 服务即可, 注意这里我用的 root , 可能会被禁止, 这里配置允许即可.
不配置启动路径的话, 就当前在哪个路径, 等下就会以当前路径作为服务根节点, 我一般是 cd ~
jupyter notebook --allow-root
I 2024-11-06 23:04:38.622 ServerApp] jupyterlab | extension was successfully loaded.
[I 2024-11-06 23:04:38.626 ServerApp] notebook | extension was successfully loaded.
[I 2024-11-06 23:04:38.627 ServerApp] Serving notebooks from local directory: /root
[I 2024-11-06 23:04:38.627 ServerApp] Jupyter Server 2.14.1 is running at:
[I 2024-11-06 23:04:38.627 ServerApp] http://192.168.15.3:8888/tree
[I 2024-11-06 23:04:38.627 ServerApp] http://127.0.0.1:8888/tree
[I 2024-11-06 23:04:38.627 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 2024-11-06 23:04:38.631 ServerApp] No web browser found: Error('could not locate runnable browser').
成功启动后, 可以在 windows 中进行远程访问啦!
http://192.168.15.3/tree
配置 Toree (可选)
Toree 主要是为了能在 jupyter notbook 中内置 scala 内核, 这样就能交互式使用了.
-- 安装 toree , 会自动扫描环境变量的, 如 SPARK_HOME, JAVA_HOME ...
pip install toree
jupyter toree install --sys-prefix
参数说明:
--sys-prefix
Install to Python's sys.prefix. Useful in conda/virtual environments.
--interpreters= (ToreeInstall.interpreters)
环境验证
主要是在 windos 下能通过 jupyte notebook 进行远程连接 saprk 并启动任务就行啦.
这里我们用 Local
模式测试一下就行, 后面用 Yarn
也是类似的配置
1. 启动一个任务环境
from pyspark.sql import SparkSession
# 创建 SparkSession
spark = SparkSession.builder.appName("TestPySpark").getOrCreate()
会有一些警告日志不用管它
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
2024-11-06 23:06:43,484 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2. 创建一个简单的 DataFrame
data = [(1, "John", 30), (2, "Jane", 25), (3, "Mike", 35)]
columns = ["id", "name", "age"]
df = spark.createDataFrame(data, columns)
3. 将 DataFram 注册为临时表 lazy 不耗时的, 随便搞
df.createOrReplaceTempView("people")
5. 进行SQL查询
result = spark.sql("SELECT * FROM people WHERE age > 25")
result.show()
5. 结果输出
+---+----+---+
| id|name|age|
+---+----+---+
| 1|John| 30|
| 3|Mike| 35|
+---+----+---+
6. 可以通过 web 来查看 spark 任务, 本地模式下默认是 4040 端口
http://192.168.15.103:4040/jobs/
后台启动:
nohup jupyter notebook > /dev/null 2>&1 &
至此, 就可以愉快的玩一波 spark 啦, 用 jupyter notebook , 当然后面可以对比 scala 来更深刻理解一波.
Linux 下搭建 Spark3 + Jupyter 环境的更多相关文章
- linux下搭建python机器学习环境
前言 在 linux 下搭建 python 机器学习环境还是比较容易的,考虑到包依赖的问题,最好建立一个虚拟环境作为机器学习工作环境,在建立的虚拟环境中,再安装各种需要的包,主要有以下6个(这是看这个 ...
- Linux下搭建hadoop开发环境-超详细
先决条件:开发机器需要联网 已安装java 已安装Desktop组 1.上传安装软件到linux上: 2.安装maven,用于管理项目依赖包:以hadoop用户安装apache-maven-3.0.5 ...
- Windows和Linux下搭建J2sdk的环境
J2SDK 作为jsp系统配置中必不可少的组件,越来越多的得到应用.下来是我整理的以往工作时搜集的资料.使用时方便查询,希望对广大的工程师有帮助. windows服务器环境下 j2sdk 的安装和环境 ...
- linux下搭建java开发环境
1 下载jdk包 这里下载.gz格式的,通过ftp上传到服务器 2 解压到指定目录,如/usr/java/ tar -xvf XXX.tar.gz 解压后会在/usr/java下生成一个目录,如jdk ...
- Linux下搭建PHP开发环境(LAMP)
LAMP:Linux+Apache+Mysql/MariaDB+Perl/PHP/Python 一键安装方法如下: 注:Ubuntu下可使用sudo su 命名切换到root用户. 开始安装之前,先执 ...
- Linux下搭建.NetCore3.0环境及创建项目
================================================== ================================================= ...
- Linux下搭建nginx php环境
下载安装所需包 openssl-1.0.1i.tar.gz zlib-1.2.8.tar.gz pcre-8.35.tar.gz nginx-1.7.4.tar.gz 以上为nginx依赖文件 lib ...
- 在linux下搭建python+django环境
下载python3,进行编译安装,运行django程序 在 /opt目录中安装 cd /opt 1.解决python编译安装所需的软件依赖 yum install gcc patch libffi-d ...
- linux 下搭建go开发环境
- 【转】在Linux下搭建Git服务器
在 Linux 下搭建 Git 服务器 环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.windows. ...
随机推荐
- 别再为文本提取抓狂!一站式文本提取神器Kreuzberg 助你解决PDF、图片、文档等多格式文件的文本提取难题
大家好,我是六哥,相信很多朋友肯定都有过从各种文档里提取文本的经历,那过程可太让人头疼了!今天就给大家分享一款超实用的现代Python库--Kreuzberg,帮你轻松解决文本提取的难题. 一.Kre ...
- [国家集训队] Tree2 题解
加边删边 \(LCT\),标记下放同 \(luogu\) 线段树 \(2\) 一题. 时间复杂度 \(O(n\log n)\),第一次交的时候我维护 \(sum\) 不维护 \(sz\ WA\) 完了 ...
- mysql扫描全表更新状态部分失败
1. mysql排序问题 一直以为mysql是按照主键排序的,实则排序和主键没有关系(不使用 order by 子句). 然后从 stackoverflow 上查了一下,找到了以下的回答: 没有默认的 ...
- linux系统升级/更新OpenSSL版本操作流程记录
问题描述:有时OpenSSL版本过老升级,或者需要更新OpenSSL版本 1.登录linux系统后输入openssl version 查看现在使用的版本 我的输入后版本信息为:OpenSSL 1.1. ...
- 震惊!Manus邀请码炒到5万元一个!附免费获取Manus邀请码两种方式
在AI技术蓬勃发展的当下,一款名为Manus的产品掀起了行业巨浪.本文将深入剖析这款全球首款通用AI智能体,从它的惊艳亮相.独特功能,到其性能突破.模式限制,以及在AI领域的深远意义,全方位带大家了解 ...
- AXUI一个面向设计的UI前端框架,好用
以下是官方介绍: ax的中文意义是:斧子,读音[aeks],取其攻击力强.简单实用之意为本前端框架命名.本团队开发了诸多网站项目,使用了许多常见的前端框架,结合实际项目经验,借鉴了同行的经验,特自主开 ...
- mongodb查询某个字段数据
如下 db.集合名.find( {}, {需要查询的字段:1, _id:0} ) 例如 db.userInfo.find({}, {'created_at':1, _id: 0}) 默认会显示 _id ...
- 【WPF开发】HandyControl Growl控件Error通知不自动消失的问题
需求 HandyControl Growl在Error类型的通知不自动消失,此时需要他跟其他的统一. 找寻原因 那么翻翻代码看看为啥不消失呗 1.这是决定关闭通知的计时器 2.这是通过_staysOp ...
- docx4j转换HTML并生成word文档实践
一.背景 在项目开发中,有一个需求需要将富文本编辑器中的内容转换为word文档.在网上看了很多开源第三方工具包的对比,最终选择了docx4j,主要原因有一下几点: 可以将html转换为word 对wo ...
- 【Java】网络编程
InternetAccess类的使用 一.概述 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信息共享硬件 ...