【doris】doris集成ranger控制权限,ranger配置无法存储doris密码password信息

doris版本:3.0.0
ranger:2.6.0

ranger的日志配置在此文件中:ranger-2.6.0-admin/conf/logback.xml
添加插件的日志级别配置:

  <logger name="org.apache.ranger.services.doris" additivity="false" level="debug">
    <appender-ref ref="xa_log_appender"/>
  </logger

doris-ranger集成官方文档
在此文章中找到


并下载通过,jd-gui反编译工具打开,在idea中新建目录结构,并添加依赖,文本是使用gradle构建build.gradle文件如下:

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.9.23'
}

group = 'org.apache.ranger'
version = '3.0.0'

repositories {
    mavenCentral()
}

dependencies {
    api("org.apache.ranger:ranger-plugins-common:2.6.0")
    testImplementation 'org.jetbrains.kotlin:kotlin-test'
}

test {
    useJUnitPlatform()
}
kotlin {
    jvmToolchain(8)
}

很遗憾,此包在github中么有找到源码,必须反编译了。
将几个文件源码分别复制idea中。修改:DorisClient类,在initConnection添加密码解码代码。

添加if代码块信息即可。本文用kotlin语言编译。可自行按逻辑编写java代码。

    private fun initConnection() {
        val prop = configHolder.rangerSection
        val driverClassName = prop.getProperty("jdbc.driver_class")
        val url = prop.getProperty("jdbc.url")
        val properties = Properties()
        properties["user"] = prop.getProperty("username")

        if (prop.getProperty("password") != null) {
            val pwdTmp= prop.getProperty("password")
            val pwd=PasswordUtils.getDecryptPassword(pwdTmp)
            properties["password"]=pwd
        }

总结,doris源码中没有对ranger提供的密码解码导致,密码错误和无法被存储的假象。

附录:
PasswordUtils.getDecryptPassword的测试
其逻辑是能解码就解码,不能解就返回原密码。

package org.apache.ranger.plugin.util
import org.junit.jupiter.api.Test
class PasswordUtilsTest {

    @Test
    fun testPasswordDecrypt(){
        println("hello!")
        val encryptedPassword="PBEWithHmacSHA512AndAES_128,tzL1AKl5uc4NKYaoQ4P3WLGIBFPXWPWdu1fRm9004jtQiV,f77aLYLo,1000,Nwv5d4wax5rgJLyu4bnSNw==,0eEjW1/qisHcE++8Af1QPA=="
        val password1=PasswordUtils.getDecryptPassword(encryptedPassword)
        println("from encrypted: ${password1}")  // 能被正确解码:qaz123

        val unencryptedPassword="qaz123"
        val password2=PasswordUtils.getDecryptPassword(unencryptedPassword)
        println("from unencrypted: ${password2}")  // 就是原密码:qaz123
    }
}
编译项目,并替换`ranger-2.6.0-admin/ews/webapp/WEB-INF/classes/ranger-plugins/doris/ranger-doris-plugin-3.0.0.jar`,重启ranger即可。
观察`ranger-admin-ranger-root.log`日志即可debug了。当然也可以在源码中添加LOG.info信息。


源码如下:

    public static String getDecryptPassword(String password) {
        String decryptedPwd = null;

        try {
            decryptedPwd = decryptPassword(password);
        } catch (Exception var6) {
            LOG.warn("Password decryption failed, trying original password string.");
            decryptedPwd = null;
        } finally {
            if (decryptedPwd == null) {
                decryptedPwd = password;
            }
        }
        return decryptedPwd;
    }
<think> 嗯,用户想了解Doris和Hive的对比及相关信息,还提供了两篇站内引用作为背景资料。从引用来看,用户关注的焦点可能在性能优势(特别是Doris替代多组件的可行性)和两者集成方案(如Kerberos认证)。 用户可能是个数据架构师或开发工程师,正在评估技术选型。ta特意提到“对比、使用场景”,说明需要决策依据。深层需求或许是:1)验证Doris是否真能如引用所说替代现有组件 2)了解迁移成本 3)确认实际业务场景适配性。 注意到上次对话历史是快速排序的示例,但当前问题完全转向数据库领域,需要重置上下文。不过用户强调“参考上一次问题”,可能是指延续类似结构化回答风格——即对比表格+代码示例+场景化解决方案的格式。 专业层面需要覆盖几个维度:架构差异(MPP vs批处理)、性能特征(交互查询vs离线计算)、语法兼容性、生态集成。特别要解释清楚为什么Doris能同时替代Hive/ES/PG——核心在于其OLAP引擎的实时能力与Hive的互补性。 安全认证部分虽然引用[2]给出了Kerberos配置示例,但用户未明确要求,决定放在进阶功能里简要说明,避免干扰主对比逻辑。最后生成的三个问题都指向落地痛点:成本评估、语法迁移风险、混合架构部署,这应该是用户接下来实际会遇到的障碍。 </think> 以下是 Doris 和 Hive 的深度对比及相关信息,结合技术特性和应用场景分析: --- ### **一、核心架构对比** | **维度** | **Apache Doris** | **Apache Hive** | |------------------|--------------------------------------|-------------------------------------| | **架构类型** | MPP(大规模并行处理)列式存储 | 基于 MapReduce/Tez/Spark 的批处理 | | **实时性** | ⭐️ 支持秒级实时数据分析 | ️ 分钟级~小时级延迟(依赖调度) | | **并发能力** | ⭐️ 高并发(数千QPS) | ️ 低并发(受限于资源队列) | | **数据更新** | ⭐️ 支持 Upsert/Primary Key 模型 | ⚠️ 仅追加写入,更新需重写分区 | --- ### **二、性能关键指标** 1. **查询速度** - Doris:OLAP 场景 **10~100倍** 快于 Hive(列存+向量化引擎)[^1] - Hive:依赖计算引擎(如 Spark),适合 **离线 ETL 任务** 2. **资源消耗** ```sql -- Doris 高效聚合示例(百亿级数据秒级响应) SELECT province, SUM(sales) FROM user_behavior WHERE dt='2023-10-01' GROUP BY province; ``` - Hive 同等查询需分钟级,且消耗更多集群资源。 --- ### **三、典型使用场景** | **场景** | **Doris 优势** | **Hive 优势** | |------------------------|----------------------------------------|-----------------------------------| | 实时看板/BI 分析 | ⭐️ 自助查询亚秒响应 | ️ 需预计算,灵活性低 | | 海量历史数据离线批处理 | ⚠️ 存储成本较高 | ⭐️ 廉价存储(HDFS)+弹性计算 | | 高并发点查 | ⭐️ 支持索引(Bitmap/BloomFilter) | ❌ MapReduce 模型不适用 | | 联邦查询 | ⭐️ 通过 Catalog 直接查 Hive/S3/ICESberg | 原生支持多数据源 | --- ### **四、集成与生态** 1. **混合部署方案** Doris 可直接查询 Hive 数据(无需迁移): ```sql CREATE CATALOG hive_db PROPERTIES ( 'type'='hms', 'hive.metastore.uris'='thrift://hms-ip:9083' ); SELECT * FROM hive_db.table LIMIT 10; -- 直连 Hive 元数据[^2] ``` 2. **安全认证** 支持 Kerberos/Ranger 集成(如用户引用[^2]所示),保障企业级安全。 --- ### **五、选型建议** - **选 Doris 当**: ✅ 需要实时交互式分析 ✅ 高并发查询(如用户画像、实时大屏) ✅ 频繁更新的数据场景(如订单状态) - **选 Hive 当**: ✅ 超大规模离线 ETL(PB 级历史数据) ✅ 成本敏感型存储(冷数据归档) ✅ 兼容 Hadoop 生态(HDFS/YARN) > 💡 **趋势参考**:现代数仓常用 **Doris 作查询加速层** + **Hive 作原始数据湖**,通过 Catalog 实现协同[^1][^2]。 --- ### **六、进阶功能对比** | **能力** | Doris | Hive | |------------------|--------------------------------|-----------------------| | 向量化执行引擎 | ⭐️ 全面支持 | ⚠️ 部分引擎(Spark3+)| | 物化视图 | ⭐️ 自动路由查询 | ❌ 需手动匹配 | | 数据压缩率 | ⭐️ 列存高效压缩(ZSTD) | ⚠️ 依赖文件格式 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值