hadoop介绍
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。以下为hadoop三大组件
- HDFS 文件系统,负责海量数据的分布式存储
- yarn 集群资源的管理和调度
- mapReduce 计算模型,负责海量数据的分布式计算
官方版&发行版
- Apache Hadoop:官方版本,开源
- Cloudera Hadoop(CDH):商业版本,提供技术支持,界面操作,方便集群运维管理
- HortonWorks(HDP):开源,提供界面,方便运维管理,目前HDP已被CDH收购
2.Shuffle过程详解
网络拷贝的过程,指通过网络把数据从Map端拷贝到Reduce端的一个过程。
3.Hadoop 中序列化机制的特点
- 紧凑:高效实用存储空间
- 快速:读写数据的额外开销小
- 可扩展:可透明读取老格式的数据
- 互操作:支持多语言的交互
InputFormat分析
OutputFormat分析
4.Mapreduce性能优化
小文件问题
Hadoop的HDFS和MapReduce框架是针对大数据文件来设计的,在小文件的处理上不但效率低下,而且十分消耗内存资源
SequeceFile
MapFile
- MapFile是排序后的SequenceFile,MapFile由两部分组成,分别是index和data。
- index作为文件的数据索引,主要记录了每个Record的key值,以及该Record在文件中的偏移位置。
- 在MapFile被访问的时候,索引文件会被加载到内存,通过索引映射关系可迅速定位到指定Record所在文件位置。
hadoop jar hdfsdemo-1.0-SNAPSHOT-jar-with-dependencies.jar mapreduce/WordCountJob /seqFile /out