这位大侠,这是我的公众号:程序员江湖。 
分享程序员面试与技术的那些事。 干货满满,关注就送。 

3.2  容器开源软件:Kubernetes/Mesos / Docker

Docker技术的出现和迅猛发展,已成为云计算产业的新的热点。容器使用范围也由互联网厂商快速向传统企业扩展,大量传统企业开始测试和尝试部署容器云。相比于企业对容器技术的逐步接受与认同,在如何使用容器上却并不统一,存在多种思路和诉求。容器技术开发者和社区倡导云原生应用场景,这一理念被业界普遍所认可,但在实际使用中发生分化。部分企业基于容器技术,尝试新应用开发和对传统应用进行改造;更多的企业在实际使用中,面临应用改造困难和人员技能变更,认为不可一蹴而就,希望先以轻量级虚拟机的方式使用容器。容器的下述技术特点,决定了容器所能发挥真正价值的应用场景。

 

" 轻量化:容器相比于虚拟机提供了更小的镜像,更快的部署速度。容器轻量化特性非常适合需要批量快速上线应用,或需要快速规模弹缩应用,如互联网web应用。

" 性能高、资源省:相比虚拟化,接近物理机的性能,系统开销大幅降低,资源利用率高。容器的高性能特性非常适合对计算资源要求较高的应用,如大数据和高性能计算应用。

" 跨平台:容器技术实现了OS解耦,应用一次打包,可到处运行。容器的跨平台能力,非常适合作为DevOps的下层封装平台,实现应用的CI/CD流水线;容器应用可跨异构环境在不同云平台、公有云和私有云上部署,也非常适合作为混合云的平台。

" 细粒度:容器本身的轻和小,非常匹配细粒度服务对资源的诉求,与微服务化技术的发展相辅相成,可作为分布式微服务应用的最佳载体。企业关注下一代内部IT架构变革,希望将服务作为IT核心,提升业务敏捷性,大幅降低TCO。容器成为企业应用转型很好的承载平台,针对企业的业务痛点,使用上述一种或多种特点,优化业务场景。业界当前主要有三种容器集群资源管理调度和应用编排的不同选择。

" Mesos生态:核心组件包括Mesos容器集群资源管理调度以及不同的应用管理框架。典型的应用管理框架包括Marathon和Chronos,其中Marathon用来管理长期运行服务,如Web服务;Chronos用来管理批量任务。Mesos生态主要由Mesosphere、Twitter等公司主力推动。

" Kubernetes生态:Google公司发起的社区项目,涵盖容器集群资源管理调度,以及不同类型应用的应用管理组件。例如副本可靠性管理,服务发现和负载均衡,灰度升级,配置管理等组件。

" Docker生态:Docker公司希望向容器生态系统上层发展,推出了Swarm容器资源管理调度组件,以及Compose应用编排组件。

 

 

 

 

 

 

 

 

四、Hadoop最新进展

1. HDFSHDFS发展相对比较迅速,目前已得到广泛应用。但随着业务的发展,用户对于HDFS产生了许多新的需求。目前开源社区已根据这些需求提供许多新特性,如SnapShot、Inotify等。

(1) SnapShotHadoop

从2.1.0版开始提供了HDFS SnapShot的功能。一个SnapShot可以是某个被设置为snapshottable的目录在某一时刻的镜像。一个snapshottable目录可以同时容纳65536个快照。snapshottable目录没有个数上限,管理员可以设置任意个snapshottable。如果一个snapshottable中存在快照,那么这个目录在删除所有快照之前,不能删除或改名。SnapShot适应于如下场景。" 错误操作恢复:如果对于某个目录设置了SnapShot,当用户意外地删除了一个文件,就可以使用该SnapShot进行文件的恢复。" 备份:管理员可以根据业务需求周期性地对文件目录进行备份。

(2) Inotify类似于Linux Inotify。NameNode对目录的每次操作,都会产生一个新的操作编号。Client通过RPC机制向NameNode发送某个操作编号,NameNode读取Edits将文件系统的大于该编号的所有Event操作返回给客户端。

通过HDFS Inotify机制,用户能够及时地得知某个目录发生了什么操作。该机制可以广泛用于感知目录操作,获取频繁修改文件,以及由于安全原因需要对特定目录或文件进行操作监控等场景,避免扫描整个目录,从而为用户提供更好的服务。

2. YARN

(1) 多维资源调度YARN目前支持Memory、CPU的两维资源,利用DRF(Dominant Resource Fairness)算法对Memory、CPU进行调度。但是随着大数据应用场景的极大丰富,用户需要申请、调度和控制集群中的更多的资源类型,如硬盘、网络等。开源社区已经考虑支持Disk(YARN-2139)、Network(YARN-2140)和HDFSBandwidth(YARN-2681)。

1) Resource Define对于新资源类型的支持,首先应该分析如何定义资源。例如对于Network资源来说,应用可能关注于网络bandwidth和每秒ops;而对于Disk资源,应该关注于I/O bandwidth。

2) Resource isolation除了如何定义资源外,另一个更关键的部分在于如何隔离资源以保证应用使用,而不受其他应用影响。Linux的CGroup已经为我们提供了资源隔离的技术方案,利用CGroup可以实现Disk资源vdisk的定义,实现Network资源net_cls的定义。

3) Resource Model & ExtendYARN重新定义资源类型Resource TypeInformation替换原来仅支持Memory和CPU的资源定义,在ResourceManager和NodeManager新增了资源类型的配置文件,定义包括资源名、单位、类型等信息;同时也新增了资源规格模板配置文件的定义,用户可以根据需要定义不同的资源规格。当用户提交应用时可以直接选取模板中的适合的规格。这样也可以避免当引入新的资源类型时,需要修改以前提交应用的代码以兼容。现在只需要重新定义资源规格模板即可。

(2) 基于已分配资源利用率的调度YARN分配资源基于整个集群资源的可用资源,可用资源来自于所有节点总容量减去已分配资源量。对于一个具体Container来说,其分配的资源是其真实使用量的上限。而实际中,往往大部分时间Container的资源使用量小于这个分配值,通过将特定租户的表Region分配到租户所属的Region Server Groups,为租户提供Region Server级别的资源隔离能力。同时,Region Server Group之间可能在硬件、配置、性能上存在差异,基于此可以为不同的工作负载特征表,分配不同的Region Server,实现不同工作负载彼此资源隔离,性能上互不干扰。LoadBanlancer负责表Region的分配,在分配Region的过程中,LoadBanlancer通过候选的Region Server选择一个Region Server。RegionServer组实现方案是通过是Region Server组过滤器,实现将特定租户表的Region分配到特定的Region Server组中

2) NamespaceNamespace是Hbase的一等公民,提供了Hbase多租户抽象,用于创建管理表和RegionServer组,通过Quota限制Namespace下表的数量和Region的数量。尽管通过Region Server组可以实现RegionServer级别的隔离,集群中仍有一部分资源是共用的,比如Hmaster、meta表等,可以通过ACL实现管理域资源的隔离访问(见图3-5)。

4. Hbase多数据中心数据复制方案" 单主(Single Master):只有一个主数据中心写入,并向其他数据中心同步数据,副本数据中心提供只读服务(见图3-6)。● 保证数据复制不影响写入性能,通常采用异步复制防止方式,在主数据中心数这就导致了整个集群的实际资源利用率低下。因此YARN可以通过获取Container实际资源率信息,对未真正使用的资源进行调度分配,以提高整个集群的资源使用率。

1) OPPORTUNISTIC Container引入新OPPORTUNISTIC类型的Container后,这种Container可以利用节点上已分配但未真正使用的资源。原有Container类型定义为GUARANTEED类型。相对于GUARANTEED类型Container,OPPORTUNISTIC类型的Container优先级更低。

2) Monitor Utilization监控单个Container及节点上所有Container的实际资源使用量,并通过节点心跳上报给ResourceManager。

3) Preempt & Promote为节点设置资源利用率的阈值,当资源利用率超过该阈值后,抢占之前分配出去的OPPORTUNISTIC类型的Container,以保证GUARANTEED类型的Container资源使用。当GUARANTEED类型的Container完成任务释放资源后,该节点上的OPPORTUNISTIC类型的Container可以升级为GUARANTEED类型。

 

 

五、Hadoop开源生态展望Hadoop生态已经日臻完善,Hadoop平台也是当下最受欢迎的大数据平台之一,非常适合网页、日志等非结构化或半结构化类文本数据的分析处理。那么下面Hadoop的可能发展方向有哪些?我们大胆的想象一下。批流合一的计算引擎Hadoop架构是面向批处理的,在需要实时处理秒级甚至毫秒级响应场景下,需要流处理平台,例如Storm。统一平台进行批处理和流处理是当前和未来研究热点。相关开源项目包括Flink、Apex、Nifi、DataFlow等。

1. SQL On HadoopSQL是通用的数据操作语言,很多开源工具开发目标是能够在Hadoop上使用SQL。这些工具有些是对MapReduce的封装,有些是在HDFS上实现完整的数据仓库,当然也存在介于两者之间的方案,查询速度与查询性能存在差异。相关开源项目包括Hive、Impala、Shark、Drill、HAWQ、Calcite、Phoenix等。

2. Spark很多人认为Hadoop的未来是Spark。下一小节我们会对Spark开源生态进行介绍。粗略地看,Spark与Hadoop的典型差异在于通过内存计算大幅提升数据处理,尤其是迭代运算的处理速度。当然Spark不仅仅是MapReduce的替代品,Spark包含了内存计算引擎、内存文件系统、流处理平台SparkStreaming、数据挖掘库Mlab。Spark会取代Hadoop吗?Hadoop社区的100多名commiter正在谋划未来,让我们拭目以待。

3. YARN随着数据规模的不停快速增长,处理数据的集群规模也在不断变大,且由于应用类型的不断丰富,集群中将会存在各种不同类型的物理节点,如高内存、GPU等。而对于不同类型的节点,不同的应用也期望不同的资源分配策略。目前YARN通过label对集群进行分组分区,同时通过label匹配应用指定运行的机器。而正是由于label兼具了分区和匹配的两重身份,导致目前YARN很难保证异构资源采用不同的调度策略(因为调度策略是基于租户,而整个集群只有一套租户策略)。因此如果将label的双重身份进行拆解,引入资源池的概念独立进行集群资源的分组分区,也许可以很好地解决当前问题。不同的资源池具有独立不同的一套租户策略,而原有的label只负责定位具体应用到相应类型的节点。这样将面对越来越巨大的集群规模,资源池可以使管理者可以灵活对集群进行分组,针对不同的场景和资源需求,设定不同的策略,以保证资源的最优化最有效配置(见图3-7)。

4. 数据挖掘理论与技术从海量大数据中挖掘隐含的信息或者知识是大数据分析的终极目标。当前社区已经实现了基于大数据的机器学习平台或库(Mahout)。然而这部分工作才刚刚开始,数据挖掘、机器学习、深度机器学习技术与大数据结合解决特定场景问题目前尚不成熟,仍有很大的提升空间。