自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

海盗的小菜园

专注云计算、大数据运维领域

  • 博客(98)
  • 资源 (11)
  • 收藏
  • 关注

原创 mysql8定位被锁语句

线上mysql版本为8.0.11,对于最近的几个版本越来越像Orale了,有了较为丰富的系统字典,也可以查看系统的等待事件,现在线上出现被锁语句的情况也可以通过数据字典直接查询出来了,在此记录下以供参考。首先查看系统锁情况,下面这条语句可以看到持有锁的线程以及线程ID,这里需要注意下,session_id也就是show processlist查询出来的链接ID,在这个表里表现为PID,同时该表...

2019-01-28 14:42:16 2820

转载 JVM高CPU定位脚本

#!/bin/kshtypeset top=10typeset pid=$1typeset tmp_file=/tmp/java_${pid}_$$.trace$JAVA_HOME/bin/jstack $pid > $tmp_fileps H -eo user,pid,ppid,tid,time,%cpu --sort=%cpu --no-headers\ | ta

2017-11-30 23:07:07 377

原创 spark shuffle过程分析

shuffle是作业执行过程中的一个重要阶段,对作业性能有很大影响,不管是对hadoop还是spark,shuffle都是一个核心环节,spark的shuffle和hadoop的shuffle的原理大致相同,shuffle发生在ShuffleMapTask中,在一个task处理partition数据时,需要对外输出作为下个stage的数据源,这个输出可能是不落盘的,但如果数据量很大,导致内存放不下

2015-11-19 15:21:22 977

原创 spark task启动

woker接受到LaunchTask消息后会启动task,以local模式为例,代码如下。task是由executor来启动的override def receiveWithLogging = { case ReviveOffers => reviveOffers() ......def reviveOffers() { val offers = Seq(new W

2015-11-19 14:39:31 680

原创 spark shuffle内存申请策略

在一个executor中可以并行执行多个task,这些task都可能发生shuffle,每个task看作一个线程,这些线程公用一个内存池,这时就涉及到内存的使用策略了,申请过多会导致其他task spill内存不足,过少又会影响自身效率,spark中对这块的内存管理位于ShuffleMemoryManager类中,基本的分配策略是如果线程数为n,那么spark可以确保一个线程的内存在1/n和1/2

2015-11-16 19:45:26 1181

原创 Spark TaskSet提交及执行准备

一个stage是由一组相同运算的task组成,他们分别计算不同的partition,stage的提交实际是向调度器提交一组包含相同计算的task,这里调度器的名字是TaskScheduler,其调度单位是taskset,stage在提交是使用了递归算法,会先提交没有parent stage的stage,代码如下: private def submitStage(stage: Stage) {

2015-11-11 19:31:36 2152

原创 Spark stage切分和提交

     客户端构建好RDD的DAG以后,会提交至DAGScheduler来处理,这是一个Stage级别的调度器,他首先会把作业切分为一个个Stage,每个Stage由一组相同运算的tasks组成,然后会以taskset的形式提交给TaskScheduler。DS还会跟踪stage的输出与物化情况、检测task运行时的最优位置,重新提交失败的stage。    DAGSheduler接收到J...

2015-11-10 19:15:21 1828

原创 Spark中RDD DAG图的建立

RDD是spark计算的核心,是分布式数据元素的集合,具有不可变、可分区、可被并行操作的特性,基础的RDD类包含了常用的操作,如果需要特殊操作可以继承RDD基类进行自己的扩展,基础预算包括map、filter、reduce等。  RDD包含5个主要特性:partition、针对split的算子、自身依赖哪些RDD、分区类型(默认hash)、split计算是的分区位置(例如计算HDFS bloc

2015-11-05 17:48:58 4973

原创 隧道打通自动化脚本

平时我们可能有打通网络的需求,也就是建立隧道,比如两个建立两个只有内网IP机器的直连。openssh给我们提供了这个功能,但有时隧道可能不稳定,超时、网络波动等情况,这时就需要重新建立连接,而且每次要输入密码,比较麻烦,下面这个脚本可以让你高枕无忧了,把下面这个脚本丢入crontab中,每一个小时执行一次。#!/bin/[email protected]=5

2015-03-30 14:53:23 1005

原创 JStorm之Woker启动流程

我们知道,在Jstorm中具体任务执行是由Woker来完成的,Woker的启动是由Supervisor组件负责,下面就介绍一个Woker的启动流程。Sueprvisor在启动后会启动一个检测任务分配的线程,该线程周期性的到Zookeeper中查询任务分配的情况,一旦有新的任务到来,就会把自己负责的Woker启动起来,当然其中具体细节还有很多,大概流程就是这样的。线程的执行体定义在Event

2015-03-25 18:51:15 4089

原创 JStorm之Topology调度

topology在服务端提交过程中,会经过一系列的验证和初始化:TP结构校验、创建本地目录并拷贝序列化文件jar包、生成znode用于存放TP和task等信息,最后一步才进行任务分配,如下图:提交主函数位于ServiceHandler.java中private void makeAssignment(String topologyName, String topologyId,

2015-03-16 19:10:23 2086

原创 maven安装本地jar包

在日常开发中我们经常使用maven,但仓库中有时并未包含我们使用的jar文件,比如oracle的jdbc驱动,这时就需要我们手工安装才能正常进行开发,在此记录下这个简单过程:1、首先要有一个oracle的jdbc驱动jar包2、使用maven命令行安装该jar包,命令如下:3、在pom文件中引入该依赖

2015-03-12 22:15:52 1052

原创 JStorm之Topology提交服务端

topology提交前会先判断集群中是否存在同名作业,如果存在在提交失败,如果没有则会增加集群提交次数SubmittedCount,每次提交成功,该变量都会加1,然后会为该作业分配一个id,生成规则如下:public static String TopologyNameToId(String topologyName, int counter) { return topologyNam

2015-01-16 19:25:43 2284

原创 JStorm之Topology提交客户端

一个topology包含一或多个spout bolt,spout负责在数据源获得数据并发送给bolt,每个bolt负责做完处理后发给下一个bolt。通常topology的创建是由TopologyBuilder来创建的,该组件会记录包含哪些spout bolt,并做相应验证:各组件是否有id冲突,校验方法如下:private void validateUnusedId(String id) {

2015-01-16 15:30:03 1720

原创 JStorm之Supervisor启动流程

Supervisor中文翻译是监督者,意思简单明了,就是对资源进行监控,其实主要是woker资源。该组件所做的事情概括如下:    1、每隔一段时间发送心跳证明自己还活着    2、下载新的topology    3、释放无效的woker    4、分配新的任务  该组件主要包含:心跳线程、supervisor事件接受线程、处理线程,一旦事件接受到则会进入任务分配环节,主要逻辑

2015-01-14 16:18:13 3927

原创 JStorm之NimbusServer启动流程

NimbusServer相当于hadoop里的JobTracker或yarn里的ResourceManager,在集群中属于首脑地位,负责分发任务,监控集群状态,与supervisor的通信主要通过Zookeeper。nimbus在启动过程中会做以下工作,以保证集群稳定运行:1、清理无效topology2、建立zk连接并创建相应znode3、启动监控线程4、启动httpserver

2015-01-13 15:26:57 2585

原创 Docker命令速记

1、启动容器并映射宿主机到容器端口docker run -p 127.0.0.1:20001:22 -ti centos /bin/bash2、daemon方式启动容器docker run -d -p 127.0.0.1:5000:22 -ti centos /bin/bashdocker run -ti -p 0.0.0.0:7600:9600 -p 0.0.0.0

2015-01-09 15:44:23 1148

原创 AUFS使用实例

AUFS使用实例  什么是AUFS,简单说就是一个文件系统,可以把不同的目录联合在一起。这种文件系统不用格式化,直接挂载即可。之所以有这篇博文,是因为Docker中要使用它。在Ubuntu 12.0.4下安装比较简单,其他系统需自己研究。直接apt-get install就可以了,安装后如下:root@localhost:/tmp/test/aufs#cat /etc/issueUbun

2014-12-19 17:43:04 5658

原创 Hadoop2.x Yarn作业提交(服务端)

RM接收到客户端作业提交请求时会通过RPC server做回应,其实客户端就是通过ApplicationClientProtocol的RPC客户端提交作业的,客户端的提交流程参见上篇文章,在提交阶段的代码中,首先会调用getNewApplication来获得一个GetNewApplicationResponse,该返回类中包含了APP的ApplicationId,调度器资源信息。需要注意的是在RM

2014-03-27 14:41:23 2946

原创 Hadoop2.x Yarn作业提交(客户端)

YARN作业提交的客户端仍然使用RunJar类,和MR1一样,可参考 http://blog.csdn.net/lihm0_1/article/details/13629375在1.x中是向JobTracker提交,而在2.x中换成了ResourceManager,客户端的代理对象也有所变动,换成了YarnRunner,但大致流程和1类似,主要的流程集中在JobSubmitter.subm

2014-03-26 16:16:05 6537 1

原创 Hadoop2.x NodeManager启动之服务启动

在NM各服务初始化完毕之后,会进入启动阶段,该阶段的调用栈如下由于NM也是一个综合服务类,所以他会进入CompositeService的serviceStart循环启动各个服务,代码如下:protected void serviceStart() throws Exception { //获得服务列表 List services = getServices(); if (LO

2014-03-21 20:25:40 6706

原创 Hadoop2.x NodeManager启动之服务初始化

NM和RM类似,也是以服务的形式启动,但服务相对于RM来说少些,也经历服务初始化和服务启动两个阶段,NM继承自CompositeService。NM的服务初始化列表如下:NM的启动入口public static void main(String[] args) { //异常处理 Thread.setDefaultUncaughtExceptionHandler(new Yar

2014-03-21 15:47:59 3739

原创 Hadoop2.x ResourceManager启动之服务启动

RM是个综合服务类,内部包含了多个服务,所有的服务被放在列表中,通过循环逐个启动,其他服务的列表如下:

2014-03-19 14:51:03 4749

原创 Hadoop2.x ResourceManager启动之服务初始化

在RM的启动过程中有两个重要的步骤,1、服务初始化 2、启动服务。在初始化阶段会将RM中各个功能以服务的形式保存到RM的服务列表中(ArrayList)并执行初始化操作,RM中几乎所有的重要组件都是以服务的形式提供的,RM对服务做了抽象,方便统一管理。下面我们先看RM的服务初始化阶段做了哪些事情.

2014-03-18 14:54:32 2494

原创 Hive基本使用

4、查看表文件HDFS载入的时候,实际做的是文件移动hive (dcenter)> dfs -ls /hive/warehouse/dcenter.db/t;Found 1 items-rw-r--r-- 2 hc supergroup 317777760 2013-12-26 11:28 /hive/warehouse/dcenter.db/t/a.txt

2013-12-26 11:54:32 3180

原创 Hadoop MapReduce之Join示例

Hadoop MapReduce之Join示例关于MR中的数据连接是在数据处理中经常遇到的问题,可以用一些上层框架来实现此功能,比如Hive、Pig等,这里用MR实现主要是为了理解连接的思路,MR中的连接可以在Reduce端做,也可以在Map端做,本例在Reduce端做,想了解更多连接的内容可以参考>5.2章节,需要连接的表数据如下用户订单表:UserID OrderID

2013-12-10 11:20:31 1754

原创 Hadoop JobTracker之ExpireLaunchingTasks

ExpireLaunchingTasks为JobTracker的后台线程,该线程记录了task的启动时间,每当TaskTracker发送心跳时,JobTracker会分配合适的任务给TaskTracker,并且将TaskAttemptID和启动时间以键值对的形式记录到launchingTasks集合中,待下次心跳如果JT得知该任务启动成功,则会从launchingTasks集合中删除,否则记录失败

2013-12-07 15:45:18 964

原创 Hadoop MapReduce之ReduceTask任务执行(六)

前面我们分别讨论了reduce的三个阶段,copy、sort、reduce,都是分开解析的,其实这些功能都包含在一个函数中,而且阶段分明,通过下面的分析,会对reduce流程理解会更清晰。下面函数的入口是Child.main -> taskFinal.run(job, umbilical)public void run(JobConf job, final TaskUmbilicalProto

2013-12-05 15:46:17 985

原创 Hadoop MapReduce之ReduceTask任务执行(五)

本节分析ReduceTask的最后一个阶段:reduce,经历了copy、sort后,reduce的输入数据就准备好了,reduce数据输入由Reducer.Context提供,该Context封装了sort阶段的迭代器,可以对内存和磁盘的KV进行迭代,这部分需要注意两个大的循环:1、对KEY的循环由Reducer类实现,具体参考run函数 2、在自定义的reduce函数中对VALUE的循环。在自

2013-12-05 15:30:43 1972

原创 Hadoop MapReduce之ReduceTask任务执行(四)

上一篇讲了reduce如何把map输出下载到本地的过程,这个过程中包含了文件合并操作,本文主要讲reduce的下一个阶段:排序。reduce端的合并单位是Segment,在对Segment合并的过程中就已经实现排序了,大家如果对Oracle比较熟悉的话,这种合并排序的方式就容易理解了,对于两个排序好的数组,每次取其中的最小值,那么结果就是一个大的有序数组,这就是merge的基本原理,当然在Hado

2013-12-04 14:29:20 1157

原创 Hadoop MapReduce之ReduceTask任务执行(三)

在reduce端的文件拷贝阶段,会将数据放入内存或直接放入磁盘中,如果文件全部拷贝完再进行合并那样必然降低作业效率,所以在拷贝进行到一定阶段,数据的合并就开始了,负责该工作的有两个线程:InMemFSMergeThread和LocalFSMerger,分别针对内存和磁盘Segment的合并。首先看内存合并线程InMemFSMergeThread的run函数 public void run

2013-12-02 14:23:49 1322

原创 JAVA 对象被垃圾回收后其成员变量可用吗?

我们知道JVM中一个对象实例超出作用域或无引用的时候会被垃圾回收,那么他被垃圾回收后,依赖其成员变量的其他实例是否还能正常使用呢?经过测试后发现即使一个实例被垃圾回收,如果他内部的数据被其他对象使用,是不受影响的,下面看这个示例package test;public class mytest { public static void main(String[] args) throws

2013-11-30 21:51:41 2820 2

原创 Hadoop MapReduce之ReduceTask任务执行(二)

reduce任务为获得map的输出要和TaskTracker 通信以获得map的完成情况,负责这个工作的是GetMapEventsThread。线程运行时会通过TT的代理调用TaskUmbilicalProtocol协议的getMapCompletionEvents来获得MapTaskCompletionEventsUpdate,该返回数据总包含了最新map任务的完成状态:SUCCEEDED FA

2013-11-29 16:12:15 1863

原创 Hadoop MapReduce之ReduceTask任务执行(一)

reduce执行流程经历三个阶段:copy、sort、reduce,在第一阶段reduce任务会把map的输出拷贝至本地,通过线程MapOutputCopier,该线程通过http协议将map输出拷贝至本地,该copy操作可以并行进行,默认情况下有5个线程执行此操作,如果map数量较大时可以适当调大此值,拷贝时使用http协议,此时reducetask为client,map端以jetty作为web

2013-11-28 15:41:07 1684 1

原创 Hadoop MapReduce之MapTask任务执行(四)

Map任务执行完前会对spill文件进行合并操作,每次spill都会生成一个spill文件,在传向reduce前,map会把这些文件合并为一个文件,文件合并不是一次性把所有文件合并的,每次合并的个数可以通过参数io.sort.factor指定,当实际spill文件数量超过该值的时候,会生成相应的中间临时文件,总之,每次合并文件的数量不会超过io.sort.factor。文件合并由mergePart

2013-11-23 14:27:08 1562

原创 Hadoop 故障:java.lang.OutOfMemoryError: Java heap space

一个作业运行时,在maptask阶段出现了如下错误:FATAL org.apache.hadoop.mapred.Child: Error running child : java.lang.OutOfMemoryError: Java heap space at org.apache.hadoop.io.Text.setCapacity(Text.java:240)

2013-11-19 14:06:51 14972

原创 Hadoop MapReduce之MapTask任务执行(三)

前面讲到KV的输出,会先写入KV buffer,当buffer用完或达到一定比例的时候spillThread会将buffer中的数据写入磁盘,以便buffer重用,刷新过程并不是直接写入的,写入前会先进行一个排序操作,写入时会将一个partition的数据写在一起,并且会生成一个index文件作为标记文件。每次spill都会生成一个新的数据文件,数据文件和索引文件的结构图如下:     

2013-11-16 13:22:15 1264

原创 Hadoop MapReduce之MapTask任务执行(二)

(为了简单起见,我们这里分析官方文档中使用的WordCount程序)  上一篇我们已经看到自己的map函数是如何被调用的,这是一个循环调用的过程,这里我们分析下,从KV读入到KV写出的过程,通常我们只要写map函数就可以了,但在一些特殊的情况下我们也可以覆盖run函数,来实现自己的执行流程。  这个例子中我们使用默认的InputFormat,在初始化的时候被初始化为TextInputFor

2013-11-14 18:16:52 2048

转载 hadoop作业调优参数整理及原理

原文地址:http://www.tbdata.org/archives/1470hadoop作业调优参数整理及原理1 Map side tuning参数1.1 MapTask运行内部原理当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘。这中间的过程比较复杂,并且利用到了内存buffer来进行已经产生的部分

2013-11-12 14:12:51 992

原创 Hadoop MapReduce之MapTask任务执行(一)

前面我们介绍了作业的提交(客户端和服务端)、任务分解和调度、任务的启动,这些操作完成之后就是任务执行了,在hadoop中一个任务的执行是包含在一个单独的JVM中的,在任务启动阶段会生成一个shell(taskjvm.sh),然后会通过ShellCommandExecutor类来执行这个脚本,底层通过ProcessBuiler来实现进程启动,那么在启动之后就是任务执行的部分,在执行时hadoop要了

2013-11-11 14:34:03 2680

winutils.exe

windows下安装hadoop经常碰到的问题 2014-03-15 15:36:16,749 ERROR util.Shell (Shell.java:getWinUtilsPath(336)) - Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable F:\hadoop-2.3.0\bin\winutils.exe in the Hadoop binaries. at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:318) at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:333) at org.apache.hadoop.util.Shell.<clinit>(Shell.java:326) at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76) at org.apache.hadoop.conf.Configuration.getTrimmedStrings(Configuration.java:1708) at org.apache.hadoop.conf.Configuration.getInts(Configuration.java:1095) at org.apache.hadoop.ipc.metrics.RpcMetrics.<init>(RpcMetrics.java:54) at org.apache.hadoop.ipc.metrics.RpcMetrics.create(RpcMetrics.java:80) at org.apache.hadoop.ipc.Server.<init>(Server.java:2114) at org.apache.hadoop.ipc.RPC$Server.<init>(RPC.java:897) at org.apache.hadoop.ipc.WritableRpcEngine$Server.<init>(WritableRpcEngine.java:372) at org.apache.hadoop.ipc.WritableRpcEngine.getServer(WritableRpcEngine.java:294) at org.apache.hadoop.ipc.RPC$Builder.build(RPC.java:742) at test.RPCServer.main(RPCServer.java:24) 将这个文件拷贝到HADOOP_HOME/bin目录下就可以了

2014-03-15

nc110.tgz瑞士军刀

瑞士军刀,居家必备、shell反弹、功能强大

2014-01-17

hadoop Join代码(map join 和reduce join)

展示使用MR方式实现表连接的代码示例。利用HIVE PIG之类的高层工具也可以实现,本代码旨在展示手工连接的流程

2013-12-10

mapreduce 自定义分隔符源码

自定义分隔符读取源码,改编自LineRecordReader,主要处理格式复杂的日志

2013-11-12

fsimage初始结构

FSIMAGE初始化文件结构,附带源码位置

2013-08-17

安装64 位Oracle 11gR2.pdf

在ORACLE ENTERPRISE LINUX 6上安装ORACLE 11G R2的文档,已经成功安装。

2012-06-01

LVM之快照及PV迁移

LVM之快照及PV迁移详细操作,,...................

2012-05-28

oracle基本数据类型存储格式浅析

介绍oracle内部存储的好资料,字符、数字、日期,对于研究ORACLE内部的朋友们是不可多得的好资料

2012-03-10

MCDBA认证教材.chm

官方认证教材哦,介绍的很详细,适合想考证的朋友们, 。。。。。。。。。。。

2011-02-28

linux多线程编程

不错的多线程入门资料,例子浅显易懂,重要函数都有详细解释, 另外如果阅读mysql源码,没有多线程的知识很难读懂, 希望本书能给你带来知识上的收获。

2011-02-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除