微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spark 集成 Hive

 Hive查询流程及原理

执行HQL时,先到MysqL数据库中查找描述信息,然后解析HQL并根据描述信息生成MR任务

Hive将sql转成MapReduce执行速度慢

 

使用Sparksql整合Hive其实就是让Sparksql去加载Hive 的元数据库,然后通过Sparksql执行引擎去操作Hive表内的数据

所以首先需要开启Hive的元数据库服务,让Sparksql能够加载元数据

 Hive开启metastore服务

nohup /export/servers/hive-1.1.0-cdh5.14.0/bin/hive --service metastore 2>&1  &

 修改 hive/conf/hive-site.xml 新增如下配置

 <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive/warehouse</value>
    </property>
    <property>
      <name>hive.metastore.local</name>
      <value>false</value>
    </property>
    <property>
      <name>hive.metastore.uris</name>
      <value>thrift://node01:9083</value>
    </property>

2: 后台启动 Hive metastore服务

nohup /export/servers/hive/bin/hive --service metastore 2>&1 >> /var/log.log &

  1. Sparksql整合Hive metastore

Spark 有一个内置的 MateStore,使用 Derby 嵌入式数据库保存数据,但是这种方式不适合生产环境,因为这种模式同一时间只能有一个 SparkSession 使用,所以生产环境更推荐使用 Hive 的 metastore

Sparksql 整合 Hive 的 metastore 主要思路就是要通过配置能够访问它, 并且能够使用 HDFS 保存 WareHouse,所以可以   直接拷贝 Hadoop 和 Hive 的配置文件到 Spark 的配置目录

hive-site.xml 元数据仓库的位置等信息

core-site.xml 安全相关的配置

hdfs-site.xml HDFS 相关的配置

  1.  使用Sparksql操作Hive表    (先把 target 文件删除掉 然后重新执行 main 方法 

  2. package SparkHive
    
    
    import org.apache.spark.sql.SparkSession
    
    /**
      * Created by 一个蔡狗 on 2020/4/14.
      */
    object SparkHive_1 {
    
    
      def main(args: Array[String]): Unit = {
        //创建sparkSession
        val spark = SparkSession
          .builder()
          .appName("HiveSupport")
          .master("local[*]")
          //.config("spark.sql.warehouse.dir", "hdfs://node01:8020/user/hive/warehouse")
          //.config("hive.metastore.uris", "thrift://node01:9083")
          .enableHiveSupport() //开启hive语法的支持
          .getorCreate()
        spark.sparkContext.setLogLevel("WARN")
    
        //查看有哪些表
        spark.sql("show databases").show()
    
        //创建表
        //    spark.sql("CREATE TABLE person (id int, name string, age int) row format delimited fields terminated by ' '")
    
        //加载数据,数据为当前SparkDemo项目目录下的person.txt(和src平级)
        //    spark.sql("LOAD DATA LOCAL INPATH 'SparkDemo/person.txt' INTO TABLE person")
    
        //查询数据
        //    spark.sql("select * from person ").show()
    
        spark.stop()
      }
    
    
    }
    

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐