1、I通用大数据存储与分析处理平台总体建设方案(Hadoop)II目 录1.Hadoop 11.1 概述 .11.1.1 Hadoop 能做什么 .11.2 特点 .11.3 软件设计 .11.3.1 Hadoop 中的文件格式 .11.3.2 机架感知 .101.4 Hadoop 知识学习篇 .111.4.1 RPC .111.4.2 Avro、 Thrift.111.4.3 Java 接口 .111.4.4 FileSystem 总结 .11.4.5 文件读取过程/文件写入过程 .41.4.6 Hadoop 均衡器 .11.4.7 Hadoop 存档 .11.4.8 数据完整性 .31.4.9
2、 压缩 .41.4.10.序列化【优点】 61.4.11.序列化框架 111.4.12 .MapReduce 过程中的序列化与反序列化 201.4.13.HDFS 数据结构 251.4.14.MapReduce 框架 261.4.15.MapReduce 工作机制 391.4.16.推测执行【优点】 421.4.17.重用 JVM【优化】 431.4.18.IDS 431.4.19.输入格式 431.4.20.输出格式 151.4.21.计数器 201.4.22.排序技术 241.4.23.连接 331.4.24.DistributedCache 381.4.25.作业链接 42III1.4.
3、26 .默认的 MapReduce 作业 431.4.27.集群规范 431.4.28.网络拓扑优点 441.4.29.环境设置 481.4.30.守护进程的关键属性 491.4.31.安全性 531.4.32.安全模式 531.4.33.fsck 工具 531.4.34.日常维护 551.5 Hadoop 知识总结篇 .571.5.1 Hadoop 通信协议总结 .571.5.2 通过日志掌握 Hadoop 运行过程(HDFS/MAPREDUCE) .11.5.3 MapReduce 配置调优 .11.5.4 MapReduce 过程配置 .11.6 应用程序运行 JOB .21.7 Had
4、oop 源码篇 .22 Accumulo.43 海量数据查询支撑分系统 .43.1 Dremel.43.1.1 概述 .43.1.2 软件设计 .53.1.3 一句话总结 .93.2 Drill .93.2.1 概述 .93.3 Tez.103.4 Impala*.143.5 Tajo* .143.6 序列化框架与 RPC .153.6.1 Avro .153.6.2 Protocol.153.6.3 Thrift.153.7 缓存 .154 算法研究* .164.1 BloomFilter .164.1.1 集合表示和元素查询 .16IV4.1.2 错误率估计 .174.1.3 最优的哈希函
5、数个数 .184.1.4 位数组的大小 .184.1.5 总结 .194.2 Bit Map(BitSet) .204.2.1 Bit Map 的基本思想 .204.2.2 Map 映射表 .224.2.3 位移转换 .224.2.4 扩展 .254.2.5 Bit-Map 的应用 .254.2.6 Bit-Map 的具体实现 .254.3 哈希算法 .324.4 二叉树 .434.5 堆与堆排序 .434.6 双层桶划分 .494.7 trie 树 .504.8 外排序 .565 海量数据处理思路 .585.1 Bloom filter.805.2 Hashing .815.3 bit-ma
6、p.825.4 堆 .835.5 双层桶划分 .835.6 数据库索引 .845.7 倒排索引(Inverted index) .845.8 外排序 .855.9 trie 树 .866 经典博文 .88从 Hadoop 框架与 MapReduce 模式中谈海量数据处理 .886.1.1 前言 .886.1.2 第一部分、mapreduce 模式与 hadoop 框架深入浅出 .886.1.3 架构扼要 .886.1.4 Mapreduce 模式 .896.1.5 Hadoop 框架 .906.1.6 Hadoop 的组成部分 .90V6.1.7 第二部分、淘宝海量数据产品技术架构解读学习海量
7、数据处理经验 926.1.8 淘宝海量数据产品技术架构 .92mapreduce 的二次排序 SecondarySort.9511 Hadoop1.1 概述1.1.1 Hadoop 能做什么1、搜索引擎 (Doug Cutting 设计 Hadoop 的初衷,为了针对大规模的网页快速建立索引)。2、大数据存储 ,利用 Hadoop 的分布式存储能力,例如数据备份、数据仓库等。3、大数据处理 ,利用 Hadoop 的分布式处理能力,例如数据挖掘、数据分析等。4、科学研究 ,Hadoop 是一种分布式的开源框架,对于分布式计算有很大程度地参考价值。 大数据存储 海量数据批量处理: 排序、连接 ET
8、L(去重、转化) 数据挖掘 日志处理 用户细分特征建模 个性化广告推荐 智能仪器推荐1.2 特点1.高可靠性。Hadoop 按位存储和处理数据的能力值得人们信赖。2.高扩展性。Hadoop 是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。3.高效性。Hadoop 能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。4.高容错性。Hadoop 能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。5.低成本。与一体机、商用数据仓库以及 QlikView、Yonghong Z-Suite 等数据集市相比,hadoop 是开源
9、的,项目的软件成本因此会大大降低。21.3 软件设计1.3.1 Hadoop 中的文件格式SequenceFile SequenceFile 是 Hadoop API 提供的一种二进制文件,它将数据以的形式序列化到文件中。这种二进制文件内部使用 Hadoop 的标准的Writable 接口实现序列化和反序列化。它与 Hadoop API 中的 MapFile 是互相兼容的。Hive 中的 SequenceFile 继承自 Hadoop API 的 SequenceFile,不过它的key 为空,使用 value 存放实际的值, 这样是为了避免 MR 在运行 map 阶段的排序过程。如果你用 J
10、ava API 编写 SequenceFile,并让 Hive 读取的话,请确保使用 value 字段存放数据,否则你需要自定义读取这种 SequenceFile 的InputFormat class 和 OutputFormat class。图 1:Sequencefile 文件结构SequenceFile读写实例private static final String DATA =“One,Two,buckle my shoe“,“Three,four,shut the door“,“File,six,pick up sticks“,“Seven,eight,lay them straigh
11、t“,“Nie,ten,a big fat hen“;public static void writeToHDFS(String args) throws IOException for(int j=1;j“+value);RCFile RCFile 是 Hive 推出的一种专门面向列的数据格式。 它遵循“先按列划分,再垂直划分”的设计理念。当查询过程中,针对它并不关心的列时,它会在 IO 上跳过这些列。需要说明的是,RCFile 在 map 阶段从远端拷贝仍然是拷贝整个数据块,并且拷贝到本地目录后 RCFile 并不是真正直接跳过不需要的列,并跳到需要读取的列, 而是通过扫描每一个 row
12、group 的头部定义来实现的,但是在整个 HDFS Block 级别的头部并没有定义每个列从哪个 row group 起始到哪个 row group 结束。所以在读取所有列的情况下,RCFile 的性能反而没有 SequenceFile 高。4图 2:RCFile 文件结构3 AvroAvro 是一种用于支持数据密集型的二进制文件格式。它的文件格式更为紧凑,若要读取大量数据时,Avro 能够提供更好的序列化和反序列化性能。并且 Avro 数据文件天生是带 Schema 定义的,所以它不需要开发者在 API 级别实现自己的Writable 对象。最近多个 Hadoop 子项目都支持 Avro
13、数据格式,如 Pig 、Hive、Flume、Sqoop 和 Hcatalog。图 3:Avro MR 文件格式4. 文本格式除上面提到的 3 种二进制格式之外,文本格式的数据也是 Hadoop 中经常碰到的。如 TextFile 、XML 和 JSON。 文本格式除了会占用更多磁盘资源外,对它的解析5开销一般会比二进制格式高几十倍以上,尤其是 XML 和 JSON,它们的解析开销比Textfile 还要大,因此强烈不建议在生产系统中使用这些格式进行储存。 如果需要输出这些格式,请在客户端做相应的转换操作。 文本格式经常会用于日志收集,数据库导入,Hive 默认配置也是使用文本格式,而且常常容
14、易忘了压缩,所以请确保使用了正确的格式。另外文本格式的一个缺点是它不具备类型和模式,比如销售金额、利润这类数值数据或者日期时间类型的数据,如果使用文本格式保存,由于它们本身的字符串类型的长短不一,或者含有负数,导致 MR 没有办法排序,所以往往需要将它们预处理成含有模式的二进制格式,这又导致了不必要的预处理步骤的开销和储存资源的浪费。5. 外部格式Hadoop 实际上支持任意文件格式,只要能够实现对应的 RecordWriter 和RecordReader 即可。其中数据库格式也是会经常储存在 Hadoop 中,比如Hbase,Mysql,Cassandra,MongoDB。 这些格式一般是为
15、了避免大量的数据移动和快速装载的需求而用的。他们的序列化和反序列化都是由这些数据库格式的客户端完成,并且文件的储存位置和数据布局(Data Layout)不由 Hadoop 控制,他们的文件切分也不是按 HDFS 的块大小(blocksize)进行切割。文件存储大小比较与分析我们选取一个 TPC-H 标准测试来说明不同的文件格式在存储上的开销。因为此数据是公开的,所以读者如果对此结果感兴趣,也可以对照后面的实验自行做一遍。Orders 表文本格式的原始大小为 1.62G。 我们将其装载进 Hadoop 并使用Hive 将其转化成以上几种格式,在同一种 LZO 压缩模式下测试形成的文件的大小。Orders_text1 1732690045 1.61G 非压缩 TextFileOrders_tex2 772681211 736M LZO压缩TextFileOrders_seq1 1935513587 1.80G 非压缩 SequenceFileOrders_seq2 822048201 783M LZO压缩 SequenceFileOrders_rcfile1 1648746355 1.53G 非压缩 RCFileOrders_rcfile2 686927221 655M LZO压缩 RCFileOrders_avro_table115683593341.46G非压缩 Avro