IDEA importar o código-fonte do Spark e compilar

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=truepara compilar em gitbash
Insira a descrição da imagem aqui

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-sqlo 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 Projectcompilar

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.

Acho que você gosta

Origin blog.csdn.net/qq_43081842/article/details/105777311
Recomendado
Clasificación