当前位置: 首页 > article >正文

SparkSQL-SparkOneHive

部署

连接Hive操作 

小试牛刀:Hive版本的WordCount 

从MySQL中读取数据存储到hive中 


部署

 1、Spark 要接管 Hive 需要把 hive-site.xml 拷贝到 conf/目录下

2、把 Mysql 的驱动 copy 到 jars/目录下

3、 如果访问不到 hdfs,则需要把 core-site.xml 和 hdfs-site.xml 拷贝到 conf/目录下

     导入依赖

<dependency>
 <groupId>org.apache.spark</groupId>
 <artifactId>spark-hive_2.12</artifactId>
 <version>3.0.0</version>
</dependency>
<dependency>
 <groupId>org.apache.hive</groupId>
 <artifactId>hive-exec</artifactId>
 <version>1.2.1</version>
</dependency>
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.27</version>
</dependency>

  将 hive-site.xml 文件拷贝到项目的 resources 目录中

        虚拟机中后台启动hive 

hiveserver2 &
nohup hive --service metastore &

连接Hive操作 

在操作hive时,需要对哪个库的表进行操作则需要写 -> 数据库名.表名 不然都会默认使用default数据库 
spark.sql("select * from ee.user")
def main(args: Array[String]): Unit = {
    //创建Session对象
    val spark = SparkSession
      .builder() //构建器
      .appName("sparkSQL") //序名称程
      .master("local[*]") //执行方式:本地
      .enableHiveSupport() //支持hive相关操作
      .getOrCreate() //创建对象

   spark.sql("select * from ee.user")

   spark.close()
  }

小试牛刀:Hive版本的WordCount 

注意: 当开启了enableHiveSupport()机制之后可能会导致在本地磁盘的文件会有突然读取不到的清空。原因是hive默认会从HDFS上面获取数据文件

想访问本地磁盘时的解决方法:需在本地磁盘路径前添加file:///

spark.read.text("file:///datas\\a.txt")
def main(args: Array[String]): Unit = {
    //创建Session对象
    val spark = SparkSession
      .builder() //构建器
      .appName("sparkSQL") //序名称程
      .master("local[*]") //执行方式:本地
      .enableHiveSupport() //支持hive相关操作
      .getOrCreate() //创建对象

    val df: DataFrame = spark.read.text("file:///D:\\spark.test\\datas\\a.txt") //载入数据
    df.createTempView("wc") //创建表
    spark.sql(
      """
        |select tmp.word,count(tmp.word) from(
        |select explode(split(value," ")) word from wc
        |)tmp
        |group by tmp.word
        |order by count desc
        |""".stripMargin).show()

    spark.close()
  }

从MySQL中读取数据存储到hive中 

        准备MySQL数据库user表 

        向Hive创建表时 操作hive权限问题 因为是创建到HDFS上所以要提供root用户权限

System.setProperty("HADOOP_USER_NAME","root")
def main(args: Array[String]): Unit = {
    //添加操作HDFS的用户名
    System.setProperty("HADOOP_USER_NAME","root")
    System.setProperty("user.name","root")
    //创建Session对象
    val spark = SparkSession
      .builder() //构建器
      .appName("sparkSQL") //序名称程
      .master("local[*]") //执行方式:本地
      .enableHiveSupport() //支持hive相关操作
      .getOrCreate() //创建对象

    //从MySQL中读取数据存储到hive中 
      //创建info表
    spark.sql( //需指定数据库不然会创建到默认数据库下
      """
        |create table default.idd(
        |id int,
        |name string,
        |age int
        |)
        |""".stripMargin)

    //jdbc读取mysql
    val pro = new Properties()
    pro.put("user","root") //指定用户名
    pro.put("password","p@ssw0rd") //指定密码
    //jdbc("路径","表名","Properties对象")
    val df = spark.read.jdbc("jdbc:mysql://master:3306/spark-sql","user",pro)

    df.write.insertInto("default.idd")
    spark.sql("select * from default.idd").show()
    spark.close()
  }

ERROR KeyProviderCache: Could not find uri with key [dfs.encryption.key.provider.uri] to create a keyProvider !!

这个报错是HDFS客户端的一个bug,但并不影响作业正常运行,且在2.8版本之后已经修复


http://www.kler.cn/a/1087.html

相关文章:

  • nvim 打造成可用的IDE(2)
  • maven的简单介绍
  • 【Word_笔记】Word的修订模式内容改为颜色标记
  • 景联文科技提供高质量多模态数据处理服务,驱动AI新时代
  • 微服务的CAP定理与数据一致性抉择
  • 人机交互 | 期末复习(上)| 补档
  • 使用busybox构建根文件系统
  • python 正则表达式
  • Springboot 整合dom4j 解析xml 字符串 转JSONObject
  • Android开发 Layout布局 ScrollView
  • linux操作系统lVM扩容
  • VI的常用命令
  • get table meta failed, please check whether the table xxx exists
  • Nuxt.js项目开发过程遇到的问题以及对Nuxt.js的学习与总结
  • WEB前端第三次作业——CSS样式案例
  • 记录一次es的性能调优
  • 统计软件与数据分析—Lesson2
  • 行业洞察丨PDF图纸为什么影响生产企业的生产质量?订单交期?
  • 最适合游戏开发的语言是什么?
  • 自动驾驶控制概况
  • 强化学习分类与汇总介绍
  • 【收藏】一文搞清 容器、Docker、Kubernetes(详细介绍)
  • 第十四届蓝桥杯三月真题刷题训练——第 14 天
  • 【算法基础】数据结构| 单链表+双链表 代码实现+图解+原理
  • 【Linux】操作系统(Operator System)
  • 学计算机选择什么编程语言好一些?