1 。hadoop的运用场景
- 大数据量存储:分布式存储
- 日志处理: Hadoop擅长这个
- 海量计算: 并行计算
- ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库
- 使用HBase做数据分析: 用扩展性应对大量的写操作—Facebook构建了基于HBase的实时数据分析系统
- 机器学习: 比如Apache Mahout项目
- 搜索引擎:hadoop + lucene实现
- 数据挖掘:目前比较流行的广告推荐
- 大量地从文件中顺序读。HDFS对顺序读进行了优化,代价是对于随机的访问负载较高。
- 数据支持一次写入,多次读取。对于已经形成的数据的更新不支持。
- 数据不进行本地缓存(文件很大,且顺序读没有局部性)
- 任何一台服务器都有可能失效,需要通过大量的数据复制使得性能不会受到大的影响。
- 用户细分特征建模
- 个性化广告推荐
- 智能仪器推荐
2.hadoop生态圈
我们经常一提到hadoop,就会听别人说到Hive, Pig, HBase, Sqoop, Mahout, Zookeeper等等。其实这些项目都是hadoop的一些相关项目。它们有些是hadoop的组件,有些是新的hadoop框架(基于hadoop原理的架构)。尽管Hadoop因MapReduce及其分布式文件系统(HDFS,由NDFS改名而来)而出名,但Hadoop这个名字也用于一组相关项目的统称,这些相关项目都使用这个基础平台进行分布式计算和海量数据处理。
下面是一些常用的组件:还有一些新的组件框架可查看
Common
一组分布式文件系统和通用I/O的组件与接口(序列化、Java RPC和持久化数据结构)。
Avro
一种支持高效、跨语言的RPC以及永久存储数据的序列化系统。
MapReduce
分布式数据处理模型和执行环境,运行于大型商用机集群。
HDFS
分布式文件系统,运行于大型商用机集群。
Pig
一种数据流语言和运行环境,用以检索非常大的数据集。Pig运行在MapReduce和HDFS的集群上。
Hive
一个分布式、按列存储的数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言(由运行时引擎翻译成MapReduce作业)用以查询数据。
HBase
一个分布式、按列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取)。
ZooKeeper
一个分布式、可用性高的协调服务。ZooKeeper提供分布式锁之类的基本服务用于构建分布式应用。
Sqoop
在数据库和HDFS之间高效传输数据的工具。 -
3.hadoop的框架演化
大数据本质也是数据,但是又有了新的特征,包括数据来源广、数据格式多样化(结构化数据、非结构化数据、Excel文件、文本文件等)、数据量大(最少也是TB级别的、甚至可能是PB级别)、数据增长速度快等。
针对以上主要的4个特征我们需要考虑以下问题:
数据来源广,该如何采集汇总?,对应出现了Sqoop,Cammel,Datax等工具。
数据采集之后,该如何存储?,对应出现了GFS,HDFS,TFS等分布式文件存储系统。
由于数据增长速度快,数据存储就必须可以水平扩展。
数据存储之后,该如何通过运算快速转化成一致的格式,该如何快速运算出自己想要的结果?
对应的MapReduce这样的分布式运算框架解决了这个问题;但是写MapReduce需要Java代码量很大,所以出现了Hive,Pig等将SQL转化成MapReduce的解析引擎;
普通的MapReduce处理数据只能一批一批地处理,时间延迟太长,为了实现每输入一条数据就能得到结果,于是出现了Storm/JStorm这样的低时延的流式计算框架;
但是如果同时需要批处理和流处理,按照如上就得搭两个集群,Hadoop集群(包括HDFS+MapReduce+Yarn)和Storm集群,不易于管理,所以出现了Spark这样的一站式的计算框架,既可以进行批处理,又可以进行流处理(实质上是微批处理)。
而后Lambda架构,Kappa架构的出现,又提供了一种业务处理的通用架构。
为了提高工作效率,加快运速度,出现了一些辅助工具:
Ozzie,azkaban:定时任务调度的工具。
Hue,Zepplin:图形化任务执行管理,结果查看工具。
Scala语言:编写Spark程序的最佳语言,当然也可以选择用Python。
Python语言:编写一些脚本时会用到。
Allluxio,Kylin等:通过对存储的数据进行预处理,加快运算速度的工具。
图片来源:http://blog.csdn.net/GitChat/article/details/78341484