Spark SQL整合Hive
Hive简介
Hive 是一个基于 Hadoop 的数据仓库架构,它使用 SQL 语句(HiveQL)来读写和管理大型分布式数据集。Hive 通过将 SQL 语句转化为 MapReduce(或 Apache Spark、Apache Tez)任务,降低了 Hadoop 的使用难度,并减少了开发时间。Hive 适用于数据仓库的统计分析,能够执行 ETL、生成分析报告和进行数据分析等任务。
Spark SQL与Hive整合优势
整合 Spark SQL 和 Hive 后,可以在 Spark SQL 中使用 HiveQL 轻松操作数据仓库。与 Hive 使用 MapReduce 作为执行引擎不同,Spark SQL 使用的是 Spark RDD。
Spark SQL整合Hive的步骤
整合分为三个主要步骤:
-
配置 hive-site.xml:将
$HIVE_HOME/conf
中的hive-site.xml
文件复制到$SPARK_HOME/conf
中,并添加相关属性,例如:<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/spark_hive_meta?createDatabaseIfNotExist=true&useSSL=false</value> <description>MySQL 连接</description> </property>
-
配置 Spark 环境:在
spark-env.sh
中指定 Hadoop 及其配置文件的主目录:export HADOOP_HOME=/export/servers/hadoop-3.2.0 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
-
添加 MySQL 驱动:将 MySQL 驱动 JAR 包复制到
$SPARK_HOME/jars
目录中。
Spark SQL操作Hive的方式
方式一:Spark SQL终端操作
使用 Spark Standalone 模式,通过以下命令进入 Spark SQL 终端:
spark-sql --master spark://192.168.121.131:7077
然后以 HiveQL 的方式进行操作。
方式二:Spark Shell操作
通过以下命令进入 Spark Shell 终端:
spark-shell --master spark://192.168.121.131:7077
之后,使用 spark.sql("HiveQL语句")
的方式操作。
方式三:提交Spark SQL应用程序
在 IDEA 中编写 Spark SQL 应用程序,打包为 JAR 后提交到 Spark 集群运行。例如:
package spark.demo.sql
import org.apache.spark.sql.SparkSession
object SparkSQLHiveDemo {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName("Spark Hive Demo")
.enableHiveSupport()
.getOrCreate()
spark.sql("create table if not exists students(id int,name string,age int) row format delimited fields terminated by '\t'")
spark.sql("load data local inpath '/root/data/students.txt' into table students")
spark.sql("select * from students").show()
}
}
使用 spark-submit
命令提交应用程序:
spark-submit --class spark.demo.sql.SparkSQLHiveDemo SparkDemo-1.0-SNAPSHOT.jar
Maven项目配置示例
以下是 Maven 项目的 pom.xml
配置示例:
<project>
<!-- ... 其他配置 ... -->
<dependencies>
<!-- ... 其他依赖 ... -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.3.3</version>
</dependency>
</dependencies>
</project>