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
的二进制包与当前平台不兼容。
为解决该问题,需在机器上编译Hadoop
的源码包,用编译生成的native library
替换二进制包中的相同文件。编译Hadoop
源码需安装cmake
、protobuf
、maven
、openssl
组件。
$ mvn package -Pdist,native -DskipTests -Dtar
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
网桥上。
同一台宿主机上的容器实例间的网络是互通的,请求路由是通过宿主机向外转发。ping 172.17.0.3
时匹配0.0.0.0
的路由网关,意味着这是一条直连规则,匹配该规则的都走主机的eth0
网卡。
在容器内ping other-ip
时需将other-ip
转换为mac
地址(通arp
地址解析获取硬件地址),容器内无法完成此操作容器通过默认路由在宿主机解析,获取请求mac
地址 然后从容器经过docker0
中 Veth Pair
另外一端通过宿主机将请求转发出去。
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
平台实现了这样的零拷贝机制。
23 Feb 2021
文章分析spark
在yarn-client
、yarn-cluster
模式下启动的流程,yarn
是apache
开源的一个资源管理的组件。JobTracker
在yarn
中大致分为了三块:一部分是ResourceManager
,负责Scheduler
及ApplicationsManager
;一部分是ApplicationMaster
,负责job
生命周期的管理;最后一部分是JobHistoryServer
,负责日志的展示;
先看一个spark
官网上通过yarn
提交用户应用程序的spark-submit
脚本,从该脚本开始分析在yarn
环境下执行的流程。
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \ # can be client for client mode
--executor-memory 20G \
--num-executors 50 \
/path/to/examples.jar \
1000
在分析源码前需要在父pom.xml
中引入yarn
资源代码模块,使得其class
文件加载到classpath
中。
<!-- See additional modules enabled by profiles below -->
<module>resource-managers/yarn</module>