Hive交互

Apache Hive 是 Hadoop 上的 SQL 引擎,Spark SQL编译时可以包含 Hive 支持,也可以不包含。
包含 Hive 支持的 Spark SQL 可以支持 Hive 表访问、UDF (用户自定义函数)以及 Hive 查询语言(HiveQL/HQL)等。需要强调的一点是,如果要在 Spark SQL 中包含Hive 的库,并不需要事先安装 Hive。一般来说,最好还是在编译Spark SQL时引入Hive支持,这样就可以使用这些特性了。如果你下载的是二进制版本的 Spark,它应该已经在编译时添加了 Hive 支持。
若要把 Spark SQL 连接到一个部署好的 Hive 上,你必须把 hive-site.xml 复制到 Spark的配置文件目录中($SPARK_HOME/conf)。即使没有部署好 Hive,Spark SQL 也可以运行,需要注意的是,如果你没有部署好Hive,Spark SQL 会在当前的工作目录中创建出自己的 Hive 元数据仓库,叫作 metastore_db。此外,对于使用部署好的Hive,如果你尝试使用 HiveQL 中的 CREATE TABLE (并非 CREATE EXTERNAL TABLE)语句来创建表,这些表会被放在你默认的文件系统中的 /user/hive/warehouse 目录中(如果你的 classpath 中有配好的 hdfs-site.xml,默认的文件系统就是 HDFS,否则就是本地文件系统)。
spark-shell默认是Hive支持的;代码中是默认不支持的,需要手动指定(加一个参数即可)

使用内嵌Hive

  1. Hive 的元数据存储在 derby 中, 仓库地址:$SPARK_HOME/spark-warehouse

spark带hive和不带的什么区别 spark内置hive_hive

  1. 如果使用 Spark 内嵌的 Hive, 则什么都不用做, 直接使用即可.

spark带hive和不带的什么区别 spark内置hive_Hive_02

外部Hive应用

如果Spark要接管Hive外部已经部署好的Hive,需要通过以下几个步骤。
 确定原有Hive是正常工作的
 需要把hive-site.xml拷贝到spark的conf/目录下
如果以前hive-site.xml文件中,配置过Tez相关信息,注释掉
 把Mysql的驱动copy到Spark的jars/目录下
 如果访问不到hdfs,则需要把core-site.xml和hdfs-site.xml拷贝到conf/目录下

cp /opt/module/hive/conf/hive-site.xml ./
  • 1

spark带hive和不带的什么区别 spark内置hive_Hive_03


spark带hive和不带的什么区别 spark内置hive_Hive_04

spark带hive和不带的什么区别 spark内置hive_spark带hive和不带的什么区别_05

spark带hive和不带的什么区别 spark内置hive_Hive_06

运行Spark SQL CLI

Spark SQLCLI可以很方便的在本地运行Hive元数据服务以及从命令行执行查询任务。在Spark目录下执行如下命令启动Spark SQ LCLI,直接执行SQL语句,类似Hive窗口。

spark带hive和不带的什么区别 spark内置hive_hive_07

代码中操作Hive

  1. 添加依赖
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.11</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>1.2.1</version>
</dependency>



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

代码实现

def main(args: Array[String]): Unit = {
    //创建上下文环境配置对象
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkSQL_Demo")

val spark<span >:</span> SparkSession <span >=</span> SparkSession
  <span >.</span><span >builder</span><span >(</span><span >)</span>
  <span >.</span><span >enableHiveSupport</span><span >(</span><span >)</span>
  <span >.</span><span >master</span><span >(</span><span >"local[*]"</span><span >)</span>
  <span >.</span><span >appName</span><span >(</span><span >"SQLTest"</span><span >)</span>
  <span >.</span><span >getOrCreate</span><span >(</span><span >)</span>


spark<span >.</span><span >sql</span><span >(</span><span >"show tables"</span><span >)</span><span >.</span><span >show</span><span >(</span><span >)</span>


<span >//释放资源</span>
spark<span >.</span><span >stop</span><span >(</span><span >)</span>

}



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

spark带hive和不带的什么区别 spark内置hive_SQL_08



Hive交互

Apache Hive 是 Hadoop 上的 SQL 引擎,Spark SQL编译时可以包含 Hive 支持,也可以不包含。
包含 Hive 支持的 Spark SQL 可以支持 Hive 表访问、UDF (用户自定义函数)以及 Hive 查询语言(HiveQL/HQL)等。需要强调的一点是,如果要在 Spark SQL 中包含Hive 的库,并不需要事先安装 Hive。一般来说,最好还是在编译Spark SQL时引入Hive支持,这样就可以使用这些特性了。如果你下载的是二进制版本的 Spark,它应该已经在编译时添加了 Hive 支持。
若要把 Spark SQL 连接到一个部署好的 Hive 上,你必须把 hive-site.xml 复制到 Spark的配置文件目录中($SPARK_HOME/conf)。即使没有部署好 Hive,Spark SQL 也可以运行,需要注意的是,如果你没有部署好Hive,Spark SQL 会在当前的工作目录中创建出自己的 Hive 元数据仓库,叫作 metastore_db。此外,对于使用部署好的Hive,如果你尝试使用 HiveQL 中的 CREATE TABLE (并非 CREATE EXTERNAL TABLE)语句来创建表,这些表会被放在你默认的文件系统中的 /user/hive/warehouse 目录中(如果你的 classpath 中有配好的 hdfs-site.xml,默认的文件系统就是 HDFS,否则就是本地文件系统)。
spark-shell默认是Hive支持的;代码中是默认不支持的,需要手动指定(加一个参数即可)

使用内嵌Hive

  1. Hive 的元数据存储在 derby 中, 仓库地址:$SPARK_HOME/spark-warehouse

spark带hive和不带的什么区别 spark内置hive_hive

  1. 如果使用 Spark 内嵌的 Hive, 则什么都不用做, 直接使用即可.

spark带hive和不带的什么区别 spark内置hive_Hive_02

外部Hive应用

如果Spark要接管Hive外部已经部署好的Hive,需要通过以下几个步骤。
 确定原有Hive是正常工作的
 需要把hive-site.xml拷贝到spark的conf/目录下
如果以前hive-site.xml文件中,配置过Tez相关信息,注释掉
 把Mysql的驱动copy到Spark的jars/目录下
 如果访问不到hdfs,则需要把core-site.xml和hdfs-site.xml拷贝到conf/目录下

cp /opt/module/hive/conf/hive-site.xml ./
  • 1

spark带hive和不带的什么区别 spark内置hive_Hive_03


spark带hive和不带的什么区别 spark内置hive_Hive_04

spark带hive和不带的什么区别 spark内置hive_spark带hive和不带的什么区别_05

spark带hive和不带的什么区别 spark内置hive_Hive_06

运行Spark SQL CLI

Spark SQLCLI可以很方便的在本地运行Hive元数据服务以及从命令行执行查询任务。在Spark目录下执行如下命令启动Spark SQ LCLI,直接执行SQL语句,类似Hive窗口。

spark带hive和不带的什么区别 spark内置hive_hive_07

代码中操作Hive

  1. 添加依赖
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.11</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>1.2.1</version>
</dependency>