<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[进击的数据小白]]></title><description><![CDATA[专注于高并发、大数据、人工智能&机器学习]]></description><link>https://blog.youkuaiyun.com/lidongmeng0213</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lidongmeng0213]]></copyright><item><title><![CDATA[Clickhouse原理&源码分析系列，持续更新]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128466518</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128466518</guid><author>lidongmeng0213</author><pubDate>Wed, 28 Dec 2022 11:46:03 +0800</pubDate><description><![CDATA[ClickHouse原理&源码分析系列，不定时更新中、]]></description><category></category></item><item><title><![CDATA[MergeTree概述]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128466466</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128466466</guid><author>lidongmeng0213</author><pubDate>Wed, 28 Dec 2022 11:40:31 +0800</pubDate><description><![CDATA[Clickhouse 中最强大的表引擎当属 MergeTree （合并树）引擎及该系列（MergeTree）中的其他引擎。MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中，数据可以以数据片段的形式一个接着一个的快速写入，数据片段在后台按照一定的规则进行合并。]]></description><category></category></item><item><title><![CDATA[MergeTree写入&查询流程分析]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128464640</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128464640</guid><author>lidongmeng0213</author><pubDate>Wed, 28 Dec 2022 10:05:38 +0800</pubDate><description><![CDATA[分区，索引，数据存储这些组件配合在一起给Clickhouse数据库带来非常高效的查询性能，本文从写入过程、查询过程，以及数据标记与压缩数据块的三种对应关系的角度展开介绍。]]></description><category></category></item><item><title><![CDATA[MergeTree原理之存储]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128464466</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128464466</guid><author>lidongmeng0213</author><pubDate>Wed, 28 Dec 2022 10:02:42 +0800</pubDate><description><![CDATA[我们都知道在MergeTree中数据是按列存储的，但是具体到存储的细节、以及如何工作的，都存在很多疑问。数据存储，就好比一本书中的文字，在排版时，绝不会密密麻麻地把文字堆满，这样会导致难以阅读。更为优雅的做法是，将文字按段落的形式精心组织，使其错落有致。本节将介绍MergeTree在数据存储方面的细节，尤其是其中关于压缩数据块的概念。]]></description><category></category></item><item><title><![CDATA[MergeTree原理之二级索引]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128464422</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128464422</guid><author>lidongmeng0213</author><pubDate>Wed, 28 Dec 2022 09:55:19 +0800</pubDate><description><![CDATA[除了一级索引之外，MergeTree同样支持二级索引，二级索引又称跳数索引，由数据的聚合信息构建而成。根据索引类型的不同，其聚合信息的内容也不同，当然跳数索引的作用和一级索引是一样的，也是为了查询时减少数据的扫描范围]]></description><category></category></item><item><title><![CDATA[MergeTree原理之一级索引]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128459448</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128459448</guid><author>lidongmeng0213</author><pubDate>Tue, 27 Dec 2022 17:55:11 +0800</pubDate><description><![CDATA[MergeTree的主键使用`PRIMARY KEY`定义，待主键定义之后，MergeTree会依据`index_granularity`间隔（默认8192行），为数据表生成一级索引并保存至`primary.idx`文件内，索引数据按照PRIMARY KEY排序。相比使用PRIMARY KEY定义，更为常见的简化形式是通过ORDER BY指代主键。在此种情形下，PRIMARY KEY与ORDER BY定义相同，所以索引（primary.idx）和数据（.bin）会按照完全相同的规则排序。]]></description><category></category></item><item><title><![CDATA[MergeTree原理之分区]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128459305</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/128459305</guid><author>lidongmeng0213</author><pubDate>Tue, 27 Dec 2022 17:46:12 +0800</pubDate><description><![CDATA[在MergeTree表引擎中，数据是以分区目录的形式进行组织的，每个分区独立分开存储，这样子在数据查询时候可以跳过无用的数据分区，最小化扫描的数据文件，从而达到加快查询的效果。本文将从分区的规则，底层目录的格式以及分区的合并规则等方面详细讲解数据分区目录具体是如何运作的。]]></description><category></category></item><item><title><![CDATA[leetcode系列-1642. Furthest Building You Can Reach]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/125397870</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/125397870</guid><author>lidongmeng0213</author><pubDate>Tue, 21 Jun 2022 20:24:53 +0800</pubDate><description><![CDATA[1642. Furthest Building You Can Reach]]></description><category></category></item><item><title><![CDATA[Hive常见调优总结]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/111157345</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/111157345</guid><author>lidongmeng0213</author><pubDate>Mon, 14 Dec 2020 11:56:25 +0800</pubDate><description><![CDATA[基础设置
队列选择
yarn队列分配，选择合适的队列进行运行，避免都在同一个繁忙的队列中运行。
SET mapreduce.job.queuename=xx;

控制mapper&amp;reducer数目
合理控制文件切分的各种参数，使Mapper和Reducer数目达到一个合适的值，可以加快处理速度。
// HiveInputFormat文件格式
# 文件分割最大大小
set mapreduce.input.fileinputformat.split.maxsize=536870912;
# 文件分割最]]></description><category></category></item><item><title><![CDATA[Hive调优之map&reduce数目]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110930032</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110930032</guid><author>lidongmeng0213</author><pubDate>Wed, 09 Dec 2020 16:56:30 +0800</pubDate><description><![CDATA[map数目确定方法
Map数目的划分是由输入文件大小，个数等因素决定的，另外不同的文件输入格式切分map数目的方法也是不一样的，我们来看下Hive使用的两种输入格式的Map数目确定方法。
HiveInputFormat
MapTask的数目主要有： input的文件总个数，input的文件大小，集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到，该参数不能自定义修改)，控制这些变量的参数如下:
set hive.input.format=org.apa]]></description><category></category></item><item><title><![CDATA[Hadoop深入浅出Hadoop Streaming&MRJob]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110927671</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110927671</guid><author>lidongmeng0213</author><pubDate>Wed, 09 Dec 2020 15:41:39 +0800</pubDate><description><![CDATA[Hadoop Streaming 是Hadoop提供的一个 MapReduce 编程工具，它允许用户使用任何可执行文件、脚本语言或其他编程语言来实现 Mapper 和 Reducer 作业。Hadoop Streaming 使用了 Unix 的标准输入输出作为 Hadoop 和其他编程语言的开发接口，因此在其他的编程语言所写的程序中，只需要将标准输入作为程序的输入，将标准输出作为程序的输出就可以了。

原理分析
Hadoop Streaming是Hadoop的一个工具， 它帮助用户创建和运行一类特殊的ma.]]></description><category></category></item><item><title><![CDATA[Hadoop实战&源码分析系列，持续更新]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110879123</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110879123</guid><author>lidongmeng0213</author><pubDate>Tue, 08 Dec 2020 18:27:25 +0800</pubDate><description><![CDATA[Hadoop
实战
MAC单机hadoop环境搭建&amp;Wordcount实现
mr实现join的功能–Map端Join
mr实现join的功能–Reduce端Join
源码分析
Hadoop源码分析之文件拆分
Hive
基础
Hive实战-建表相关操作
一文讲懂Hive窗口函数
UDF
Hive深入浅出UDF
Hive深入浅出UDAF
Hive深入浅出UDTF
Hive深入浅出Transform-Scripts
执行计划
Hive执行计划分析之group by执行计划分析
调优

...]]></description><category></category></item><item><title><![CDATA[Hive深入浅出Transform-Scripts]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110878902</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110878902</guid><author>lidongmeng0213</author><pubDate>Tue, 08 Dec 2020 18:10:52 +0800</pubDate><description><![CDATA[前面我们讲解了UDF，UDAF，UDTF的原理以及实现思路，本文我们介绍一种轻量级的自定义函数的实现方法，Hive的TRANSFORM关键字提供了在SQL中调用自写脚本的功能，适合实现Hive中没有的功能又不想写UDF的情况。

使用实例
脚本编写
我们来看一个具体的实例，比较简单，直接读取列的值，解析出来，然后在封装返回，没有做任何业务处理，如下所示:
#!/usr/bin/python

import sys

for line in sys.stdin:
    // 多列以\t分割
    a, .]]></description><category></category></item><item><title><![CDATA[Hive深入浅出UDTF]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110877351</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110877351</guid><author>lidongmeng0213</author><pubDate>Tue, 08 Dec 2020 17:07:50 +0800</pubDate><description><![CDATA[前面两篇文章我们分析了UDF和UDAF的原理以及实现思路，这一节我们介绍另外一种UDF: UDTF((User-Defined Table-Generating Functions)，是用来解决输入一行输出多行的需求的，本节我们来详细分析下UDTF如何实现以及如何与lateral view一起结合使用。

概述
UDTF(User-Defined Table-Generating Functions)是用来解决输入一行输出多行的需求。
执行步骤
要实现UDTF，我们需要继承org.apache.hadoo.]]></description><category></category></item><item><title><![CDATA[Hive深入浅出UDAF]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110869457</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110869457</guid><author>lidongmeng0213</author><pubDate>Tue, 08 Dec 2020 11:58:12 +0800</pubDate><description><![CDATA[上一篇我们讲解了基本UDF的编写，这一节我们来看下UDAF[User Defined Aggregation Functions]，自定义聚合函数，用来处理输入多行，输出一行的操作，类似MapReduce中Reduce操作。UDAF是需要在hive的sql语句和group by联合使用，hive的group by对于每个分组，只能返回一条记录。

概述
Hive是构建在Hadoop上的数据仓库，我们的sql语句最终都是要变成Mapreduce函数，只不过hive已经帮助我们写好并隐藏mapreduce ，.]]></description><category></category></item><item><title><![CDATA[Hive深入浅出UDF]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110850848</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110850848</guid><author>lidongmeng0213</author><pubDate>Tue, 08 Dec 2020 09:48:42 +0800</pubDate><description><![CDATA[Hive是一种构建在Hadoop上的数据仓库，Hive把SQL查询转换为一系列在Hadoop集群中运行的MapReduce作业，是MapReduce更高层次的抽象，不用编写具体的MapReduce方法，带来了很多便利，但是有时候hive提供的函数功能满足不了业务需要，就需要我们自己来写UDF函数来辅助完成。UDF函数其实就是一个简单的函数，执行过程就是在Hive转换成Mapreduce程序后，执行java方法，类似于像Mapreduce执行过程中加入一个插件，方便扩展。UDF只能实现一进一出的操作，如果需.]]></description><category></category></item><item><title><![CDATA[Spark源码分析系列之RDD]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110818859</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110818859</guid><author>lidongmeng0213</author><pubDate>Mon, 07 Dec 2020 14:57:38 +0800</pubDate><description><![CDATA[面试过程中经常会遇到一个问题:谈谈你对Spark RDD的理解，你该如何回答呢？RDD是弹性数据集，是Spark的基础数据结构，然后呢，没了吗？那我觉得可能面试官觉得你应该处于最低级的水平，本文详细的介绍了RDD，面试过程中你如果按照下面的顺序进行描述RDD，面试官应该会对你刮目相看。

概述
RDD是(Resilient Distributed Dataset)弹性分布式数据集，Spark中数据的基本抽象，表示不可变的，分区的可以并行操作的元素集合。RDD有五大部分组成:

分区集合: partitio.]]></description><category></category></item><item><title><![CDATA[Spark DAGScheduler源码分析系列之二: 事件处理器]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110656043</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110656043</guid><author>lidongmeng0213</author><pubDate>Fri, 04 Dec 2020 16:22:01 +0800</pubDate><description><![CDATA[概述
DAGScheduler中处理任务提交，任务失败，增加节点，删除节点等事件是通过事件处理器进行的。EventLoop用来接收来自调用者的事件并在线程中处理所有的事件。这是一个典型的生产消费模型：生产者通过调用DAGSchedulerEventProcessLoop.post(event: E)来将消息进行发布；消费者Eventloop内部维护了一个线程，循环的消费消息eventQueue.take()，调用onReceive(event)进行处理。DAGSchedulerEventProcessLoo]]></description><category></category></item><item><title><![CDATA[Spark Shuffle源码分析系列之UnsafeShuffleWriter]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110633370</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/110633370</guid><author>lidongmeng0213</author><pubDate>Fri, 04 Dec 2020 13:25:12 +0800</pubDate><description><![CDATA[前面我们介绍了BypassMergeSortShuffleWriter和SortShuffleWriter，知道了它们的应用场景和实现方式，本节我们来看下UnsafeShuffleWriter，它使用了Tungsten优化，排序的是二进制的数据，不会对数据进行反序列化操作，在某些情况下会加速Shuffle过程。

概述
UnsafeShuffleWriter提供了以序列化方式写入文件的方式，写入的内存既可以是on-heap也可以是off-heap，当数据到来时候，先序列化，然后使用序列化的数据排序，要想使.]]></description><category></category></item><item><title><![CDATA[Spark DAGScheduler源码分析系列之一: 基础]]></title><link>https://blog.youkuaiyun.com/lidongmeng0213/article/details/109821748</link><guid>https://blog.youkuaiyun.com/lidongmeng0213/article/details/109821748</guid><author>lidongmeng0213</author><pubDate>Thu, 19 Nov 2020 19:02:29 +0800</pubDate><description><![CDATA[DAGScheduler
DAGScheduler是Spark中比较重要的类，实现了面向DAG的高层次调度，DAGScheduler通过计算将DAG中的一系列RDD划分到不同的Stage，然后构建这些Stage之间的父子关系，最后将每个Stage按照Partition切分为多个Task，并以TaskSet的形式提交给底层的TaskScheduler。所有的组件都通过向DAGScheduler投递DAGSchedulerEvent来使用DAGScheduler。DAGScheduler内部的DAGSchedu]]></description><category></category></item></channel></rss>