Hadoop笔记:
1、combiner优化方案:
combiner优化类似于reduce函数那样对本地数据进行处理(如:需要去有两个任务需要取出最大值,那么可以使用combiner对单个mapper进行最大值计算,在作为reduce的输入)
优点:减少mapper和reduce之间的数据传输量,得到的结果不会变
缺点:并不是所有的数据处理都适合使用combiner(如:需要计算平均值就不能使用combiner,
因为平均值和所有的数据都有联系的,而最大值始终不变)
2.4.3 运行分布式Mapreduce作业
优势一、同一个程序将完整的数据中运行,简单的说就是一个处理程序可以处理整个分布式的数据集。
优势二、允许扩充数据大小和硬件规模
2.5 Hadoop流
Hadoop提供了一个API来运行MapReduce,除了允许用Java之外的语言来编写自己的map和reduce函数
第三章 Hadoop分布式文件系统
3.1 HDFS的设计
HDFS是为以流式数据访问模式存储超大文件而设计的文件系统。
大数据技术的广泛应用使其成为引领众多行业技术进步、促进效益增长的关键支撑技术。根据数据处理的时效性,大数据处理系统可分为批式(BATCH)大数据和流式(STREAMING)大数据两类。其中,批式大数据又被称为历史大数据,流式大数据又被称为实时大数据。
举个例子来说:我们把数据当成水库的话,水库里面存在的水就是批式大数据,进来的水是流式大数据。
流式大数据实时处理是大数据时代信息化的重要抓手。采用“事中”甚至“事前”模式实现感知、分析、判断、决策等功能的智能系统需要流式大数据实时处理平台的支撑。
此外,流式大数据实时处理可以为大数据驱动的深度学习提供计算框架支撑。“流立方”流式大数据实时处理平台可为研制融合逻辑推理、概率统计、众包、神经网络等多种形态的下一代人工智能统一计算框架提供支持。
特点:
超大文件、流式数据访问、商用硬件、低时间延迟的数据访问、大量的小文件、多用户写入,任意修改文件
3.2 HDFS概念
3.2.1 数据块
磁盘进行读写的最小单位,HDFS默认数据块大小为128MB,每个数据块作为独立的存储单元。不同的是HDFS文件块大小小于整个块时候不会占用整个块的空间。
特点:
1、一个文件的大小可以大于网络中任意一个磁盘的容量。
2、大大简化了存储子系统的设计。
3、适合数据备份而提供数据的容错能力和提高可用性。
3.2.2 namenode和datanode
HDFS有两类节点,即管理节点和工作节点:
namenode:是管理节点,管理文件系统的命名空间。它维护着整个文件系统树和整棵树内所有的文件和目录。保留着名命空间镜像文件和编辑日志文件到本地。
datanode:也记录着文件中各个块所在的数据节点信息,但并不是永久保存的,会随着启动主机而变化。会定期的发送数据块信息给namenode
客户端:代表用户通过namenode和datanode交互来访问整个文件系统。
Hadoop提供的容错机制:
1、备份那些组成文件系统元数据持久状态的文件,可以配置namenode在多个文件系统上保存文件元数据持久状态。
2、运行一个辅助的namenode,但它不能作为namenode使用。作用是定期合并编辑日志和命名空间镜像,辅助namenode必须在单独的物理机器上运行,在namenode故障时启用。
3.2.3 快缓存
针对于被频繁访问的数据块,将其缓存在datanode的内存中,以堆外块的形式存在
3.2.4 联邦HDFS
保存文件和数据块的引用关系:
1、命名空间卷:由命名空间的元数据和一个数据块池组成。名命空间卷之间是相互独立的,两两之间并不相互通信。
2、数据块池:数据块池包含了该命名空间下文件所有的数据块。因此集群中的datanode需要注册到每个namenode,并且储存着来自多个数据块池中的数据。
3.2.5 HDFS的高可用性
恢复一个失效的namenode:
1、启动一个保存有元数据副本的namenode,
2、重演编辑日志
3、接收到独自多得datanode的数据块报告,并退出安全模式
高可用支持目标架构需要做的修改:
namenode之间需要通过高可用存储实现编辑日志的共享,当备用namenode接管工作后,它通过读取共享编辑日志至末尾实现与活动的namenode的状态同步。
datanode需要同时向两个namenode发送数据块处理报告,因为数据映射存储在namenode的内存中,而非磁盘。
客户端使用特定的机制来处理namenode失效问题,这一机制对用户是透明的。
辅助namenode的角色被备用namenode所包含,备用namenode为活动的namenode命名空间设置周期性检查点。
故障规避与切换:
故障转移控制器管理着将活动namenode转移为备用的namenode的过程,默认使用Zookeeper来确保有且仅有一个活动的namenode。监视宿主namenode是否失效。
3.3 命令行接口
3.4 Hadoop文件系统
Java抽象类org.apache.hadoop.fs.FileSystem,定义了Hadoop中一个文件系统的客户端接口,并且有几个具体实现类:
文件系统URL方案实现类描述
Localfilefs.LocalFileSystem使用客户端校验和的本地磁盘文件系统
HDFShdfshdfs.DistributedFileSystemHadoop分布式文件系统,将HDFS设计成mapreduce可以实现高性能
WebHDFSwebhdfshdfs.Web.WebHdfsFileSystem基于HTTP的文件系统,提供对HDFS文件的认证读/写访问
HFTPhftphdfs.HfitFileSystem一个在HTTP上提供对HDFS只读访问的文件系统
HSFTPhsftphdfs.HsftpFileSystem在HTTPS上提供对HDFS只读访问的文件系统
hadoop提供许多文件系统的接口,它一般使用URI 方案选取合适的文件系统实例来交互。尽管在运行那些可以访问任何文件系统的mapreduce程序,但是在处理大数据的时候,仍然需要选择最优的文件系统。
RPC
远程过程调用协议 编辑RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算环境(DCE)。
Thrift:
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。 Thrift支持的数据类型:
基本类型
容器
服务类型
Thrift将Hadoop文件系统展示为一个Apache Thrift服务来弥补这个不足,使得任何有Thrift绑定的语言都能轻松的与Hadoop文件系统互动,如HDFS 文件系统。
使用Thrift API,需运行提供Thrift服务的Java服务器,以代理的方式访问hadoop文件系统,提供了:
C语言库
PUSE
webDAV
HTTP
FTP
3.5 JAVA 接口
本章需要了解:
Hadoop的Filesystem文件系统
Hadoop交互的API
3.5.1 从Hadoop URL中读取数据