Hadoop 大数据系统在文件存储 HDFS 版上的最佳实践

在当前的数字经济时代,数据被列为跟土地,资本等并列的新生产要素,数据的存储和处理被众多行业所深度依赖。Hadoop经过多年的发展,已经成为了事实上的开源大数据标准解决方案,被众多公司采纳和使用;而且随着技术的不断迭代更新,Hadoop生态也已经从最初狭义的HDFS,MapReduce和YARN三大服务组件,逐渐发展出了Spark,Flink等新的处理框架,成长为功能更加完善和丰富的广义Hadoop生态。同时以阿里云和AWS为代表的的云服务平台,也提供了支持广义Hadoop生态系统的编排产品EMR,进一步推动了大数据生态的发展。

虽然Hadoop生态中的计算框架不断演进,但都继续选择HDFS作为底层的分布式存储系统,HDFS也因此成长为开源大数据场景的统一分布式存储系统,是自建大数据存储的首选系统:


Hadoop 大数据系统在文件存储 HDFS  版上的最佳实践


随着大数据领域的深入发展,在HDFS之上直接生长着丰富的基础计算引擎,KV存储引擎,多种OLAP引擎,以及不同领域的机器学习引擎;另外还有多种数据导入系统,方便不同来源的数据进入HDFS:负责结构化数据导入的Sqoop,负责日志数据导入的Flume,负责消息数据导入的Kafka。这些引擎和系统在数据处理的不同阶段发挥各自的特有的作用,HDFS作为统一的中转站来存储和交换数据,共同来完成数据全生命周期的处理。


HDFS经过多年的发展已经相对成熟,但由于分布式存储系统自身的复杂性,在应对日渐重要且复杂的大数据处理需求的时候,自建HDFS集群面临诸多痛点:

  1. 成本高
    1. 硬件成本高
      1. 集群起建成本高:为了保证数据安全性,即使初始需要较少的存储空间,HDFS集群也需要保证3台机器以上的规模。
      2. 单次扩容步长大:每次都需要以整物理机的粒度进行扩容,新增存储需求很小的情况下也不例外。
      3. 容量下降后无法自动缩容:为了应对容量峰值扩容的机器,在容量下降后也无法自动缩容。
    1. 存算分离难,存储和计算资源必须同步扩容
      1. 链接和线程是Stream独占,难以支撑存算分离后的高并发
      2. Shuffle数据依赖本地存储,存储和计算无法完全分离
  1. 运维难
    1. 运维复杂
      1. 硬件运维:需要解决硬件机型设计,预算采购,集群扩缩容,硬件故障,机器过保等诸多问题。
      2. 软件运维:需要面对访问失败/访问慢,社区版本引入与测试,软件版本线上升级等软件难题。
    1. 运维人才要求高:系统复杂度高,需要专业的运维人才。
    2. 稳定性难以保证:没有SLA保障,复杂的开源存储系统对监控报警和故障响应要求高,容易导致故障。
  1. 性能差
    1. 隔离性差:多业务公用集群的情况下无法做到性能隔离,相互干扰影响性能。
    2. 延迟高:软件栈复杂,难以发挥高速介质 US级别的延迟优势,延迟敏感性业务难以落地。
    3. 无异步接口:没有异步接口,存储访问并发度受限于线程资源,难以提升。


考虑到HDFS在大数据领域的发展现状,阿里云的文件存储HDFS版提供了一个云上统一的大数据存储方案:既能够兼容HDFS,保证原有的大数据处理系统可以无缝迁移,继续正常运转;同时又能够解决掉自建HDFS的痛点,上层业务更专注于大数据处理系统本身的演进,更好的解决业务问题。


为了方便Hadoop生态系统平滑的迁移到文件存储HDFS版,会陆续推出常用的大数据系统在文件存储HDFS版的最佳实践。

  • 在文件存储HDFS版上使用 Apache Spark
  • 文件存储HDFS版和对象存储OSS双向数据迁移
  • 在文件存储HDFS版上使用 Apache Flink
  • 在文件存储HDFS版上使用 Apache HBase
  • 在文件存储HDFS版上使用 Presto
  • 在文件存储HDFS版上使用 Apache Tez
  • 使用 Fuse-DFS 挂载文件存储HDFS版
  • 文件存储HDFS版和数据库MySQL双向数据迁移
  • 迁移开源HDFS数据到文件存储HDFS版
  • 在文件存储HDFS版上使用 CDH6
  • 在文件存储HDFS版上使用 TensorFlow

  • 了解更多关于文件存储HDFS版的产品信息,欢迎访问https://www.aliyun.com/product/alidfs

    如果您对文件存储HDFS版有任何问题,欢迎钉钉扫描以下二维码加入文件存储HDFS版技术交流群。

    Hadoop 大数据系统在文件存储 HDFS  版上的最佳实践

    上一篇:文件存储HDFS版和对象存储OSS双向数据迁移


    下一篇:C# 面试题解析-请遍历页面上所有的TextBox控件并给它赋值为string.Empty