07 Nov 2021
在Hadoop V1.0
版本中,资源调度部分存在扩展性差、可用性差、资源利用率低的改问题,其中,Job Tracker
既要做资源管理,又要做任务监控,同时Job
的并发数页存在限制。同时,JobTracker
存在单点故障问题,任务调度部分不支持调度流式计算、迭代计算、DAG模型。
2013
年,Hadoop 2.0
发布,引入了Yarn
、HDFS HA
、Federation
。
Yarn的设计思路(Yet Another Resource Manager)
Yarn
由三部分组成:ResourceManager
、NodeManager
、ApplicationMaster
,其中:RM
掌控全局的资源,负责整个系统的资源管理和分配(处理客户端请求、启动/监控AM
和NM
、资源调度和分配),NM
驻留在一个YARN
集群的节点上做代理,管理单个节点的资源、处理RM
、AM
的命令,AM
为应用程序管理器,负责系统中所有所有应用程序的管理工作(数据切分、为APP
申请资源并分配、任务监控和容错)。
Yarn
主要解决数据集群资源利用率低、数据无法共享、维护成本高的问题,常见的应用场景有:MapReduce
实现离线批处理、Impala
实现交互式查询分析、用Strom
实现流式计算、在Spark
下来完成迭代计算。
09 Aug 2021
Hadoop
是Apache
的一个开源的分布式计算平台,以HDFS
分布式文件系统和MapReduce
计算框架为核心,为用户提供一套底层透明的分布式基础设施。
MapReduce
提供简单的API
,允许用户在不了解底层细节的情况下,开发分布式并行程序。利用大规模集群资源,解决传统单机无法解决的大数据处理问题,其设计思想起源于MapReduce Paper
。
MapReduce编程模型
MapReduce
是一种用于处理和生成大型数据集的编程模型和相关实现,用户指定一个map()
函数接收处理key/value
对,同时产生另外一组临时key/value
集合,reduce()
函数合并相同intermediate key
关联的value
数据,以这种函数式方风格写的程序会自动并行化并在大型商品机器集群上运行。
在Paper
发布之前的几年,Jeffrey Dean
及Google
的一些工程师已经实现了数百个用于处理大量原始数据且特殊用途的计算程序,数据源如抓取的文档、Web
日志的请求等,来计算各种派生数据,像倒排索引、Web
文档图结构的各种表示、每个主机爬取的页面数汇总等。
19 Jul 2021
主要介绍HDFS的基本组成和原理、Hadoop 2.0对HDFS的改进、HADOOP命令和基本API、通过读Google File System论文来理解HDFS设计理念。
Hadoop
是Apache
一个开源的分布式计算平台,核心是以HDFS
分布式文件系统和MapReduce
分布式计算框架组成,为用户提供了一套底层透明的分布式基础设施。
HDFS
是Hadoop
分布式文件系统,具有高容错性、高伸缩性,允许用户基于廉价精简部署,构件分布式文件系统,为分布式计算存储提供底层支持。MapReduce
提供简单的API
,允许用户在不了解底层细节的情况下,开发分布式并行程序,利用大规模集群资源,解决传统单机无法解决的大数据处理问题,其设计思想起源Google GFS
、MapReduce Paper
。
在Mac上搭建Hadoop单机版环境
从 https://hadoop.apache.org 下载二进制的安装包,具体配置可进行Google
。配置完成后,在执行HDFS
命令时会提示 Unable to load native-hadoop library for your platform...using buildin-java classes..
,运行Hadoop
的二进制包与当前平台不兼容。
25 Apr 2021
介绍k8s
的核心组件如Pod
、Controller
、StatefulSet
等组件以及组件间通信原理Service
及Ingress
服务。
Docker实例及Pods间的通信原理
在通信协议中“网络栈”包括有:网卡(network interface
)、回环设备(loopback device
)、路由表(routing table
)和iptables
规则。在docker
中启动一个容器可使用宿主机的网络栈(-net=host
),指定-net
后默认不开启network namespace
空间:
$ docker run –d –net=host --name nginx-host nginx
nginx
服务启动后默认监听主机80
端口,容器启动后会创建一个docker0
的网桥。docker
实例通过Veth Pair
与宿主机建立连接关系,其中Veth
的一端在容器内,另一段插在宿主机的docker0
网桥上。
02 Mar 2021
主要描述kafka java client
的一些实践,以及对client
操作数据的一些原理进行剖析。
kafka
对集群部署环境的一些考虑,kafka
由 Scala
语言和 Java
语言编写而成,编译之后的源代码就是普通的“.class
”文件。本来部署到哪个操作系统应该都是一样的,但是不同操作系统的差异还是给 Kafka
集群带来了相当大的影响。
主流的操作系统有3
种:windows
、linux
和macOS
,考虑到操作系统与kafka
的适配性,linux
系统显然要比其它两个更加合适部署kafka
,主要在I/O
模式的使用、数据网络传输效率、社区支持度三个方面支持比较好。
linux
中的系统调用select
函数属于I/O
多路复用模型,大名鼎鼎的epoll
系统调用则介于I/O
多路复用、信号驱动I/O
模型。因此在这一点上将kafka
部署在Linux
上是有优势的,因为能够获得更高效的 I/O
性能。零拷贝(Zero Copy
)技术,就是当数据在磁盘和网络进行传输时避免昂贵的内核态数据拷贝从而实现快速的数据传输,Linux
平台实现了这样的零拷贝机制。