IDEAはSparkソースコードをインポートしてコンパイルします

1.Sparkソースコードをダウンロードして構成します

最初にSparkソースコードをダウンロードします:https://github.com/apache/spark/tree/v2.4.5
公式ウェブサイトアドレス:https://github.com/apache/spark

ここでは、クラウドホストでコンパイルした後、ウェアハウスをローカルにプルし、ローカルのMavenとウェアハウスのアドレスを構成するのが最適です。Windowsでのダウンロードは遅くなる可能性があります。待つことができない場合は、壁にかけることができます。

メインのpomファイルでscalaバージョンとhadoopバージョンを変更できます

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

必要に応じて、CDHウェアハウスのアドレスをメインpomhttps://repository.cloudera.com/artifactory/cloudera-repos/に追加できます。

2.Sparkソースコードをコンパイルします

Sparkソースコードをコンパイルする前に、いくつかの変更を加える必要があります。これは、提供されたスコープがClassNotFoundExceptionを報告することを規定しているためです。

  • hive-thriftserverモジュールの下のpom.xmファイルを変更します
<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>

メインのpom.xmlファイルを変更します

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

この理由によって引き起こされた他の同様のClassNotFoundExceptionsがある場合は、コメントしてください

git-bashを使用してコンパイルし、コマンドmvn clean package -DskipTests=true使用してgitbashでコンパイルします
ここに画像の説明を挿入

3.ソースコードをIDEAにインポートします

ソースコードはMavenモードであり、IDEAをインポートした後、依存関係が読み込まれるのを待ちます

コンパイルする前にspark-sql、テストパッケージの下のパッケージを削除する必要がありますstreaming。そうしないと、ビルドプロジェクト中にここに入力され、java.lang.OutOfMemoryError:GCオーバーヘッド制限を超えました。クリックしてBuild Projectコンパイルます

コンパイルが成功したら、SparkSQLをデバッグできます

4.SparkSQLをローカルでデバッグします

hive-thriftserverモジュールを見つけ、mainの下に新しいリソースディレクトリを作成し、それをリソースディレクトリとしてマークし
ますクラスター上の次の構成ファイルをresourcesディレクトリのhive
-site.xmlにコピーします

<?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>

注:ここではhive-site.xmlのみが必要です

サーバーはメタストアサービスを開始する必要があります

hive --service metastore &

SparkSQLCLIDriverを実行します

実行する前に、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)> 

総括する:

Sparkソースコードをダウンロードし、コマンドラインを使用してアイデアをインポートする前にコンパイルし、コンパイルが成功した後にアイデアをインポートし、アイデアをインポートした後にビルドプロジェクトを開始します。この時点で、エラーが報告されます:calss not見つかった。ソースを生成できます。提供されたアイテムをゆっくりと問題を解決し、最後にケースをテストに使用します。

おすすめ

転載: blog.csdn.net/qq_43081842/article/details/105777311