Skip to main content

 路由器设置 > 新闻资讯 >

Hadoop周边生态软件和简要工作原理

2013-07-25 02:01 浏览:

Sqoop:

sqoop在hadoop生态系统中也是应用率比较高的软件,主要是用来做ETL工具,由yadoo研发并提交给Apache。Hadoop整个生态圈里面,大部分的应用都是Yadoo研发的,贡献非常大。Yahoo里面出来两拨人,分别组建了Cloudera和Hortonworks。

所谓ETL,就是数据的抽取(extract)加载(load)转换(transform)。将一种格式或表现形式的数据,通过代码,改变形态,变成另一种格式或表现形式的数据。哪怕是把矩阵里的排列顺序改变,也算是ETL。

 

Sqoop最主要的特点是可以在很多数据库和数据格式之间转换,通过设置参数,可以把oracle,mysql里面的结构化数据,变成非结构化的保存到HDFS里面,也可以把HDFS里面的数据提取出来保存到数据库或者是纯文本,很灵活。中间的转换过程用Hive还是自己的mapreduce,还是用pig,mahout,都不重要。他提供的是到各种系统之间的接口,以命令行参数方式执行。

 

其实sqoop的实现并不复杂,自己花不了多少时间也可以把sqoop重新实现一下,只要了解了他的工作原理,无非就是做好各种数据库和Hadoop之间的接口即可。我们目前没有用sqoop,而是自己用python实现了一套类似的东西。

 

Oozie:

很棒的东西,著名的工作流系统。可以把各种数据流串起来,想象一下街边的烤串。就像烤板筋,一块板筋就是一个数据任务,一块肥肉也是一个数据任务,板筋和肥肉要交错进行,才能得到最终的可口食物,那么oozie担负的就是竹签子的任务。把数据任务串好,经过一段时间的等待,烤板筋就可以吃了。中间可能还会有各种依赖,比如撒撒盐,撒撒辣椒,也是在整个工作流里面去完成的。

 

一个真正的BI决策很有可能要经过极其复杂的数据流,数据之间的相互依赖也很高。A任务跑完,才可以开始B,C任务,而B,C任务又依赖D任务的数据,然后E任务依赖B,C的数据,得出的结果F又要跟A任务进行比对分析,才最终得到结果G。这就是一个简单的数据流了,中间如何控制整个数据的流程和产出,就需要oozie来完成。

 

Mahout:

Mahout可以说是大数据算法智慧的结晶,他里面包含了很多机器学习和人工智能的算法。有基于map/reduce计算的,也有不基于map/reduce计算的。其算法数量之多,几乎可以涵盖各个主要领域。

 

不过mahout的算法库过于通用,无法适应所有需求,在我们的实际使用过程中,我们很少直接用mahout去做计算,更多的时候是拿mahout作为算法参考的代码库,然后根据自己的需求做二次重构。比如在互联网里使用频率最高的推荐和分类聚类算法,都需要自己去重新根据不同的需求去实现,但无论怎样,即使作为算法参考,mahout仍然是非常牛逼的东西。只是最近更新的很慢,从2012年发布了0.7,就没再更新过了。

 

Pig:

pig的工作原理类似Hive,早于hive出现,也是由yahoo进行开发的。在hive出现以前,pig在hadoop生态圈里一直是独领风骚。后来Hive出现以后就逐渐势微了。毕竟是一个全新的语言,比起用sql的hive来说,业务几乎可以无成本迁移。而pig毕竟还是需要一定的学习成本的,但是pig在数据处理上比hive更加灵活,应该来说算是编译map/reduce应用的先驱者。

 

不过我还是一直不太会写pig-latin。最近有一个开源项目,把pig做成了可视化的东西,非常不错,叫lipstick,值得一试。

 

Bookkeeper:

是从zookeeper里面分离出来的子项目,比较新,还没怎么看过。但是看介绍,应该是跟NN的HA有很大的关系。Hadoop的单点一直是比较令人头疼的地方,各种分布式文件系统大约都存在这种问题。MooseFS什么的,也都需要靠heartbeat,DRBD等去阶段master的单点问题。HDFS也不例外,于是早先就有人提出用zookeeper来解决NN的温备,热备。但是非常复杂,既要防止脑裂,也无法做到近乎实时的热切换。因为如果把zk的检查时间设置很短,就会导致压力增高,而zk的时间设置长了,就无法做到实时热备。我记得好像要设置在10-20秒左右才可以。bookkeeper应该就是为了解决过于复杂的解决方案而分离出来的子项目。

本文出自 “实践检验真理” 博客