Gobblin-框架与MR模式简介

Gobblin 是 Hadoop 通用数据摄取框架,可以从各种数据源中提取,转换和加载海量数据。比如:数据库,rest APIs,filers,等等。Gobblin 处理日常规划任务需要所有数据摄取 ETLs,包括作业/任务规划,任务分配,错误处理,状态管理,数据质量检测,数据发布等等。

Gobblin 通过同样的执行框架从不同数据源摄取数据,在同一个地方管理所有不同数据源的元数据。同时结合了其他特性,比如自动伸缩,容错,数据质量保证,可扩展和处理数据模型改革等等。Gobblin 变得更容易使用,是个高效的数据摄取框架。

系统框架与组件

一个Gobblin的Job就是从数据源抽取数据到Sink(比如HDFS)。一个Job可由多个workunits或者tasks组成,他们代表一系列需要做的工作,如抽取抽取(Extracter),转换(Converter),写(Writer)等

Gobblin 框架

Read More

Linkedin/Gobblin架构与源码学习-从Kafa-Hdfs的case study开始

Gobblin是Linkedin内部用来整合各种数据源(关系型数据库,kafka,FTP/SFTP servers等等)通用ETL框架,于14年开源(地址)。用本人低俗的理解,画了一张很大的饼,各种数据都可以在这里“一站式”解决ETL整个过程(据说他们内部也是这么干的),专为大数据而生。

在某道公司实习的时候参与到一个实时统计系统的优化,之前日志数据从Kafka到Hdfs的落地用的是Linkedin/camus,但据说作者不想写了(也有人说写到太烂了,,),现在已经停止开发,借助Hdfs上由Avro改Parquet列式存储的机会,把camus替换成了Gobblin,花了一段时间了解Gobblin。

论文的阅读理解和整体架构稍后再写吧,这次先借助官方Wiki的Kafka-Hdfs case study,从自己接触最多的部分开始介绍吧。

作为一个通用框架,Gobblin的接口封装和概念抽象做的很好,作为一个ETL框架使用者,基本地,我们只需要实现我们自己的SourceExtractorConventer类,再加上一些源-目的地址之类的通过配置文件提交给Gobblin就行了,当然Gobblin已经为我们实现了很多类,可以直接拿来用,比如针对Kafka的KafkaExtractor,KafkaSource,KafkaAvroSource(肯定少不了为Avro定制的东西,,)。不过Gobblin强大的地方还在于,还可以让用户定制更多的东西,比如QualitlyChecker,Writer,Publisher等,还支持Compaction去重和小文件的merge。

Read More

git常见问题备忘

1,github changes not staged for commit

Git在未进行commit操作之前,存在三种状态:Untracked files,
Changes not staged for commit及Changes to be committed,每种状态之间可以随意进行互相转换。

-Changes not staged for

commit”状态,表明文件已经修改,但是还没有放入暂存区域,也就是没生成快照。
如果现在进行commit操作,只是将修改之前的文件快照提交到了git目录,
只有暂存区域的文件(即:文件状态为“Changes to be committed”)才会被提交。
正如提示,通过“git add README.txt”命令将已修改文件更新到暂存区域中,
如果想撤销修改,可以使用“git checkout – README.txt”命令。

Read More

angularJS学习笔记

AngularJS 通过 ng-directives 扩展了 HTML。

  • ng-app 指令定义一个 AngularJS 应用程序。
  • ng-model 指令把元素值(比如输入域的值)绑定到应用程序。
  • ng-bind 指令把应用程序数据绑定到 HTML 视图。

什么是 AngularJS?

“AngularJS 是专门为应用程序设计的 HTML。”
AngularJS 使得开发现代的单一页面应用程序(SPAs:Single Page Applications)变得更加容易。
AngularJS 把应用程序数据绑定到 HTML 元素
AngularJS 可以克隆和重复 HTML 元素。
AngularJS 可以隐藏和显示 HTML 元素。
AngularJS 可以在 HTML 元素”背后”添加代码
AngularJS 支持输入验证

Read More

Coding 小技巧

  1. 如何打印数组不用for–println without foreach

就算debug用的再6,写代码中不可避免地要打印一些东西,高级语言横行的时代,Java数组打印居然还要自己foreach,不过还好各种容器类如List重写了toString函数,可以直接打印,那么问题就简单了,把数组转换成List。而且查阅源码,发现

  • Arrays.asList(T... a)其实是new了一个ArrayList,而且直接把数组的指针赋值过去的,没有多余地进行ArrayCopy。不过既然是模板,那么基本类型的数组是没法用的,,
  • Arrays.toString(各种类型包括Object[])后来发现这个,这个重载了好多,不仅支持Object数组,还支持各种基本类型数组,那就直接拿来用吧!
    总结:
    如果是基本类型,如int[] arr,这样打:System.out.println(Arrays.toString(arr));
    如果是String[]或者其他Object[] arr,这样打:System.out.println(Arrays.asList(arr));