<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[u013597009的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u013597009</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u013597009]]></copyright><item><title><![CDATA[scala使用par并行集合设置的线程池未关闭导致的内存占用问题]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/78616868</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/78616868</guid><author>u013597009</author><pubDate>Thu, 23 Nov 2017 17:11:19 +0800</pubDate><description><![CDATA[问题产生背景
         程序语言使用的是scala。
        在处理大量数据时，使用了par函数将普通集合转为并行集合集合，通过多线程并发处理达到提升处理效率的目的，相关代码如下：

for循环{
    ...
  process()
}

def process(): Unit ={
  val map: Map[String, Int] = Map("a"->1, "]]></description><category></category></item><item><title><![CDATA[java jackson avro kryo等几种序列化与反序列化工具的使用]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/78538018</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/78538018</guid><author>u013597009</author><pubDate>Wed, 15 Nov 2017 10:34:28 +0800</pubDate><description><![CDATA[最近由于工作需要，需要研究常用的集中序列化方式，主要目的是对象序列化后占用空间会大大减少，便于存储和传输，下面是几种序列化方式的使用demo
 
1. Java自带的Serialize
依赖jar包：无
代码示意：
import java.io.{ByteArrayInputStream, ByteArrayOutputStream, ObjectInputStream, ObjectO]]></description><category></category></item><item><title><![CDATA[LoadingCache在Spark HistoryServer中的运用]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/75240944</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/75240944</guid><author>u013597009</author><pubDate>Mon, 17 Jul 2017 15:08:38 +0800</pubDate><description><![CDATA[之前分析了Spark HistoryServer的Web界面构建和后台数据解析的流程，下面介绍一下Web操作在后台执行的流程以及为了提高查询速度，数据在HistoryServer的缓存策略绑定路由 
在HistoryServer的实例化过程中，会绑定以/api/v1/开头的路由attachHandler(ApiRootResource.getServletHandler(this))ApiRootR]]></description><category></category></item><item><title><![CDATA[Spark源码阅读之HistoryServer]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/75220607</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/75220607</guid><author>u013597009</author><pubDate>Mon, 17 Jul 2017 10:56:54 +0800</pubDate><description><![CDATA[概述 
    HistoryServer服务可以让用户通过Spark UI界面，查看历史应用（已经执行完的应用）的执行细节，比如job信息、stage信息、task信息等，该功能是基于spark eventlogs日志文件的，所以必须打开eventlogs日志开关，关于日志开关的打开和HistoryServer服务的启动方法这里不再讲述，下面进入正题下面使用的spark版本是2.0.2类结构图]]></description><category></category></item><item><title><![CDATA[Standalone模式下Spark任务资源分配]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/73732207</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/73732207</guid><author>u013597009</author><pubDate>Mon, 26 Jun 2017 09:20:17 +0800</pubDate><description><![CDATA[Standalone模式下Spark任务资源分配
1.背景
    在spark集群采用spark-submit命令提交任务时，我们可以通过配置资源相关参数来控制任务使用的资源，比如总核数，每个executor中核数与内存等，但是这个任务在spark集群中实际占用资源是没法配置的，需要根据实际环境和参数结合起来考虑，下面是就是对Standalone模式下Spark任务在集群中实际资源分配的分析]]></description><category></category></item><item><title><![CDATA[命令行编译运行scala文件]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/54972269</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/54972269</guid><author>u013597009</author><pubDate>Fri, 10 Feb 2017 17:07:30 +0800</pubDate><description><![CDATA[package com.xx.yy
import java.util._;
object HelloWorld {
        def main(args: Array[String]) {
                println("Hello World!");
        }
}

使用scala命令运行scala文件
第一步：配置环境变量，如果已经配置就忽略这个步骤啦]]></description><category></category></item><item><title><![CDATA[Spark UI详解]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53994846</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53994846</guid><author>u013597009</author><pubDate>Tue, 03 Jan 2017 15:25:46 +0800</pubDate><description><![CDATA[在大型分布式系统中，采用事件监听机制是最常见的。如果Spark
 UI采用Scala的函数调用方式，由于函数调用多数情况下是同步调用，导致线程被阻塞。将函数调用更换为发送事件，事件的处理时异步的，当前线程可以继续执行后续逻辑，线程池中的线程还可以被重用，这样整个系统的并发度会大大增加。发送的事件会存入缓存，由定时调度器取出后，分配给监听此事件的监听器对监控数据进行更新。




UI详]]></description><category></category></item><item><title><![CDATA[Spark统一内存管理模型UnifiedMemoryManager]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53945648</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53945648</guid><author>u013597009</author><pubDate>Fri, 30 Dec 2016 18:25:22 +0800</pubDate><description><![CDATA[从spark1.6开始，引入了新的内存管理方式-----统一内存管理(UnifiedMemoryManager)。
在统一内存管理下，Spark一个executor中的jvm
 heap内存被划分成如下图:



在开始介绍图中各个部分之前，我们先明确一个概念（我还是以我熟悉spark on yarn来介绍），我们在为Executor申请内存的时候，实际是JVM 的堆(heap)内存。]]></description><category></category></item><item><title><![CDATA[Spark OutputCommitCoordinator]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53945434</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53945434</guid><author>u013597009</author><pubDate>Fri, 30 Dec 2016 17:50:34 +0800</pubDate><description><![CDATA[确定任务是否可以把输出提到到HFDS的管理者。 使用先提交者胜的策略。
在driver 端和执行器端都要初始化OutputCommitCoordinator。在执行器端，有一个指向driver 端OutputCommitCoordinatorEndpoing对象的引用，所以提交输出的请求到被转发到driver端的OutputCommitCoordinator.
这个类在Spark-4879提出]]></description><category></category></item><item><title><![CDATA[Spark测量系统 MetricsSystem]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53945177</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53945177</guid><author>u013597009</author><pubDate>Fri, 30 Dec 2016 17:26:30 +0800</pubDate><description><![CDATA[Spark测量系统，由指定的instance创建，由source、sink组成，周期性地从source获取指标然后发送到sink，其中instance、source、sink的概念如下：
Instance：指定了谁在使用测量系统，在spark中有一些列如master、worker、executor、client driver这些角色，这些角色创建测量系统用于监控spark状态，目前在spark中]]></description><category></category></item><item><title><![CDATA[缓存管理器CacheManager]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53944280</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53944280</guid><author>u013597009</author><pubDate>Fri, 30 Dec 2016 16:12:56 +0800</pubDate><description><![CDATA[如果说spark是一把在大数据处理领域的快刀，那么spark的存储系统设计及管理等相关模块就算不是刀尖，也算得上十分锋利的刀锋了，由于工作需要，我会伴着源码来深入学习一下，这里做一个记录备忘。



RDD的cache和persist

谈到spark存储，第一反应先想到了RDD里的cache和persist。如果从RDD中的cache方法作为入口来看，cache与persist殊途同]]></description><category></category></item><item><title><![CDATA[磁盘块管理器DiskBlockManager]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53943999</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53943999</guid><author>u013597009</author><pubDate>Fri, 30 Dec 2016 15:50:01 +0800</pubDate><description><![CDATA[DiskBlockManager管理和维护了逻辑上的Block和存储在Disk上的物理的Block的映射。默认情况下，一个逻辑的Block会根据它的BlockId生成的名字映射到一个物理上的文件。但是，也可以使用mapBlockToFileSegment方法映射到一个文件的一段区域。 这些物理文件会被hash到由Spark.local.dir（或者通过SPARK_LOCAL_DIRS来设置）上的不]]></description><category></category></item><item><title><![CDATA[Spark Broadcast内幕分析]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53943779</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53943779</guid><author>u013597009</author><pubDate>Fri, 30 Dec 2016 15:35:24 +0800</pubDate><description><![CDATA[一：Broadcast彻底解析

1.Broadcast就是将数据从一个节点发送到其他的节点上。例如Driver上有一张表，而Executor中的每个并行执行的Task（100万个）都要查询这张表，那我们通过Broadcast的方式就只需要往每个Executor把这张表发送一次就行了。Executor中的每个运行的Task查询这张唯一的表，而不是每次执行的时候都从Driver获得这张表！
]]></description><category></category></item><item><title><![CDATA[Spark之MapOutputTracker类简单说明]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53930149</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53930149</guid><author>u013597009</author><pubDate>Thu, 29 Dec 2016 16:52:32 +0800</pubDate><description><![CDATA[相关类：MapOutputTrackerMessage，GetMapOutputStatuses extends MapPutputTrackerMessage，StopMapOutputTracker extends MapOutputTrackerMessage，MapOutputTrackerMasterActor，MapOutputTrackerMaster。

    首先重写Map]]></description><category></category></item><item><title><![CDATA[Spark Rpc通信分析]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53928414</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53928414</guid><author>u013597009</author><pubDate>Thu, 29 Dec 2016 15:20:41 +0800</pubDate><description><![CDATA[Spark 1.6+推出了以RPCEnv、RPCEndpoint、RPCEndpointRef为核心的新型架构下的RPC通信方式。其具体实现有Akka和Netty两种方式，Akka是基于Scala的Actor的分布式消息通信系统，Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具，用以快速开发高性能、高可靠性的网络服务器和客户端程序。

]]></description><category></category></item><item><title><![CDATA[Linux登录时的环境变量设置]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53925147</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53925147</guid><author>u013597009</author><pubDate>Thu, 29 Dec 2016 10:56:14 +0800</pubDate><description><![CDATA[关于登录linux时，/etc/profile、~/.bash_profile等几个文件的执行过程
在登录Linux时要执行文件的过程如下：
在 刚登录Linux时，首先启动 /etc/profile 文件，然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个，执行的顺序为：~/.bash_profile、 ~/.bash]]></description><category></category></item><item><title><![CDATA[SparkContext源码的简单分析]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53910577</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53910577</guid><author>u013597009</author><pubDate>Wed, 28 Dec 2016 17:14:29 +0800</pubDate><description><![CDATA[本篇文章就要根据源码分析SparkContext所做的一些事情，用过Spark的开发者都知道SparkContext是编写Spark程序用到的第一个类，足以说明SparkContext的重要性；这里先摘抄SparkContext源码注释来 简单介绍介绍SparkContext，注释的第一句话就是说SparkContext为Spark的主要入口点，简明扼要，如把Spark集群当作服务端那Spark]]></description><category></category></item><item><title><![CDATA[CopyOnWrite容器]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53910304</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53910304</guid><author>u013597009</author><pubDate>Wed, 28 Dec 2016 17:01:22 +0800</pubDate><description><![CDATA[Copy-On-Write简称COW，是一种用于程序设计中的优化策略。其基本思路是，从一开始大家都在共享同一个内容，当某个人想要修改这个内容的时候，才会真正把内容Copy出去形成一个新的内容然后再改，这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。]]></description><category></category></item><item><title><![CDATA[编程之美中01背包问题的scala实现]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53331519</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53331519</guid><author>u013597009</author><pubDate>Fri, 25 Nov 2016 10:21:16 +0800</pubDate><description><![CDATA[问题描述：
有n个物体有重量和价值两个属性，一个能承重一定重量的背包。问怎么选择物体能实现背包里的价值最大化。比如假设有5个物体和一个背包。物体的重量分别是2、2、6、5、4，价值分别是6、3、5、4、6，背包承重为10。问怎么选择，能实现背包所背物体价值的最大化。
 
思路：
对于有T个物品，容量为V的情形，核心就是在容量为m时，将第n个物品放进来时的最大价值与不放进来时的最大价值相比较]]></description><category></category></item><item><title><![CDATA[编程之美中烙饼排序的scala实现]]></title><link>https://blog.youkuaiyun.com/u013597009/article/details/53287988</link><guid>https://blog.youkuaiyun.com/u013597009/article/details/53287988</guid><author>u013597009</author><pubDate>Tue, 22 Nov 2016 16:47:26 +0800</pubDate><description><![CDATA[最近看了《编程之美》，书中讲了很多有趣的小例子，突然发现生活中有很多事情都可以和编程结合起来分析，感觉自己之前的思路真是太窄了，正好目前主要使用的编程语言是scala，于是选取几个例子，动手使用scala实现一遍，有感兴趣的朋友看看就好啦。
代码如下：
object CookieSort{

  var cakeArray: Array[Int] = Array.empty  //炊饼数组
 ]]></description><category></category></item></channel></rss>