大数据Hadoop平台集成实施服务解决方案
大数据Hadoop存储与分析处理平台建设方案目录1HADOOP11.1概述11.1.1Hadoop能做什么11.2特点11.3软件设计21.3.1Hadoop 中的文件格式21.3.2机架感知121.4Hadoop知识学习篇141.4.1Java接口141.4.2FileSystem总结11.4.3文件读取过程/文件写入过程41.4.4Hadoop均衡器11.4.5Hadoop存档21.4.6数据完整性31.4.7压缩41.4.8序列化【优点】61.4.9序列化框架141.4.10MapReduce过程中的序列化与反序列化431.4.11HDFS数据结构531.4.12MapReduce框架551.4.13MapReduce工作机制701.4.14推测执行【优点】741.4.15重用JVM【优化】751.4.16IDS751.4.17输入格式751.4.18输出格式211.4.19计数器271.4.20排序技术331.4.21全排序481.4.22连接511.4.23DistributedCache581.4.24作业链接651.4.25默认的MapReduce作业661.4.26集群规范661.4.27网络拓扑优点671.4.28环境设置721.4.29守护进程的关键属性731.4.30安全性771.4.31安全模式771.4.32fsck工具771.4.33日常维护801.5Hadoop知识总结篇821.5.1Hadoop通信协议总结821.5.2通过日志掌握Hadoop运行过程(HDFS/MAPREDUCE)11.5.3MapReduce配置调优11.5.4MapReduce过程配置11.6应用程序运行JOB31.7Hadoop源码篇32ACCUMULO53海量数据查询支撑分系统53.1Dremel53.1.1概述53.1.2软件设计63.1.3一句话总结133.2Drill143.2.1概述143.3Tez153.4Impala*223.5Tajo*223.6序列化框架与RPC223.6.1Avro223.6.2Protocol223.6.3Thrift223.7缓存224算法研究*244.1BloomFilter244.1.1集合表示和元素查询244.1.2错误率估计254.1.3最优的哈希函数个数274.1.4位数组的大小284.1.5总结294.2Bit Map(BitSet)304.2.1Bit Map的基本思想304.2.2Map映射表324.2.3位移转换334.2.4扩展394.2.5Bit-Map的应用394.2.6Bit-Map的具体实现394.3哈希算法534.4二叉树724.5堆与堆排序724.6双层桶划分844.7trie树864.8外排序935海量数据处理思路975.1Bloom filter1345.2Hashing1365.3bit-map1375.4堆1385.5双层桶划分1395.6数据库索引1405.7倒排索引(Inverted index)1415.8外排序1425.9trie树1436经典博文147从Hadoop框架与MapReduce模式中谈海量数据处理1476.1.1前言1476.1.2第一部分、mapreduce模式与hadoop框架深入浅出1486.1.3架构扼要1486.1.4Mapreduce模式1486.1.5Hadoop框架1506.1.6Hadoop的组成部分1516.1.7第二部分、淘宝海量数据产品技术架构解读学习海量数据处理经验1556.1.8淘宝海量数据产品技术架构155mapreduce的二次排序 SecondarySort162IV1 Hadoop1.1 概述1.1.1 Hadoop能做什么1、搜索引擎(Doug Cutting 设计Hadoop的初衷,为了针对大规模的网页快速建立索引)。2、大数据存储,利用Hadoop的分布式存储能力,例如数据备份、数据仓库等。3、大数据处理,利用Hadoop的分布式处理能力,例如数据挖掘、数据分析等。4、科学研究,Hadoop是一种分布式的开源框架,对于分布式计算有很大程度地参考价值。Ø 大数据存储Ø 海量数据批量处理:n 排序、连接 n ETL(去重、转化)n 数据挖掘n 日志处理n 用户细分特征建模n 个性化广告推荐n 智能仪器推荐1.2 特点1. 高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。2. 高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。3. 高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。4. 高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。5. 低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。1.3 软件设计1.3.1 Hadoop 中的文件格式SequenceFile SequenceFile是Hadoop API 提供的一种二进制文件,它将数据以<key,value>的形式序列化到文件中。这种二进制文件内部使用Hadoop 的标准的Writable 接口实现序列化和反序列化。它与Hadoop API中的MapFile 是互相兼容的。Hive 中的SequenceFile 继承自Hadoop API 的SequenceFile,不过它的key为空,使用value 存放实际的值, 这样是为了避免MR 在运行map 阶段的排序过程。如果你用Java 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 straight","Nie,ten,a big fat hen"public static void writeToHDFS(String args) throws IOException for(int j=1;j<=5;j+)String uri ="hdfs:/mylinux:9000/data/exam/seqfiles/seq_"+System.currentTimeMillis();Configuration conf =new Configuration();FileSystem fs = FileSystem.get(URI.create(uri),conf);Path path =new Path(uri);IntWritable key = new IntWritable();Text value =new Text();SequenceFile.Writer writer= null;writer =SequenceFile.createWriter(fs, conf, path, key.getClass(), value.getClass();for(int i=0;i<100;i+)key.set(100-i)*j);value.set(DATAi%DATA.length);writer.append(key, value);public static void readFromHDFS(String args) throws IOExceptionString uri ="hdfs:/mylinux:9000/data/exam/seqfiles/seq_1399127337932"Configuration conf =new Configuration();FileSystem fs = FileSystem.get(URI.create(uri),conf);Path path =new Path(uri);SequenceFile.Reader reader =new SequenceFile.Reader(fs, path, conf);Writable key =(Writable)ReflectionUtils.newInstance(reader.getKeyClass(),conf);Writable value =(Writable)ReflectionUtils.newInstance(reader.getValueClass(),conf);long pos =reader.getPosition();while(reader.next(key, value)System.out.println(key+"=>"+value);RCFile RCFile是Hive推出的一种专门面向列的数据格式。 它遵循“先按列划分,再垂直划分”的设计理念。当查询过程中,针对它并不关心的列时,它会在IO上跳过这些列。需要说明的是,RCFile在map阶段从远端拷贝仍然是拷贝整个数据块,并且拷贝到本地目录后RCFile并不是真正直接跳过不需要的列,并跳到需要读取的列, 而是通过扫描每一个row group的头部定义来实现的,但是在整个HDFS Block 级别的头部并没有定义每个列从哪个row group起始到哪个row group结束。所以在读取所有列的情况下,RCFile的性能反而没有SequenceFile高。图2:RCFile 文件结构3 AvroAvro是一种用于支持数据密集型的二进制文件格式。它的文件格式更为紧凑,若要读取大量数据时,Avro能够提供更好的序列化和反序列化性能。并且Avro数据文件天生是带Schema定义的,所以它不需要开发者在API 级别实现自己的Writable对象。最近多个Hadoo