拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Apache Spark 的 SparkR 前端:安装、构建、开发与测试实战指南

Apache Spark 的 SparkR 前端安装、构建、开发与测试实战指南【免费下载链接】sparkApache Spark - A unified analytics engine for large-scale data processing项目地址: https://gitcode.com/gh_mirrors/sp/sparkSparkR 是 Apache Spark 提供的 R 语言前端通过轻量级 R 包让数据科学家可以在 R 环境中直接操作 Spark 的分布式计算能力。本文基于当前仓库R/pkg/README.md及其配套脚本与源码系统讲解 SparkR 的安装方式、Spark 构建流程、交互式 Shell 启动、RStudio 集成、二次开发、文档生成、单元测试以及在 YARN 集群上的提交方法帮助读者从零搭建一套可用的 SparkR 开发与运行环境。SparkR 是什么按照仓库 R/pkg/README.md 的定义SparkR is an R package that provides a light-weight frontend to use Spark from R.SparkR 是一个轻量级前端——它本身并不实现分布式计算而是把 R 代码翻译为对 JVM 上 Spark 的调用。从包元数据看该 R 包名为SparkR见 R/pkg/DESCRIPTION依赖R ( 4.0)与methods并要求 Java 版本为Java ( 17, 26)。注意当前仓库的 README 标题为 R on Spark (deprecated)即该前端已被标记为弃用状态。这是仓库现状的事实说明本文以下内容均基于仓库当前状态展开若你在新项目中评估 R 语言与 Spark 的结合方案请以官方最新发布版本的状态为准。从 R/pkg/NAMESPACE 可以看出 SparkR 的能力范围非常完整主要包括会话管理sparkR.session、sparkR.session.stop、sparkR.version、sparkR.uiWebUrlDataFrame 操作read.df、write.df、createDataFrame、select、filter、join、groupBy、collect等 S4 方法SQL 接口sql、tableToDF、createOrReplaceTempView等MLlib 集成spark.glm、spark.kmeans、spark.randomForest、spark.gbt、spark.als、spark.naiveBayes、spark.survreg等机器学习算法列级函数数百个Column方法如when、cast、window、from_json、to_json等覆盖类型转换、日期处理、JSON、窗口函数等场景流式查询read.stream、write.stream、awaitTermination、isActive等 Structured Streaming 相关接口底层 JVM 互操作sparkR.newJObject、sparkR.callJMethod、sparkR.callJStatic。整套 API 的源码位于 R/pkg/R 目录下其中DataFrame.R、functions.R、mllib_classification.R等文件分别对应上述能力模块。安装 SparkR 开发库SparkR 的库文件需要被安装到$SPARK_HOME/R/lib目录下这一过程由脚本 R/install-dev.sh 完成。使用 install-dev.sh 安装# 在 $SPARK_HOME 下执行 ./R/install-dev.sh默认情况下该脚本使用系统全局安装的 R。如果你希望改用某个用户目录下自行安装的 R只需要在运行脚本前设置环境变量R_HOME指向 R 安装目录的根路径该目录下的bin子目录应包含R与RScript可执行文件# 其中 /home/username/R 是 R 的安装目录/home/username/R/bin 包含 R 和 RScript export R_HOME/home/username/R ./install-dev.sh从 R/install-dev.sh 源码看脚本的核心执行逻辑为通过find-r.sh定位 R 可执行文件R/find-r.sh 会优先读取R_HOME/bin否则回退到which R找不到时报错退出调用create-rd.sh预生成 Rd 文档执行R CMD INSTALL --library$FWDIR/lib $FWDIR/pkg/将R/pkg目录下的包源码安装到R/lib将安装好的SparkR目录打包为R/lib/sparkr.zip。其中第 4 步打包sparkr.zip的目的值得注意Spark 在 YARN 上运行时需要把 SparkR 包分发到各 worker 节点zip 包就是为此准备的脚本注释中明确写了 Zip the SparkR package so that it can be distributed to worker nodes on YARN。安装完成后在 R 中通过以下方式加载library(SparkR, lib.loc $SPARK_HOME/R/lib)Windows 平台安装仓库同时提供了 Windows 批处理版本 R/install-dev.bat。它执行等价的操作创建%SPARK_HOME%\R\lib在该目录下直接执行R.exe CMD INSTALL --library%SPARK_HOME%\R\lib .最后用%JAVA_HOME%\bin\jar.exe生成sparkr.zip。其中特意先pushd到R\pkg目录再安装是为了规避 R 4.0 下直接传相对路径参数导致路径解析异常的问题参见 SPARK-32074。从源码包安装如果希望从构建好的 R 源码包SparkR_version.tar.gz安装可以使用 R/install-source-package.sh它先从 R/pkg/DESCRIPTION 中读取版本号可用VERSION环境变量覆盖校验源码包存在后执行R CMD INSTALL SparkR_$VERSION.tar.gz --library$LIB_DIR同样会生成用于 YARN 分发的sparkr.zip。源码包本身需要先通过 R/check-cran.sh 生成。构建带 SparkR 的 SparkSparkR 的 R 包需要与 Spark 主工程一起构建才能在运行时找到对应的 Scala/SQL 组件。构建时使用 Maven 或 SBT并且必须带上-Psparkrprofile# Maven ./build/mvn -DskipTests -Psparkr package # SBT ./build/sbt -Psparkr package上面的命令使用默认 Hadoop 版本如需定制 Hadoop 或其他组件版本可参照仓库文档 docs/building-spark.md 中的构建说明调整参数。建议在构建完成后再执行 R/install-dev.sh 安装 R 包并配合下文运行单元测试验证整套链路可用。启动 SparkR 交互式 Shell构建并安装完成后即可通过仓库根目录下的 bin/sparkR 脚本启动 SparkR Shell./bin/sparkR默认情况下sparkR脚本会自动创建一个运行在local 模式的 SparkContext。如果要为这个自动创建的 SparkContext 指定集群的 Spark master可以传入--master参数./bin/sparkR --master local[2]除了--master你还可以把其他 spark-submit 参数例如 driver memory、executor memory 等原样传给./bin/sparkR./bin/sparkR --master local[2] --driver-memory 4g --executor-memory 2g从 bin/sparkR 脚本源码可以看到它的实现本质脚本将SPARK_CONNECT_MODE显式置为 0即使用传统 SparkContext 模式而非 Spark Connect 客户端定位SPARK_HOME并加载环境后最终执行exec ${SPARK_HOME}/bin/spark-submit sparkr-shell-main $也就是说sparkR只是spark-submit的一个薄封装启动的入口类为sparkr-shell-main因此所有 spark-submit 支持的参数它都天然兼容。从 RStudio 使用 SparkR如果希望从 RStudio 中交互式使用 SparkR请在启动 Spark 相关上下文前先加载包并初始化会话library(SparkR, lib.loc $SPARK_HOME/R/lib) sparkR.session()具体的启动方式可参考官方 SparkR 文档中 Starting Up From RStudio 一节。核心要点是sparkR.session()会连接本地或集群的 Spark 实例之后即可像在 SparkR Shell 中一样编写 DataFrame 与 MLlib 代码。结合 R/pkg/DESCRIPTION 中Suggests声明的testthat、e1071、survival、arrow ( 10.0.0)等依赖建议在 RStudio 环境中一并安装这些包以获得完整能力如 GLM 模型评估、生存分析、Arrow 优化。对 SparkR 进行二次开发Spark 的整体贡献指南同样适用于 SparkR。在此基础上仓库给出了一条重要的捷径如果你只修改了 R 文件不涉及 Scala 代码那么只需重新运行R/install-dev.sh重新安装 R 包即可测试你的改动无需重新构建整个 Spark。这是因为 R 与 JVM 之间通过反射/序列化协议调用底层实现在 R/pkg/R/backend.R、R/pkg/R/client.R、R/pkg/R/jvm.R 等文件中R 侧接口变化不需要重新编译 Scala 侧。改动完成后官方要求为新功能补充单元测试并用 R/run-tests.sh 运行既有测试。从该脚本源码可见其测试链路先查找connector/avro构建出的spark-avrojar若存在则通过--jars附带调用bin/spark-submit提交 R/pkg/tests/run-all.R 执行全部测试并设置SPARKR_SUPPRESS_DEPRECATION_WARNING1、SPARK_TESTING1、NOT_CRANtrue等环境变量同时通过--driver-java-options -Dlog4j.configurationFilefile:$FWDIR/log4j2.properties指定日志配置即 R/log4j2.properties并通过--conf spark.driver.extraJavaOptions-Xss4M、--conf spark.executor.extraJavaOptions-Xss4M调大线程栈之后还会调用 R/check-cran.sh 执行 CRAN 风格检查NO_TESTS1 NO_MANUAL1并统计 WARNING/ERROR/NOTE 数量任何测试失败或警告都会以非零退出码结束脚本。测试用例主体位于 R/pkg/tests/fulltests覆盖 RDD、DataFrame/SQL、MLlib 分类/聚类/树模型、流式、序列化、JVM API、Arrow 等主题如test_sparkSQL.R、test_mllib_classification.R、test_streaming.R新增功能的单测通常放在这里然后再由run-all.R统一调度。生成 SparkR 文档SparkR 的 Rd 文档与 HTML 文档不属于源码仓库的一部分需要自行生成。运行脚本 R/create-docs.sh 即可./R/create-docs.sh该脚本依赖roxygen2、knitr、rmarkdown以及pkgdown使用前需确保这些 R 包已安装脚本注释中明确列出了这些前置依赖。脚本会依次调用install-dev.sh安装包并生成 Rd 文件在R/pkg/html目录下用knitr::knit_rd(SparkR, ...)渲染 HTML 文档从 R/pkg/DESCRIPTION 读取版本号把 R/pkg/pkgdown/_pkgdown_template.yml 中的{SPARK_VERSION}占位符替换为真实版本后用pkgdown::build_site生成站点输出到R/pkg/docs。生成后的产物位置Rd/HTML API 文档$SPARK_HOME/R/pkg/htmlVignettes$SPARK_HOME/R/pkg/vignettes/sparkr_vignettes.html源码为 R/pkg/vignettes/sparkr-vignettes.Rmdpkgdown 站点$SPARK_HOME/R/pkg/docs对于日常开发中只更新了源码注释的情况可以参照 R/DOCUMENTATION.md 中的更轻量方式直接在 R 控制台执行roxygen2::roxygenize(package.dir ./pkg, roclets c(rd))并用R CMD check pkg/验证改动是否正确。示例程序与单元测试SparkR 自带若干示例程序位于examples/src/main/r目录包括dataframe.R、RSparkSQLExample.R、data-manipulation.R以及ml/与streaming/子目录下的机器学习与流式示例。运行示例使用./bin/spark-submit filename args./bin/spark-submit examples/src/main/r/dataframe.RSparkR 的单元测试则按官方 Running R Tests 一节说明执行仓库中对应脚本为 R/run-tests.sh。如前文所述它会通过 spark-submit 提交R/pkg/tests/run-all.R并以 CRAN 检查作为补充日志分别写入R/unit-tests.out与R/cran-check.out。在 YARN 集群上运行./bin/spark-submit同样可以用于向 YARN 集群提交 SparkR 作业。提交前需要设置 YARN 配置目录YARN_CONF_DIR。例如在 CDH 发行版上export YARN_CONF_DIR/etc/hadoop/conf ./bin/spark-submit --master yarn examples/src/main/r/dataframe.R从 R/install-dev.sh 与 R/install-dev.bat 的源码可以看出安装脚本专门生成sparkr.zip的目的正是为了在 YARN 模式下把 SparkR 包分发到各 worker 节点——这意味着 YARN 部署前务必先在每个节点或通过分发机制覆盖所有节点完成 SparkR 包的安装否则 worker 上将无法加载 SparkR 库。此外在 YARN 集群上运行前建议先在本机用./bin/sparkR --master local[2]验证脚本逻辑再切换到--master yarn提交便于隔离 R 代码错误与集群配置问题。小结本文围绕 R/pkg/README.md 梳理了 SparkR 的完整使用链路通过 R/install-dev.sh及 Windows 下的 R/install-dev.bat安装 R 包用带-Psparkrprofile 的 Maven/SBT 构建 Spark用bin/sparkR或 RStudio 进入交互环境按只改 R 文件即重装测试的开发节奏配合 R/run-tests.sh 与 R/check-cran.sh 保证质量最后通过spark-submit在本地或 YARN 集群上运行examples/src/main/r中的示例作业。配套的包元数据R/pkg/DESCRIPTION、导出 APIR/pkg/NAMESPACE与测试用例R/pkg/tests/fulltests可作为继续深入 SparkR 源码的第一手资料。【免费下载链接】sparkApache Spark - A unified analytics engine for large-scale data processing项目地址: https://gitcode.com/gh_mirrors/sp/spark创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门