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

Hadoop + Hive + Apache Ranger 源码编译记录

背景介绍

由于 CDH(Cloudera's Distribution Hadoop )近几年已经开始收费并限制节点数量和版本升级,最近使用开源的 hadoop 搭了一套测试集群,其中的权限管理组件用到了Apache Ranger,所以记录一下编译打包过程。

组件版本
  • Hadoop 2.8.5
  • Hive 2.3.7
  • Hbase 1.4.9
  • Ranger 1.2.0

注意:由于 Ranger 2.0 版本之后支持的 Hadoop 是 3.x 的版本,所以选择了 2.0 之前最新的 Ranger 1.2.0 版本

编译步骤
下载源码
# 克隆源码
git clone https://github.com/apache/ranger.git
# 切换分支
git checkout release-ranger-1.2.0
修改配置

在根目录的 pom.xml 中修改版本:

Hadoop 从 2.7.1 修改到 2.8.5

Hive 从 2.3.4 修改到 2.3.7

Hbase 从 1.3.2 修改 1.4.9

各位可以根据需要,进行修改,当然仅修改这里很简单,但不代表编译就兼容

进行编译
mvn clean compile package assembly:assembly install -Dmaven.test.skip  -DskipTests -Drat.skip=true -Dpmd.skip=true

成功后,可见如下信息:

打包后的产物就在 target 目录中:

这里面有我们部署的 admin 包,还有各个支持 ranger 权限控制的插件

错误记录
1,Hadoop API 不兼容

https://lists.apache.org/thread/rpk62z0x1drs7oqss1rmy0rrwnp1r5j6

修改 KMSAuthenticationFilter.java 类的

props.setProperty(DelegationTokenAuthenticationHandler.TOKEN_KIND,KMSClientProvider.TOKEN_KIND);
// 调整为Text 转成 toString
props.setProperty(DelegationTokenAuthenticationHandler.TOKEN_KIND,KMSClientProvider.TOKEN_KIND.toString());
2,Hbase API 不兼容

a. 修改 ranger-hbase-plugin 子模块:

RangerAuthorizationCoprocessor.java: 新增实现接口

	@Overridepublic void preGetClusterStatus(ObserverContext<MasterCoprocessorEnvironment> observerContext) throws IOException {}@Overridepublic void postGetClusterStatus(ObserverContext<MasterCoprocessorEnvironment> observerContext, ClusterStatus clusterStatus) throws IOException {}@Overridepublic void preClearDeadServers(ObserverContext<MasterCoprocessorEnvironment> observerContext) throws IOException {}@Overridepublic void postClearDeadServers(ObserverContext<MasterCoprocessorEnvironment> observerContext, List<ServerName> list, List<ServerName> list1) throws IOException {}@Overridepublic void preMoveServers(ObserverContext<MasterCoprocessorEnvironment> ctx, Set<Address> servers, String targetGroup) throws IOException {}@Overridepublic void postMoveServers(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> servers, String s) throws IOException {}@Overridepublic void preMoveServersAndTables(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set, Set<TableName> set1, String s) throws IOException {}@Overridepublic void postMoveServersAndTables(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set, Set<TableName> set1, String s) throws IOException {}@Overridepublic void preRemoveServers(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set) throws IOException {}@Overridepublic void postRemoveServers(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set) throws IOException {}

RangerAuthorizationCoprocessorBase.java: 修改参数类型

    public void preMoveServers(final ObserverContext<MasterCoprocessorEnvironment> ctx, Set<HostAndPort> servers, String targetGroup) throws IOException {}public void postMoveServers(ObserverContext<MasterCoprocessorEnvironment> ctx, Set<HostAndPort> servers, String targetGroup) throws IOException {}// 调整参数类型,成如下:public void preMoveServers(final ObserverContext<MasterCoprocessorEnvironment> ctx, Set<Address> servers, String targetGroup) throws IOException {}public void postMoveServers(ObserverContext<MasterCoprocessorEnvironment> ctx, Set<Address> servers, String targetGroup) throws IOException {}

b.修改 ranger-hbase-plugin-shim 子模块

RangerAuthorizationCoprocessor.java: 新增实现接口,注释掉部分接口

// 新增@Overridepublic void preCommitStoreFile(ObserverContext<RegionCoprocessorEnvironment> observerContext, byte[] bytes, List<Pair<Path, Path>> list) throws IOException {}@Overridepublic void postCommitStoreFile(ObserverContext<RegionCoprocessorEnvironment> observerContext, byte[] bytes, Path path, Path path1) throws IOException {}@Overridepublic void preMoveServersAndTables(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set, Set<TableName> set1, String s) throws IOException {}@Overridepublic void postMoveServersAndTables(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set, Set<TableName> set1, String s) throws IOException {}@Overridepublic void preRemoveServers(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set) throws IOException {}@Overridepublic void postRemoveServers(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set) throws IOException {}public void preBalanceRSGroup(final ObserverContext<MasterCoprocessorEnvironment> ctx, String groupName) throws IOException {}@Overridepublic void preGetClusterStatus(ObserverContext<MasterCoprocessorEnvironment> observerContext) throws IOException {}@Overridepublic void postGetClusterStatus(ObserverContext<MasterCoprocessorEnvironment> observerContext, ClusterStatus clusterStatus) throws IOException {}@Overridepublic void preClearDeadServers(ObserverContext<MasterCoprocessorEnvironment> observerContext) throws IOException {}@Overridepublic void postClearDeadServers(ObserverContext<MasterCoprocessorEnvironment> observerContext, List<ServerName> list, List<ServerName> list1) throws IOException {}@Overridepublic void preMoveServers(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set, String s) throws IOException {}@Overridepublic void postMoveServers(ObserverContext<MasterCoprocessorEnvironment> observerContext, Set<Address> set, String s) throws IOException {}// 注释掉
//  public void preMoveServers(final ObserverContext<MasterCoprocessorEnvironment> ctx, Set<HostAndPort> servers, String targetGroup) throws IOException {}
//  public void postMoveServers(ObserverContext<MasterCoprocessorEnvironment> ctx, Set<HostAndPort> servers, String targetGroup) throws IOException {}
3,Python 版本不兼容

[ERROR] around Ant part ...<exec failοnerrοr="true" executable="python">... @ 4:48

修复:ranger 编译仅仅支持 python 2.x 版本,如果我们是 python 3.x 的版本需要切换为 2 的版本,如果你安装了 conda 也很简单:

# 切换环境
conda activate py27
4,PMD 规则校验不通过

这个直接打包时禁用掉 pmd 检查即可

 -Dpmd.skip=true
注意事项

经过上述调整过后,我们的编译终于成功了,但需要注意的是 API 的兼容仅仅是为了不报错,如果真的需要到某个组件的功能时,建议移值高版本的特性过来,避免某些功能不能正常 work 问题

相关文章:

Hadoop + Hive + Apache Ranger 源码编译记录

背景介绍 由于 CDH&#xff08;Clouderas Distribution Hadoop &#xff09;近几年已经开始收费并限制节点数量和版本升级&#xff0c;最近使用开源的 hadoop 搭了一套测试集群&#xff0c;其中的权限管理组件用到了Apache Ranger&#xff0c;所以记录一下编译打包过程。 组件…...

Java从入门到精通笔记篇(十二)

枚举类型与泛型 枚举类型可以取代以往常量的定义方式&#xff0c;即将常量封装在类或接口中 使用枚举类型设置常量 关键字为enum 枚举类型的常用方法 values()方法 枚举类型实例包含一个values()方法&#xff0c;该方法将枚举中所有的枚举值以数组的形式返回。 valueOf()可…...

入侵排查之Linux

目录 1.黑客入侵后的利用思路 2.入侵排查思路 2.1.账号安全 2.1.1.用户信息文件/etc/passwd 2.1.2.影子文件/etc/shadow 2.1.3.入侵排查 2.1.3.1.排查当前系统登录信息 2.1.4.2.查询可以远程登录的账号信息 2.2.历史命令 2.2.1.基本使用 2.2.1.1.root历史命令 2.2.…...

从0开始学习Linux——文件管理

往期目录&#xff1a; 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…...

全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程

一、软件系统设计开发运行安全 1、注重OpenSource组件安全检查和版本更新&#xff08;black duck&#xff09; 现在很多云、云服务器都是由开源的组件去搭成的&#xff0c;对于OpenSource组件应该去做一些安全检查和版本更新&#xff0c;尤其是版本管理&#xff0c;定期对在运…...

Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装

Leidenアルゴリズムの詳細解説&#xff1a;Pythonによるネットワーク分割の実装 目次1. Leidenアルゴリズムの概要2. Python実装例3. グループ分けの結果分析4. なぜこのような分割になるのか5. Leidenアルゴリズムの仕組み6. 実践的な応用例7. 初心者へのアドバイス8. まとめ …...

安当ASP系统:适合中小企业的轻量级Radius认证服务器

安当ASP&#xff08;Authentication Service Platform&#xff09;身份认证系统是一款功能强大的身份认证服务平台&#xff0c;特别适用于中小企业。其中&#xff0c;简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍&#xff1a; 一、主要…...

Vue 组件间传值指南:Vue 组件通信的七种方法

前言 Vue 的组件系统非常强大&#xff0c;允许我们将应用程序拆分成独立且可复用的组件。随着前端开发的复杂性增加&#xff0c;组件间的数据传递和状态管理显得尤为重要。本文将详细介绍几种在 Vue 中常用的组件间传值方法&#xff0c;并结合实际代码示例&#xff0c;帮助您更…...

推荐一个超漂亮ui的网页应用设计

https://andi.cn/download/65211.html...

有什么初学算法的书籍推荐?

对于初学算法的读者&#xff0c;以下是一些值得推荐的书籍&#xff1a; 1、算法超简单&#xff1a;趣味游戏带你轻松入门与实践 作者&#xff1a;童晶 著 推荐理由&#xff1a;本书把趣味游戏应用于算法教学&#xff0c;提升读者的学习兴趣&#xff0c;并通过可视化的图解和动…...

自动化工作流建设指南

&#x1f680; 自动化工作流建设指南&#xff1a;CI/CD、Github Actions与自动化测试部署 打造现代化的自动化工作流&#xff0c;提升团队开发效率。今天咱们将深入探讨 CI/CD 最佳实践、Github Actions 实战经验以及自动化测试与部署策略。 &#x1f4d1; 目录 CI/CD 最佳实践…...

[免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue3校园宿舍管理系统(优质版)&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue3校园宿舍管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的不断发展&…...

SNK施努卡 - 机器人测温取样系统

机械手测温取样系统 有色行业自动化 机器人&#xff1a;机械手测温取样系统是以工业机器人为平台&#xff0c;技术相对成熟稳定&#xff0c;利用机器人的灵活性&#xff0c;自动往测温取样枪上安装探头&#xff0c;自动将探头伸进高温铜水内进行测温取样&#xff0c;自动拆除废…...

goframe开发一个企业网站 验证码17

Go验证码功能实现详解 目录结构 ├── internal │ ├── controller │ │ └── captcha │ │ └── captcha.go │ ├── logic │ │ └── captcha │ │ └── captcha.go │ └── service │ └── captcha.go1. Serv…...

【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题

目录 1. 单例模式 (1) 饿汉模式 (2) 懒汉模式 1. 单线程版本 2. 多线程版本 2. 解决懒汉模式产生的线程安全问题 (1) 产生线程安全的原因 (2) 解决线程安全问题 1. 通过加锁让读写操作紧密执行 方法一 方法二 2. 处理加锁引入的新问题 问题描述 …...

MySQL电商多级分类表设计方案对比

MySQL电商多级分类表设计方案对比 在电商系统中&#xff0c;多级分类是一个常见的需求&#xff0c;用于组织和管理商品类别&#xff0c;合理的设计可以提高系统的性能和可维护性。本文将详细介绍三种不同的多级分类表设计方案&#xff0c;我们将使用宠物分类作为示例数据&…...

网络安全工程师需要知道哪些IPSec的基本原理?

IPSec是一种端到端的安全协议&#xff0c;为IP数据包提供认证、完整性和加密服务。它通过在IP层实现安全功能&#xff0c;确保数据在传输过程中的机密性、完整性和真实性。IPSec广泛应用于VPN、远程访问和企业内部网络通信等领域&#xff0c;是保护互联网通信安全的重要手段。 …...

leetcode 148. 排序链表 中等

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#xff1a; …...

动态规划与贪心算法:核心区别与实例分析

动态规划与贪心算法&#xff1a;核心区别与实例分析 动态规划和贪心算法是计算机科学中用于解决优化问题的两种著名方法。它们各自的思路和应用场景有显著的区别&#xff0c;理解这些区别对解决相关问题至关重要。本文将详细探讨这两种算法的最优子结构、解法策略、适用场景&a…...

.NET 公共语言运行时(Common Language Runtime,CLR)

.NET 的公共语言运行时&#xff08;Common Language Runtime&#xff0c;CLR&#xff09;是 .NET Framework 和 .NET Core 的核心组件&#xff0c;负责运行和管理 .NET 程序。CLR 提供了一个高效、安全和稳定的执行环境&#xff0c;支持多种编程语言并处理各种系统级的任务。下…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...