Lanyon 记录下日常工作与学习哈~,还有技术分享哦。。🎉

大数据的三架马车之HDFS

主要介绍HDFS的基本组成和原理、Hadoop 2.0对HDFS的改进、HADOOP命令和基本API、通过读Google File System论文来理解HDFS设计理念。

HadoopApache一个开源的分布式计算平台,核心是以HDFS分布式文件系统和MapReduce分布式计算框架组成,为用户提供了一套底层透明的分布式基础设施。

HDFSHadoop分布式文件系统,具有高容错性、高伸缩性,允许用户基于廉价精简部署,构件分布式文件系统,为分布式计算存储提供底层支持。MapReduce提供简单的API,允许用户在不了解底层细节的情况下,开发分布式并行程序,利用大规模集群资源,解决传统单机无法解决的大数据处理问题,其设计思想起源Google GFSMapReduce 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源码需安装cmakeprotobufmavenopenssl组件。

$ mvn package -Pdist,native -DskipTests -Dtar

ReadMore »

k8s核心组件及pod组件间通信原理

介绍k8s的核心组件如PodControllerStatefulSet等组件以及组件间通信原理ServiceIngress服务。

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地址 然后从容器经过docker0Veth Pair另外一端通过宿主机将请求转发出去。

ReadMore »

kafka client客户端实践及原理剖析

主要描述kafka java client的一些实践,以及对client操作数据的一些原理进行剖析。

kafka对集群部署环境的一些考虑,kafkaScala 语言和 Java 语言编写而成,编译之后的源代码就是普通的“.class”文件。本来部署到哪个操作系统应该都是一样的,但是不同操作系统的差异还是给 Kafka 集群带来了相当大的影响。

主流的操作系统有3种:windowslinuxmacOS,考虑到操作系统与kafka的适配性,linux系统显然要比其它两个更加合适部署kafka,主要在I/O模式的使用、数据网络传输效率、社区支持度三个方面支持比较好。

linux中的系统调用select函数属于I/O多路复用模型,大名鼎鼎的epoll系统调用则介于I/O 多路复用、信号驱动I/O模型。因此在这一点上将kafka 部署在Linux 上是有优势的,因为能够获得更高效的 I/O性能。零拷贝(Zero Copy)技术,就是当数据在磁盘和网络进行传输时避免昂贵的内核态数据拷贝从而实现快速的数据传输,Linux 平台实现了这样的零拷贝机制。

ReadMore »

分析spark在yarn-client和yarn-cluster模式下启动

文章分析sparkyarn-clientyarn-cluster模式下启动的流程,yarnapache开源的一个资源管理的组件。JobTrackeryarn中大致分为了三块:一部分是ResourceManager,负责SchedulerApplicationsManager;一部分是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>

ReadMore »