22 ,sparkSql : 数据源,内置格式,读数据,存数据,运行 sql文件上,spark on hive

一 ,数据源 :

1 ,默认数据源 : Parquet 格式

  1. 修改默认格式 :spark.sql.sources.default
  2. 例子 :
package day05_sparkSql

import org.apache.spark.sql.SparkSession

object Demo03Parqut {
    def main(args: Array[String]): Unit = {
        //  spark 上下文
        val spark: SparkSession = SparkSession.builder().appName("testSql").master("local").getOrCreate()
        //  日志级别
        spark.sparkContext.setLogLevel("error")
        //  读文件
        val df = spark.read.load("./data/users.parquet")
        df.select("name", "favorite_color").write.save("./data/namesAndFavColors.parquet")
        spark.stop()
    }
}

2 ,数据源不是 parquet 格式 ,需要手动指定数据源的格式 :

  1. 数据源格式需要指定全名(例如:org.apache.spark.sql.parquet)
  2. 如果数据源格式为内置格式,则只需要指定简称定
  3. 内置格式包括 :
    json, parquet, jdbc, orc, libsvm, csv, text

3 ,读数据,存数据 :

  1. val peopleDF = spark.read.format(“json”).load(“examples/src/main/resources/people.json”)
  2. peopleDF.write.format(“parquet”).save(“hdfs://hadoop102:9000/namesAndAges.parquet”)

4 ,运行 sql 在文件上 :

val sqlDF = spark.sql("SELECT * FROM parquet.`hdfs://hadoop102:9000/namesAndAges.parquet`")
sqlDF.show()

5 ,文件保存选项 :

代码 含义
SaveMode.ErrorIfExists(default) 如果文件存在,则报错
SaveMode.Append 追加
SaveMode.Overwrite 覆写
SaveMode.Ignore 数据存在,则忽略

6 ,Parquet 文件 :

  1. Parquet 是一种流行的列式存储格式,可以高效地存储具有嵌套字段的记录。
  2. 应用 : Parquet 格式经常在 Hadoop 生态圈中被使用,它也支持 Spark SQL 的全部数据类型。Spark SQL 提供了直接读取和存储 Parquet 格式文件的方法。

7 , spark on hive : 必懂知识

  1. 不需要事先安装 Hive。
  2. Spark 已经在编译时添加了 Hive 支持。
  3. 若要把 Spark SQL 连接到一个部署好的 Hive 上 :
    1 ,必须把 hive-site.xml 复制到 Spark 的配置文件目录中 ($SPARK_HOME/conf)
    2 ,即使没有部署好Hive,Spark SQL也可以运行。
    3 ,如果你没有部署好 Hive,Spark SQL 会在当前的工作目录中创建出自己的 Hive 元数据仓库,叫作 metastore_db。
    4 ,内部表数据,被放在默认的文件系统中的 /user/hive/warehouse 目录中
    5 ,默认文件系统 : 如果你的 classpath 中有配好的 hdfs-site.xml,默认的文件系统就是 HDFS,否则就是本地文件系统

8 , spark on hive : 建表,导入数据

package day05_sparkSql

import org.apache.spark.sql.SparkSession

object Demo04_createTable {
    def main(args: Array[String]): Unit = {
        //  spark 上下文
        val spark: SparkSession = SparkSession.builder().appName("testSql").master("local").enableHiveSupport().getOrCreate()
        //  日志级别
        spark.sparkContext.setLogLevel("error")
        import spark.implicits._
        //  建表 :
        spark.sql("CREATE TABLE IF NOT EXISTS src (key Int, value String)")
        //  导入数据 :
        spark.sql("LOAD DATA LOCAL INPATH './data/kv1.txt' INTO TABLE src")
        //  查询结果 :
        spark.sql("select * from src").show()
        spark.close()
    }
}

9 ,内置 hive 的缺陷 :

  1. 元数据信息 :保存在单个节点上。
  2. 集群访问数据 : 不可以。
  3. 解决办法 : 将元数据信息保存在 hdfs 上。

10 ,spark on hive : 内置 hive 的配置

  1. 思路 : 将元数据信息放在 hdfs 上
  2. 删除掉 metastore ( 注意 :如果没有在本机器上启动过 spark on hive 任务,就不需要做这一步骤 )
    cd /export/servers/spark-2.3.1-bin-hadoop2.6
    rm -rf metastore_db
    rm -rf spark-warehouse
  3. 将 core-site.xml 和 hdfs-site.xml 加入到 Spark conf 目录 ( 三台机器 )
  4. 创建路径 :
    hdfs dfs mkdir /spark-warehouse
  5. 重新启动 spark 。
./spark-shell --master spark://node01:7077 --conf spark.sql.warehouse.dir=hdfs://node01:8020/spark-warehouse

11 ,spark on hive : 内置 hive 的使用 ( spark 自带的 hive )

加载数据 : 只能加载 hdfs 上的数据

12 ,spark on hive : 外置 hive 的安装 ( 之前安装的 hive )

  1. 目的 : spark 全面接管 hive 数据 。
  2. 将 Hive 中的 hive-site.xml 拷贝或者软连接到 Spark 安装目录下的 conf 目录下。
cd /export/servers/hive-1.1.0-cdh5.14.0/conf
cp hive-site.xml /export/servers/spark-2.3.1-bin-hadoop2.6/conf/
cd /export/servers/spark-2.3.1-bin-hadoop2.6/conf/
scp hive-site.xml root@node02:$PWD
scp hive-site.xml root@node03:$PWD
  1. 复制 mysql 驱动 :
cd /export/servers/hive-1.1.0-cdh5.14.0/lib
cp mysql-connector-java-5.1.40.jar /export/servers/spark-2.3.1-bin-hadoop2.6/jars/
cd /export/servers/spark-2.3.1-bin-hadoop2.6/jars/
scp mysql-connector-java-5.1.40.jar root@node02:$PWD
scp mysql-connector-java-5.1.40.jar root@node03:$PWD

13 ,spark on hive :启动 spark

cd /export/servers/spark-2.3.1-bin-hadoop2.6/sbin
./start-all.sh

14 ,开启 spark 交互窗口

cd /export/servers/spark-2.3.1-bin-hadoop2.6/bin
./spark-shell --master spark://node01:7077

15 ,sql 语句 :

  1. 建表 :
spark.sql("create table kv(key Int,value String)")
  1. 查看所有库 :
spark.sql("show databases").show
  1. 查看所有表 :
spark.sql("show tables").show
  1. 库切换 :
spark.sql("use sfl")

16 ,spark sql 黑窗口 :

cd /export/servers/spark-2.3.1-bin-hadoop2.6/bin
./spark-sql

你可能感兴趣的:(22 ,sparkSql : 数据源,内置格式,读数据,存数据,运行 sql文件上,spark on hive)