CarbonData-1:common
最近公司需要对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的更多相关文章
- phpcms 源码分析三:common.inc.php
这次是逆雪寒分析common.inc.php的数据库部分: <?php // 包含数据库操作类,下章详说 require PHPCMS_ROOT.'/include/'.$db_file.'.c ...
- phpcms 源码分析一: common.inc.php
其实就是从网上找到的的逆雪寒的分析, 我下来之后发现格式和错字的问题,非常影响阅读,现在我就是做了下搬运工的角色, 同时将格式调整到可读性提高点而已,让各位看官稍微舒心点: 下面进入整体: < ...
- HDU1159 && POJ1458:Common Subsequence(LCS)
Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...
- 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 ...
- POJ 1458:Common Subsequence
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 41957 Accepted: 16 ...
- 算法:Common Subsequence(动态规划 Java 最长子序列)
Description A subsequence of a given sequence is the given sequence with some elements (possible non ...
- HDU 1159:Common Subsequence(LCS模板)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu-题目1159:Common Subsequence
http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Java/Oth ...
- POJ3415:Common Substrings——题解
http://poj.org/problem?id=3415 给定两个字符串A 和B,求长度不小于k 的公共子串的个数(可以相同). 论文题,和上道题(POJ2774)类似,首先想到现将AB串合并,然 ...
随机推荐
- Node.js API 学习笔记
常用 API 学习笔记 url 函数 url.parse: 解析 url 地址 url.resolve: 向 url 地址添加或替换字段 url.format: 生成 url 地址 querystri ...
- sql server 中getdate() 的日期时间字符串表示法
1. SELECT CONVERT(varchar(100), GETDATE(), 0) 05 9 2011 9:12AM SELECT CONVERT(varchar(100), GETDATE( ...
- UOJ#405. 【IOI2018】组合动作
原文链接https://www.cnblogs.com/zhouzhendong/p/IOI2018Day1T1.html 题解 首先二分一下,花费2次操作求出第一位的字符. 假设第一个字符是 Y,答 ...
- Win10 清理自带APP
如果想一次性把它们全都删掉,请输入: Get-AppxPackage -AllUsers | Remove-AppxPackage 但是如果你先建一个账户,以上应用就会再次全部出现,不想这样的话可以输 ...
- Jenkins 快速上手指南
步骤: 在服务器上安装好jenkins. 在浏览器地址栏输入:服务器地址+":8080/jenkins",回车访问jenkins主页. 单击“新建”,创建任务.如下图: 为任务命名 ...
- centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'
centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法 3.7版本需要一个新的包libffi-de ...
- .net程序员面试小结(内附一些面试题和答案)
今天下午去面试,面试官和HR小姐姐都很好,没有做面试题,用聊天的方式来交流技术,整个过程很轻松,从中也学到了很多知识. 下面就来总结一下面试过程. 一.深刻了解自己的简历 无论是HR还是技术面试人,首 ...
- ARC 103
目录 官方题解 C 官方题解 C 这道题教会了我怎样正确统计众数和第二众数........... 我之前的方法是错的 #include <bits/stdc++.h> using name ...
- gcc各个版本下载
http://www.gnu.org/order/ftp.html http://ftp.gnu.org/gnu/gcc/
- Luogu 45887 全村最好的嘤嘤刀(线段树 树状数组)
https://www.luogu.org/problemnew/show/T45887 题目背景 重阳节到了,我们最好的八重樱拥有全村最好的嘤嘤刀…… 题目描述 在绯玉丸力量的影响下,八重村成了一条 ...