草庐IT

国产自研、安全、高可用——袋鼠云大数据基础平台EasyMR筑基企业数字化转型

数栈DTinsight 2023-03-28 原文

近年来,国际形势的风云变幻,中美双边关系的恶化,自2013年“棱镜门”事件之后,又一次警示国人,对于科技领域,只有自己掌握核心关键技术,实现自主可控,才能摆脱越来越频繁的“卡脖子事件”,保证企业和国家信息安全。

俗话说“基础不牢,地动山摇“。大数据基础平台什么?是打地基的,是重中之重,地基扎得越深、打得越牢,上面的建筑才能越稳定。可以说,数字化转型的“万丈高楼”起于基础平台,具备自主可控的平台建设能力,是真正意义上一切的前提。

袋鼠云今年7月最新推出自研大数据基础平台EasyMR,该产品提供Hadoop、Hive、Spark、Trino、HBase、Kafka等组件的自动化安装、中心化管理与集群监控告警功能,完全兼容Apache开源生态,支持企业级安全管控,一键开启LDAP+Kerberos+Ranger认证权限体系,以及提供一站式运维管理平台。

结合袋鼠云在大数据领域多年的实践经验和沉淀积累,袋鼠云大数据基础平台EasyMR适配多种信创软硬件,可以更加自主化地帮助企业快速构建大数据平台,降低运维成本,极大提高集群管理效率。

一、EasyMR的系统架构

先来看看EasyMR的系统架构,由主体部分和监控告警组件共同构成:

EasyMR的主体部分由以下三部分构成:server端(matrix)、agent管控服务(easyagent-server)、agent管控客户端(sidecar):

matrix

matrix主要用于用户前端交互,将用户期望对大数据集群的对应运维操作通过web UI的方式呈献给用户,也可以通过这种方式将用户的运维指令下发到Hadoop集群中,比如安装HDFS Namenode、启动HDFS Namenode、停止HDFS Namenode等等,从而完成用户与Hadoop集群的交互。

matrix一般不部署在大数据服务节点上,是作为管控服务单独部署。

easyagent-server

作为matrix与easyagent-sidecar之间的中间服务,easyagent-server向上作为http服务端提供给业务层matrix一些restful接口,向下作为rpc服务端提供给底层easyagent-sidecar一些rpc接口供远程调用,从而将业务层与底层服务成功解耦。

并且支持高可用分布式部署,当集群压力增加时可以增加节点部署,缓解集群压力。与matrix一样,easyagent-server一般不部署在大数据服务节点上,是作为管控服务单独部署。

easyagent-sidecar

easyagent-sidecar是由golang语言开发,负责执行easyagent-server下发的指令,进行大数据基础服务的安装、部署、启动、停止、配置下发等操作。同时还负责进行集群内主机和服务监控信息以及心跳状态监控上报,当matrix检测到sidecar未及时上报心跳数据时在页面会显示主机状态异常。

虽然sidecar是与大数据集群最近的一个组件,但是它不保存任何跟集群相关的内容,只负责执行easyagent-server下发的命令以及自身主机与服务的心跳与健康检查上报。easyagent-sidecar部署在大数据服务节点上。


easyagent-server/easyagent-sidecar架构图

除了上述三种基础组件之外,EasyMR作为一个完备的大数据基础平台,对于集群的监控告警也引入了一些开源组件(prometheus、grafana),并根据需求对其进行了相应的二次开发,同时EasyMR还自研了专用告警通道发送组件(dt-alert):

prometheus

prometheus是由 SoundCloud 开源的监控告警解决方案,从 2012 年开始编写代码,2015 年在 GitHub 上开源,2016 年 Prometheus 成为继 Kubernetes 之后,CNCF (Cloud Native Computing Foundation)中的第二个项目成员,也是第二个正式毕业的项目,是新一代开源解决方案。

对于使用EasyMR接入过的主机以及使用EasyMR部署的大数据服务,我们会为其启动对应的prometheus exporter(如主机会使用node_exporter),prometheus会定期抓取主机与服务的监控数据并写入存储中,便于页面查询展示以及针对监控数据进行告警。

grafana

grafana是一个监控仪表系统,它是由 Grafana Labs 公司开源的系统监测 (System Monitoring) 工具。它可以极大地助力简化监控的复杂度,用户只需要提供需要监控的数据,它就可以帮助生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时做到及时通知。

EasyMR将开源版本的grafana进行了二次开发,做到无痕嵌入EasyMR UI中,大大丰富了监控图表的多样化展示。除此之外,对grafana的仪表盘配置告警规则后还可以对接自研的dt-alert组件进行告警发送。


DataNode监控大盘

dt-alert

dt-alert是袋鼠云自研的专用告警通道发送组件,原生支持邮件、短信、钉钉机器人、企业微信四种方式发送告警信息,同时也支持可扩展的自定义插件发送方式,用户可以根据我们设定的接口规范开发自定义插件发送告警信息到内部告警通道中。

添加告警通道

二、使用EasyMR部署Hadoop的操作原理

结合上述对EasyMR核心组件的描述,下文使用Hadoop集群的实例为大家说明,在使用EasyMR部署Hadoop时的底层操作原理:

Part.1

本地部署一套EasyMR服务,得到前端页面访问入口。

Part.2

通过前端页面进入主机接入页面进行主机接入操作,此时matrix会向easyagent-server发送请求在指定主机上安装easyagent-sidecar,easyagent-server会将安装脚本下发到对应主机,easyagent-sidecar安装完毕之后会通过回调的方式通知matrix,完成主机接入。

此外,EasyMR还会在主机上安装node_exporter,并将采集配置写入prometheus配置文件中,无需重启即可热加载配置进行主机监控数据采集。

Part.3

页面选中Hadoop产品包,根据提示进行前期配置触发部署操作,matrix也是通过easyagent-server向easyagent-sidecar发送下载安装包、解压安装、启动命令,启动完成之后easyagent-sidecar会定期对服务进行健康检查,并将结果通过easyagent-server上报到matrix。

与主机类似,EasyMR还会在主机上安装对应服务的prometheus exporter,并将采集配置写入prometheus配置文件中,无需重启即可热加载配置进行服务监控数据采集。

Part.4

进入仪表盘页面查看Hadoop服务的图表监控,此时查看的页面来自于iframe嵌入的grafana。

Part.5

对仪表盘进行监控告警配置并设置告警发送通道,那么当告警触发时(比如HDFS namenode full GC次数过大),grafana会调用dt-alert的接口将告警信息发送到用户指定的渠道。

三、EasyMR的能力优势

袋鼠云大数据基础平台EasyMR不仅拥有高效、完备的系统架构,还拥有更多的亮点优势,主要体现在以下三方面:

全面的国产化适配能力

外部环境渐趋复杂,我国正大力推进信创国产化的进程,逐步将CPU、操作系统、数据库等基础软硬件技术换成国内自主研发的技术,减少对国外产品的依赖。

EasyMR具备极强的国产化适配能力,可灵活部署在多种国产操作系统、CPU、服务器规格中,具体适配清单如下:


后续EasyMR也会继续适配其余国产化操作系统、CPU等基础组件,深耕信创国产化领域,为信创国产化献出自己的力量。

丰富的组件可扩展性

EasyMR本身提供了丰富的大数据组件,包括但不限于Hadoop、Hive、Spark、Flink、HBase、Kafka、Trino,可以满足用户不同需求场景下对大数据集群的一站式创建、管理、部署、运维与监控。

除此之外,EasyMR还拥有一套统一的产品包schema定义规范,将产品包完整的生命周期(安装、启动、配置、升级、卸载等)通过标准的schema定义表示。

当后续需要添加其余类型的大数据组件时,无需对EasyMR平台本身做出改造,只需根据规范定义新组件的产品包即可将其投入EasyMR平台使用。

支持高可用的可靠性平台

对于EasyMR系统架构中的多个核心组件,出于对平台稳定性方面的考虑,EasyMR做到了核心组件支持高可用且分布式可水平扩展。

• 当一台核心组件因为外界原因宕机后,EasyMR可以保证其余服务能够正常运行,包括但不限于服务安装、启动、停止、卸载等;

• 当需要接入大数据组件的节点数量增加时可以灵活扩展核心组件的数量以适配,同理,当需要接入大数据组件的节点数量减少时也可以灵活减少核心组件的数量以节省资源。

四、EasyMR使用场景

EasyMR作为一款自主研发、完全可控,致力于助力企业信息化智慧转型的“企业数据底座”,可以帮助客户轻松应对各类应用场景。

快速搭建Hadoop集群

在当前的大数据运维实践下,当用户需要使用Hadoop大数据分布式处理系统的时候,对用户自身来说前期需要准备硬件环境、部署启动Hadoop相关大数据组件。但是跟用户相关的内容是编写应用程序运行作业,对于不熟悉底层大数据集群的用户来说,这些前期准备工作非常冗长繁琐而且出了问题也无法得到及时的解决。

并且在传统模式下,运维手动部署一套Hadoop集群至少需要3天的,尤其当集群规模较大时,通过手动的方式更加耗费人力与物力,

但是使用EasyMR我们可以快速接入大数据节点并可以通过页面化的方式一键部署Hadoop集群,整个过程可以控制在半个小时内完成,极大提升了运维部署效率。

大数据集群开启安全

EasyMR通过集成第三方的安全管控服务Kerberos、LDAP和Ranger来分别对大数据集群做用户安全认证、访问用户管理以及用户数据权限管控。

对于使用EasyMR部署的大数据集群,用户可以通过一键开启的方式对大数据组件开启安全认证,大大节省了传统模式下的繁重的人工操作。

基于国产化操作系统部署大数据集群

关键技术国产化,是DT时代中国企业发展的必然选择。越来越多企业开始追求软硬件的国产替代和自主可控。

EasyMR目前已经适配多种国产操作系统与芯片架构,而且还将继续主动针对国产化软硬件去做适配,用户使用EasyMR可以快速部署对应架构下的大数据集群。

写在最后

作为全链路数字化技术与服务提供商,袋鼠云始终坚持自主研发和国产化路线,为攻克“卡脖子”难题,在技术创新上不遗余力。EasyMR基于最新的开源技术,为企业提供大数据基础设施底座,致力于Cloudera CDP等国外Hadoop商业版的国产化替代。

为了可信、可控、安全的数据未来,袋鼠云在路上。

对EasyMR感兴趣的用户可以点击添加【小袋鼠】进行咨询,进一步了解产品详情。
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szbky

添加【小袋鼠:dtstack001】入qun,免费获取大数据&开源干货

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack

有关国产自研、安全、高可用——袋鼠云大数据基础平台EasyMR筑基企业数字化转型的更多相关文章

  1. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  3. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  4. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  5. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  6. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  7. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  8. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  9. ruby-on-rails - self 在 Rails 模型中的值(value)是什么?为什么没有明显的实例方法可用? - 2

    我的rails3.1.6应用程序中有一个自定义访问器方法,它为一个属性分配一个值,即使该值不存在。my_attr属性是一个序列化的哈希,除非为空白,否则应与给定值合并指定了值,在这种情况下,它将当前值设置为空值。(添加了检查以确保值是它们应该的值,但为简洁起见被删除,因为它们不是我的问题的一部分。)我的setter定义为:defmy_attr=(new_val)cur_val=read_attribute(:my_attr)#storecurrentvalue#makesureweareworkingwithahash,andresetvalueifablankvalueisgiven

  10. ruby - 使写入文件线程安全 - 2

    我在一个ruby​​文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}

随机推荐