20221225 海豚调度2.0.5连接星环库使用记录

news2024/12/30 3:03:43

阳阳的一周,算是挺过来了,现在只剩感冒了,迷迷糊糊的干了一周,混口饭吃不容易呀!简单记录一下遇到的问题吧!

连接hive(星环)数据库失败

  • 方案一 : 海豚调度2.0.5使用的hive包是2.0版本,星环库包装的是hive 1.0版本,因此连接不上,将hive包降为1.0(<hive.jdbc.version>1.1.0</hive.jdbc.version>),同时修改VALIDATION_QUERY 为"select 1 from system.dual"即可
    在这里插入图片描述
    org.apache.dolphinscheduler.spi.utils.Constants
    
    在这里插入图片描述
  • 方案二(推荐) : 删除hive-jdbc jar包,引入星环驱动包inceptor-driver-4.8.3.jar下了半天没成功,如果连接星环库肯定项目里面有这个包,直接拿过来吧),连接过程中若是包某类或方法不存在,则为jar包冲突,需要继续删除hive相关包(目前遇到的只有hive1.0的service包冲突,2.0只删除了jdbc包,其它没报冲突),同样也需要修改VALIDATION_QUERY 为"select 1 from system.dual",同上
    <dependency>
    	<groupId>inceptor.hive</groupId>
    	<artifactId>inceptor.driver</artifactId>
    	<version>4.8.3</version>
    </dependency>
    
    推荐理由:hive1.0 不支持存储过程调用方法,会报错,详情如下
    [ERROR] 2022-12-12 17:54:44.313 TaskLogLogger-class org.apache.dolphinscheduler.plugin.task.procedure.ProcedureTask:[123] - procedure task error
    java.sql.SQLException: Method not supported
    	at org.apache.hive.jdbc.HiveConnection.prepareCall(HiveConnection.java:922)
    	at com.zaxxer.hikari.pool.ProxyConnection.prepareCall(ProxyConnection.java:316)
    	at com.zaxxer.hikari.pool.HikariProxyConnection.prepareCall(HikariProxyConnection.java)
    	at org.apache.dolphinscheduler.plugin.task.procedure.ProcedureTask.handle(ProcedureTask.java:107)
    	at org.apache.dolphinscheduler.server.worker.runner.TaskExecuteThread.run(TaskExecuteThread.java:191)
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    	at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
    	at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57)
    	at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)
    

执行星环(hive) sql节点,工作流实例一周执行中,任务实例则为提交状态,一直不执行

原因是common.properties 配置文件中的resource.storage.type=HDFS,配置了HDFS存储,但是并未按照hadoop集群,master一直尝试连接hdfs服务器,因此出现上述情况。将resource.storage.type=HDFS改为resource.storage.type=NONE,重启服务即可

执行星环(hive) 存储过程节点,超过30秒变报超时错

  • 错误详情

    org.apache.dolphinscheduler.plugin.task.procedure.ProcedureTask
    [ERROR] 2022-12-22 20:49:10.275 TaskLogLogger-class org.apache.dolphinscheduler.plugin.task.procedure.ProcedureTask:[123] - procedure task error
    java.sql.SQLException: org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out
    	at org.apache.hive.jdbc.HivePreparedStatement2.executeInternal(HivePreparedStatement2.java:158)
    	at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:419)
    	at org.apache.hive.jdbc.HivePreparedStatement2.execute(HivePreparedStatement2.java:165)
    	at org.apache.hive.jdbc.HiveCallableStatement.execute(HiveCallableStatement.java:41)
    	at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
    	at com.zaxxer.hikari.pool.HikariProxyCallableStatement.execute(HikariProxyCallableStatement.java)
    	at org.apache.dolphinscheduler.plugin.task.procedure.ProcedureTask.handle(ProcedureTask.java:116)
    	at org.apache.dolphinscheduler.server.worker.runner.TaskExecuteThread.run(TaskExecuteThread.java:191)
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    	at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
    	at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57)
    	at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)
    Caused by: org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out
    	at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129)
    	at org.apache.thrift.transport.TTransport.readAll(TTransport.java:86)
    	at org.apache.thrift.transport.TSaslTransport.readLength(TSaslTransport.java:376)
    	at org.apache.thrift.transport.TSaslTransport.readFrame(TSaslTransport.java:453)
    	at org.apache.thrift.transport.TSaslTransport.read(TSaslTransport.java:435)
    	at org.apache.thrift.transport.TSaslClientTransport.read(TSaslClientTransport.java:37)
    	at org.apache.thrift.transport.TTransport.readAll(TTransport.java:86)
    	at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:429)
    	at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:318)
    	at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:219)
    	at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69)
    	at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_ExecutePreCompiledStatement(TCLIService.java:763)
    	at org.apache.hive.service.cli.thrift.TCLIService$Client.ExecutePreCompiledStatement(TCLIService.java:750)
    	at org.apache.hive.jdbc.HivePreparedStatement2.executeInternal(HivePreparedStatement2.java:141)
    	... 14 common frames omitted
    
  • 解决办法:修改HiveDataSourceClient 类中的hive连接超时时间
    在这里插入图片描述

  • HiveDataSourceClient

    /*
     * Licensed to the Apache Software Foundation (ASF) under one or more
     * contributor license agreements.  See the NOTICE file distributed with
     * this work for additional information regarding copyright ownership.
     * The ASF licenses this file to You under the Apache License, Version 2.0
     * (the "License"); you may not use this file except in compliance with
     * the License.  You may obtain a copy of the License at
     *
     *    http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package org.apache.dolphinscheduler.plugin.datasource.hive;
    
    import static org.apache.dolphinscheduler.spi.task.TaskConstants.HADOOP_SECURITY_AUTHENTICATION_STARTUP_STATE;
    import static org.apache.dolphinscheduler.spi.task.TaskConstants.JAVA_SECURITY_KRB5_CONF;
    import static org.apache.dolphinscheduler.spi.task.TaskConstants.JAVA_SECURITY_KRB5_CONF_PATH;
    
    import java.io.IOException;
    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    import org.apache.dolphinscheduler.plugin.datasource.api.client.CommonDataSourceClient;
    import org.apache.dolphinscheduler.plugin.datasource.api.provider.JdbcDataSourceProvider;
    import org.apache.dolphinscheduler.plugin.datasource.utils.CommonUtil;
    import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
    import org.apache.dolphinscheduler.spi.enums.DbType;
    import org.apache.dolphinscheduler.spi.utils.Constants;
    import org.apache.dolphinscheduler.spi.utils.PropertyUtils;
    import org.apache.dolphinscheduler.spi.utils.StringUtils;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.security.UserGroupInformation;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.zaxxer.hikari.HikariDataSource;
    
    import sun.security.krb5.Config;
    
    public class HiveDataSourceClient extends CommonDataSourceClient {
    
        private static final Logger logger = LoggerFactory.getLogger(HiveDataSourceClient.class);
    
        private ScheduledExecutorService kerberosRenewalService;
    
        private Configuration hadoopConf;
        protected HikariDataSource oneSessionDataSource;
        private UserGroupInformation ugi;
    
        public HiveDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType) {
            super(baseConnectionParam, dbType);
        }
    
        @Override
        protected void preInit() {
            logger.info("PreInit in {}", getClass().getName());
            this.kerberosRenewalService = Executors.newSingleThreadScheduledExecutor();
        }
    
        @Override
        protected void initClient(BaseConnectionParam baseConnectionParam, DbType dbType) {
            logger.info("Create Configuration for hive configuration.");
            this.hadoopConf = createHadoopConf();
            logger.info("Create Configuration success.");
    
            logger.info("Create UserGroupInformation.");
            this.ugi = createUserGroupInformation(baseConnectionParam.getUser());
            logger.info("Create ugi success.");
    
            super.initClient(baseConnectionParam, dbType);
            this.oneSessionDataSource = JdbcDataSourceProvider.createOneSessionJdbcDataSource(baseConnectionParam, dbType);
            logger.info("Init {} success.", getClass().getName());
        }
    
        @Override
        protected void checkEnv(BaseConnectionParam baseConnectionParam) {
            super.checkEnv(baseConnectionParam);
            checkKerberosEnv();
        }
    
        private void checkKerberosEnv() {
            String krb5File = PropertyUtils.getString(JAVA_SECURITY_KRB5_CONF_PATH);
            Boolean kerberosStartupState = PropertyUtils.getBoolean(HADOOP_SECURITY_AUTHENTICATION_STARTUP_STATE, false);
            if (kerberosStartupState && StringUtils.isNotBlank(krb5File)) {
                System.setProperty(JAVA_SECURITY_KRB5_CONF, krb5File);
                try {
                    Config.refresh();
                    Class<?> kerberosName = Class.forName("org.apache.hadoop.security.authentication.util.KerberosName");
                    Field field = kerberosName.getDeclaredField("defaultRealm");
                    field.setAccessible(true);
                    field.set(null, Config.getInstance().getDefaultRealm());
                } catch (Exception e) {
                    throw new RuntimeException("Update Kerberos environment failed.", e);
                }
            }
        }
    
        private UserGroupInformation createUserGroupInformation(String username) {
            String krb5File = PropertyUtils.getString(Constants.JAVA_SECURITY_KRB5_CONF_PATH);
            String keytab = PropertyUtils.getString(Constants.LOGIN_USER_KEY_TAB_PATH);
            String principal = PropertyUtils.getString(Constants.LOGIN_USER_KEY_TAB_USERNAME);
    
            try {
                UserGroupInformation ugi = CommonUtil.createUGI(getHadoopConf(), principal, keytab, krb5File, username);
                try {
                    Field isKeytabField = ugi.getClass().getDeclaredField("isKeytab");
                    isKeytabField.setAccessible(true);
                    isKeytabField.set(ugi, true);
                } catch (NoSuchFieldException | IllegalAccessException e) {
                    logger.warn(e.getMessage());
                }
    
                kerberosRenewalService.scheduleWithFixedDelay(() -> {
                    try {
                        ugi.checkTGTAndReloginFromKeytab();
                    } catch (IOException e) {
                        logger.error("Check TGT and Renewal from Keytab error", e);
                    }
                }, 5, 5, TimeUnit.MINUTES);
                return ugi;
            } catch (IOException e) {
                throw new RuntimeException("createUserGroupInformation fail. ", e);
            }
        }
    
        protected Configuration createHadoopConf() {
            Configuration hadoopConf = new Configuration();
            hadoopConf.setBoolean("ipc.client.fallback-to-simple-auth-allowed", true);
            return hadoopConf;
        }
    
        protected Configuration getHadoopConf() {
            return this.hadoopConf;
        }
    
        @Override
        public Connection getConnection() {
            try {
            	oneSessionDataSource.setConnectionTimeout(172800L);//设置连接超时时间 2天
            	//oneSessionDataSource.setIdleTimeout(60000L);// 非必须(空闲超时时间),保持默认值就行
            	//oneSessionDataSource.setMaxLifetime(600000L);// 非必须(最大生命周期),保持默认值就行
                return oneSessionDataSource.getConnection();
            } catch (SQLException e) {
                logger.error("get oneSessionDataSource Connection fail SQLException: {}", e.getMessage(), e);
                return null;
            }
        }
    
        @Override
        public void close() {
            super.close();
    
            logger.info("close HiveDataSourceClient.");
            kerberosRenewalService.shutdown();
            this.ugi = null;
    
            this.oneSessionDataSource.close();
            this.oneSessionDataSource = null;
        }
    }
    
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生之部署wordpress博客及设置圣诞主题风格

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ CSDN诚邀各位技术er分享关于圣诞节的各种技术创意&#xff0c;展现你与众不同的精彩&#xff01;参与本次投稿即可获得【话题达人】勋章【圣诞快乐】定制勋章&#xff08;1年1次&#xff0c;错过要等下一年喔&#…

Python的条条框框

Python的条条框框 了解编程语言的分类 从运行角度的分类 从运行角度来看&#xff0c;编程语言的类型可以分为两种&#xff1a;编译型和解释型。 Python属于解释型语言。 解释型语言&#xff1a; 代码可以直接运行。当然&#xff0c;这也是依赖于附加程序&#xff08;解释器&…

【VUE3】保姆级基础讲解(三)非父子组件通讯,$refs,动态组件,keep-alive,Composition API

目录 非父子组件通讯 全局事件总线mitt库 组件的生命周期 $refs 动态组件 keep-alive 异步打包 v-model绑定组件 Composition API 定义响应式数据 readonly toRefs与toRef computed $ref 生命周期钩子 provide和inject watch侦听 watchEffect script setup语法…

C++必须掌握的知识点

面向对象的三大特性 封装 继承 父类中所有的非静态成员都会被子类继承下去&#xff0c;只是父类的私有成员被编译器屏蔽了&#xff0c;访问不到。可以利用开发人员工具查看对象模型继承中&#xff0c;先构造父类&#xff0c;再构造子类&#xff0c;析构的顺序和构造的顺序完…

QT系列第8节 自定义对话框

在实际业务开发中经常要有各种各样的对话框来处理用户信息&#xff0c;本节就结合例子来说明如何自定义对话框。 目录 1.创建对话框 2.创建非模态对话框 3.创建模态对话框 4.综合案例 1.创建对话框 &#xff08;1&#xff09;项目鼠标右键菜单 - 添加新文件 &#xff08;…

Hexo + Butterfly 自定义页脚

原文链接 &#xff1a;Hexo Butterfly 自定义页脚 推荐阅读 基于 Hexo 从零开始搭建个人博客&#xff08;一&#xff09;: 环境准备基于 Hexo 从零开始搭建个人博客&#xff08;二&#xff09;: 项目初识基于 Hexo 从零开始搭建个人博客&#xff08;三&#xff09;: 主题安装…

CSDN每日一练最长递增的区间长度 C语言

题目名称&#xff1a;最长递增的区间长度 时间限制&#xff1a;1000ms 内存限制&#xff1a;256M 题目描述 给一个无序数组&#xff0c;求最长递增的区间长度。如&#xff1a;[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3 &#xff08;注意&#xff1a;测试用例仅做参考&#xff0c;…

Spring web开发之Request 获取三种方式

在开发 Java Web 项目中&#xff0c;我们经常使用 HttpServletRequest 获取请求参数、请求头等信息。在Spring项目&#xff0c;我们通常会使用 Spring 提供的注解获取参数&#xff0c;如 RequestParam、RequestHeader。 不过在某些场景下&#xff0c;我们可能需要从 HttpServl…

初识Docker:(4)Docker基本操作

初识Docker&#xff1a;&#xff08;4&#xff09;Docker基本操作1 镜像操作1.1 镜像名称1.2 镜像操作命令1.3 案例&#xff1a;docker拉取nginx镜像利用docker save将nginx镜像导出磁盘&#xff0c;然后再通过load加载回来1.4 镜像操作总结2 容器操作2.1 案例创建运行一个ngin…

【阅读笔记】《持续交付2.0》中理解分支、发布策略

文章目录1. 前言1.1 分支、发布 管理上解耦2. 主干 (Trunk) 和分支 (Branch)2.1 Trunk 开发 Trunk 发布2.1.1 Trunk 开发 Trunk 发布需要解决&#xff1a;重构的需求2.1.2 Trunk 开发 Trunk 发布需要解决&#xff1a;未开发完成的功能被带入发布版本2.2 Trunk 开发 Branch 发布…

leetcode:6272. 好分区的数目【思维转换(正难则反) + dp定义 + 背包问题 + 选or不选】

目录题目截图题目分析ac code总结题目截图 题目分析 先特判&#xff0c;如果sum(nums) < 2 * k显然不可能成功&#xff01;返回0出现Mod大概率就是dp1000的话提示我们用平方复杂度的dp这种取子序列的问题&#xff0c;本质就是选or不选的问题如果我们只考虑一维dp,dp[i]肯定…

Linux--信号

目录1. 信号概念2. 信号产生前2.1 信号产生的各种方式3. 信号产生中信号保存的方式3.1 阻塞信号3.2 信号屏蔽字4. 信号产生后信号处理的方式4.1 信号集操作函数4.2 sigprocmask函数4.3 sigpending函数4.4 sigaction函数5. 信号是什么时候被处理的1. 信号概念 信号是进程之间事…

golang访问KingbaseES V8R6

概述 本文介绍go语言连接KingbaseES V8R6数据库的步骤 测试环境 操作系统&#xff1a;CentOS 7.2.1511 数据库版本&#xff1a;KINGBASE (KingbaseES) V008R006C007B0012 go版本&#xff1a;go version go1.19.4 linux/amd64 KingbaseES go驱动获取 go连接kingbase数据库需…

MySQL为什么使用B+树为索引结构

目录 1、什么是索引 2、索引的类型 3、为什么要用索引 4、索引的使用场景 5、索引为什么要用B树&#xff0c;为什么不能用二叉树、红黑树、B树&#xff1f; 介绍一款可以帮助理解数据结构的网站&#xff08;很好用&#xff09;&#xff1a;Data Structure Visualization …

hadoop生产调优之Hadoop-Yarn 生产经验(参数调优)

一、常用的调优参数 1&#xff09;调优参数列表 &#xff08;1&#xff09;Resourcemanager 相关 yarn.resourcemanager.scheduler.client.thread-count ResourceManager 处理调度器请求的线程数量 yarn.resourcemanager.scheduler.class 配置调度器&#xff08;2&#xff0…

js中ArrayBuffer和node中Buffer的关系和区别

ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。 它是一个字节数组&#xff0c;通常在其他语言中称为“byte array”。你不能直接操作 ArrayBuffer 中的内容&#xff1b;而是要通过类型化数组对象或 DataView 对象来操作&#xff0c;它们会将缓冲区中的数据…

C++、python、VS code插件安装与SSH使用

下载按照VS coda 官网&#xff1a;https://code.visualstudio.com 1.安装相关插件 1.中文插件&#xff08;可选&#xff09; MS-CEINTL.vscode-language-pack-zh-hans 2.C插件&#xff08;必选&#xff09; ms-vscode.cpptools 3.ssh 远程&#xff08;必选&#xff09; ms-vs…

数据结构——快排的三种实现方式

坚持看完&#xff0c;结尾有思维导图总结 这里写目录标题什么是快排&#xff1f;如何实现递归单次的排序要如何实现hore 的办法![在这里插入图片描述](https://img-blog.csdnimg.cn/40b2ac63f2424bd1828a45f8509ff116.gif#pic_center)坑位法双指针法总结什么是快排&#xff1f;…

线程池(一)

个人博客地址&#xff1a; http://xiaohe-blog.top/index.php/archives/14/ 文章目录1. 为什么要使用线程池2. Executor3. ThreadPoolExecutor3.1 七个参数3.2 任务队列3.3 拒绝策略4. 创建线程池5. Executors5.1 CachedThreadPool5.2 FixedThreadPool5.3 SingleThreadExecutor…

SAP UI5 应用里一些容器控件的介绍

sap.m.Shell 控件可用作应用程序的根元素。 它可以包含 App 或 SplitApp 控件。 Shell 为整个应用程序提供了一些总体功能&#xff0c;并负责在桌面浏览器平台上进行视觉适配&#xff0c;例如应用程序周围的框架。 sap.m.App: 该 App 继承自 sap.m.NavContainer 并因此提供其导…