0%

升级hexo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
npm install -g hexo-cli
hexo version

npm install -g npm-check
npm-check

npm install -g npm-upgrade
npm-upgrade

npm update -g
npm install -g npm

hexo clean #清理hexo数据并重新生成页面并部署
hexo g -s
hexo d

升级next

进入到项目根目录

1
git clone https://github.com/next-theme/hexo-theme-next themes/next

参考

Hexo升级指南 | Mingshan Lei’s Blog

[toc]

翻译自 https://blog.clairvoyantsoft.com/guide-to-using-apache-kudu-and-performance-comparison-with-hdfs-453c4b26554f

Apache Kudu是一个开源的列式存储引擎。它保证了低延迟的随机访问和分析查询的有效执行。kudu存储引擎支持通过Cloudera Impala,Spark以及Java,C ++和Python API进行访问。

本文的目的是记录我在探索Apache Kudu方面的经验,了解它的局限性,并进行一些实验以比较Apache Kudu存储与HDFS存储的性能。

阅读全文 »

一、FlushMode分类

1.1 AUTO_FLUSH_SYNC

​ 每个 KuduSession方法的apply调用只会在被自动刷新到服务器后返回。不会出现批处理。在这种模式下,flush方法调用不会产生任何影响,因为每个kudusession apply() 返回之前已经刷新了缓冲区,数据已经发往tablet。

​ 这种刷新模式,也就是阻塞式写入,每个调用都要等到tablet返回后才会完成。特点是及时性较好,但是吞吐量不高

image

阅读全文 »

麒麟出没,必有祥瑞

方法介绍

​ 这一步是Kylin运行MR任务来提取使用字典编码(rowkey配置也的编码类型为dict)的维度列的唯一值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//构建方法 
public MapReduceExecutable createFactDistinctColumnsStep(String jobId) {
MapReduceExecutable result = new MapReduceExecutable();
result.setName(ExecutableConstants.STEP_NAME_FACT_DISTINCT_COLUMNS);
result.setMapReduceJobClass(FactDistinctColumnsJob.class);
StringBuilder cmd = new StringBuilder();
appendMapReduceParameters(cmd);
appendExecCmdParameters(cmd, BatchConstants.ARG_CUBE_NAME, seg.getRealization().getName());
appendExecCmdParameters(cmd, BatchConstants.ARG_OUTPUT, getFactDistinctColumnsPath(jobId));
appendExecCmdParameters(cmd, BatchConstants.ARG_SEGMENT_ID, seg.getUuid());
appendExecCmdParameters(cmd, BatchConstants.ARG_STATS_OUTPUT, getStatisticsPath(jobId));
appendExecCmdParameters(cmd, BatchConstants.ARG_STATS_SAMPLING_PERCENT, String.valueOf(config.getConfig().getCubingInMemSamplingPercent()));
appendExecCmdParameters(cmd, BatchConstants.ARG_JOB_NAME, "Kylin_Fact_Distinct_Columns_" + seg.getRealization().getName() + "_Step");
appendExecCmdParameters(cmd, BatchConstants.ARG_CUBING_JOB_ID, jobId);
result.setMapReduceParams(cmd.toString());
result.setCounterSaveAs(CubingJob.SOURCE_RECORD_COUNT + "," + CubingJob.SOURCE_SIZE_BYTES);
return result;
}
阅读全文 »

麒麟出没,必有祥瑞

​ 前一章介绍了构建引擎相关的原理,本章介绍其中的Hive输入的相关操作。

​ Hive相关主要分为以下几步:

  • 生成Hive宽表
  • 均匀打散上面生成的宽表
  • 物化lookup维表
阅读全文 »

麒麟出没,必有祥瑞

​ 从本章节开始,开始深入探讨BatchCubingJobBuilder2的build方法。

​ 在开始之前,先上一个类图。在途中,核心就是BatchCubingJobBuilder2类,这个类的实例的创建,在前面的文章(Kylin源码解析-kylin构建任务生成与调度执行 | 编程狂想)中有详细介绍,这里不再赘述。

image

​ 如下图,这个BatchCubingJobBuilder2就是这个引擎,它串起了数据源(输入)和存储(输出),而它本身,就类似一个加工程序,按照指定的操作流程对数据源进行加工,然后将加工好的数据存入到存储介质当中。

​ 这里可以打个不太恰当的比喻,把这个引擎比喻成一个面条机,输入则是面粉,面粉的则有分为很多种类,然后经过引擎加工,输出到不同的容器当中,比如盆子或者包装袋中。

​ 它的输入和输出是一个可插拔的,输入的面粉种类可以随意换,输出的容器也可以随意换,但是里面加工步骤是不变的,都是先加水,后搅拌,然后在挤压…最后生成面条。

image

阅读全文 »

麒麟出没,必有祥瑞

​ 在上文Kylin源码解析-kylin构建任务生成与调度执行 | 编程狂想 中详细介绍了Kylin构建任务的生成和调度,其中讲到,会调用BatchCubingJobBuilder2的build方法,生成一个CubingJob实例,本文就介绍下这个build方法大致流程,并描述整个构建过程。 如下图所示,分为四个阶段和十四步。

阅读全文 »