自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spark2.1.0之初体验

       在《Spark2.1.0之运行环境准备》一文中,已经介绍了如何准备好基本的Spark运行环境,现在是时候实践一下,以便于在使用过程中提升读者对于Spark最直接的感触!本文通过Spark的基本使用,让读者对Spark能有初步的认识,便于引导读者逐步深入学习。运行spark-shell    在《Spark2.1.0之运行环境准备》一文曾经简单运行了spark-shell,并用下图进行...

2018-05-04 10:01:45 5337 10

原创 Spark2.1.0之剖析spark-shell

        通过在spark-shell中执行word count的过程,让读者了解到可以使用spark-shell提交Spark作业。现在读者应该很想知道spark-shell究竟做了什么呢?脚本分析        在Spark安装目录的bin文件夹下可以找到spark-shell,其中有代码清单1-1所示的一段脚本。代码清单1-1       spark-shell脚本function m...

2018-04-20 09:30:10 4292

原创 Spark1.6.0功能扩展——为HiveThriftServer2增加HA

前言 HiveThriftServer2是Spark基于HiveServer2实现的多Session管理的Thrift服务,提供对Hive的集中式管理服务。HiveThriftServer2作为Yarn上的Application,目前只支持yarn-client模式——即Driver运行在本地,ApplicationMaster运行在NodeManager所管理的Container中。yarn-c...

2018-04-16 10:10:36 2815

原创 Spark内核设计的艺术:架构设计与实现——前言

前言为什么写这本书         给这本书写前言,让我想起了两年前给《深入理解Spark:核心思想与源码分析》一书写前言的经历。这让我不禁想起崔护的《题都城南庄》,诗的内容是:去年今日此门中,人面桃花相映红。人面不知何处去,桃花依旧笑春风。         Spark从核心思想和架构来看,它依然是那个Spark,但是我已经找了一个新的东家。我的年龄不知不觉中又长了两岁,Spark也在大数据领域从...

2018-04-11 14:57:25 5409 18

原创 Spark2.1.0之初识Spark

        随着近十年互联网的迅猛发展,越来越多的人融入了互联网——利用搜索引擎查询词条或问题;社交圈子从现实搬到了Facebook、Twitter、微信等社交平台上;女孩子们现在少了逛街,多了在各大电商平台上的购买;喜欢棋牌的人能够在对战平台上找到世界各地的玩家对弈。在国内随着网民数量的持续增加,造成互联网公司的数据在体量、产生速度、多样性等方面呈现出巨大的变化。        互联网产生的...

2018-04-09 09:48:51 4738 12

原创 Spark1.6.0——HiveThriftServer2的生命周期管理

前言几年前,我在刚刚进入大数据领域的时候,很快就了解到Hive所提供的一种另类的SQL。最初使用Hive的命令行提交任务,后来便用上了HiveServer和HiveServer2。半年前第一次注意到Spark的Thrift服务,当时心中就笃定它肯定与HiveServer2有着某种联系,直到在工作中真正使用它。在使用HiveThriftServer2的过程中,通过故障排查、源码分析和功能优化...

2018-03-09 11:43:03 4006

原创 Spark2.1命令工具类CommandUtils的源码分析

注:本文是为了配合《Spark内核设计的艺术 架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。书中附录F的内容都在本文呈现。 CommandUtils是Spark中最常用的工具类之一,其作用是为了构建进程。如果不太关心其实现也不影响对Spark源码的阅读和原理的学习。我们要介绍的方法如下:buildProcessBuilder功能描述:基于给定的参数创建ProcessBuil...

2018-03-09 11:40:53 988

原创 附录E Hadoop的word count例子

注:本文是为了配合《Spark内核设计的艺术——架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。书中附录E的内容都在本文呈现。 这里主要演示Hadoop1.0版本中的word count例子,用于和Spark中的实现对比。package org.apache.hadoop.examples;import java.io.IOException;import java.ut...

2018-03-04 16:54:09 741

原创 Spark2.1 RPC工具类RpcUtils

注:本文是为了配合《Spark内核设计的艺术 架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。书中附录H的内容都在本文呈现。 RpcUtils是RpcEnv中经常用到的工具类,这里讲简要介绍其中提供的方法。lookupRpcTimeout功能描述:根据提供的配置属性列表获取Rpc查找的超时时间,spark.rpc.lookupTimeout属性的优先级更高。RpcTimeou...

2018-03-01 10:12:50 1855

原创 附录G Netty与NettyUtils

注:本文是为了配合《Spark内核设计的艺术 架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。书中附录G的内容都在本文呈现。 Netty是一个NIO客户端服务器框架,使得开发高性能、高可靠性的网络服务器和客户端程序变得快速且容易。它极大地简化化了网络编程,如TCP和UDP套接字服务器。 “快速和容易”并不意味着应用程序会有难维护和性能低的问题。Netty是一个精心设计的框架,...

2018-02-07 09:39:31 2835

原创 附录C Jetty与JettyUtils

注:本文是为了配合《Spark内核设计的艺术 架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。书中附录C的内容都在本文呈现。Jetty简介 Jetty是一个开源的,以Java作为开发语言的servlet容器。它的API以一组JAR包的形式发布。Jetty容器可以实例化成一个对象,因而迅速为一些独立运行的Java应用提供网络和web服务。要为Jetty创建servlet,就涉及S...

2018-02-04 18:28:35 2783

原创 附录D Metrics简介

注:本文是为了配合《Spark内核设计的艺术——架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。书中附录D的内容都在本文呈现。 Metrics是codahale提供的第三方度量仓库。Metrics作为一款监控指标的度量类库,可以为第三方库提供辅助统计信息,还可以将度量数据发送给Ganglia和Graphite以提供图形化的监控。      Metrics也采用了监听器模式,提...

2018-02-04 18:26:51 2655 2

原创 附录B Akka简介

注:本文是为了配合《Spark内核设计的艺术 架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。书中附录B的内容都在本文呈现。 Akka是一款提供了用于构建高并发的、分布式的、可伸缩的、基于Java虚拟机的消息驱动应用的工具集和运行时环境。从下面Akka官网提供的一段代码示例,可以看出Akka并发编程的简约。case class Greeting(who: String)cl...

2018-02-01 21:10:31 1154 2

原创 附录A Spark2.1核心工具类Utils

注:本文是为了配合《Spark内核设计的艺术 架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。书中附录A的内容都在本文呈现。 Utils是Spark最常用的工具类之一,Spark Core大量使用了此类提供的基础功能。即使不关心其实现也不会对理解本书对Spark源码的分析有太多影响。下面将逐个介绍Utils提供的方法。getSystemProperties功能描述:获取系统属...

2018-01-25 09:46:46 3507 13

原创 使用Akka持久化——消息发送与接收

在《使用Akka持久化——持久化与快照》一文中介绍了如何使用Akka持久化消息及生成快照。对于集群应用来说,发送者发出消息,只有当收到了接受者的成功回复才应当认为是一次完整的请求和应答(一些RPC框架只提供了远程调用、序列化/反序列化的机制,但是具体调用的成功与否实际是抛给了开发者本人),利用Akka的应答机制很容易实现这些功能。

2017-02-06 09:47:35 9660 4

原创 使用Akka持久化——持久化与快照

前言 对于java web而言,一个用户的HTTP请求最终会转换为一条java线程处理。HTTP本身是无状态的,具体的请求逻辑一般也是无状态的。如果进程奔溃或者系统宕机,用户会发觉当前网页不可用之类的错误。虽然会影响一些用户体验,但是只要服务重启了,用户依然可以完成他的请求并满足其需要。但是有些情况下则势必会造成混乱甚至恐慌,例如跨行转账。用户从自己A银行的账户转账1万元至自己在B银行的账户,如果

2017-01-19 11:25:38 6849 6

原创 使用Akka构建集群(二)

前言在《使用Akka构建集群(一)》一文中通过简单集群监听器的例子演示了如何使用Akka搭建一个简单的集群,但是这个例子“也许”离我们的实际业务场景太远,你基本不太可能去做这样的工作,除非你负责运维、监控相关的工作(但实际上一个合格的程序员在实现功能的同时,也应当考虑监控的问题,至少应当接入一些监控系统或框架)。本文将介绍一个相对看来更符合我们对于集群使用的业务需求的例子——将客户端请求的...

2017-01-12 16:24:41 8428 2

原创 使用Akka构建集群(一)

概述Akka提供的非常吸引人的特性之一就是轻松构建自定义集群,这也是我要选择Akka的最基本原因之一。如果你不想敲太多代码,也可以通过简单的配置构建一个非常简单的集群。本文为说明Akka集群构建的学习成本低廉,以Akka官网的例子代码出发,进行简单改造后与Spring集成,有关Spring集成的信息你可以选择阅读《Spring与Akka的集成》一文。本文所讲述的是一款十分简便的集群监听器,它通...

2017-01-09 15:56:18 17037 2

原创 使用Akka的远程调用

概述正如其它RPC或者RMI框架那样,Akka也提供了远程调用的能力。服务端在监听的端口上接收客户端的调用。本文将在《Spring与Akka的集成》一文的基础上介绍Akka的remote调用,本文很多代码和例子来源于Akka官网的代码示例,也包含了一些适用于Spring集成的改造,本文旨在介绍Akka的远程调用的开发过程。服务端开发配置Akka的默认配置文件为application...

2017-01-06 15:01:25 11659 4

原创 Spring与Akka的集成

概述 近年来随着Spark的火热,Spark本身使用的开发语言Scala、用到的分布式内存文件系统Tachyon(现已更名为Alluxio)以及基于Actor并发编程模型的Akka都引起了大家的注意。了解过Akka或者Actor的人应该知道,这的确是一个很不错的框架,按照Akka官网的描述——使用Akka使得构建强有力的并发与分布式应用将更加容易。由于历史原因,很多Web系统在开发...

2017-01-04 10:23:34 16347 8

原创 Tomcat7.0源码分析——Session管理分析(下)

在《Tomcat7.0源码分析——Session管理分析(上)》一文中我介绍了Session、Session管理器,还以StandardManager为例介绍了Session管理器的初始化与启动,本文将接着介绍Session管理的其它内容。

2016-09-30 10:48:47 7109 5

原创 Tomcat7.0源码分析——Session管理分析(上)

对于广大java开发者而已,对于J2EE规范中的Session应该并不陌生,我们可以使用Session管理用户的会话信息,最常见的就是拿Session用来存放用户登录、身份、权限及状态等信息。对于使用Tomcat作为Web容器的大部分开发人员而言,Tomcat是如何实现Session标记用户和管理Session信息的呢?

2016-09-23 10:06:16 14993 8

原创 Quartz与Spring集成——QuartzSchedulerThread的执行分析

前面说过当paused设置为false,QuartzSchedulerThread才正式启动,我们接着《Quartz与Spring集成——创建调度器》与《Quartz与Spring集成——启动调度器》中QuartzSchedulerThread启动的部分接着展开分析。

2016-09-09 10:59:57 9265 2

原创 Quartz与Spring集成——启动调度器

在《Quartz与Spring集成——创建调度器》一文中介绍了调度器的创建过程,本文将分析其调度器的启动过程。

2016-09-08 10:08:51 14489 4

原创 Quartz与Spring集成——创建调度器

在《Quartz与Spring集成—— SchedulerFactoryBean的初始化分析》一文中介绍过,Spring集成Quartz时的初始化过程。创建调度器也是初始化过程中的一步,本文将着重介绍Quartz初始化时是如何创建调度器的。

2016-09-01 10:41:24 15034 7

原创 Tomcat7.0源码分析——请求原理分析(下)

本文继续讲解TOMCAT的请求原理分析,建议朋友们阅读本文时首先阅读过《Tomcat7.0源码分析——请求原理分析(上)》和《Tomcat7.0源码分析——请求原理分析(中)》。在《Tomcat7.0源码分析——请求原理分析(中)》一文我简单讲到了Pipeline,但并未完全展开,本文将从Pipeline开始讲解请求原理的剩余内容。

2016-07-28 10:37:35 12177 14

原创 Quartz与Spring集成—— SchedulerFactoryBean的初始化分析

Quartz是一个开源的定时调度框架,支持集群部署。我们可以通过其Java API来使用它,或者通过Spring来配置与管理,也可以结合使用两种方式。本文重点分析Quartz与Spring集成时的初始化过程。

2016-07-25 15:29:44 72039 9

原创 Hive通过查询语句向表中插入数据过程中发现的坑

在学习使用Hive的过程中,发现了一些坑,它们或许是Hive提倡的比关系数据库更加自由的体现(同时引来一些问题),或许是一些bug。总而言之,这些都需要使用Hive的开发人员额外注意。本文旨在列举我发现的2个通过查询语句向表中插入数据过程中的问题,希望大家注意。

2016-07-21 09:47:54 34288 8

原创 记Hadoop2.5.0线上mapreduce任务执行map任务划分的一次问题解决

近日在线上发现有些mapreduce作业的执行时间很长,我们需要解决这个问题。输入文件的大小是5G,采用了lzo压缩,整个集群的默认block大小是128M。本文将详细描述这次线上问题的排查过程。

2016-07-14 13:31:59 14027 2

原创 Tomcat7.0源码分析——请求原理分析(中)

在《TOMCAT7.0源码分析——请求原理分析(上)》一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握《TOMCAT7.0源码分析——请求原理分析(上)》一文中的相关知识以及HTTP协议和TCP协议的一些内容。本文重点讲解Tomcat7.0在准备好接受请求后,请求过程的原理分析。

2016-07-07 13:33:15 18963 18

原创 Tomcat7.0源码分析——请求原理分析(上)

谈起Tomcat的诞生,最早可以追溯到1995年。近20年来,Tomcat始终是使用最广泛的Web服务器,由于其使用Java语言开发,所以广为Java程序员所熟悉。很多人早期的J2EE项目,由程序员自己实现Jsp页面或者Servlet接受请求,后来借助Struts1、Struts2、Spring等中间件后,实际也是利用Filter或者Servlet处理请求,大家肯定要问了,这些Servlet处理的请求来自哪里?Tomcat作为Web服务器是怎样将HTTP请求交给Servlet的呢?

2016-06-30 08:38:24 35297 28

原创 Hadoop旧mapreduce的map任务切分原理

最近在工作过程中接触一些Hive数据仓库中的表,这些表实际是从关系型数据库通过Sqoop抽到Hive的。在开发过程中对map任务的划分进行性能调优,发现mapreduce中关于FileInputFormat的参数调整都不起作用,最后发现这些老任务都是用旧版的mapreduce开发的,于是顺便研究下旧版mapreduce的任务划分策略。

2016-06-16 09:47:35 11429 4

原创 《深入理解Spark:核心思想与源码分析》2次印刷修订内容清单

自从《深入理解Spark:核心思想与源码分析》一书出版以来,陆续收到很多读者的反馈,笔者为此在第1版第2次印刷之前做了一些勘误。为便于购买了老版本书籍的读者查漏补缺,现将勘误内容整理如下。

2016-06-13 17:44:51 5693 2

原创 Tomcat7.0源码分析——启动与停止服务原理

熟悉Tomcat的工程师们,肯定都知道Tomcat是如何启动与停止的。对于startup.sh、startup.bat、shutdown.sh、shutdown.bat等脚本或者批处理命令,大家一定知道改如何使用它,但是它们究竟是如何实现的,尤其是shutdown.sh脚本(或者shutdown.bat)究竟是如何和Tomcat进程通信的呢?本文将通过对Tomcat7.0的源码阅读,深入剖析这一过程。

2016-06-07 09:49:29 14928 6

原创 Tomcat7.0源码分析——生命周期管理

从server.xml文件解析出来的各个对象都是容器,比如:Server、Service、Connector等。这些容器都具有新建、初始化完成、启动、停止、失败、销毁等状态。tomcat的实现提供了对这些容器的生命周期管理,本文将通过对Tomcat7.0的源码阅读,深入剖析这一过程。

2016-06-02 09:44:32 29516 14

原创 Spark的RDD检查点实现分析

Spark的RDD执行完成之后会保存检查点,便于当整个作业运行失败重新运行时候,从检查点恢复之前已经运行成功的RDD结果,这样就会大大减少重新计算的成本,提高任务恢复效率和执行效率,节省Spark各个计算节点的资源。

2016-05-26 10:30:20 17013 5

原创 Hadoop2.6.0运行mapreduce之推断(speculative)执行(下)

前言在《Hadoop2.6.0运行mapreduce之推断(speculative)执行(上)》一文中对推断执行技术的背景进行了介绍,并且在Hadoop集群上做了一些测试以验证mapreduce框架的推断执行。最后还从源码分析的角度解读了DefaultSpeculator的初始化和启动过程,其中涉及DefaultSpeculator的实例化、LegacyTaskRuntimeEstimator的实

2016-05-19 10:00:07 11311

原创 Hadoop2.6.0运行mapreduce之推断(speculative)执行(上)

前言当一个应用向YARN集群提交作业后,此作业的多个任务由于负载不均衡、资源分布不均等原因都会导致各个任务运行完成的时间不一致,甚至会出现一个任务明显慢于同一作业的其它任务的情况。如果对这种情况不加优化,最慢的任务最终会拖慢整个作业的整体执行进度。好在mapreduce框架提供了任务推断执行机制,当有必要时就启动一个备份任务。最终会采用备份任务和原任务中率先执行完的结果作为最终结果。由于具体分析推

2016-05-12 14:39:44 23813

原创 Hadoop2.6.0运行mapreduce之Uber模式验证

在有些情况下,运行于Hadoop集群上的一些mapreduce作业本身的数据量并不是很大,如果此时的任务分片很多,那么为每个map任务或者reduce任务频繁创建Container,势必会增加Hadoop集群的资源消耗,并且因为创建分配Container本身的开销,还会增加这些任务的运行时延。如果能将这些小任务都放入少量的Container中执行,将会解决这些问题。

2016-05-05 14:55:38 25533 2

原创 Hadoop2.6.0中YARN底层状态机实现分析

Hadoop2.x.x版本的底层实现中作了很多优化:用状态机对各种对象生命周期和状态转移进行管理;采用事件机制避免线程同步与阻塞;采用Protocol Buffers优化RPC性能;采用Apache Avro优化日志等。本文主要针对YARN中状态机的实现进行分析,在这个过程中,会捎带一些事件的内容。

2016-04-29 08:30:19 24892 2

poi官方文档资料

关于excel 操作的开源poi项目文档

2012-03-01

空空如也

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

TA关注的人

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