• SparkSession - Spark SQL 的 入口


    概述

    SparkSession 是 Spark SQL 的入口。使用 Dataset 或者 Datafram 编写 Spark SQL 应用的时候,第一个要创建的对象就是 SparkSession。

    Note:在 Spark 2.0 中, SparkSession 合并了 SQLContext 和 HiveContext。

    你可以通过 SparkSession.builder 来创建一个 SparkSession 的实例,并通过 stop 函数来停止 SparkSession。

    1. import org.apache.spark.sql.SparkSession
    2. val spark: SparkSession = SparkSession.builder
    3. .appName("My Spark Application") // optional and will be autogenerated if not specified
    4. .master("local[*]") // avoid hardcoding the deployment environment
    5. .enableHiveSupport() // self-explanatory, isn't it?
    6. .config("spark.sql.warehouse.dir", "target/spark-warehouse")
    7. .getOrCreate

    你可以在一个 Spark 应用中使用多个 SparkSession, 这样子就可以通过 SparSession 将多个关系实体隔离开来(可以参考 catalog 属性)。

    1. scala> spark.catalog.listTables.show
    2. +------------------+--------+-----------+---------+-----------+
    3. | name|database|description|tableType|isTemporary|
    4. +------------------+--------+-----------+---------+-----------+
    5. |my_permanent_table| default| null| MANAGED| false|
    6. | strs| null| null|TEMPORARY| true|
    7. +------------------+--------+-----------+---------+-----------+



    在 SparkSession 的内部, 包含了SparkContext, SharedState,SessionState 几个对象。下表中介绍了每个对象的大体功能:

    NameTypeDescription
    sparkContextSparkContextspark功能的主要入口点。可以通过 sparkConext在集群上创建RDD, accumulators 和 broadcast variables
    existingSharedStateOption[SharedState]一个内部类负责保存不同session的共享状态
    parentSessionStateOption[SessionState]复制父session的状态



    下图是 SparkSession 的类和方法, 这些方法包含了创建 DataSet, DataFrame, Streaming 等等。

    MethodDescription
    builder"Opens" a builder to get or create a SparkSession instance
    versionReturns the current version of Spark.
    implicitsUse import spark.implicits._ to import the implicits conversions and create Datasets from (almost arbitrary) Scala objects.
    emptyDataset[T]Creates an empty Dataset[T].
    rangeCreates a Dataset[Long].
    sqlExecutes a SQL query (and returns a DataFrame).
    udfAccess to user-defined functions (UDFs).
    tableCreates a DataFrame from a table.
    catalogAccess to the catalog of the entities of structured queries
    readAccess to DataFrameReader to read a DataFrame from external files and storage systems.
    confAccess to the current runtime configuration.
    readStreamAccess to DataStreamReader to read streaming datasets.
    streamsAccess to StreamingQueryManager to manage structured streaming queries.
    newSessionCreates a new SparkSession.
    stopStops the SparkSession.



     

    Builder

    Builder 是 SparkSession 的构造器。 通过 Builder, 可以添加各种配置。
    Builder 的方法如下:

    MethodDescription
    getOrCreate获取或者新建一个 sparkSession
    enableHiveSupport增加支持 hive Support
    appName设置 application 的名字
    config设置各种配置
    1. import org.apache.spark.sql.SparkSession
    2. val spark: SparkSession = SparkSession.builder
    3. .appName("My Spark Application") // optional and will be autogenerated if not specified
    4. .master("local[*]") // avoid hardcoding the deployment environment
    5. .enableHiveSupport() // self-explanatory, isn't it?
    6. .getOrCreate



     

    ShareState

    ShareState 是 SparkSession 的一个内部类,负责保存多个有效session之间的共享状态。下表介绍了ShareState的属性。

    NameTypeDescription
    cacheManagerCacheManager这个是 SQLContext 的支持类,会自动保存 query 的查询结果。这样子查询在执行过程中,就可以使用这些查询结果
    externalCatalogExternalCatalog保存外部系统的 catalog
    globalTempViewManagerGlobalTempViewManager一个线程安全的类,用来管理 global temp view, 并提供 create , update , remove 的等原子操作,来管理这些 view
    jarClassLoaderNonClosableMutableURLClassLoader加载用户添加的 jar 包
    listenerSQLListener一个监听类
    sparkContextSparkContextSpark 的核心入口类
    warehousePathStringMetaStore 的地址,可以通过 spark.sql.warehouse.dir 或者 hive-site.xml 中的 hive.metastore.warehouse.dir 来指定, Spark 会覆盖 hive 的参数

    ShareState 会使用一个 sparkContext 作为构造参数。如果可以在 CLASSPATH 中找到 hive-site.xml,ShareState 会将它加入到 sparkContext 的 hadoop configuration 中。

    通过设置 log4j.logger.org.apache.spark.sql.internal.SharedState=INFO 可以看到相应的日志。

  • 相关阅读:
    git 命令行回退版本
    JAVA下唯一一款搞定OLTP+OLAP的强类型查询这就是最好用的ORM相见恨晚
    基于变因子加权学习与邻代维度交叉策略的改进乌鸦算法求解单目标优化问题含Matlab代码
    java事务回滚机制问题
    EXCEL 中find,if and,if or
    java-php-python-ssm医患辅助系统计算机毕业设计
    Python如何使用Redis
    知识图谱从入门到应用——知识图谱推理:基于符号逻辑的知识图谱推理
    Java使用Redis的几种客户端介绍
    Cookie和Session的对比和总结 [JavaWeb][Servlet]
  • 原文地址:https://blog.csdn.net/weixin_67271870/article/details/126841044