最近公司需要对CarbonData进一步应用,或许封装进产品,或许是为了解析CarbonData元数据,于是开始预研CarbonData,下面将保持每天一篇以上的阅读CarbonData源码博客,由于自己基础薄弱,会记录自己所有觉得有价值的点,内容或旁杂或简单,海涵。

  阅读方式以example或test类为入口,后期熟悉整体项目后将走完整流程,并与parquet进行对比。

  源码整体结构如下:

  第一篇 common package

一:首先浏览Test类LoggingServiceTest_FT,主要是carbon对日志服务进行了一些定制,在这里我看到了MDC, MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。即用户个体的行为日志是不完整的,多用户多线程的情况下,打印出来的日志会参杂断续,比如:

2018-12-15 00:00:00  did something (userA)

2018-12-15 00:00:01  did something (userB )

2018-12-15 00:00:02  did something  (userA)

除非用户自己定义将用户姓名打印到日志中,否则很难维护整个项目全量的日志,MDC的作用就是一个map映射,根据kye去取出相应的value。

然后是对日志的封装:

在MDC内部实现中有ThreadLocalMap,之前就听说过这个是为了让多线程中每个线程都有自己的变量副本,不受其他线程的影响。实现方式也是一个Map,只是这里的kye非常特殊,是线程本身,value就是复制的变量值。今天点进去发现ThreadLocalMap继承inheritableThreadLocal,这个类的作用正如其名,inheritable父进程的value值,也就是说在某个线程中,new了一个新的线程,该线程在原map中是没有的,所以返回是null,但是有了这个类,就使得它拥有和父进程一样的value。

Hashtable ht = (Hashtable)((ThreadLocalMap)this.tlm).get();
public final class ThreadLocalMap extends InheritableThreadLocal {
public ThreadLocalMap() {
} public final Object childValue(Object parentValue) {
Hashtable ht = (Hashtable)parentValue;
return ht != null ? ht.clone() : null;
}
}
二:LogServiceFactoryTest_UT,主要是定义了一个final standardLogService,即日志标准类,对日志的开发定义规范,部门也可以借鉴,现在各个系统,系统内部的日志格式都不统一,一个是存在无法快速定位问题,第二个是无法对接外部日志系统。

测试类就这两个,接下去整体看下所有类

三:

annotations,自定义注解;

LoggerAction 是对badrecord的处理枚举,badrecord发生在Data Load之后,即数据load失败,如数据的列与目的表的列数不一致,就会出现bad,处理的当时就在这个枚举中定义,目前有四种,如将错误数据转换为null,或者不做处理直接写入,或者不写入,最后一种是当出现bad,整个data load失败。  badrecord会存在一个指定目录下     CarbonProperties.getInstance().addProperty("carbon.badRecords.location","hdfs://master:9000/data/carbondata/badrecords/")。

标准日志输出,StandardLogService 如设置日志开头,打印Thread.name,partitionId、hostName、UserName(Hadoop-common包中)

CarbonIterator,implements Iterator 作用是去除了Iterator的remove方法,并且定义了其他的abstract方法,改变各类的遍历方式

Maps,对map中的null定义了default value

Stings 为Scala增加了mkString方法

Common Package结束

CarbonData-1:common的更多相关文章

  1. phpcms 源码分析三:common.inc.php

    这次是逆雪寒分析common.inc.php的数据库部分: <?php // 包含数据库操作类,下章详说 require PHPCMS_ROOT.'/include/'.$db_file.'.c ...

  2. phpcms 源码分析一: common.inc.php

      其实就是从网上找到的的逆雪寒的分析, 我下来之后发现格式和错字的问题,非常影响阅读,现在我就是做了下搬运工的角色, 同时将格式调整到可读性提高点而已,让各位看官稍微舒心点: 下面进入整体: < ...

  3. HDU1159 && POJ1458:Common Subsequence(LCS)

    Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...

  4. Java-Maven(十二):idea多项目:common module进行compiler和install正常,运行domain-perf module提示:Could not resolve dependencies for project

    前提: product项目下有三个module,分别是: driver module domain-perf module common module 问题: driver 和 domain-perf ...

  5. POJ 1458:Common Subsequence

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 41957   Accepted: 16 ...

  6. 算法:Common Subsequence(动态规划 Java 最长子序列)

    Description A subsequence of a given sequence is the given sequence with some elements (possible non ...

  7. HDU 1159:Common Subsequence(LCS模板)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. hdu-题目1159:Common Subsequence

    http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Java/Oth ...

  9. POJ3415:Common Substrings——题解

    http://poj.org/problem?id=3415 给定两个字符串A 和B,求长度不小于k 的公共子串的个数(可以相同). 论文题,和上道题(POJ2774)类似,首先想到现将AB串合并,然 ...

随机推荐

  1. 蓝桥杯 购物单(使用word协助)

    标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折 ...

  2. 【Linux】-- Linux上java运行环境的配置(JDK+TOMCAT)

    1.JDK安装 安装之前首先要查询软件是否存可以直接使用yum安装 yum search java | grep open 选择需要的版本安装 注意:*星号代表下载该版本的所有文件,不能少. 验证是否 ...

  3. 第六篇 flask中session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 Flask 中 session 的使用 1. Flask 中 session 是 ...

  4. 【CF765F】Souvenirs 主席树

    [CF765F]Souvenirs 题意:给你一个长度为n的序列{ai},有m个询问,每次询问给出l,r,问在所有$l\le x < y\le r$中,$|a_x-a_y|$的最小值是多少. $ ...

  5. JS_高程8.BOM window对象(1)

    1.全局作用域 var age = 14; window.coloer = "pink"; console.log(delete window.age);//false 使用var ...

  6. Resource Allocation of Yarn

    关键词:yarn 资源分配 mapreduce spark 简要指南 适合不想看太多原理细节直接上手用的人. 基本原则: container分配的内存不等于机器实际用掉的内存.NM给container ...

  7. 正则序RegExp

    正则的理解 1.正则的懒惰性    每次在exec()中捕获的时候,只捕获第一次匹配的内容,而不往下不捕获了.我们把这叫正则的懒惰性,每一次捕获的开始位置都是从0开始 解决正则的懒惰性 修饰符g 正则 ...

  8. spring boot 开始部署报Whitelabel Error Page错解决方法

    因为时刚刚才学spring boot ,第一次碰到的问题,花了半个小时终于明白了,SpringBoot 的application类会自动扫描子包类下的mapping方法,因此application类不 ...

  9. C#获取变更过的DataTable记录的实现方法

    本文实例讲述了C#获取变更过的DataTable记录的实现方法,是一个非常实用的功能!具体实现方法如下: 首先DataTable可以看做是一个物理表的内存式存储,每一个DataRow都有一个属性叫做R ...

  10. SQL2005EXPress自动备份

    STEP1:在数据库服务器的master表中创建存储过程sp_BackupDatabase 代码如下 USE [master] GO /****** 对象: StoredProcedure [dbo] ...