IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark读取Hive的方式以及出现的雷坑 -> 正文阅读

[大数据]Spark读取Hive的方式以及出现的雷坑

spark读取Hive的几种方式

1.HiveJDBC
2.通过服务的方式

直接读数据源

因为hive只是起到映射的作用,所以最简单、直观的方式就是直接读取数据的存储组件(HDFS\HBASE)

1.HiveJDBC

方式一:

val spark = pec.get[SparkSession]()
val dbtable = "( " + sql + ") AS Temp"
val jdbcDF = spark.read.format("jdbc")
  .option("url", jdbcUrl)
  .option("driver", driverName)
  .option("dbtable", dbtable)
  .option("user", hiveUser)
  .option("password", hivePassword)
  .option("fetchsize", "100")
  .load()

方式二:

val properties = new Properties()
properties.put("user",hiveUser)
properties.put("password",hivePassword)
properties.put("driver",driverName)
spark.read.jdbc("jdbc:hive2://IP:10000/bigdata",sql,properties)

如果这么读的话发现的确是可以读,但是总有一个temp开头的东西

?问题原因:

发现spark根本没添加HiveJDBC

?不过没关系,经观察发现这些Dialect都继承了JdbcDialect类,并重写了canHandle和quoteIdentifier方法,直接上代码

解决方法一:

class HiveSqlDialect extends JdbcDialect {
    override def canHandle(url: String): Boolean = url.startsWith("jdbc:hive2")

    override def quoteIdentifier(colName: String): String = {
      if (colName.contains(".")) {
        val colName1 = colName.substring(colName.indexOf(".") + 1)
        return s"`$colName1`"
      }
      s"`$colName`"
    }
  }

JdbcDialects.registerDialect(new HiveSqlDialect)
val spark = pec.get[SparkSession]()
val dbtable = "( " + sql + ") AS Temp"
val jdbcDF = spark.read.format("jdbc")
  .option("url", jdbcUrl)
  .option("driver", driverName)
  .option("dbtable", dbtable)
  .option("user", hiveUser)
  .option("password", hivePassword)
  .option("fetchsize", "100")
  .load()

然后在连接上加上??hive.resultset.use.unique.column.names=false

"url" ="jdbc:hive2://192.168.0.0:10000/test?hive.resultset.use.unique.column.names=false"

解决方法二:

<property>
	<name>hive.cli.print.header</name>
	<value>true</value>
</property>
<property>
	<name>hive.resultset.use.unique.column.names</name>
	<value>false</value>
</property>

在hive-site.xml文件中加入上面那个配置,连接就不用写了

2.通过服务的方式

hive.metastore.uris=thrift://192.168.*.*:9083
val spark = SparkSession.builder()
  .master("local[*]")
  .appName("MysqlReadTest")
  .config("spark.driver.memory", "1g")
  .config("spark.executor.memory", "2g")
  .config("spark.cores.max", "2")
  //.config("hive.metastore.uris","thrift://192.168.*.*:9083")
  //.enableHiveSupport()   --spark on hive
  .getOrCreate()
spark.sql("select * from bigdata.schema_test").show()

https://blog.csdn.net/m0_37948565/article/details/81943071

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:12:55  更:2022-04-29 12:15:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:10:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码