1. Descarga y configura el código fuente de Spark
Primero descargue el código fuente de Spark: https://github.com/apache/spark/tree/v2.4.5
dirección del sitio web oficial:https://github.com/apache/spark
Aquí, es mejor extraer el almacén localmente después de compilar en el host en la nube y configurar el maven local y la dirección del almacén. La descarga en Windows puede ser más lenta. Si no puede esperar, puede colocarlo en un muro.
Puede modificar la versión de scala y la versión de hadoop en el archivo pom principal
<hadoop.version>2.6.0-cdh5.16.2</hadoop.version>
<scala.version>2.12.10</scala.version>
<scala.binary.version>2.12</scala.binary.version>
Si es necesario, puede agregar la dirección del almacén de CDH al pom principal https://repository.cloudera.com/artifactory/cloudera-repos/
2. Compile el código fuente de Spark
Antes de compilar el código fuente de Spark, debe modificar algunas cosas, porque el alcance estipula que proporcionado informará ClassNotFoundException
- Modifique el archivo pom.xm en el módulo hive-thriftserver
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<!-- <scope>provided</scope>-->
</dependency>
Modificar el archivo pom.xml principal
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-http</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-continuation</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-proxy</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-client</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-security</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
<!-- <scope>provided</scope>-->
</dependency>
将如下换成compile
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<scope>compile</scope>
</dependency>
Si hay otras ClassNotFoundExceptions similares causadas por este motivo, simplemente comente
Use git-bash para compilar, use comandos mvn clean package -DskipTests=true
para compilar en gitbash
3. Importe el código fuente a IDEA
El código fuente está en modo Maven, después de importar IDEA, espere a que se cargue la dependencia
Antes de compilar, debe eliminar spark-sql
el paquete en el paquete de prueba streaming
; de lo contrario, se ingresará aquí durante la compilación del proyecto, lo que provocará java.lang.OutOfMemoryError: GC overhead limit excedido. Haga clic para Build Project
compilar
Después de una compilación exitosa, puede depurar SparkSQL
4. Depura SparkSQL localmente
Busque el módulo hive-thriftserver, cree un nuevo directorio de recursos en main y márquelo como un directorio de recursos.
Copie los siguientes archivos de configuración en el clúster en
hive-site.xml en el directorio de recursos
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop:9083</value>
<description>指向的是运行metastore服务的主机</description>
</property>
</configuration>
Nota: Aquí solo se necesita hive-site.xml
El servidor necesita iniciar el servicio de metastore
hive --service metastore &
Ejecute SparkSQLCLIDriver
Antes de ejecutar, debe agregar parámetros en las opciones de VM
-Dspark.master=local[2] -Djline.WindowsTerminal.directConsole=false
spark-sql (default)> show databases;
show databases;
databaseName
company
default
hive_function_analyze
skewtest
spark-sql (default)> Time taken: 0.028 seconds, Fetched 10 row(s)
select * from score;
INFO SparkSQLCLIDriver: Time taken: 1.188 seconds, Fetched 4 row(s)
id name subject
1 tom ["HuaXue","Physical","Math","Chinese"]
2 jack ["HuaXue","Animal","Computer","Java"]
3 john ["ZheXue","ZhengZhi","SiXiu","history"]
4 alice ["C++","Linux","Hadoop","Flink"]
spark-sql (default)>
para resumir:
Descargue el código fuente de Spark, use la línea de comando para compilar antes de importar la idea, luego importe la idea después de que la compilación sea exitosa y luego inicie el proyecto de compilación después de importar la idea. En este momento, se informará un error: calss not Encontrado. Puede Generar fuente. Elementos proporcionados, resolver lentamente el problema y, finalmente, usar el caso para probar.