热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

376页8万字大数据Hadoop存储与分析处理平台建设方案

1Hadoop11.1概述11.1.1Hadoop能做什么11.2特点11.3软件设计21.3.1Hadoop中的文件格式21.3.2机架感知121.4Hadoop知

1 Hadoop 1

1.1 概述 1

1.1.1 Hadoop能做什么 1

1.2 特点 1

1.3 软件设计 2

1.3.1 Hadoop 中的文件格式 2

1.3.2 机架感知 12

1.4 Hadoop知识学习篇 14

1.4.1 Java接口 14

1.4.2 FileSystem总结 1

1.4.3 文件读取过程/文件写入过程 4

1.4.4 Hadoop均衡器 1

1.4.5 Hadoop存档 2

1.4.6 数据完整性 3

1.4.7 压缩 4

1.4.8 序列化【优点】 6

1.4.9 序列化框架 14

1.4.10 MapReduce过程中的序列化与反序列化 43

1.4.11 √HDFS数据结构 53

1.4.12 MapReduce框架 55

1.4.13 MapReduce工作机制 70

1.4.14 推测执行【优点】 74

1.4.15 重用JVM【优化】 75

1.4.16 IDS 75

1.4.17 输入格式 75

1.4.18 输出格式 21

1.4.19 计数器 27

1.4.20 √排序技术 33

1.4.21 全排序 48

1.4.22 √连接 51

1.4.23 DistributedCache 58

1.4.24 √作业链接 65

1.4.25 √默认的MapReduce作业 66

1.4.26 集群规范 66

1.4.27 网络拓扑[优点] 67

1.4.28 环境设置 72

1.4.29 守护进程的关键属性 73

1.4.30 安全性 77

1.4.31 安全模式 77

1.4.32 fsck工具 77

1.4.33 日常维护 80

1.5 Hadoop知识总结篇 82

1.5.1 Hadoop通信协议总结 82

1.5.2 通过日志掌握Hadoop运行过程(HDFS/MAPREDUCE) 1

1.5.3 MapReduce配置调优 1

1.5.4 MapReduce过程配置 1

1.6 应用程序运行JOB 3

1.7 Hadoop源码篇 3

2 Accumulo 5

3 海量数据查询支撑分系统 5

3.1 Dremel 5

3.1.1 概述 5

3.1.2 软件设计 6

3.1.3 一句话总结 13

3.2 Drill 14

3.2.1 概述 14

3.3 Tez 15

3.4 Impala*** 22

3.5 Tajo*** 22

3.6 序列化框架与RPC 22

3.6.1 Avro 22

3.6.2 Protocol 22

3.6.3 Thrift 22

3.7 缓存 22

4 算法研究***** 24

4.1 BloomFilter 24

4.1.1 集合表示和元素查询 24

4.1.2 错误率估计 25

4.1.3 最优的哈希函数个数 27

4.1.4 位数组的大小 28

4.1.5 总结 29

4.2 Bit Map(BitSet) 30

4.2.1 Bit Map的基本思想 30

4.2.2 Map映射表 32

4.2.3 位移转换 33

4.2.4 扩展 39

4.2.5 Bit-Map的应用 39

4.2.6 Bit-Map的具体实现 39

4.3 哈希算法 53

4.4 二叉树 72

4.5 堆与堆排序 72

4.6 双层桶划分 84

4.7 trie树 86

4.8 外排序 93

5 海量数据处理思路 97

5.1 Bloom filter 134

5.2 Hashing 136

5.3 bit-map 137

5.4 138

5.5 双层桶划分 139

5.6 数据库索引 140

5.7 倒排索引(Inverted index) 141

5.8 外排序 142

5.9 trie树 143

6 经典博文 147

从Hadoop框架与MapReduce模式中谈海量数据处理 147

6.1.1 前言 147

6.1.2 第一部分、mapreduce模式与hadoop框架深入浅出 148

6.1.3 架构扼要 148

6.1.4 Mapreduce模式 148

6.1.5 Hadoop框架 150

6.1.6 Hadoop的组成部分 151

6.1.7 第二部分、淘宝海量数据产品技术架构解读—学习海量数据处理经验 155

6.1.8 淘宝海量数据产品技术架构 155

mapreduce的二次排序 SecondarySort 162342c55cd9bbbfc32471de803a2f5f11b.jpeg


1.1.1 概述

Drill 是Hadoop的赞助商之一MapR发起的。Drill作为一个Dremel的山寨项目,有和Dremel相似的架构和能力。他们希望Drill最终会想Hive,Pig一样成为

Hadoop上的重要组成部分。为Hadoop提供快速查询的能力。和Dremel有一点不同,在数据模型上,开源的项目需要支持更标准的数据结构。比如CSV和

JSON。同时Drill还有更大的灵活性,支持多重查询语言,多种接口。

现在Drill的目标是完成初始的需求,架构。完成一个初始的实现。这个实现包括一个执行引擎和DrQL。DrQL是一个基于列的格式,类似于Dremel。目前,

Drill已经完成的需求和架构设计。总共分为了四个组件

Query language:类似Google BigQuery的查询语言,支持嵌套模型,名为DrQL.

Low-lantency distribute execution engine:执行引擎,可以支持大规模扩展和容错。可以运行在上万台机器上计算数以PB的数据。

Nested data format:嵌套数据模型,和Dremel类似。也支持CSV,JSON,YAML类似的模型。这样执行引擎就可以支持更多的数据类型。

Scalable data source: 支持多种数据源,现阶段以Hadoop为数据源。


1.1 Tez

Tez是Apache最新开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。总结起来,Tez有以下特点:

(1)Apache二级开源项目(源代码今天发布的)

(2)运行在YARN之上

(3) 适用于DAG(有向图)应用(同Impala、Dremel和Drill一样,可用于替换Hive/Pig等)

其中,第三点需要做一些简单的说明,Apache当前有顶级项目Oozie用于DAG作业设计,但Oozie是比较高层(作业层面)的,它只是提供了一种多类型作业(比如MR程序、Hive、Pig等)依赖关系表达方式,并按照这种依赖关系提交这些作业,而Tez则不同,它在更底层提供了DAG编程接口,用户编写程序时直接采用这些接口进行程序设计,这种更底层的编程方式会带来更高的效率,举例如下:

(1)传统的MR(包括Hive,Pig和直接编写MR程序)。假设有四个有依赖关系的MR作业(1个较为复杂的Hive SQL语句或者Pig脚本可能被翻译成4个有依赖关系的MR作业)或者用Oozie描述的4个有依赖关系的作业,运行过程如下(其中,绿色是Reduce Task,需要写HDFS):

be8279c9c9b094f701e5efe7a3f34090.jpeg

(2)采用Tez,则运行过程如下:

90043e6dee4f37b949d88923b74d6d7b.jpeg

通过上面的例子可以看出,Tez可以将多个有依赖的作业转换为一个作业(这样只需写一次HDFS,且中间节点较少),从而大大提升DAG作业的性能。Tez已被Hortonworks用于Hive引擎的优化,经测试,性能提升约100倍(http://hortonworks.com/blog/100x-faster-hive/)。

【Tez实现】

Tez对外提供了6种可编程组件,分别是:

(1)Input:对输入数据源的抽象,它解析输入数据格式,并吐出一个个Key/value

(2)Output:对输出数据源的抽象,它将用户程序产生的Key/value写入文件系统

(3)Paritioner:对数据进行分片,类似于MR中的Partitioner

(4)Processor:对计算的抽象,它从一个Input中获取数据,经处理后,通过Output输出

(5)Task:对任务的抽象,每个Task由一个Input、Ouput和Processor组成

(6)Maser:管理各个Task的依赖关系,并按顺依赖关系执行他们

除了以上6种组件,Tez还提供了两种算子,分别是Sort(排序)和Shuffle(混洗),为了用户使用方便,它还提供了多种Input、Output、Task和Sort的实现,具体如下:

(1)Input实现:LocalMergedInput(文件本地合并后作为输入),ShuffledMergedInput(远程拷贝数据且合并后作为输入)

(2)Output实现:InMemorySortedOutput(内存排序后输出),LocalOnFileSorterOutput(本地磁盘排序后输出),OnFileSortedOutput(磁盘排序后输出)

(3) Task实现:RunTimeTask(非常简单的Task,基本没做什么事)

(4)Sort实现:DefaultSorter(本地数据排序),InMemoryShuffleSorter(远程拷贝数据并排序)

为了展示Tez的使用方法和验证Tez框架的可用性,Apache在YARN MRAppMaster基础上使用Tez编程接口重新设计了MapReduce框架,使之可运行在YARN中。为此,Tez提供了以下几个组件:

(1)Input:SimpleInput(直接使用MR InputFormat获取数据)

(2)Output:SimpleOutput(直接使用MR OutputFormat获取数据)

(3)Partition:MRPartitioner(直接使用MR Partitioner获取数据)

(4)Processor:MapProcessor(执行Map Task),ReduceProcessor(执行Reduce Task)

(5)Task:FinalTask,InitialTask,initialTaskWithInMemSort,InitialTaskWithLocalSort ,IntermediateTask,LocalFinalTask,MapOnlyTask。

文章引用的资料均通过互联网等公开渠道合法获取,仅作为行业交流和学习使用,并无任何商业目的。其版权归原资料作者或出版社所有,本文作者不对所涉及的版权问题承担任何法律责任。若版权方、出版社认为本文章侵权,请立即通知作者删除。


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 精讲代理设计模式
    代理设计模式为其他对象提供一种代理以控制对这个对象的访问。代理模式实现原理代理模式主要包含三个角色,即抽象主题角色(Subject)、委托类角色(被代理角色ÿ ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 如何找到并加速缓慢的代码,提高性能
    本文讲述了如何找到并加速缓慢的代码,提高系统性能。作者通过优化内部循环、利用多处理器运行内部循环以及减少内部循环运行次数等方式来提高代码的执行效率。以一个游戏开发中的案例为例,作者介绍了如何通过调查和排查问题,找到导致帧率下降的设计缺陷,并进行修复。文章总结了优化代码的关键点,并提供了一些实用的方法和技巧。 ... [详细]
author-avatar
一月的泰迪熊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有