SparkSQL入门、Hive和Spark整合、SparkSession入口

文章目录

    • 1、SparkSQL入门
      • 1.1 SparkSQL特性
      • 1.2 Spark SQL, DataFrames and Datasets Guide
    • 2、Hive和Spark整合
      • 2.1 把hive-site.xml复制到spark conf目录
      • 2.2 Spark访问Hive表
    • 3、SparkSession

1、SparkSQL入门

1.1 SparkSQL特性

以前的老版本1.0开始出现SparkSQL,在官网显示只有SparkSQL一个,1.3毕业;现在的官网显示:SQL,DataFrames,and Datasets,也就说1.0版本只有一个框架,就是SparkSQL,现在有SQL,DataFrames,Datasets三个框架。
特性:官网 http://spark.apache.org/sql/

  • Spark SQL is Apache Spark’s module for working with structured data–>Spark SQL是Apache Spark处理结构化数据的模块。
  • Integrated.Seamlessly mix SQL queries with Spark programs.–>整合性。无缝地将SQL查询与Spark程序混合在一起。
  • Uniform Data Access。Connect to any data source the same way.–>统一的数据访问。以同样的方式连接到任何数据源。
  • Hive Integration。Run SQL or HiveQL queries on existing warehouses.–>Hive集成。在现有仓库上运行SQL或HiveQL查询。
  • Standard Connectivity。Connect through JDBC or ODBC.–>标准连接。通过JDBC或ODBC连接

1.2 Spark SQL, DataFrames and Datasets Guide

官网:http://spark.apache.org/docs/2.4.2/sql-programming-guide.html
在这里插入图片描述

  • Spark SQL是一个用于结构化数据处理的Spark模块。与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了关于数据结构和正在执行的计算的更多信息。在内部,Spark SQL使用这些信息来执行优化。有几种与Spark SQL交互的方法,包括SQL和Dataset API。当计算结果时,使用相同的执行引擎,而不依赖于使用哪种API/语言来表示计算。

  • Spark SQL的一个用途是执行SQL查询。
    Spark SQL还可以用于从现有Hive安装中读取数据。
    当在另一种编程语言中运行SQL时,结果将作为Dataset/DataFrame返回。您还可以使用命令行或JDBC/ODBC与SQL接口进行交互。

  • Dataset 是分布式的数据集合。Dataset是Spark 1.6中添加的一个新接口,它提供了RDDs(强类型,能够使用强大的lambda函数)的优点,以及Spark SQL优化执行引擎的优点。可以从JVM对象构造数据集,然后使用功能转换(map、flatMap、filter等)操作数据集。Dataset API在Scala和Java中可用。Python不支持Dataset API。

  • DataFrame是组织成命名列的数据集。是在Spark 1.3中出现的,它在概念上等价于关系数据库中的表或R/Python中的数据框架,但在底层有更丰富的优化。DataFrames 可以由一系列广泛的源构建,例如:结构化数据文件、Hive中的表、外部数据库或现有的RDDs。DataFrame API可在Scala、Java、Python和R中使用。在Scala和Java中,DataFrame 表示一个Rows的Dataset。在Scala API中,DataFrame只是Dataset[Row]的一个类型别名。而在Java API中,用户需要使用Dataset来表示DataFrame。

2、Hive和Spark整合

2.1 把hive-site.xml复制到spark conf目录

[hadoop@vm01 conf]$ cp ~/app/hive-1.1.0-cdh5.7.0/conf/hive-site.xml ./

2.2 Spark访问Hive表

访问之前,先在Hive里面创建一张worker表,因为我的Hive里面一张表都没有,如果你的Hive里面有其他表,这一步略。创建的表如果没有指定路径,那么默认是放在HDFS的/user/hive/warehouse目录

[hadoop@vm01 ~]$ hive
hive> 
    > create table worker (id string,salary double,bon double,dep int);
OK
Time taken: 0.744 seconds
hive> 
    > select * from worker;
OK
Time taken: 0.494 seconds
[hadoop@vm01 conf]$ hdfs dfs -ls /user/hive/warehouse
drwxr-xr-x   - hadoop supergroup          0 2019-08-05 19:15 /user/hive/warehouse/worker

第一种:spark-shell

[hadoop@vm01 bin]$ ./spark-shell \
--jars /home/hadoop/app/hive-1.1.0-cdh5.7.0/lib/mysql-connector-java-5.1.47.jar

Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.2
      /_/
         
Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45)
Type in expressions to have them evaluated.
Type :help for more information.

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

拉到最后可以看到添加了jar包信息。
spark://vm01:36873/jars/mysql-connector-java-5.1.47.jar --> Added By User
SparkSQL入门、Hive和Spark整合、SparkSession入口_第1张图片
第二种:spark-sql
库名默认是default库

[hadoop@vm01 bin]$  ./spark-sql \
>  --jars /home/hadoop/app/hive-1.1.0-cdh5.7.0/lib/mysql-connector-java-5.1.47.jar \
>  --driver-class-path /home/hadoop/app/hive-1.1.0-cdh5.7.0/lib/mysql-connector-java-5.1.47.jar
Spark master: local[*], Application Id: local-1565050701376
spark-sql> show tables;

第三种:开启thriftserver,这个在编译的时候需要指定

[hadoop@vm01 sbin]$ ./start-thriftserver.sh  \
--jars /home/hadoop/app/hive-1.1.0-cdh5.7.0/lib/mysql-connector-java-5.1.47.jar

打开beeline客户端,如果这里没有./也有可能是开启的hive里面的beeline,因为hive配置了环境变量。

[hadoop@vm01 bin]$ ./beeline -u jdbc:hive2://localhost:10000  -n hadoop
Connecting to jdbc:hive2://localhost:10000
Connected to: Spark SQL (version 2.4.2)
Driver: Hive JDBC (version 1.2.1.spark2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 1.2.1.spark2 by Apache Hive
0: jdbc:hive2://localhost:10000> show tables;

3、SparkSession

SparkSession是SparkSQL的入口,相当于SparkCore的SparkContext的入口。
IDEA开发,首先添加SparkSQL依赖.。

    <dependency>
      <groupId>org.apache.sparkgroupId>
      <artifactId>spark-sql_2.11artifactId>
      <version>${spark.version}version>
    dependency>
package com.ruozedata.spark

import org.apache.spark.sql.SparkSession

object SparkSessionApp {
  def main(args: Array[String]): Unit = {
    val spark=SparkSession.builder()
      .master("local[2]")
      .appName("SparkSeesionApp")
      .enableHiveSupport()   //支持hive
      .getOrCreate()

    spark.sql("show tables").show(false)

    spark.stop()

  }
}

你可能感兴趣的:(Spark2)