全托管一站式大规模数据处理和分析Serverless平台 | EMR Serverless Spark 评测
在开始今天的评测之前,当然还是老规矩,先来介绍一下我们今天上场的主角 EMR Serverless Spark,那么什么是 EMR Serverless Spark 呢?
EMR Serverless Spark
关于EMR Serverless Spark,以下是一段来自官方的定义 【EMR Serverless Spark是一款云原生,专为大规模数据处理和分析而设计的全托管Serverless产品。它为企业提供了一站式的数据平台服务,包括任务开发、调试、调度和运维等,极大地简化了数据处理的全生命周期工作流程。使用EMR Serverless Spark,企业可以更专注于数据分析和价值提炼,提高工作效率。】
对于企业来说,就是数据处理和分析的工作交给 EMR Serverless Spark 平台做,企业可以更专注于由数据分析所带来的价值提炼
了解了 EMR Serverless Spark 的主要方向之后,我们再来看一张图来了解 EMR Serverless Spark 的应用场景,也只有有了落地场景的产品才是好产品,不是吗
好了,关于 EMR Serverless Spark 的产品定位以及应用场景有了基础的了解之后,下面我们开始上手体验。由于本次官方的测评文档中并没有相关的建议体验场景,那么这里我给大家推荐一下官方 EMR Serverless Spark 产品文档中的几大实践教程来体验,教程地址:https://help.aliyun.com/zh/emr/emr-serverless-spark/use-cases/?spm=a2c4g.11186623.0.0.360717035nMMaF
考虑到前面几种应该有小伙伴已经操作过了,这里我就选择最后一个带大家来一起感受一下来自全托管一站式大规模数据处理和分析Serverless平台 | EMR Serverless Spark 的魅力吧。
在PySpark程序中使用Python三方库
PySpark与 Python、EMR Serverless Spark
今天的实操主题就是在PySpark程序中使用Python三方库,那么在实操之前先来介绍一下 PySpark与 Python、EMR Serverless Spark的小关系。 PySpark作业往往需要借助Python第三方库来增强数据处理和分析能力,通过将这些三方库集成到Serverless Spark环境中,从而确保作业在分布式计算场景下的稳定性和灵活性。
简单的关系捋明白了,下面再来说说今天操作会用到的Conda和PEX这两种方法:【Conda是一个跨平台的包管理和环境管理系统,它允许用户轻松创建、保存、加载和切换多个环境,每个环境都可以拥有独立的Python版本和库依赖。PEX (Python EXecutable) 是一个工具,它可以将Python应用及其所有依赖打包进一个可执行文件中。】
说完这些下面就开始准备资源了。
资源准备
工作空间是Serverless Spark的基本单元,用于管理任务、成员、角色和权限。所有的任务开发都需要在具体的工作空间内进行。因此,在开始任务开发之前,我们需要先创建工作空间。
创建工作空间
创建工作空间,那么首先登录E-MapReduce 控制台:https://emr-next.console.aliyun.com/?spm=a2c4g.11186623.0.0.13665d79vhK9Wr#/region/cn-hangzhou/resource/all/overview
点击【Spark】在授权页面依次完成授权
授权操作比较简单,对于【同意授权】按钮,直接点击即可完成授权,对于【去授权】在点击后的跳转页面点击【同意授权】就可以了
完成授权后,在【Spark】页面就可以看到【创建工作空间】按钮
在弹出的创建工作空间页面输入工作空间名称【emr-2024】点击如图所示红框,准备基础资源
点击【开通DLF】跳转到开通DLF页面
点击【免费开通数据湖构建】后在跳转的页面完成 数据湖构建 的开通,在数据湖构建 控制台:https://dlf.console.aliyun.com/cn-hangzhou/home
点击【开通】完成访问云资源的授权操作
此时的 数据湖构建 才算开通成功
再次回到创建工作空间页面,可以看到刚才开通成功的 数据湖构建 DLF 已经自动选择成功,下面需要到 OSS 控制台创建工作空间基础路径
进入OSS控制台:https://oss.console.aliyun.com/bucket?spm=5176.21192661.0.0.39b09037mwSVpD
点击【创建Bucket】,输入Bucket 名称【emr-oss-2024】,地域选择【杭州】
开启 HDFS 服务后选择【完成创建】
在弹出的页面勾选协议完成Bucket创建
再次回到创建工作空间页面,完成工作空间的创建
上传资源文件到OSS
单击kmeans.py和kmeans_data.txt,下载所需资源文件,并上传到OSS空间,进入到OSS控制台:https://oss.console.aliyun.com/bucket?spm=a2c6h.13046898.publish-article.12.120f6ffaHS2Z1w,上传 脚本kmeans.py和数据文件kmeans_data.txt 到OSS 平台
点击【上传文件】完成上传,上传成功后如图
云服务器ECS
创建云服务器ECS实例,进入到 ECS控制台:https://ecs.console.aliyun.com/home ,点击【创建我的ECS】
选择【按量付费】,【杭州】地域,服务器规格选择基础规格,操作系统选择 Alibaba Cloud Linux 3系统
其他的默认,服务器密码选择【自定义密码】
实例名称修改为【emr-ecs-2024】勾选协议后选择【确认下单】完成云服务器ECS的创建
云服务器ECS创建成功
这里需要用到 443端口,如果默认安全组没有开通这个端口需要自行去安全组开通
使用Conda
点击云服务器ECS控制台的实例后面操作按钮【远程连接】输入服务器密码,登录 ECS实例
执行如下命令安装Miniconda
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh chmod +x Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh -b source miniconda3/bin/activate
执行如下命令构建使用Python 3.8和numpy的Conda环境
conda create -y -n pyspark_conda_env -c conda-forge conda-pack numpy python=3.8 conda activate pyspark_conda_env conda pack -f -o pyspark_conda_env.tar.gz
上传 pyspark_conda_env.tar.gz 到OSS
由于pyspark_conda_env.tar.gz 文件目前在云服务器ECS上,因此需要先找到 pyspark_conda_env.tar.gz 的路径 /root
点击 ECS 终端连接的【文件】找到/root 下面需要下载的文件 pyspark_conda_env.tar.gz
点击下载文件,等待文件下载成功之后上传到 OSS 的Bucket列表下
上传到OSS控制台之后如图
开发并运行任务
进入 EMR 工作空间,点击工作空间名称进入工作空间
单击【任务开发】-【新建】
输入任务名称,选择任务类型
参数参照文档中的要求
按照文档中填写如图内容后,点击【运行】
点击【运行】按钮后,在【运行记录】点击【详情】
等待任务显示运行【已成功】
点击【日志探查】就可以看到相关的运行日志了
到这里,使用Conda完成 PySpark类型 Application(批任务)的操作就完成了。下面开始使用PEX
使用PEX
使用PEX的操作流程与使用 Conda 的流程是一致的,区别是命令以及基础工具的不同,执行命令 安装PEX与wheel工具
pip3.8 install --user pex wheel \ --trusted-host mirrors.cloud.aliyuncs.com \ -i http://mirrors.cloud.aliyuncs.com/pypi/simple/
下载所需库的wheel文件至临时目录
pip3.8 wheel -w /tmp/wheel \ pyspark==3.3.1 pandas==1.5.3 pyarrow==15.0.1 numpy==1.24.4 \ --trusted-host mirrors.cloud.aliyuncs.com \ -i http://mirrors.cloud.aliyuncs.com/pypi/simple/
生成PEX文件
pex -f /tmp/wheel --no-index \ pyspark==3.3.1 pandas==1.5.3 pyarrow==15.0.1 numpy==1.24.4 \ -o spark331_pandas153.pex
上传 spark331_pandas153.pex 到OSS
同样的办法,将服务器ECS生成的spark331_pandas153.pex 下载到本地然后上传到 OSS Bucket中。
开发并运行任务
这一步的操作和使用 Conda操作基本也是相同的,只是在任务参数有所不同,如下
后续的操作补充任务参数后,点击【运行】按钮等待任务运行成功操作是一致的。
释放资源
实验操作完成之后,如果是本次测评使用,后续暂时没有使用场景的话,建议先释放资源比较合适,防止造成不必要的资源浪费。
释放ECS
首先释放云服务器ECS 资源,进入ECS控制台:https://ecs.console.aliyun.com/server/region/cn-hangzhou 选择创建的ECS 实例,点击右侧更多操作,选择【释放】
在弹出页面选择【立即释放】
点击【下一步】后勾选协议点击【确定】输入短信验证码完成云服务器ECS 实例的释放
删除OSS
登录OSS控制台:https://oss.console.aliyun.com/overview 点击【Bucket列表】选择刚才创建的 Bucket 名称
进入 Bucket 详情页面,先删除文件,然后删除 Bucket
点击【删除Bucket】在页面选择【立即删除】
点击【立即删除】输入 Bucket名称之后给出错误提示
然后根据错误提示重新检查了 Bucket 文件发现还有未删除的文件
删除Bucket 列表下所有文件后再次尝试删除Bucket,删除成功。
删除EMR工作空间
进入到EMR 工作空间列表页面:https://emr-next.console.aliyun.com/?spm=a2c4g.11186623.0.0.13665d79vhK9Wr#/region/cn-hangzhou/resource/all/serverless/spark/list
点击工作空间右侧【删除】
输入工作空间名称后点击【确定】完成工作空间的删除
操作体验
这里来说一下本次关于 使用全托管一站式大规模数据处理和分析Serverless平台 | EMR Serverless Spark 来在PySpark程序中使用Python三方库 的操作,整体上操作文档写的算比较详细了,只是在操作过程中,关于创建工作空间时会需要用到 数据源构建DLF 和 OSS存储文档中没有详细写明操作步骤,不过好在这两项操作比较简单容易理解
在后续的使用Conda 构建使用Python 3.8和numpy的Conda环境后生成的文件
pyspark_conda_env.tar.gz
是在云服务器ECS上的,文档没有说明如何去 云服务器ECS上下载打包好的文件,这里我也是通过一段摸索才最终找到了下载云服务器ECS 到本地的方法,如下
这一点希望可以在文档中补充出来,毕竟从云服务器ECS上下载文件的操作比较少,因此可能不太会注意这点。后续其他的的操作,包括操作的便携性,数据开发体验整个过程都是很不错的,只需要配置具体的脚本,EMR Serverless Spark就可以根据您创建的任务稳定的运行,这样就大大降低了企业开发人员的学习成本和操作成本,是比较友好的。
既然EMR Serverless Spark为企业提供了一站式的数据平台服务,那么基于大数据分析, EMR Serverless Spark 可以与以下数据产品联动组合,如图