最近公司需要对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. SQL反模式学习笔记6 支持可变属性【实体-属性-值】

    目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...

  2. Beta(4/7)

    鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...

  3. Codeforces --- 982C Cut 'em all! DFS加贪心

    题目链接: https://cn.vjudge.net/problem/1576783/origin 输入输出: ExamplesinputCopy42 44 13 1outputCopy1input ...

  4. 【CF765F】Souvenirs 主席树

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

  5. NEL程序员专用轻钱包 进入0.01状态了

    这个轻钱包能干什么,现在就能在测试网看个余额,转个帐,调用个合约. 而且功能非常程序员化 你会说是不是没啥用   但是他有非常有用,因为他可以很容易的拼出NEOGUI拼不出来的交易 比如参与ICO交易 ...

  6. 2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017)

    A. Alien Sunset 暴力枚举答案即可. #include<cstdio> int n,i,mx; struct P{ int h,r,t; bool night(int x){ ...

  7. vector, map, queue,set常用总结

    #include<bits/stdc++.h> using namespace std; vector<,); 定义一个大小为9,初始化全是1的vector数组 set<int ...

  8. VMware workstation --虚拟机静态ip设置

    背景介绍 我在本机win10上安装VMware workstation软件,新建两台centos7虚拟机,最近在配服务,每天虚拟机重启后,ip总会变,服务配置文件又要修改,很麻烦,便需要将其ip由dh ...

  9. Java 前端模板引擎学习:thymeleaf 模板引擎

    模板引擎接口 ITemplateEngine 一.后台数据与外部数据 1.处理后台数据 $表达式是个变量表达式,用于处理在  request parameters and the request, s ...

  10. html页面转成jsp页面之后样式变化的问题解决方法

    转载:https://blog.csdn.net/zeb_perfect/article/details/51172859