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互通

?目录

问题

配置

原理

问题

通过hive beeline进入后建的表与通过spark-sql进入建表互相不可见

配置

//变量位置:org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars#CATALOG_DEFAULT//默认值CATALOG_DEFAULT("metastore.catalog.default",?"metastore.catalog.default",?"hive",        "The default catalog to use when a catalog is not specified.  Default is 'hive' (the " +            "default catalog)."),

更改spark的hive-site配置metastore.catalog.default值为hive,以保证互通。

原理

hive高版本为3.1.x,此版本相对旧版本的(如2.1.1),存在较多升级,根据hive-exec包源码,可看到

org.apache.hadoop.hive.metastore.ObjectStore#getAllDatabases

的方法实现有区别,高版本限制了catname,信息见Hive元数据库中dbs表的字段 CTLG_NAME

若要使用高版本且要保持spark-sql和hive beeline数据库相关信息一致,方法1是保持相同catname;方法2是手工修改此方法实现并重新编译高版本的hive-exec包??当前互通采用的方法1解决

V2.1.1

  @Override  public List<String> getAllDatabases() throws MetaException {    boolean commited = false;    List<String> databases = null;????//注意:这里是查询所有数据库    String queryStr = "select name from org.apache.hadoop.hive.metastore.model.MDatabase";    Query query = null;?    openTransaction();    try {      query = pm.newQuery(queryStr);      query.setResult("name");      databases = new ArrayList<String>((Collection<String>) query.execute());      commited = commitTransaction();    } finally {      if (!commited) {        rollbackTransaction();      }      if (query != null) {        query.closeAll();      }    }    Collections.sort(databases);    return databases;  }

? ? ? ? ??

V3.1.0 如下图所示,查询所有数据库时候会限制catname,而Ambari平台在搭建spark服务时候会默认为spark创建自己的catname

 @Override  public List<String> getAllDatabases(String catName) throws MetaException {    boolean commited = false;    List<String> databases = null;?    Query query = null;    catName = normalizeIdentifier(catName);?    openTransaction();    try {      query = pm.newQuery("select name from org.apache.hadoop.hive.metastore.model.MDatabase " +          "where catalogName == catname");      query.declareParameters("java.lang.String catname");      query.setResult("name");      databases = new ArrayList<>((Collection<String>) query.execute(catName));      commited = commitTransaction();    } finally {      rollbackAndCleanup(commited, query);    }    Collections.sort(databases);    return databases;  }

调用链

ObjectStore.getAllDatabases(String)  (org.apache.hadoop.hive.metastore)HMSHandler in HiveMetaStore.get_databases(String)  (org.apache.hadoop.hive.metastore)HiveMetaStoreClient.getAllDatabases(String)  (org.apache.hadoop.hive.metastore)HiveMetaStoreClient.getAllDatabases()  (org.apache.hadoop.hive.metastore)Hive.getAllDatabases()  (org.apache.hadoop.hive.ql.metadata)DDLTask.showDatabases(Hive, ShowDatabasesDesc)  (org.apache.hadoop.hive.ql.exec)DDLTask.execute(DriverContext)  (org.apache.hadoop.hive.ql.exec)UpdateDeleteSemanticAnalyzer.analyzeAcidExport(ASTNode)  (org.apache.hadoop.hive.ql.parse)Task.executeTask()  (org.apache.hadoop.hive.ql.exec)TaskRunner.runSequential()  (org.apache.hadoop.hive.ql.exec)TaskRunner.run()  (org.apache.hadoop.hive.ql.exec)Driver.launchTask(Task<? extends Serializable>, String, boolean, String, int, DriverContext)  (org.apache.hadoop.hive.ql)Driver.execute()  (org.apache.hadoop.hive.ql)Driver.runInternal(String, boolean)  (org.apache.hadoop.hive.ql)Driver.run(String, boolean)  (org.apache.hadoop.hive.ql)Driver.run(String)  (org.apache.hadoop.hive.ql)

最后:

如果本文能对您有帮助,您可以在心里点个赞,也可以分享给大家,欢迎随时沟通~

我的公众号:小松鼠与大数据

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:45:16  更:2021-07-25 11:47:04 
 
开发: 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年5日历 -2024/5/1 0:30:55-

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