hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: hadoop sdk优化、裁剪、集成kerberos组件、定制化等

01 引言

博主最近在实际的业务中,使用到了DolphinScheduler(一款大数据调度框架)里面的一个工作流的MapReduce任务节点。

主要做的事情就是,在该节点提交一个mr作业到华为云MRS大数据平台里面的yarn,任务节点代码如下:
image.png

从代码得知,它是使用CLI的形式提交作业的,因此需要解决如下几个问题:

  • q1:需要有一个hadoop的安装包;
  • q2: hadoop安装包体积过大,需要裁剪,否则挂载到容器,镜像会很大。
  • q3: hadoop安装包的依赖库必须是第三方的大数据平台(MRS)提供的;
  • q4: 访问MRS需要走kerberos认证,需要集成kerberos组件;
  • q5:集成hadoop安装包到项目。

ok,本文围绕以上几个问题逐个解决。

02 选择合适的hadoop安装包

因为项目需求是使用3.3.1版本的hadoop sdk,因此我去搜了一下仓库:https://repo.huaweicloud.com/apache/hadoop/common/hadoop-3.3.1/
image.png

发现该sdk体积很大,因此选择了版本2.7.7(体积小了一半):
https://repo.huaweicloud.com/apache/hadoop/common/hadoop-2.7.7/
image.png

好了,接下来需要进行裁剪了。

03 裁剪hadoop安装包

安装下载并解压后,可以得知,它的依赖库都在"{解压目录}/share/hadoop/common"下,根据组件类型,按文件夹分类了不同的jar:
image.png

其实除了“common”,其他文件夹都可以删除,为了方便下一步添加MRS平台的依赖库,我把这里的所有文件夹都删除了,只留下common。

这么一来,这个安装包的体积才几M了。

04 hadoop安装包添加依赖库

上一步骤,只留下了common文件夹了,我们需要替换里面的jar,那这些依赖库从哪里来呢?

我们可以看看华为云提供的官方demo:
https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-3.1.2

IDEA git clone下来,使用mave导入,然后在菜单栏,展开“External Libraries”,可以看到自动依赖hadoop相关的jar:
image.png

注意了,这里依赖的jar就是hadoop 安装包里面如果使用客户端命令,必须用到的内容因此我们需要把这里依赖到的所有jar包都从本地的maven仓库copy出来

最终,我添加了jar包到了刚刚裁剪过的"{解压目录}/share/hadoop/common"目录下:
image.png

验证:

cd ./bin
./hadoop version

image.png

可以看到,我们添加了库到hadoop的安装包,现在可以看做是一个hadoop客户端了。

压缩后,它的体积仅有87.8M了,比之前的体积少了近10倍。
image.png

05 hadoop安装包集成kerberos组件

现在已经有了hadoop的客户端了,如果要正常提交mr作业到MRS平台,还有两个步骤需要走:

  • Step1:修改"{解压目录}/etc/hadoop"目录下的几个文件(一般为:core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml),通常这几个文件都是大数据平台的相关负责人提供,然后我们直接替换就好了;
  • Step2:使用kerberoskinit命令获取身份票据,然后就能正常使用hadoop的相关命令了。

那么,kerberos相关的安装包在哪里下载呢?我们可以进入我们“要使用hadoop安装包的业务服务”所在的物理机,然后使用命令下载(注意:这里的业务服务是部署到k8s集群里面的,默认已经进入了pod容器):

## Ubuntu/Debian系统:  
apt-get install krb5-user krb5-config  

## CentOS/RHEL系统
yum install krb5-workstation krb5-libs  

## 容器里面的系统是(Alpine Linux v3.11)
apk add krb5

安装成功:
image.png

打包这些命令:

## 创建文件夹
mkdir krberos_client

## 复制keberos命令
cp /usr/bin/kinit \
   /usr/bin/klist \
   /usr/bin/kdestroy \
   /usr/bin/kpasswd \
   /usr/bin/kadmin \
   /usr/bin/kvno \
   /usr/bin/ktutil \
   krberos_client/
## 打包keberos命令
tar czvf krberos_client.tar.gz krberos_client/

然后导出(本文是从容器里导出“kubectl cp <namespace>/<pod_name>:<container_path> <local_path>”)

最后,解压这些文件到hadoop安装包的bin目录(没强制要求):
image.png

06 集成安装包到项目

经过前面的描述,已经把hadoop的安装包裁剪了,且集成了kerberos的组件,此时我们需要把这个安装包一起打包到我们的项目,细节不说了,我直接贴出我的Dockerfile

# 使用OpenJDK 8作为构建环境
FROM openjdk:8-jdk-alpine

# 设置工作目录
WORKDIR /app

# 声明JAVA_HOME、HADOOP_HOME等
ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
ENV HADOOP_HOME=/data/hadoop
ENV PATH $JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH


RUN mkdir -p /data/hadoop
COPY hadoop-mrs /data/hadoop
RUN cp /data/hadoop/bin/k* /usr/local/bin/ && \      ## 复制kerberos相关的命令到bin目录,直接就能使用
    cp /data/hadoop/etc/hadoop/krb5.conf /etc/   ## 复制krb5.conf到etc目录,keberos命令从这个路径读取kdc、realm等信息

## 其它....

以上有几个细节需要注意:

  1. 安装包bin目录下的kerberos命令必须复制到/user/local/bin目录,这样才可以直接使用kerberos相关的客户端命令
  2. krb5.conf文件必须放到etc目录,因为kerberos命令默认就是从该路径的krb5.conf文件读取kdc、realm等信息的
  3. ENV必须声明JAVA_HOME、HADOOP_HOME、PATH这些信息,这样才能直接使用hadoop命令

最后,进入容器,看看执行的效果,可以看到命令一切正常:
image.png

上述仅仅是验证命令的可行性,如果要真正提交mr作业到mrs,你可能需要这样执行命令:

# 获取用户kerberos 票据
kinit -kt [user.keytab文件路径] [用户principal]
# 查询是否获取成功
klist
# 使用hadoop 命令
hdfs dfs -list

如下(目录可能不同,之前验证通过的,做示例展示):
image.png

备注:Hadoop客户端首先会检查 KRB5CCNAME 变量是否存在,并使用该变量指定的路径来读取Kerberos票据,如果该变量不存在,则会使用默认的票据缓存路径来读取票据(即图片klist命令结果中的/tmp//krb5cc_0)。

06 文末

附:

本文主要就是讲解了hadoop sdk的裁剪、集成kerberos组件等操作,纯属经验之谈,希望能帮助到大家,谢谢大家的阅读,本文完!

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
7天前
|
SQL 分布式计算 Hadoop
【赵渝强老师】Hadoop生态圈组件
本文介绍了Hadoop生态圈的主要组件及其关系,包括HDFS、HBase、MapReduce与Yarn、Hive与Pig、Sqoop与Flume、ZooKeeper和HUE。每个组件的功能和作用都进行了简要说明,帮助读者更好地理解Hadoop生态系统。文中还附有图表和视频讲解,以便更直观地展示这些组件的交互方式。
|
1月前
|
存储 Java 开发工具
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
|
1月前
|
移动开发 数据可视化 小程序
可视化集成相当优秀ucharts图表组件
可视化集成相当优秀ucharts图表组件
47 3
|
3月前
|
缓存 前端开发 JavaScript
微前端集成优化:让所有子应用体积更小,加载更快!
【8月更文挑战第17天】微前端集成优化:让所有子应用体积更小,加载更快!
68 1
微前端集成优化:让所有子应用体积更小,加载更快!
|
3月前
|
缓存 负载均衡 Java
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
文章标题为“OpenFeign的Ribbon负载均衡详解”,是继OpenFeign十大可扩展组件讨论之后,深入探讨了Ribbon如何为OpenFeign提供负载均衡能力的详解。
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
|
3月前
|
存储 分布式计算 Hadoop
Hadoop 的两个主要组件是什么?
【8月更文挑战第12天】
454 4
Hadoop 的两个主要组件是什么?
|
3月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
51 1
|
3月前
|
搜索推荐
实现CRM与ERP系统无缝集成,优化客户关系管理
在当今竞争激烈的市场环境中,企业要想保持领先地位,必须高效地管理客户关系并优化内部资源。CRM(客户关系管理)系统与ERP(企业资源规划)系统的无缝集成,为企业提供了一种强大的工具,以实现这一目标
66 2
|
3月前
|
JSON 数据管理 关系型数据库
【Dataphin V3.9】颠覆你的数据管理体验!API数据源接入与集成优化,如何让企业轻松驾驭海量异构数据,实现数据价值最大化?全面解析、实战案例、专业指导,带你解锁数据整合新技能!
【8月更文挑战第15天】随着大数据技术的发展,企业对数据处理的需求不断增长。Dataphin V3.9 版本提供更灵活的数据源接入和高效 API 集成能力,支持 MySQL、Oracle、Hive 等多种数据源,增强 RESTful 和 SOAP API 支持,简化外部数据服务集成。例如,可轻松从 RESTful API 获取销售数据并存储分析。此外,Dataphin V3.9 还提供数据同步工具和丰富的数据治理功能,确保数据质量和一致性,助力企业最大化数据价值。
169 1
|
3月前
|
JavaScript jenkins 持续交付
自动化部署与持续集成:使用Jenkins和Docker优化开发流程
【8月更文挑战第31天】在软件开发的世界里,时间就是一切。本文将引导你通过Jenkins和Docker的强大组合,实现自动化部署和持续集成,让你的开发流程如丝般顺滑。我们将从基础设置开始,逐步深入到构建管道,最终实现一键部署的梦想。准备好让你的开发效率飞跃,一起探索这个令人兴奋的旅程吧!