YARN监控管理与资源管理
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
可以把Hadoop YARN理解为相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需的资源(内存、cpu等)。
YARN WebUI 服务YARN提供WEB UI服务,在Hadoop 2.9.0版本中,提供新WebUI V2服务,可提供对运行在YARN框架上的应用程序的可视化。
WebUI V1 使用与HDFS一样,YARN也提供了一个WebUI服务,可以使用YARN Web用户界面监视集群、队列、应用程序、服务、流活动和节点信息。还可以查看集群详细配置的信息,检查各种应用程序和服务的日志。
首页浏览器输入http://node2.itcast.cn:8088/访问YARN WebUI服务,页面打开后,以列 ...
多线程性能调优
Synchronized 同步锁实现原理在并发编程中,多个线程访问同一个共享资源时,我们必须考虑如何维护数据的原子性。在 JDK1.5 之前,Java 是依靠 Synchronized 关键字实现锁功能来做到这点的。Synchronized 是 JVM 实现的一种内置锁,锁的获取和释放是由 JVM 隐式实现。
到了 JDK1.5 版本,并发包中新增了 Lock 接口来实现锁功能,它提供了与 Synchronized 关键字类似的同步功能,只是在使用时需要显示获取和释放锁。
Lock 同步锁是基于 Java 实现的,而 Synchronized 是基于底层操作系统的 Mutex Lock 实现的,每次获取和释放锁操作都会带来用户态和内核态的切换,从而增加系统性能开销。因此,在锁竞争激烈的情况下,Synchronized 同步锁在性能上就表现得非常糟糕,它也常被大家称为重量级锁。
特别是在单个线程重复申请锁的情况下,JDK1.5 版本的 Synchronized 锁性能要比 Lock 的性能差很多。例如,在 Dubbo 基于 Netty 实现的通信中,消费端向服务端通信之后,由于接收返回消 ...
Java性能调优实战
为什么要做性能调优?好的系统性能调优不仅仅可以提高系统的性能,还能为公司节省资源。这也是我们做性能调优的最直接的目的。
什么时候开始介入调优?其实,在项目开发的初期,我们没有必要过于在意性能优化,这样反而会让我们疲于性能优化,不仅不会给系统性能带来提升,还会影响到开发进度,甚至获得相反的效果,给系统带来新的问题。
我们只需要在代码层面保证有效的编码,比如,减少磁盘 I/O 操作、降低竞争锁的使用以及使用高效的算法等等。遇到比较复杂的业务,我们可以充分利用设计模式来优化业务代码。例如,设计商品价格的时候,往往会有很多折扣活动、红包活动,我们可以用装饰模式去设计这个业务。
在系统编码完成之后,我们就可以对系统进行性能测试了。这时候,产品经理一般会提供线上预期数据,我们在提供的参考平台上进行压测,通过性能分析、统计工具来统计各项性能指标,看是否在预期范围之内。
在项目成功上线后,我们还需要根据线上的实际情况,依照日志监控以及性能统计日志,来观测系统性能问题,一旦发现问题,就要对日志进行分析并及时修复问题。
有哪些参考因素可以体现系统的性能?CPU:有的应用需要大量计算,他们会长时间、不间断地 ...
MapReduce高阶编程
MapReduce Counter计数器计数器概述在执行MapReduce程序的时候,控制台输出信息中通常有下面所示片段内容:
可以发现,输出信息中的核心词是counters,中文叫做计数器。在进行MapReduce运算过程中,许多时候,用户希望了解程序的运行情况。Hadoop内置的计数器功能收集作业的主要统计信息,可以帮助用户理解程序的运行情况,辅助用户诊断故障。
这些记录了该程序运行过程的的一些信息的计数,如Map input records=2,表示Map有2条记录。可以看出来这些内置计数器可以被分为若干个组,即对于大多数的计数器来说,Hadoop使用的组件分为若干类。
MapReduce内置计数器Hadoop为每个MapReduce作业维护一些内置的计数器,这些计数器报告各种指标,例如和MapReduce程序执行中每个阶段输入输出的数据量相关的计数器,可以帮助用户进行判断程序逻辑是否生效、正确。
Hadoop内置计数器根据功能进行分组。每个组包括若干个不同的计数器,分别是:MapReduce任务计数器(Map-Reduce Framework)、文件系统计数器(File S ...
YARN框架概述与集群部署
YARN 框架概述YARN产生和发展简史Hadoop演进阶段数据、程序、运算资源(内存、cpu)三者组在一起,完成了数据的计算处理过程。在单机环境下,这些都不是太大问题。为了应对海量数据的场景,Hadoop出现并提供了分而治之的分布式处理思想。通过对Hadoop版本演进的简单回顾,可以让我们知道YARN的产生和发展简史,洞悉YARN发展进程。
很多Hadoop的早期用户使用Hadoop的方式与在众多主机上运行桌面应用程序类似。
在少量几个节点上手工建立一个集群;
将数据载入Hadoop分布式文件系统(HDFS);
通过运行MapReduce任务来运算并获得结果;
然后拆掉集群。
这种方式的一部分原因是没有在Hadoop HDFS上持久存储数据的迫切需求,另一部分原因是没有共享数据和计算结果的动机。
阶段0:Ad Hoc集群Ad Hoc应当理解为专用、特定的意思(数仓领域中常理解为即席查询)。Ad Hoc集群时代标志着Hadoop集群的起源,集群以Ad Hoc、单用户方式建立。
后来,随着私人集群的使用和Hadoop容错性的提高,持久的HDFS集群出现,并且实现了HDFS集群的共享, ...
MapReduce整体流程与核心源码解读
Debug环境准备Debug代码:MR经典入门案例Word CountMapper类package cn.itcast.hadoop.mapreduce.wordcount;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Counter;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
/**
* @description:
*/
public class WordCountMapper extends Mapper<LongWritable, Text,Text,LongWritable> {
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, ...
MapReduce性能调优
MapReduce性能优化概述MapReduce的应用场景Hadoop包含了GFS的开源实现HDFS(Hadoop distributed file system)和MapReduce框架的开源实现。Hadoop得到了企业界及学术界关注,Yahoo、Facebook、Cloudera、Twitter、Intel、华为等诸多公司和技术团体对Hadoop给予了大力支持。Cloudera对Apache Hadoop及相关组件的版本兼容性进行了整合、性能优化、功能测试,推出了其企业版的开源Hadoop。Intel推出了高效、安全及易于管理的Hadoop企业版。Hadoop由于其开源性质,已成为目前研究、优化云计算框架的重要样本和基础。其中MapReduce框架很适合处理文档分析、倒排索引建立等类型的应用,然而在列存储、索引建立、连接计算、迭代计算、科学计算及调度算法方面性能需要进一步优化。
优缺点与需求优点(1) Mapreduce易于编程
它简单的实现一些接口,就可以完成一个分布式程序,这个程序可以分布到大量的廉价的pc机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样 ...
MapReduce基础编程
MapReduce编程指南引入数据分区partition默认情况下MR输出文件个数在默认情况下,不管map阶段有多少个并发执行task,到reduce阶段,所有的结果都将有一个reduce来处理,并且最终结果输出到一个文件中。
此时,MapReduce的执行流程如下所示:
修改reducetask个数在MapReduce程序的驱动类中,通过job提供的方法,可以修改reducetask的个数。
默认情况下不设置,reducetask个数为1,结果输出到一个文件中。
使用api修改reducetask个数之后,输出结果文件的个数和reducetask个数对应。比如设置为6个,此时的输出结果如下所示:
此时,MapReduce的执行流程如下所示:
数据分区概念当MapReduce中有多个reducetask执行的时候,此时maptask的输出就会面临一个问题:究竟将自己的输出数据交给哪一个reducetask来处理,这就是所谓的数据分区(partition)问题。
默认分区规则MapReduce默认分区规则是HashPartitioner。跟map输出的数据key有关 ...
CPU性能篇
解决Linux优化问题的关键:
怎么把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序、库函数、系统调用、再到内核和硬件等不同的层级贯穿起来。其实,性能问题并没有你想像得那么难,只要你理解了应用程序和系统的少数几个基本原理,再进行大量的实战练习,建立起整体性能的全局观,大多数性能问题的优化就会水到渠成。
如何学习Linux性能优化?学习性能优化的第一步,一定是了解“性能指标”这个概念。
当看到性能指标时,你会首先想到什么呢?我相信“高并发”和“响应快”一定是最先出现在你脑海里的两个词,而它们也正对应着性能优化的两个核心指标——“吞吐”和“延时”。这两个指标是从应用负载的视角来考察性能,直接影响了产品终端的用户体验。跟它们对应的,是从系统资源的视角出发的指标,比如资源使用率、饱和度等。
我们知道,随着应用负载的增加,系统资源的使用也会升高,甚至达到极限。而性能问题的本质,就是系统资源已经达到瓶颈,但请求的处理却还不够快,无法支撑更多的请求。
性能分析,其实就是找出应用或系统的瓶颈,并设法去避免或者缓解它们,从而更高效地利用系统资源处理更多的请求。这包含了一系列的步骤,比如下 ...
运行维护
1、版本发布1.1、软件版本的定义软件版本包含两部分含义:
特定功能的集合某一次特定代码的构建结果
为明确标识版本,通常采用以下方式进行版本命名:
主版本号.子版本号[.修正版本号[.构建版本号]]
如:1.2.1 build-123
其中, 主版本号和子版本号:用来标识功能变化。小的功能变化增加子版本号,大的功能变化增加主版本号。
修正版本号:功能不变的情况下修复bug。
构建版本号:表示一次新的构建,通常由编译程序自动生成。
1.2、版本发布规划
并不是所有功能都要完成,或者是没有任何bug的版本才能上线。关键在于,要在用户的心理预期和软件的实际情况之间,达到一种平衡,让软件的功能和质量,满足好用户的预期。
要达到好的发布效果,就需要在版本发布前先做好版本发布的规划。版本的发布规划包含以下内容:
规划好要发布的功能:对用户需求进行细分。定义好发布的质量标准:用户对不同功能的质量的容忍度。设计好发布策略:beta版本测
试、灰度测试等。有一个综合性的版本发布计划:和所有项目成员及项目利益相关方共同参与制定项目的发布计划。
1.3、规范发布流程
流程和规范能将好的实践标准化 ...
测试
1、谁为软件质量负责1.1、什么是软件质量不同的人对软件质量好坏的评判角度是不同的。宝玉老师参考的是文章《The Three Aspects of Software Quality: Functional,Structural, and Process》的作者David Chappell的观点,将软件质量分成了三个考量方面:功能质量、代码质量、过程质量。
功能质量 基础要求:满足用户需求。 质量指标:bug数量、性能、UI/UX
代码质量 代码质量主要体现在以下方面:
可维护性:在不影响稳定性的前提下,是否能方便地添加或修改现有的代码。可读性:代码是否容易理解,是否能快速上手。
执行效率安全性:是否有安全漏洞。可测试性:代码是否能使用单元测试、集成测试进行测试验证。
过程质量 软件开发过程的质量决定了项目能否如期完成,开发成本是都在预算之内。
1.2、谁为产品质量负责产品质量是三方面共同决定的,所以软件质量也是多方共同负责的。
权责对等:责任和权力是需要对等的,比如让开发人员对开发过程负责,前提是他必须有权力去影响和控制开发过程,否则离开权力谈责任就是耍流氓。
根据项目中的角色 ...
开发编码
1、如何提升开发效率三个简单的原则。
1.1、积极主动
成为一个高效程序员,最大的阻力不是来自于不知道方法,而是自己的消极心态。
首先要知道,无论这些事情的本质责任是在于环境还是个人,抱怨排斥的心态对于实际工作的改进是没有任何帮助的。有两个行之有效的
建议:
想想再回应 每个人对于外界的刺激都会做出反映,本能的或者习惯性的,比如遇到事情会本能的觉得都是外部原因,如果一直这样,就
会进入恶性循环,变得更加消极麻木。
在回应之前,给自己一点时间想想,站在积极的方面理性思考一下,就可以去控制你的本能反应。
减少关注圈,扩大影响圈
不要总盯着自己无法改变的部分,多花时间精力在自己可以影响和掌控的事情上。
以始为终 先搞清楚目标,再开始动手。在做事情的时候注意三点:目标、原则和计划
经常停下来想想目标:原始目标是什么?目前在做的事情是否偏离目标?如果偏离,那么马上回到自己的原始目标去。制定原则:好的方
法都是要坚持做才有效果的。公开自己的计划:Deadline是最好的生产力。
宝玉老师给自己的定的几个原则,可以参考:
1.2、要事第一保证有限的时间用在最有价值的事情上。 ...