Spark SQL支持从Hive存储中读写数据。然而,Hive存在很多的依赖,而这些依赖又不包含在默认的各类Spark发型版本中。如果将Hive的依赖放入classpath中,Spark将自动加载它们。值得注意的是,这些依赖必须在所有节点中都存在。因为他们需要通过Hive的序列化和反序列化库(SerDes)来访问存储在Hive中的数据。
在Spark中配置Hive,需要将hive-site.xml, core-site.xml, hdfs-site.xml放置到Spark的conf/目录下。
需要操作Hive,必须先实例化SparkSession以获取Hive的支持。包括连接到一个持久化的Hive元存储,支持Hive的序列化以及Hive的UDF。没有部署Hive的用户仍然可以启用Hive支持。如果在hive-site.xml中没有进行配置,上下文将在当前目录自动创建metastore_db,并创建一个由spark.sql.warehouse.dir配置的目录。默认为Spark应用程序启动的当前目录下的Spark -warehouse目录。注意:hive-site.xml中的hive.metastore.warehouse.dir配置项在Spark 2.0.0以后被启用,取而代之的是spark.sql.warehouse.dir,以指定数据库在仓库中的默认位置。使用时,需要将写权限授予启动Spark应用程序的用户。
import java.io.File
import org.apache.spark.sql.{Row, SaveMode, SparkSession}
case class Record(key: Int, value: String)
// warehouseLocation指的是管理数据库和表的默认路径地址
val warehouseLocation = new File("spark-warehouse").getAbsolutePath
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.config("spark.sql.wa

本文详细介绍了如何在Spark中配置和使用Hive支持,包括将Hive的配置文件放入Spark的conf目录,创建和加载Hive表,执行SQL查询,以及进行数据读写操作。此外,还讨论了动态分区、Hive外部表的创建和管理,以及DataFrame与Hive表之间的交互。最后,提到了指定Hive表的存储格式选项,如fileFormat、inputFormat和outputFormat等。

1210

被折叠的 条评论
为什么被折叠?



