Compile y cree Apache Spark3.2.4 a partir del código fuente

Instrucciones de compilación

Para la mayoría de los usuarios, usar la versión precompilada oficial de Spark es suficiente para las necesidades diarias. Solo es necesario recompilar Spark bajo escenarios y requisitos específicos.

Los escenarios para compilar el código fuente de Spark son los siguientes:

1. Requisitos personalizados:

Si necesita personalizar Spark de acuerdo con necesidades comerciales específicas, como agregar reglas de optimización personalizadas, mejorar la compatibilidad con fuentes de datos u optimizar para hardware específico, la recompilación de Spark satisfará sus necesidades y permitirá la versión personalizada de Spark. Aplique estas personalizaciones.

2. Nuevas funciones y mejoras:

Si desea utilizar la última versión de Spark para disfrutar de las ventajas de las nuevas funciones y mejoras, pero la versión precompilada oficial no incluye este contenido, vuelva a compilar Spark para utilizar la última versión y obtener estas nuevas funciones.

3. Optimización para un entorno específico:

Diferentes hardware, sistemas operativos y configuraciones pueden requerir diferentes parámetros de optimización y adaptaciones. Si tiene requisitos ambientales o de hardware específicos, y desea optimizar Spark para aprovechar al máximo su rendimiento, puede volver a compilar Spark para realizar la configuración de compilación y los ajustes de parámetros relevantes.

4. Depuración y desarrollo:

Si es un desarrollador de Spark o desea participar en la contribución de la comunidad de Spark, al recompilar Spark obtendrá el código fuente, las herramientas de compilación y el entorno de desarrollo para el trabajo de depuración, modificación y desarrollo.

Compilar Apache Spark

descargar código fuente

Descarga el código fuente:https://spark.apache.org/news/index.html

Referencia de documentación de compilación:https://spark.apache.org/docs/latest/building-spark.html

Preparación del entorno de construcción

构建Apache Spark环境要求:

1. Para compilar Apache Spark basado en Maven, se requieren Maven3.8.6 y Java 8.

2.Spark requiere la versión Scala 2.12/2.13 Tenga en cuenta que la compatibilidad con Scala2.11 se eliminó en Spark3.0.0.

3. Se recomienda configurar el uso de memoria de Maven

Abra una consola o terminal de línea de comandos y establezca la variable de entorno MAVEN_OPTS:

Sistema operativo Linux:

export MAVEN_OPTS="-Xss64m -Xmx2g -XX:ReservedCodeCacheSize=1g"

Sistema operativo Windows:

set MAVEN_OPTS="-Xss64m -Xmx2g -XX:ReservedCodeCacheSize=1g"

Aviso:

Esto establecerá la variable de entorno MAVEN_OPTS en la sesión actual; si cierra la terminal o la consola, la configuración se perderá. Al ejecutar el comando Maven, aplicará automáticamente estos parámetros.

Si desea configurar permanentemente la variable de entorno MAVEN_OPTS, puede agregar el comando anterior al archivo de configuración de su sistema operativo (como .bashrc o .bash_profile).

Construir con Maven local

Spark viene con una instalación independiente de Maven que descarga y configura automáticamente todos los requisitos de compilación necesarios (por ejemplo, Maven, Scala) al compilar el código fuente.

Abra spark-3.2.4\dev\make-distribution.shel archivo y configure manualmente para construir usando Mavn local

#MVN="$SPARK_HOME/build/mvn"
MVN=/d/Development/Maven/bin/mvn

Cambiar la versión de Scala

Es posible construir contra una versión de Spark usando una versión específica de Scala, por ejemplo, usando Scala2.13

Aviso:

Este paso es opcional y se puede seleccionar de acuerdo con escenarios específicos. Por ejemplo, Spark se usa como el motor de ejecución de Hive y Hive usa Scala versión 2.13. Por compatibilidad, también se debe usar la versión Scala 2.13 aquí.

./dev/change-scala-version.sh 2.12

Descargar paquete Jar

1. Use la herramienta de desarrollo IDEA para abrir el proyecto y el JAR relacionado con el proyecto se descargará automáticamente.

2. Utilice el comando mvn clean packageo mvn dependency:resolveMaven para analizar las dependencias correspondientes al archivo pom.xml del proyecto y descargue los archivos JAR necesarios en el almacén local.

3. Use mvn dependency:purge-local-repositoryel comando Maven, que recorrerá las dependencias de Jar en el almacén local asociado en el proyecto pom.xml y eliminará todas las dependencias descargadas.

Construir una distribución ejecutable

Descripción de los parámetros de construcción:

--name hadoop3.1.3-without-hive: 指定生成的Spark分发包的名称。

--tgz: 指定生成的分发包的格式为tar.gz压缩文件。

-Pyarn: Maven profile配置项,用于启用YARN支持。YARN是Apache Hadoop的资源管理器,用于在集群上分配和管理资源。

-Phadoop-provided: Maven profile配置项,用于指定使用外部提供的Hadoop依赖。这意味着Spark将使用系统中已安装的Hadoop而不是内置的Hadoop。

-Dhadoop.version=3.1.3: 指定所使用的Hadoop版本。

-Phive: Maven profile配置项,用于启用Hive支持。Hive是建立在Hadoop之上的数据仓库基础设施,它提供了类似于SQL的查询语言(HiveQL)来查询和分析存储在 Hadoop 分布式文件系统中的数据。

-Phive-thriftserver: Maven profile配置项,用于启用Hive Thrift服务器支持。Hive Thrift服务器允许通过Thrift 口访问Hive 的功能,从而可以通过远程客户端连接到Hive并执行查询操作。

-Dscala.version=2.12.17 是一个用于编译 Spark 时指定 Scala 版本的参数。

Comando de compilación:

./dev/make-distribution.sh --name hadoop3.1.3-without-hive --tgz  -Pyarn -Phadoop-provided -Dhadoop.version=3.1.3 

excepción de compilación

[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:4.3.0:compile (scala-compile-first) on project spark-tags_2.12: Execution scala-compile-first of goal net.alchim31.maven:scala-maven-plugin:4.3.0:compile failed: An API incompatibility was encountered while executing net.alchim31.maven:scala-maven-plugin:4.3.0:compile: java.lang.NoSuchMethodError: org.fusesource.jansi.AnsiConsole.wrapOutputStream(Ljava/io/OutputStream;)Ljava/io/OutputStream;
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>net.alchim31.maven:scala-maven-plugin:4.3.0
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/D:/Development/Maven/Repository/net/alchim31/maven/scala-maven-plugin/4.3.0/scala-maven-plugin-4.3.0.jar
[ERROR] urls[1] = file:/D:/Development/Maven/Repository/org/apache/maven/maven-builder-support/3.3.9/maven-builder-support-3.3.9.jar
[ERROR] urls[2] = file:/D:/Development/Maven/Repository/com/google/guava/guava/18.0/guava-18.0.jar
[ERROR] urls[3] = file:/D:/Development/Maven/Repository/org/codehaus/plexus/plexus-interpolation/1.21/plexus-interpolation-1.21.jar
[ERROR] urls[4] = file:/D:/Development/Maven/Repository/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar

razón:
Maven依赖冲突或版本不兼容引起的

solución:

更换Spark项目中使用的scala-maven-plugin插件版本,将版本由3.4.0改成4.8.0

 <groupId>net.alchim31.maven</groupId>
          <artifactId>scala-maven-plugin</artifactId>
          <!-- SPARK-36547: Please don't upgrade the version below, otherwise there will be an error on building Hadoop 2.7 package -->
          <version>4.8.0</version>
 </groupId>         

Nota: La versión modificada del complemento debe ajustarse correctamente de acuerdo con la versión de Maven instalada hasta que no haya tal error.

construir el éxito

[INFO] Replacing D:\WorkSpace\BigData\spark-3.2.4\external\avro\target\spark-avro_2.12-3.2.4.jar with D:\WorkSpace\BigData\spark-3.2.4\external\avro\target\spark-avro_2.12-3.2.4-shaded.jar
[INFO] Dependency-reduced POM written at: D:\WorkSpace\BigData\spark-3.2.4\external\avro\dependency-reduced-pom.xml
[INFO]
[INFO] --- maven-source-plugin:3.1.0:jar-no-fork (create-source-jar) @ spark-avro_2.12 ---
[INFO] Building jar: D:\WorkSpace\BigData\spark-3.2.4\external\avro\target\spark-avro_2.12-3.2.4-sources.jar
[INFO]
[INFO] --- maven-source-plugin:3.1.0:test-jar-no-fork (create-source-jar) @ spark-avro_2.12 ---
[INFO] Building jar: D:\WorkSpace\BigData\spark-3.2.4\external\avro\target\spark-avro_2.12-3.2.4-test-sources.jar
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Spark Project Parent POM 3.2.4:
[INFO]
[INFO] Spark Project Parent POM ........................... SUCCESS [  4.208 s]
[INFO] Spark Project Tags ................................. SUCCESS [ 27.903 s]
[INFO] Spark Project Sketch ............................... SUCCESS [ 14.615 s]
[INFO] Spark Project Local DB ............................. SUCCESS [ 11.059 s]
[INFO] Spark Project Networking ........................... SUCCESS [ 14.750 s]
[INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 13.361 s]
[INFO] Spark Project Unsafe ............................... SUCCESS [ 18.919 s]
[INFO] Spark Project Launcher ............................. SUCCESS [ 18.429 s]
[INFO] Spark Project Core ................................. SUCCESS [05:13 min]
[INFO] Spark Project ML Local Library ..................... SUCCESS [ 35.943 s]
[INFO] Spark Project GraphX ............................... SUCCESS [ 41.485 s]
[INFO] Spark Project Streaming ............................ SUCCESS [01:16 min]
[INFO] Spark Project Catalyst ............................. SUCCESS [03:13 min]
[INFO] Spark Project SQL .................................. SUCCESS [05:24 min]
[INFO] Spark Project ML Library ........................... SUCCESS [02:43 min]
[INFO] Spark Project Tools ................................ SUCCESS [  9.124 s]
[INFO] Spark Project Hive ................................. SUCCESS [01:56 min]
[INFO] Spark Project REPL ................................. SUCCESS [ 27.047 s]
[INFO] Spark Project YARN Shuffle Service ................. SUCCESS [ 26.742 s]
[INFO] Spark Project YARN ................................. SUCCESS [03:02 min]
[INFO] Spark Project Assembly ............................. SUCCESS [  2.647 s]
[INFO] Kafka 0.10+ Token Provider for Streaming ........... SUCCESS [ 26.049 s]
[INFO] Spark Integration for Kafka 0.10 ................... SUCCESS [ 45.183 s]
[INFO] Kafka 0.10+ Source for Structured Streaming ........ SUCCESS [ 54.219 s]
[INFO] Spark Project Examples ............................. SUCCESS [ 43.172 s]
[INFO] Spark Integration for Kafka 0.10 Assembly .......... SUCCESS [  9.504 s]
[INFO] Spark Avro ......................................... SUCCESS [ 45.400 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  31:01 min
[INFO] Finished at: 2023-08-09T10:10:41+08:00
[INFO] ------------------------------------------------------------------------
+ rm -rf /d/WorkSpace/BigData/spark-3.2.4/dist
+ mkdir -p /d/WorkSpace/BigData/spark-3.2.4/dist/jars
+ echo 'Spark 3.2.4 built for Hadoop 3.1.3'
+ echo 'Build flags: -Pyarn' -Phadoop-provided -Dhadoop.version=3.1.3

inserte la descripción de la imagen aquí

ejecutar prueba

iniciar chispa-shell

spark-shell --master local

Excepción 1:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/spi/Filter
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:650)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:632)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.spi.Filter
        at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

Modifique el archivo spark-env.sh

# jdk路径
export JAVA_HOME=/usr/local/program/jdk8

# 关联Hadoop
export HADOOP_HOME=/usr/local/program/hadoop
export HADOOP_CONF_DIR=/usr/local/program/hadoop/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/usr/local/program/hadoop/bin/hadoop classpath)

Excepción 2:

org.apache.spark.SparkException: Could not find spark-version-info.properties
  at org.apache.spark.package$SparkBuildInfo$.<init>(package.scala:62)
  at org.apache.spark.package$SparkBuildInfo$.<clinit>(package.scala)
  at org.apache.spark.package$.<init>(package.scala:93)
  at org.apache.spark.package$.<clinit>(package.scala)
  at org.apache.spark.SparkContext.$anonfun$new$1(SparkContext.scala:193)
  at org.apache.spark.internal.Logging.logInfo(Logging.scala:57)
  at org.apache.spark.internal.Logging.logInfo$(Logging.scala:56)
  at org.apache.spark.SparkContext.logInfo(SparkContext.scala:82)
  at org.apache.spark.SparkContext.<init>(SparkContext.scala:193)
  at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2700)
  at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$2(SparkSession.scala:949)
  at scala.Option.getOrElse(Option.scala:189)
  at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:943)
  at org.apache.spark.repl.Main$.createSparkSession(Main.scala:112)

Ejecute build/spark-build-infoel comando, generará un spark-version-info.propertiesarchivo.

build/spark-build-info  ./目录路径

El contenido del archivo es el siguiente:

version=
user=
revision=
branch=
date=2023-08-10T01:42:10Z
url=

spark-version-info.propertiesCopie los archivos generados en spark-core_2.11-2.4.0-SNAPSHOT.jar. Coloque el paquete JAR modificado en spark/jarsel directorio y reemplace el JAR original

inserte la descripción de la imagen aquí

Reinicie Spark Shell mientras ejecuta consultas de base de datos

Spark context Web UI available at http://node01:4040
Spark context available as 'sc' (master = local, app id = local-1691675436513).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.2.4
      /_/

Using Scala version 2.12.15 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_371)
Type in expressions to have them evaluated.
Type :help for more information.

scala> spark.sql("show databases").show
+---------+
|namespace|
+---------+
|  default|
+---------+

Supongo que te gusta

Origin blog.csdn.net/qq_38628046/article/details/132181298
Recomendado
Clasificación