云+社区联合快手,深度解读五大热门大数据技术

鸢玮 51CTO博客 2019-09-02

数据已经成为企业宝贵的资产,如何利用数据的分析挖掘,从而辅助企业进行商业决策,成为企业所关注的。


8 月 24 日,由云+社区(腾讯云官方开发者社区)联合快手举办的《大数据技术实践与应用》沙龙活动成功举行,沙龙聚焦于大数据的技术实践与应用,为到场的用户奉上了一场大数据技术盛宴。


来自腾讯云的专家和快手的工程师重点介绍了 Spark、ElasticSearch,yarn、MapReduce、Flink 等大数据技术的发展历程、架构优化以及实践应用。

基于 Spark 构建 PB 级别云数据仓库


首位分享的嘉宾是来自腾讯专家工程师丁晓坤,他从 AI 与大数据的关系,大数据技术的发展趋势,以及基于 Spark 计算引擎构建云数仓的技术实践三个方面展开进行分享。


2006 年,Apache 社区的 Hadoop 项目正式成立,作为三驾马车的开源实践,开启了大数据时代;之后的 2009 年,AWS 推出了 EMR( Elastic MapReduce)弹性计算云平台,开启大数据的云计算时代。


2012 年随着 Yarn 的孵化,2013 年 Spark 项目正式成立,大数据进入加速发展阶段;随着 2016 年 AlphaGo 战胜李世石,2018 年 Hadoop3.0 的到来,AI 和大数据关系越来越紧密,大数据也向云化和容器化方向加速进化。


那么 AI 和大数据具体是什么关系呢?丁晓坤解释道:

  • AI 离不开数据,人工智能的计算特别是深度模型,与数据的相关性非常高,数据越好模型也会越准确。

  • 在标准的推荐场景中,有环形迭代的计算过程,从数据的抽取、准备,到模型训练、数据模型发布,再到进一步抽取数据,在迭代过程中进行优化模型。


而基于以上这两大关系,对 AI 和大数据两大技术的融合提出新的需求。首先,数据在数据处理和 AI 训练框架之间的交互效率要求越来越高,就会产生 tf.data、tf.transform 等数据结构。


而腾讯推出的 Angel 和 Intel 推出的 BigDL 这些计算框架可以快速地将 Spark 计算框架与机器模型训练框架结合的更好,TensorFlowOnSpark 也可以快速提高环形迭代效率。


其次,随着 AI 的快速发展,大家对 GPU 的要求越来越高,通过优化 GPU 与 CPU 之间任务队列的调度从而提高效率,而 GPU 的调度则可以通过 K8s 和 Hadoop 3.0 的发展也越来越高效。


大数据的发展离不开数据仓库体系。数据仓库从 1989 年提出后经过了三个发展阶段,第一个阶段是数仓一体机时代,通过数据仓库一体机企业可以进行报表分析、财务分析。


随后由于一体机在数据处理和性能上无法满足企业需求,于是出现了分布式 MPP 数据库,企业可以进行简单的模型推测和预测计算。之后,企业更加关注 IT 成本,因此更多企业开始选择云原生数据仓库。

SPARKLING 架构图


最后,丁晓坤分享了基于 Spark 计算引擎构建云数仓的技术实践。为何腾讯云会选择 Spark 来作为核心计算的支撑呢?


丁晓坤归纳为四大原因:

  • Spark 生态丰富,支持场景比较全面,也是大数据领域比较热门的开源项目。

  • Spark 支持 Python,SQL,R,Scala,Java 等语言提交计算任务,比较容易上手。

  • 依托开源社区,尽可能使用开源项目,用户可以熟知技术细节。

  • 由于 Spark 拥有 DAG 模型、RDD 内存计算和更细粒度的调度、钨丝计划等,使得性能更加优越。


在腾讯云构建数据仓库时,也表现出一定的云特性。在弹性伸缩方面,可以支持三种类型的节点:主节点,核心计算节点和弹性计算节点,并且支持核心计算节点的横向扩容,支持弹性计算节点的横向扩缩容。


这样通过临时的弹性计算节点达到存算的分离,弹性节点可以随时扩缩容,快速回收计算资源从而降低成本。


此外,通过平滑摘除机制,在所有的容器都执行完毕,或执行超时后移除,保证任务平滑稳定的运行。


第二个云特性就是虚拟环境优化,增加 NO Group 层,读取策略采用 node>node group>rack>off-rack的方式,通过跨 Rack 的机制,满足云上虚拟环境的需求。


第三是性能方面,可以通过 Parquet 将 Bloom 过滤器数据存储到列元数据,执行选择性查询时启用行组过滤。


对于 Spark 来说,应用场景中更多的问题就是 Shuffle 的问题,Shuffle 的效率会影响到数据计算性能的延迟和效率,随着 Spark 的发展,通过性能优越的内存存储技术,提升 Shuffle 效率,从而提升 Spark 的效率。


未来,腾讯云构建的基于 Spark 的数据仓库还会支持 Update 和 Delete 机制,以及增加对 Serverless-K8S 的支持,ACID 的支持。


腾讯云 ElasticSearch 产品架构与实践


ElasticSearch 在 2010 年左右出现,是目前搜索领域知名度较高的产品。


腾讯云大数据技术总监邹建平分享了腾讯云 ElasticSearch 产品在云原生架构设计、高可用、自动化运维等方面的思考,以及如何利用 ElasticSearch 来实现企业智能化转型。


首先,邹建平介绍了 ElasticSearch 存储分析的平台的特点,支持全文检索的搜索引擎,同时 ElasticSearch 也是 NoSQL 数据库,支持数据做保存和读取,支持 OLAP 数据分析。


此外,ElasticSearch 是基于 Java 开发的,可以基于 Lucene 搜索库通过倒排索引来直接通过关键字命中文档,快速实现用户检索的请求。此外,通过在 ElasticSearch 外层开发 RESTful 接口,方便用户平台进行集群管理。


而 ElasticSearch 产品成功的关键在于 ELK Stack,拥有统一的生态,目前开发者超过 10 万人。


在进入到移动互联网时代,App 爆炸式增长,但 App 中的数据并不能像网页一样很容易被爬虫到,这对 ElasticSearch 搜索引擎框架来说,带来了新的发展机遇。


ElasticSearch 数据都存在存储引擎中,用户对这些数据进行新的价值挖掘时,对 ElasticSearch 提出了新的要求,这也是 ElasticSearch 从搜索逐渐向分析演进的原因。


从搜索到分析的演进过程中,共经历了五次变化。2010 年,ElasticSearch 刚推出时,主要支持搜索场景,使用倒排索引,在 ElasticSearch 中加入 FieldData,将 term 到 docid 的映射逆转,变成 docid 到 term。


但是在检索构建过程中,对于数据量较大的检索是非常灾难性的,加载速度较慢。因此到了 2012 年提出了 DocValus,是通过 Docld 到 Value 的列式存储。


FieldData 是在检索时实时构建,而 DocValues 是在索引时构建的,因此更容易压缩,此外,DocValues 是写在磁盘中而不是内存,因此可以利用文件系统缓存来加速访问。


对比 FieldData,DocValues 的加速速度快 2 个数量级,并且检索速度性能保持一致,缓存亲和度更好。


2014 年以后,分析的复杂度越来越多,因此 ElasticSearch 做了去除框架的改进,后来提出的 Aggregation 可以支持嵌套聚合,Pipeline Aggregation 能够对聚合后的结果集再进行加工计算,例如求最大值、排序等等操作。


2016 年 ElasticSearch 算法进行优化,其中涉及全局序数、DocValues、BKD tree 等。


2018 年提出的 Rollup,可以提升查询的效率,降低存储指标。此外,ElasticSearch 也支持 SQL,支持多种访问方式,例如 CLI、Restful、Kibana Canvas、JDBC、ODBC 等。


ElasticSearch 增强了分析能力以外,还能做什么呢?首先是商业智能分析,通过各种手段对数据进行整合、统计和结果输出。


第二是日志、指标和 APM 这也是 ElasticSearch 主推的功能之一,在业务日志、指标都保存在存储平台后,将业务逻辑进行串联实现 APM,这样就可以打通前端到后端的所有数据,当应用出现问题后,可以快速的分析出问题所在。


第三是基于机器学习的安全分析,能对日志、指标进行异常检测。


从 2010 年到如今,ElasticSearch 从最初只用在搜索领域,到如今已经是分析领域的热门技术,ElasticSearch 发展的过程可以总结为“高”、“精”、“尖”。


“高”指的是 ElasticSearch 在分布式计算方面有很多的设计,例如 alias、index、shard、segment。


“精”指的是 ElasticSearch 拥有多种高效的索引,包括倒排表、Docvalues、BKD tree、Global Ordinals 等等。


“尖”指的是 LSM 存储结构,数据不可变,对缓存更有亲和度。


第二大部分邹建平重点介绍了腾讯云 ElasticSearch 架构的优化。


腾讯云 ElasticSearch 产品架构图

用户使用腾讯云 ElasticSearch 产品时,经常会有些担心,数据是安全,可用性是否高,没有专门的人员出了问题怎么办。


在数据安全方面,腾讯云 ElasticSearch 支持高级商业特性( X-Pack 插件)数据权限管理,支持角色管理,集群、索引、文档、字段各个级别的权限控制,外网 HTTPS、黑白名单,客户端、集群内节点 SSL 传输加密。


在 CAM 方面,设置了腾讯云账号权限管理;在 Audit 方面,加入了集群操作审计日志和 XPACK 安全审计日志。


在数据可靠性方面,在 VPC 中可以做到完全逻辑隔离,多维度网络安全管控;在 Backup 方面,支持数据定时备份和 COS 低成本备份;在 Recycle-Bin,设置垃圾回收站,避免数据因人为原因丢失。


在高可用方面,腾讯云进行了三方面的设置,实现跨可用区容灾。基于 ElasticSearch 数据分布感知框架实现,主从副本放置到不同机房;三个专用主节点分布在三个可用区,避免无法选主;必选专用主节点,避免脑裂。


此外,通过调整分配算法,使得在不同节点之间打散,避免热点不均的情况发生,从而达到分片均衡优化。


在高可运维方面,腾讯云也做了很多工作,通过自动监控告警系统来支撑 ElasticSearch 日常运维。


最后,分享了腾讯云 ES 产品未来发展的三个方向:
  • 第一,在水平方面,是更好的将上下游产品联动起来,例如如何做好各种数据导入,和 Hadoop 产品、对象存储产品的数据联动做得更加易用。

  • 第二,在垂直方面,加强将 ES 里的解决方案例如 APM、安全分析、垂直搜索等功能更好落地到云。

  • 第三,在矩阵方面,我们会将腾讯的一些能力融入到 ES 产品中,例如如何将微信通知、或者我们的一些 NLP 插件,和 ES 结合起来。

Elasticsearch 近期新功能


Yarn 在快手应用实践与技术演进之路


来自快手数据架构工程师房孝敬,介绍 Yarn 系统在快手的应用实践,遇到的问题以及相应的技术演进过程。


Hadoop 俨然已是业界认可、成熟的数据存储、处理框架。目前,Hadoop 的发展已经从 1.0 走到了 2.0 版本。


在 Hadoop v2.0 的版本中引入 Yarn,主要是解决了 Hadoop v1.0 中的扩展性问题。


Yarn 主要分成三个模块,一个是管理集群资源的 RM,一个是管理机器资源情况的 NM,还有管理 App 资源和内部逻辑的 AM。


RM 模块内部架构分为两部分,一个是管理集群中节点和 App 的状态,分别有 ResourceTrackerService 和 ApplicationMasterService 进行管理。


服务和 RM 通信后将消息送到 RM 内部,生成相应的事件,通过事件处理机制驱动 App 和节点状态机的更新,最后达成期望的状态。


Yarn 另一个主要功能是调度,早期 Yarn 在 NM 心跳处理逻辑中触发调度,因为调度比较耗时,会与其他事件处理过程竞争资源,导致双方互相影响,之后社区进行优化,将调度逻辑拆离到单独的线程,但还是存在很大问题,后面会介绍具体的优化。


快手在 Yarn 方面的技术实践主要分成四个方面:

  • 集群稳定性方面的改动。

  • 对 Yarn 的抢占机制做了优化。

  • Yarn 的调度性能做提升。

  • 计算集群小 IO 优化。


集群规模变大后,节点变多,App 数量增多,导致事件处理压力变大,调度压力增大,机器故障变多。快手从 RM 优化、避免单点问题两方面进行稳定性改进。


在 RM 优化方面,快手曾经升级集群导致 RM 挂掉,通过对冗余事件进行优化,并且开发 NM 慢启动策略,最终降低 RM 事件处理压力,升级对 RM 的影响也就降低了。


HDFS 是 Yarn 底层的设施,HDFS 的卡顿会导致 RM 事件处理逻辑卡住,通过优化事件处理逻辑中 HDFS、DNS 等 IO 操作,提升事件处理逻辑的稳定性。


优化完后,发现事件处理占用的 CPU 较多,为了避免事件处理逻辑成为集群性能瓶颈,把 NM 事件处理从主事件处理流程中剥离到单独的线程,提升了整个事件处理的速度。


在特定场景下,会出现奇怪的磁盘问题,比如磁盘是好的但是某个目录是坏的,这种问题在现有机制下很难发现,导致特定作业失败。


快手采用 NM 磁盘黑名单,通过 task 失败信息进行规则匹配,发现磁盘问题,将有问题的磁盘放在黑名单中,不再向这个磁盘调度作业。


Yarn 的一大问题是,一台机器有问题调度失败,会造成雪崩效应,造成作业大量失败,快手通过集群层面黑名单机制解决这个问题。


磁盘满、fd 泄露,线程泄露也是会造成故障的,快手通过对 CPU,mem,磁盘文件大小,fd 数目,线程数目的控制,增强底层隔离,避免相互影响。


集群中的问题机器较多,在集群规模变大后,如何发现问题机器是个难题,快手通过 Container 失败率高机器 check、物理指标异常 topN check 和 Job 失败信息汇总三个方法来快速发现问题机器。


Yarn 一个主要的功能就是调度整个集群的资源。Yarn 的调度模型是比较复杂的,为了保证调度公平性,需要对队列和 App 进行排序。


快手的初始思路是减少排序时间,缩小排序规模,优化排序算法。通过优化后,能够支撑 5000 台机器的规模。


但是优化后还是存在问题,扩展性不足,只能利用一个 CPU;缺少全局节点信息,调度策略难以全局决策。


最终,快手重构了调度架构和逻辑,开发了 Kwai scheduler,建立资源分配的上帝视角,预先给队列分配资源,并发批量调度。


先选 App 再选节点,调度策略方便扩充,最终线上的调度速度可以达到每秒钟 4 万多。


未来,快手将在三个方面进行建设,资源分级保障建设、多集群建设和超配在离线混合部署。


目前,快手 Yarn 集群规模较大,使用资源非常多,通过作业画像和分级保障体系把资源倾斜给更重要的作业。此外,单集群容量有限,快手还会考虑多集群建设。


第三,快手的 Yarn 主要托管是离线计算的资源,公司很多非 YARN 管理的空闲资源没有使用,将合适的任务调度到空闲的机器上,也是快手未来探索的方向。


云端大数据产品架构及实践


弹性 MapReduce 是腾讯云构架于云端海量存储、计算基础设施之上的云端 Hadoop 框架,用户可在十分钟获得一个安全、低成本、高可靠、高弹性扩展、架构可持续演进的专属大数据集群。


腾讯云高级工程师乔超分享了腾讯云大数据 EMR 产品及其价值,同时根据实际经验介绍了大数据平台实践。

如今,各大企业都意识到数据的重要性,如何挖掘数据价值,为企业做出决策,变得尤为重要。


然而,在企业级大数据架构中,主要在三大领域存在挑战,企业级数仓与数据集市构建、流式数据分析和海量数据检索与分析,而各大社区也都通过开源组件形成了不同的解决方案。


但是构建大数据平台的技术复杂性高,构建周期长,运维基础设施匮乏,技术抗风险能力弱,因此,大数据开源技术能一定程度满足研发工程师的显性技术需求,但无法满足企业潜在的深层次隐形需求。


为了帮助企业解决以上挑战问题,腾讯云从技术组件到产品服务,通过完善大数据基础设施帮助企业客户高效应对从初创发展到成熟过程中的大数据技术性挑战。


腾讯云将企业划分为初创型和成熟型,对于初创型企业,腾讯云提供封装好的开箱即用的产品,包括计算服务、BI 分析组件,云数仓、云搜等能力。


而对于成熟型企业,腾讯云帮助其解决偏运维层面的问题,结合用户自己的特色,更加贴近用户的业务应用场景,帮助用户建立自己的大数据解决方案,腾讯云在此方面则提供弹性 MapReduce 和 ES。


乔超介绍了腾讯云云端大数据基础设施的优势:

  • 海量计算资源的优势,腾讯云拥有全球 25 个地理区域、全球 51 个可用区、分钟级计算存储资源实时调度,解决用户就近计算的场景。

  • 开放性和连续。通过与开源基金及公司协作,开源协同的持续性研发资源投入。

  • 大数据业务场景化。腾讯云提供腾讯系金融、社交网站、游戏、视频、新闻资讯、电商等领域大数据场景应用,同时也包括用户画像、精准推荐、用户行为分析、金融风控等场景应用。

  • 持续性服务。腾讯云提供线上技术交流、培训,线下技术沙龙交流平台以及持续性产品/服务支撑。


弹性 MapReduce 是腾讯云构架于云端海量存储、计算基础设施之上的云端 Hadoop 框架,用户可在十分钟获得一个安全、低成本、高可靠、高弹性扩展、架构可持续演进的专属大数据集群。


该产品帮助企业在提升研发效率、运维效率、降低硬件成本的同时,轻松应对 TB、PB 级的海量数据的价值挖掘挑战。

弹性 MapReduce 可以灵活应对多业务场景,包括在线业务、数据仓库、实时流式计算,机器学习,有效支持企业大数据架构可持续演进。


基于云端的 Hadoop 框架产品将有效提升企业对大数据基础设施的快速构建、高效运维及应用的综合性大数据能力。


腾讯云弹性 MapReduce 产品包括四大优势:

  • 10 分钟构建上百节点大数据集群,支持控制台/程序 API 灵活构建。

  • 十分钟节点级横向扩展(数节点扩展至数百节点),十分钟集群级横向扩展(单一集群扩展至数个异构集群)。

  • 百余监控指标覆盖(服务器级、服务级),异常事件秒级触达,Ddos/VPC 安全加固、 Kerberos 节点级服务信任。

  • 云端多源数据支持(云数据库、ES、Ckafka、流计算、Snova 云数仓),云端可视化 BI 工具无缝对接。


在沙龙现场,乔超现场演示了通过腾讯云快速构建云端大数据分析平台,只需要四步,首先勾选 EMR 组件,然后配置集群规格,创建集群,最后快速扩缩容。


最后,乔超介绍了腾讯云弹性 MapReduce 运营实践全方位规划,包括初期规划、集群构建、参数优化、线上运营四个阶段。


在初期规划方面,企业需要进行资源预估,同时腾讯云也会提供建议,然后企业进行机型配置核定,包括机型、核数、内存、磁盘等方面。


在集群构建阶段,通过大数据技术栈,提供从底层基础架构到上层应用全方位的技术能力。


而集群部署模式分为混合部署和独立部署两种,初期阶段可以混合部署,随着业务规模及企业发展,逐步走向独立部署模式。


经过 EMR 团队多年的经验积累,在参数优化这块他们也给出了一些建议,包括通过心跳设置和元数据管理对 HDFS 进行优化,通过 ResourceManager 堆大小、TimeLineServer 和 AMShare 三个方面对 Yarn 进行优化,通过 FetchTask 和计算引擎对 Hive 进行优化等。


腾讯基于 Flink 构建实时流计算平台的技术实践


Flink 是由 Apache 软件基金会开发的开源流处理框架,其核心是用 Java 和 Scala 编写的分布式流数据流引擎。而 Flink 也是大数据处理领域最近冉冉升起的一颗新星。


腾讯高级工程师杨华介绍了腾讯实时流计算技术的演进过程以及对 Apache Flink 所进行的优化与扩展。


Flink 在腾讯的发展要追溯到 2017 年。2017 年上半年,腾讯对 Flink 框架进行调研,包括性能对比测试,评估关键可用性等现网关键指标。


到了 2017 年下半年,腾讯内部进行特性的定制开发与性能优化,相关业务的灰度测试、上线。


2018 年上半年,腾讯打造 Oceanus 实时流计算平台,覆盖公用云、专有云场景,内部业务迁移与试运行。


2018 年下半年,Oceanus 公有云流计算产品正式上线公测,腾讯其他 BG 流计算业务与大数据套件整合。


到了今年上半年,腾讯上线在线机器学习业务、秒级监控等服务,打造场景化的业务支撑能力,支持广告、推荐业务。


虽然腾讯研发 Flink 只有 2 年半的时间,但是目前腾讯的 Flink 支持集群总核数达到 34 万,峰值算力达到每秒 2.1 亿,日均处理消息量 20 万亿,日均消息规模是 PB 级别。


腾讯对 Flink 进行了四方面的优化。由于 Flink 的 Web UI 不利于定位新网的问题,因此在 Flink 1.6 版本时,腾讯对 Web UI 进行重构。


第二,腾讯对 JobManager Failover 进行优化。通过 Standalone 模式和宿主模式,腾讯云对 Queryable state 进行了优化。最后,腾讯对 Increment Window 进行改进,对 Flink 原生窗口进行增强。


Apache Hudi 是今年上半年刚刚加入 Apache 孵化器进行孵化的项目,是 Uber 于 2016 年在内部环境中使用的框架,用于大规模数据集。


通过 Upsert 和 Incremental pull 两种方式,Hudi 可以在 Hadoop 重新分布式文件系统数据集上进行集中。 


Hudi 可以在延迟和成本的维度上,在单个的物理数据集上提供三个不同的逻辑视图:

  • 一是读优化视图,能够指向常规的 Hive 表进行查询。

  • 二是增量视图,能够捕获数据集的变更流供给下游的 Job/ETL,允许增量拉取。

  • 三是准实时视图,在准实时数据上进行查询,同时联合 Apache Parquet(列) & Avro(行)的数据。而 Flink 和 Hudi 进行整合,可以提升分析过程的效率。


腾讯实时计算团队对社区版的 Flink 进行了深度的优化,并在此之上构建了一个集开发、测试、部署和运维于一体的一站式可视化实时计算平台——Oceanus。


腾讯云流计算 Oceanus 是位于云端的流式数据汇聚和计算服务,用户只需几分钟就可轻松构建流计算应用,而无须关注基础设施的运维,并能便捷对接丰富的云上数据源。


它可以帮助企业构建多样化的流式数据处理能力,轻松应对海量数据实时处理和分析决策的挑战。

Oceanus 平台整体架构


Oceanus 平台特点:

  • 实时计算

  • 完全托管

  • 超高弹性,支持弹性扩缩容

  • 简易 SQL 模式

  • 支持 UDX/自定义程序,方便大家去简化开发逻辑的成本

  • 丰富的云端生态,提供一些生态的产品,包括数据采集等服务


Oceanus 拥有丰富的流计算应用场景,有效支持企业的实时计算需要和提升决策分析水平。


典型的应用场景包括:

  • 点击流分析,可以分析用户在 Oceanus 进行操作的行为,通过后台相应分析为商业决策或者广告投放提供支撑

  • 金融实时风控,欺诈的行为监测;

  • 物联网 IoT 监控

  • 电商精准推荐。


Oceanus 覆盖作业的生命周期,包括开发、测试、部署、运维,用户只需要关注它的应用逻辑的实践。


目前,Oceanus 应用建构方式包括三种模式:

  • 画布的形式来构建应用,腾讯将 Flink 做成相应的组件放在 Oceanus 的平台上,用户在使用的时候只需要在具体的算力进行相应的编排即可。

  • 标准 SQL 的方式,支持 SQL 语法可以快速高效的创建应用。

  • 支持 Datastream API 和 dataset API,可高度定制特殊的业务逻辑。


最后,杨华介绍了 Oceanus 应用提交步骤,首先让用户配置相应的元数据,包括消费信息、数据格式,然后创建 DAG,最后再经过编译提交。


通过半天的沙龙活动,到场的用户纷纷表示收获满满,不但对大数据相关技术有了深入的了解,还对腾讯云在大数据方面所做的支持和优化给予了肯定,期待未来更多的技术内容分享。


云+社区技术沙龙是腾讯云官方开发者社区举办的沙龙活动,希望通过分享技术让更多开发者学习和交流,成为腾讯云连接开发者的平台,共同打造技术影响力。

    已同步到看一看

    发送中

    本站仅按申请收录文章,版权归原作者所有
    如若侵权,请联系本站删除
    觉得不错,分享给更多人看到