之前我们提到大数据的时候就会提到HadoopHadoop是大数据的基础框架,是大数据技术的代表。提到HDFSMapReduceYarn,提到HBaseHiveTEZHadoop生态圈中的一个又一个开源组件。但是最近好像有点不一样了。

Hadoop三巨头

曾经的三巨头之一MapR向加州就业发展局提交文件,称如果找不到新的投资人,公司将裁员 122 人,并关闭位于硅谷的总部公司。这曾经可是估值10亿美元的Hadoop发行版厂商啊,说跪就要跪了,而另外两巨头则是抱团取暖,当然这也不能完全说明Hadoop面临着一些问题。

2003年,依据Google发表的三篇论文将Google的三驾马车从幕后搬到台前,奠定了后面十几年大数据的框架基础,形成了Hadoop生态圈的第一圈:分布式文件系统HDFS、分布式计算MapReduceHBase NoSQL数据库(BigTable)和Yarn资源调度服务。一时之间如日中天,Hadoop生态蓬勃发展,HortonworksClouderaMapR一直在进行技术更新,开发了一款又一款的基于Hadoop的工具。Hive的出现实现了类SQL的支持,迅速占领了市场,后面基于SQL On Hadoop的组件更是层出不穷,PrestoImpalaDrillSparkTezSqoop等等。Hadoop的生态圈越来越大,后面兴起的新型计算框架和查询框架都围绕着Hadoop进行兼容,如Presto兼容HiveSpark兼容HDFS存储和Yarn调度,一切看起来都是美好的样子。

但是,从之前的Hadoop是大数据的基础框架到现在Hadoop已经不能完全代表大数据了,Hadoop只是大数据技术领域的一个分支,而其他分支正在努力的演化为新的大数据实现方式。

大数据技术栈

大数据的技术栈我们通常认为分为:资源调度层、分布式存储层、统一计算引擎层和统一接口层。

  • 资源调度层:为了更好的对资源进行管理,解决上层应用的问题,现在出现了很多新的技术,很多企业都开始利用容器编排技术来代替YARN进行资源管理。当然,Hadoop3之后Yarn也支持调度Docker应用了,算是Hadoop的一个改进。
  • 分布式存储层:诚然HDFS是一个较为通用的存储服务,但是它原生的痛点就是不支持小文件存储,而且由于存储特性无法实现高性能的随机读写。
  • 统一计算引擎:现在MapReduce已经基本要被SparkFlink所取代了,当然SparkFlink也算Hadoop生态中的一员,但是不要忘了,当Spark底层存储基于S3,调度基于K8S就可以完全抛开Hadoop了。毕竟谁还不是一个通用性的产品呢~
  • 统一接口层:通过统一的SQL接口层来降低大数据技术的使用门槛是我们的共识,目前SQL on Hadoop技术也在蓬勃发展,SQL的支持度也在不断的提升,但是如果不依赖HDFS存储可就不见得SQL On Hadoop了。

上面说了这么多也不是在唱衰Hadoop,只是Hadoop目前看来确实好像遇到了瓶颈。但是Hadoop3也增加了大量的功能,Yarn支持Docker容器、支持TensorFlowGPU调度,提供了对S3的支持。HiveLLAP(低延时分析处理)、联邦数据查询和完全支持ACID事务也让Hive朝着更好的方向发展。不得不说现在所有的技术都在朝着云原生的方向前进,如果不能成功上云,可能终将被遗忘。

云原生下开源的YuniKorn

HortonworksCloudera的合并可能是Hadoop发展的又一转折点,毕竟合并的战略目标是专注于云。就在昨天,19年7月17日,Cloudera 官方博客发文开源了一个幕后工作很久的大数据存储和通用计算平台交叉的新项目——YuniKorn。据介绍,YuniKorn 是一种轻量级的通用资源调度程序,适用于容器编排系统,负责为大数据工作负载分配 / 管理资源,包括批处理作业和常驻运行的服务。有兴趣的可以关注一下Github地址:https://github.com/cloudera/yunikorn-core

YuniKorn[‘ju:nikɔ:n] 是一个虚构的词,“Y”代表 YARN,“K”代表 K8s,“Uni”代表统一,其发音与“Unicorn”相同。创建它是为了最初支持这两个系统,但最终目的是创建一个可以支持任何容器协调器系统的统一调度程序。一方面在大规模,多租户环境中有效地实现各种工作负载的细粒度资源共享,另一方面可以动态地创建云原生环境。YuniKorn 为混合工作负载提供统一的跨平台调度体验,包括无状态批处理工作负载和状态服务,支持但不限于 YARNKubernetes

YuniKorn 的主要模块

 

 

YuniKorn -scheduler-interface:调度程序接口是资源管理平台(如 YARN / K8s)将通过诸如 GRPC / 编程语言绑定之类的 API 与之交谈的抽象层。

YuniKorn CoreYuniKorn Core 封装了所有调度算法,它从资源管理平台(如 YARN / K8s)下面收集资源,并负责资源分配请求。它决定每个请求的最佳部署位置,然后将响应分配发送到资源管理平台。调度程序核心与下层平台无关,所有通信都通过调度程序接口。

Scheduler Shim Layers:调度程序 Shim 在主机系统内运行(如 YARN / K8s),它负责通过调度程序接口转换主机系统资源和资源请求,并将它们发送到调度程序核心。在做出调度程序决策时,它负责实际的 pod / 容器绑定。

Scheduler UI:调度程序 UI 为已托管的节点,计算资源,应用程序和队列提供简单视图。

YuniKorn 的一些特性

  • 调度功能支持批处理作业和长期运行 / 有状态服务
  • 具有最小 / 最大资源配额的分层池 / 队列
  • 队列,用户和应用程序之间的资源公平性
  • 基于公平性的跨队列抢占
  • 自定义资源类型(如 GPU)调度支持
  • 丰富的编排约束支持
  • 根据策略自动将传入的容器请求映射到队列
  • 对节点使用专用配额 / ACL 管理将大的集群拆分成若干子群集
  • 支持 K8s 谓词。如 pod 亲和 / 反亲和,节点选择器
  • 支持持久化存储,配额申请等
  • configmap 动态加载调度程序配置(热刷新)
  • 可以在 Kubernetes 之上部署
  • YuniKorn Web 支持监视调度程序队列,资源使用,应用程序等

我们不止一次听说过XX不是银弹,没有一种技术可以解决所有的问题,技术一直在发展。哪怕是在Hadoop生态圈内,随着实时数据的处理能力提高,构建实时数仓,打造实时数据处理与计算平台已经比离线任务模式要吃香了。上云总归来说是一个大的趋势,对于大小公司都是如此,毕竟可以节省非常多的成本。但是也不排除云+本地的混合模式,毕竟数据现在可是金子~。不管怎么说,一直受HortonworksCloudera的影响推动着Hadoop相关组件的进步,基于他们的技术栈学到了很多招式,希望他们可以更好的走下去。

参考资料:

被“围攻”的 Hadoop 没有对手

2019 年,Hadoop 还是数据处理的可选方案吗?

Cloudera 开源新项目:轻量级通用资源调度程序 YuniKorn

欢迎关注我:叁金大数据

Hadoop现在怎么样了?的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. 初识Hadoop、Hive

    2016.10.13 20:28 很久没有写随笔了,自打小宝出生后就没有写过新的文章.数次来到博客园,想开始新的学习历程,总是被各种琐事中断.一方面确实是最近的项目工作比较忙,各个集群频繁地上线加多版 ...

  3. hadoop 2.7.3本地环境运行官方wordcount-基于HDFS

    接上篇<hadoop 2.7.3本地环境运行官方wordcount>.继续在本地模式下测试,本次使用hdfs. 2 本地模式使用fs计数wodcount 上面是直接使用的是linux的文件 ...

  4. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  5. 【Big Data】HADOOP集群的配置(一)

    Hadoop集群的配置(一) 摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得.以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问 ...

  6. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  7. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

  8. Hadoop 2.x 生态系统及技术架构图

    一.负责收集数据的工具:Sqoop(关系型数据导入Hadoop)Flume(日志数据导入Hadoop,支持数据源广泛)Kafka(支持数据源有限,但吞吐大) 二.负责存储数据的工具:HBaseMong ...

  9. Hadoop的安装与设置(1)

    在Ubuntu下安装与设置Hadoop的主要过程. 1. 创建Hadoop用户 创建一个用户,用户名为hadoop,在home下创建该用户的主目录,就不详细介绍了. 2. 安装Java环境 下载Lin ...

  10. 基于Ubuntu Hadoop的群集搭建Hive

    Hive是Hadoop生态中的一个重要组成部分,主要用于数据仓库.前面的文章中我们已经搭建好了Hadoop的群集,下面我们在这个群集上再搭建Hive的群集. 1.安装MySQL 1.1安装MySQL ...

随机推荐

  1. 【转】编程之道 之 Rob Pike

    1.你无法断定程序会在什么地方耗费运行时间.瓶颈经常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在. 2.估量.在你没对代码进行估量,特别是没找到最耗时的那部分之前, ...

  2. 零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)

    原文:零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下) 你可以把Clip想成是一个遮罩,运用遮罩达到我们想要的效果 所以在这里我们把文字 ...

  3. 实现js与Qt程序的交互(使用QtWebkit)

    在QtWebkit的javascript里访问QObject的最关键的关键就是下面这个方法: void QWebFrame::addToJavaScriptWindowObject ( const Q ...

  4. flask相关使用

    一.手动创建一个干净的含有蓝图的flask项目目录 在init.py中 from flask  import Flask​my_app=Flask(__name__)​def create_app() ...

  5. element-ui源码之组件通信那些事

    最近在用element-ui重构前端项目,无意之中翻阅到一个比较好用的组件间通信方式,借助于vue的封装的发布-订阅消息模式与mixin语法.在开始之前先总结下vue常用的组件间通信方式,具体如下: ...

  6. HDFS Java API 的基本使用

    一. 简介 二.API的使用         2.1 FileSystem         2.2 创建目录         2.3 创建指定权限的目录         2.4 创建文件,并写入内容 ...

  7. 【React】react学习笔记01-概念与基本使用

      俺为啥要学这玩意:   家里的杂事好不容易处理完了,开始正式静下心来学习~博主是做后端开发的,js基础不深,之前也是用React写过许多东西了,但是基本上都是用的CV大法,别人的组 件修修改改拿来 ...

  8. 使用事件注册器进行swoole代码封装

    在使用swoole的时候,事件回调很难维护与编写,写起来很乱.特别在封装一些代码的时候,使用这种注册,先注册用户自己定义的,然后注册些默认的事件函数. Server.php class Server ...

  9. 【翻译】Keras.NET简介 - 高级神经网络API in C#

    Keras.NET是一个高级神经网络API,它使用C#编写,并带有Python绑定,可以在Tensorflow.CNTK或Theano上运行.其关注点是实现快速实验.因为做好研究的关键是:能在尽可能短 ...

  10. JS处理时间戳、前台拿到日期时间戳,时间戳转日期格式

    今晚做分页的时候,遇到后台往前台传日期类型,会出现这种情况,好像是微软为了解决操作系统兼容性问题,将日期全部转换为从1970年1月1日至现在时间的时间戳.为了解决这个问题,特意百度了一番,整理了处理日 ...