SparkSQL と Hive の間の対話

SparkSQL は、埋め込み Hive または外部 Hive を使用できます。企业开发中,通常采用外部Hive。

1. 組み込み Hive アプリケーション

Hive に埋め込まれたメタデータは Derby データベースに保存されます。
(1) Spark に組み込まれた Hive を使用する場合は、何もする必要はなく、直接使用するだけです。

[root@bigdata111 spark-local]$ bin/spark-shell

scala> spark.sql("show tables").show

注: 実行後、メタデータの保存に使用される$SPARK_HOME/metastore_db合計がさらにあることがわかります(2) テーブルを作成しますderby.log

scala> spark.sql("create table user(id int, name string)")

$SPARK_HOME/spark-warehouse/user注: 実行後、データベース データの保存に使用されるさらに多くの が見つかります。

(3) データベースを確認する

scala> spark.sql("show tables").show

(4) テーブルにデータを挿入する

scala> spark.sql("insert into user values(1,'wgh')")

(5) クエリデータ

scala> spark.sql("select * from user").show

注: ただし、メタデータは derby データベースに保存され、マルチクライアント アクセスをサポートしていないため、実際の使用では、組み込みの Hive を使用する人はほとんどいません。

2. 外部 Hive アプリケーション

Spark が Hive の外部にデプロイされた Hive を引き継ぎたい場合は、次の手順を実行する必要があります。

(0) 組み込み Hive と外部 Hive の違いを説明するには、組み込み Hive の metastore_db と Spark-warehouse を削除します。

[root@bigdata111 spark-local]$ rm -rf metastore_db/ spark-warehouse/

(1) 元のHiveが正常に動作していることを確認します。

[root@bigdata111 hadoop-3.1.3]$ sbin/start-dfs.sh
[root@bigdata111 hadoop-3.1.3]$ sbin/start-yarn.sh

[root@bigdata111 hive]$ bin/hive

(2) hive-site.xmlをsparkのconf/ディレクトリにコピーする必要があります

[root@bigdata111 conf]$ cp hive-site.xml /opt/module/spark-local/conf/

(3) 以前に hive-site.xml ファイルに Tez 関連の情報を設定したことがある場合は、コメントアウト ( 不是必须)

(4) MySQL ドライバーを Spark の jars/ ディレクトリにコピーします。

[root@bigdata111 software]$ cp mysql-connector-java-5.1.48.jar /opt/module/spark-local/jars/

(5) 事前にhiveサービスを起動しておく必要があります /opt/module/hive/bin/hiveservices.sh start( 不是必须)

(6) HDFS にアクセスできない場合は、core-site.xml と hdfs-site.xml を conf/ ディレクトリにコピーする必要があります ( 不是必须)

(7) スパークシェルの起動

[root@bigdata111 spark-local]$ bin/spark-shell

(8) ルックアップテーブル

scala> spark.sql("show tables").show

(9) テーブルを作成する

scala> spark.sql("create table student(id int, name string)")

(10) テーブルにデータを挿入する

scala> spark.sql("insert into student values(1,'wgh')")

(11) クエリデータ

scala> spark.sql("select * from student").show

3.Spark SQL CLIを実行する

Spark SQL CLI は、Hive メタデータ サービスをローカルで簡単に実行し、コマンド ラインからクエリ タスクを実行できます。Spark ディレクトリで次のコマンドを実行して、Spark SQL CLI を起動し、Hive ウィンドウと同様に SQL ステートメントを直接実行します。

[root@bigdata111 spark-local]$ bin/spark-sql

spark-sql (default)> show tables;

4. IDEA は外部 Hive を操作します

(1) pomに依存関係を追加

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.12</artifactId>
        <version>3.0.0</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.27</version>
    </dependency>

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_2.12</artifactId>
        <version>3.0.0</version>
    </dependency>
</dependencies>

hive-site.xml(2)リソースディレクトリにコピー(Hadoopを動作させる必要がある場合は、hdfs-site.xml、core-site.xml、yarn-site.xmlをコピーする必要があります)

(3) コードの実装

package com.wghu.sparksql

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

/**
 * User: WGH
 * Date:2023-03-08
 *
 * idea写代码连接外部hive
 * 1.导入pom依赖,spark-sql  mysql连接驱动,spark-hive
 * 2.将hive-site.xml放入到项目的类路径下
 * 3.代码里面获取外部hive的支持,在创建sparkSession对象是加入.enableHiveSupport()
 */
 
object SparkSQL12_Hive {
    
    
  def main(args: Array[String]): Unit = {
    
    
    System.setProperty("HADOOP_USER_NAME","root")

    //1.创建配置对象
    val conf : SparkConf = new SparkConf()
      .setAppName("SparkSQLTest")
      .setMaster("local[*]")

    //2.创建sparkSession对象
    val spark: SparkSession = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()

    //3.编写代码
    //连接hive
    spark.sql("show tables").show()

    spark.sql("create table bbb(id int,name string)").show()
    spark.sql("insert into bbb values(1,'wgh')").show()
    spark.sql("select * from bbb").show()

    //4.关闭sc
    spark.stop()

  }

}

おすすめ

転載: blog.csdn.net/weixin_43520450/article/details/129408213