作者:孙大鹏,花名诚历,阿里巴巴计算平台事业部 EMR 技术专家,Apache Sentry PMC,Apache Commons Committer,目前从事开源大数据存储和优化方面的工作。

为什么要构建数据湖

大数据时代早期,Apache HDFS 是构建具有海量存储能力数据仓库的首选方案。随着云计算、大数据、AI 等技术的发展,所有云厂商都在不断完善自家的对象存储,来更好地适配 Apache Hadoop/Spark 大数据以及各种 AI 生态。由于对象存储有海量、安全、低成本、高可靠、易集成等优势,各种 IoT 设备、网站数据都把各种形式的原始文件存储在对象存储上,利用对象存储增强和拓展大数据 AI 也成为了业界共识,Apache Hadoop 社区也推出了原生的对象存储“Ozone”。从 HDFS 到对象存储,从数据仓库到数据湖,把所有的数据都放在一个统一的存储中,也可以更加高效地进行分析和处理。

对于云上的客户来说,如何构建自己的数据湖,早期的技术选型非常重要,随着数据量的不断增加,后续进行架构升级和数据迁移的成本也会增加。在云上使用 HDFS 构建大规模存储系统,已经暴露出来不少问题。HDFS 是 Hadoop 原生的存储系统,经过 10 年来的发展,HDFS 已经成为大数据生态的存储标准,但我们也看到 HDFS 虽然不断优化,但是 NameNode 单点瓶颈,JVM 瓶颈仍然影响着集群的扩展,从 1 PB到 100+ PB,需要不断的进行调优、集群拆分来,HDFS 可以支持到 EB 级别,但是投入很高的运维成本,来解决慢启动,心跳风暴,节点扩容、节点迁移,数据平衡等问题。

云原生的大数据存储方案,基于阿里云 OSS 构建数据湖是最合适的选择。OSS 是阿里云上的对象存储服务,有着高性能、无限容量、高安全、高可用、低成本等优势,JindoFS 针对大数据生态对 OSS 进行了适配,缓存加速,甚至提供专门的文件元数据服务,满足上云客户的各种分析计算需求。因此在阿里云上,JindoFS + OSS 成为客户采取数据湖架构迁移上云的最佳实践。

JindoFS 介绍

Jindo 是阿里云基于 Apache Spark / Apache Hadoop 在云上定制的分布式计算和存储引擎。Jindo 原是阿里云 开源大数据团队的内部研发代号,取自筋斗(云)的谐音,Jindo 在开源基础上做了大量优化和扩展,深度集成和连接了众多阿里云基础服务。

JindoFS 是阿里云针对云上存储自研的大数据缓存加速服务,JindoFS 的设计理念是云原生:弹性、高效、稳定和低成本。JindoFS 完全兼容 Hadoop 文件系统接口,给客户带来更加灵活、高效的数据湖加速方案,完全兼容阿里云 EMR 中所有的计算服务和引擎:Spark、Flink、Hive、MapReduce、Presto、Impala 等。JindoFS 有两种使用模式,块存储模式(BLOCK)和缓存模式(CACHE)。下面我们介绍下如何在 EMR 中配置和使用 JindoFS 以及不同模式对应的场景。

JindoFS 架构

JindoFS 主要包含两个服务组件:元数据服务(NamespaceService) 和存储服务 (StorageService):

  • NamespaceService 主要负责元数据管理以及管理 StorageService。

  • StorageService 主要负责管理节点的本地数据和 OSS 上的缓存数据。

下图是 JindoFS 架构图:元数据服务 NamespaceService 部署在独立的节点,对于生产环境推荐部署三台(Raft)来实现服务高可用;存储服务 StorageService 部署在集群的计算节点,管理节点上的闲置存储资源(本地盘/SSD/内存等),为JindoFS 提供分布式缓存能力。

JindoFS 元数据服务

JindoFS 的元数据服务叫 JindoNamespaceService,内部基于 K-V 结构存储元数据,相对于传统的内存结构有着操作高效,易管理,易恢复等优势。

  • 高效元数据操作。JindoFS NamespaceService 基于内存 + 磁盘管理和存储元数据,但是性能上比使用内存的 HDFS NameNode 还要好,一方面是 JindoFS 使用 C++ 开发,没有 GC 等问题,响应更快;另一方面是由于 Namespace Service 内部有更好的设计,比如文件元数据上更细粒度的锁,更高效的数据块副本管理机制。

  • 秒级启动。有大规模 HDFS 集群维护经验的同学比较清楚,当 HDFS 元数据存储量过亿以后,NameNode 启动初始化要先加载 Fsimage ,再合并 edit log,然后等待全部 DataNode 上报 Block,这一系列流程完成要花费一个小时甚至更长的时间, 由于 NameNode 是双机高可用(Active/Standby),如果 standby 节点重启时 active 节点出现异常 ,或两台 NameNode 节点同时出现故障,HDFS 将出现停服一小时以上的损失。JindoFS 的元数据服务基于 Raft 实现高可用,支持 2N+1 的部署方式,允许同时挂掉 N 台;元数据服务 (NamespaceService) 在元数据内部存储上进行了设计和优化,进程启动后即可提供服务,可以做到了快速响应。由于 NamespaceService 近实时写入 OTS 的特点,元数据节点更换,甚至集群整体迁移也非常容易。

  • 低资源消耗。HDFS NameNode 采用内存形式来存储文件元数据。在一定规模下,这种做法性能上是比较不错的,但是这样的做法也使 HDFS 元数据的规模受限于节点的内存,经过推算,1亿文件 HDFS 文件大约需要分配 60 GB Java Heap 给 NameNode,所以一台 256 GB的机器最多可以管理 4 亿左右的元数据,同时还需要不断调优 JVM GC。JindoFS 的元数据采用 Rocksdb 存储元数据,可以轻松支持到 10 亿规模,对于节点的内存需求也非常小,资源开销不到 NameNode 的十分之一。

JindoFS 缓存服务

JindoFS 的数据缓存服务叫 JindoStorageService,本地 StorageService 主要提供高性能缓存加速,所以运维上可以基于这样的设定大大简化。

  • 弹性运维。HDFS 使用 DataNode 在存储节点上来管理节点存储,全部数据块都存储在节点的磁盘上,依靠 DataNode 定期检查和心跳把存储状态上报给 NameNode,NameNode 通过汇总和计算,动态地保证文件的数据块达到设定的副本数(一般 3 副本)。对于大规模集群(节点 1000+),经常需要进行集群节点扩容,节点迁移,节点下线,节点数据平衡这样的操作,大量的数据块的副本计算增加了 NameNode 负载,同时,节点相关操作要等待 NameNode 内部的副本调度完成才能进行,通常一个存储节点的下线需要小时级别的等待才能完成。JindoFS 使用 StorageService 来管理节点上的存储,由于 JindoFS 保证了数据在 OSS 上有一副本,所以本地的副本主要用来进行缓存加速。对于节点迁移、节点下线等场景,JindoFS 无需复杂副本计算,通过快速的“标记”即可完成下线。

  • 高性能存储。StorageService 采用 C++ 语言开发,在对接最新高性能存储硬件上也有着天然优势。StorageService 的存储后端不仅可以同时对接SSD、本磁盘、OSS 满足 Hadoop/Spark 大数据框架各种海量、高性能的存储访问需求,可以对接内存、AEP 这样的高性能设备满足 AI/机器学习的低延时、高吞吐的存储使用需求。

JindoFS 适用场景

JindoFS 的元数据存储在 Master 节点的 NamespaceService (高可用部署)上,性能和体验上对标 HDFS;Core节点的 StorageService 将一份数据块存储在 OSS 上,本地数据块可以随着节点资源进行快速的弹性伸缩。多集群之间也可以相互打通。

为了支持数据湖多种使用场景,一套 JindoFS 部署同时提供两种 OSS 使用方式,存储模式(Block)和缓存模式(Cache)。

  • 缓存模式。对于已经存在于 OSS 上的数据,可以使用缓存模式访问,正如“缓存”本身的含义,通过缓存的方式,在本地集群基于 JindoFS 的存储能力构建了一个分布式缓存服务,把远端数据缓存在本地集群,使远端数据“本地化”。使用上也沿用原来的路径访问,如 oss://bucket1/file1 ,这种模式全量的文件都在 OSS 上面,可以做到集群级别的弹性使用。

  • 存储模式。存储模式(Block)适用于高性能数据处理场景,元数据存储在 NamespaceService (支持高可用部署)上,性能和体验上对标 HDFS;StorageService 将一份数据块存储在 OSS 上,本地数据块可以随着节点资源可以进行快速的弹性伸缩。基于 JindoFS Block 模式这样的特性,可以用作构建高性能数仓的核心存储,多个计算集群可以访问 JindoFS 主集群的数据。

JindoFS 方案优势

基于JindoFS + OSS 来构建数据湖相比于其他数据湖方案同时具有性能和成本优势。

  • 性能上,JindoFS 针对一些常用的场景和 Benchmark 进行了对比测试,如 DFSIO、NNbench、TPCDS、Spark、Presto 等,通过测试我们可以看到性能上,Block模式完全领先于 HDFS,Cache模式完全领先于 Hadoop 社区的 OSS SDK 实现,由于篇幅的原因,后续我们会发布详细的测试报告。

  • 成本上。成本是也是用户上云的重要考量,JindoFS 的成本优势主要体现在运维成本和存储成本两方面。运维成本指的是集群日常维护,节点上下线、迁移等。如前面分析,当 HDFS 集群增长到一定规模时,比如 10PB+,除了对 HDFS 进行专家级别调优外,还需要业务上的拆分规划,避免达到 HDFS 元数据上的瓶颈。同时,随着集群数据不断增长,一些节点和磁盘也会出现故障,需要进行节点下线和数据平衡,也给大集群的运维带来一定的复杂度。JindoFS 可以使用 OSS + OTS 的存储模式,OSS 上保留原始文件和数据块备份,对节点和磁盘出现的问题可以更好兼容;元数据(NamespaceService)采用 C++ 开发加上工程打磨,相比 NameNode + JVM 在容量上和性能上也更有优势。

下面我们重点来看存储成本。存储成本指的是存放数据后产生的存储费用,使用 OSS 是按量付费的,相比基于本地盘创建的 HDFS 集群有更好的成本优势,下面来计算和对比一下二者成本:

基于 HDFS + 本地盘方案构建大数据存储:

由于本地盘机型为整体价格,需要如下进行换算,预估存储成本如下:

(参考链接:https://www.aliyun.com/price/product#/ecs/detail )

考虑到实际使用 HDFS 会有3副本以及一定的预留空间,我们以 HDFS 3 副本、 80% 使用率进行成本计算:

基于 JindoFS 加速方案构建数据湖:

     OSS 数据存储(标准型单价)=  0.12元/GB/每月

(参考链接:https://www.aliyun.com/price/product#/oss/detail )

我们可以看到使用 JindoFS 加速方案构建数据湖,要节省 25% 的存储成本。同时 OSS 是按量计费,即计算存储分离,当计算和存储比例存在差异时,比如存储资源高速增长,计算资源增加较小时,成本优势会更加明显。

对 OSS 数据进行缓存加速,需要额外使用计算节点上部分磁盘空间,带来一定成本。这部分成本,一般取决于热数据或者要缓存数据的大小,跟要存储的数据总量关系不大。增加这部分成本,可以换取计算效率的提升和计算资源的节省,整体效果可以根据实际场景进行评估。

JindoFS 生态

数据湖是开放的,需要对接各种计算引擎。目前 JindoFS 已经明确支持 Spark、Flink、Hive、MapReduce、Presto 和 Impala 组件。同时,JindoFS 为了支持更好地使用数据湖,还提供 JindoTable 对结构化数据进行优化和查询加速;提供 JindoDistCp 来支持 HDFS 离线数据往 OSS 迁移;支持 JindoFuse 方便数据湖上加速机器学习训练。


更多数据湖技术相关的文章请点击:阿里云重磅发布云原生数据湖体系

2020云栖大会数据湖技术专场:

https://yunqi.aliyun.com/2020/session137


数据湖构建·Data Lake Formation是阿里巴巴数据湖团队带来的最新一站式入湖解决方案,了解更多信息请加入产品钉钉交流群

hdfs 数据迁移_基于JindoFS+OSS构建高效数据湖相关推荐

  1. hdfs 数据迁移_基于 JindoFS+OSS 构建高效数据湖

    为什么要构建数据湖 大数据时代早期,Apache HDFS 是构建具有海量存储能力数据仓库的首选方案.随着云计算.大数据.AI 等技术的发展,所有云厂商都在不断完善自家的对象存储,来更好地适配 Apa ...

  2. 基于JindoFS+OSS构建高效数据湖

    为什么要构建数据湖 大数据时代早期,Apache HDFS 是构建具有海量存储能力数据仓库的首选方案.随着云计算.大数据.AI 等技术的发展,所有云厂商都在不断完善自家的对象存储,来更好地适配 Apa ...

  3. mysql 分片 数据迁移_简述MySQL分片中快速数据迁移_MySQL

    推荐阅读:MySQL 数据库跨操作系统的最快迁移方法 mysql 备份与迁移 数据同步方法 操作实践背景: travelrecord表定义为10个分片,尝试将10个分片中的2个分片转移到第二台MySQ ...

  4. 千万数据去重_基于 Flink 的百亿数据去重实践

    在工作中经常会遇到去重的场景,例如基于 App 的用户行为日志分析系统,用户的行为日志从手机客户端上报到 Nginx 服务端,通过 Logstash.Flume 或其他工具将日志从 Nginx 写入到 ...

  5. python大数据平台_基于腾讯位置大数据平台的全球移动定位数据Python爬取与清洗...

    前不久投稿了一篇论文是以腾讯位置大数据为基础进行人口空间化研究的,但是还未见刊,见刊后会给大家分享下具体的研究方法. 首先打开腾讯位置大数据星云图链接:https://xingyun.map.qq.c ...

  6. mysql 轨迹数据存储_基于Tablestore实现海量运动轨迹数据存储-阿里云开发者社区...

    前言 现在越来越多的人都开始关心自己的运动数据,比如每日的计步.跑步里程.骑行里程等.运动APP与运动类的穿戴设备借助传感器.地图.GPS定位等技术,收集好运动数据以后,通过与互联网社交功能结合,产生 ...

  7. python收集数据程序_基于Python语言的互联网数据收集软件的设计

    软件建立所需的工具及其版本 编写环境与 IDE Python3.5.2 Windows10 PyCharm 2016.3 Sublime Text3 第三方库与版本号 Requests 2.12.1 ...

  8. mysql 轨迹数据存储_基于Tablestore实现海量运动轨迹数据存储

    前言 现在越来越多的人都开始关心自己的运动数据,比如每日的计步.跑步里程.骑行里程等.运动APP与运动类的穿戴设备借助传感器.地图.GPS定位等技术,收集好运动数据以后,通过与互联网社交功能结合,产生 ...

  9. 在线数据迁移,数字化时代的必修课——京东云数据迁移实践

    打破数据边界,是数字化时代常挂在嘴边的一句话,数据的价值是在流动中体现的,数据应用也是如此.以往为了满足开发.测试.数据保护容灾和数据分析的需要,我们不断对数据进行复制.备份.迁移,因此数据迁移非常重 ...

最新文章

  1. oracle numtodsinterval and numtoyminterval 使用法则
  2. 算法 【第九章】动态规划问题
  3. 【原创】Android VMP加壳 POC
  4. 透视惠普“返修机事件”
  5. Equipment delta download debug from ERP side
  6. google浏览器记住密码自动添加input框背景色问题
  7. 普拉提瑜伽工作室行业调研报告 - 市场现状分析与发展前景预测
  8. JavaScript async/await理解
  9. 基于分类分级的医疗临床数据合规共享与安全防护建设实践
  10. CVPR2021 | 记录SCRFD人脸检测C++工程化(含docker镜像)
  11. 抖音作品实时监控采集数据,抖音达人下关键词数据抓取
  12. 卸载linux 装win7系统软件,win7与ubuntu双系统完美卸载ubuntu的方法
  13. [SHOI2008]小约翰的游戏 题解
  14. Java(9)接口练习 运动员和教练
  15. 游戏+区块链的进化三段论:从投机增值到生态意识
  16. 二本 计算机专业2017分数线,2017全国大学二本录取分数线一键查询软件
  17. 极光小课堂 | 极光推送之 Android 客户端使用指南——基础篇
  18. 鸣志驱动器与研华工控机RS485/422 com串口接线方法
  19. Android中am命令用法
  20. 最小二乘法原理、推导和运用

热门文章

  1. MyEclipse 10 中安装Android ADT 22插件的方法
  2. 在Android中取得当前进程名
  3. 1.1.3 以类为单位的编程思想
  4. nginx只允许域名访问,禁止ip访问
  5. SSH远程访问及控制
  6. Windows环境下的NodeJS+NPM+Bower安装配置
  7. vijos 1030 重叠的方框
  8. 鸿蒙2.0 安卓,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
  9. c++ gdi修改dpi_最新高血压标准修改,包括确诊标准和用药方案!你的药吃对了吗?...
  10. 每列大于0的个数_二进制中1的个数(剑指offer第十四天)