1. Baixe e configure o código-fonte do Spark
Primeiro baixe o código-fonte do Spark: https://github.com/apache/spark/tree/v2.4.5
endereço do site oficial:https://github.com/apache/spark
Aqui, é melhor extrair o warehouse localmente após compilar no host da nuvem e configurar o maven local e o endereço do warehouse. O download no Windows pode ser mais lento. Se você não puder esperar, pode fazer um wall.
Você pode modificar a versão do scala e a versão do hadoop no arquivo 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>
Se necessário, você pode adicionar o endereço do warehouse CDH ao pom principal https://repository.cloudera.com/artifactory/cloudera-repos/
2. Compilar o código-fonte do Spark
Antes de compilar o código-fonte do Spark, você precisa modificar algumas coisas, porque o escopo estipula que fornecido relatará ClassNotFoundException
- Modifique o arquivo pom.xm no 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>
Modifique o arquivo 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>
Se houver outras ClassNotFoundExceptions semelhantes causadas por esse motivo, basta comentar
Use git-bash para compilar, use comandos mvn clean package -DskipTests=true
para compilar em gitbash
3. Importe o código-fonte para o IDEA
O código fonte está em modo Maven, após importar IDEA, aguarde o carregamento da dependência
Antes de compilar, você precisa excluir spark-sql
o pacote do pacote de teste streaming
, caso contrário, ele será inserido aqui durante a construção do projeto, causando java.lang.OutOfMemoryError: limite de sobrecarga de GC excedido. Clique para Build Project
compilar
Após a compilação bem-sucedida, você pode depurar SparkSQL
4. Depure SparkSQL localmente
Encontre o módulo hive-thriftserver, crie um novo diretório de recursos em main e marque-o como um diretório de recursos.
Copie os seguintes arquivos de configuração no cluster para
hive-site.xml no diretório 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>
Observação: apenas hive-site.xml é necessário aqui
O servidor precisa iniciar o serviço metastore
hive --service metastore &
Execute SparkSQLCLIDriver
Antes de executar, você precisa adicionar parâmetros nas opções 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)>
Resumindo:
Baixe o código-fonte do spark, use a linha de comando para compilar antes de importar a ideia, importe a ideia depois que a compilação for bem-sucedida e inicie o projeto de construção após importar a ideia. Nesse momento, um erro será relatado: calss not encontrado. Você pode gerar fonte. Itens fornecidos, resolver o problema lentamente e, finalmente, usar o caso para teste.