构建Hadoop集群

网络拓扑

配置管理:
环境设置:

JAVA
系统日志
SSH 设置
Hadoop守护进程的关键属性

Hadoop 守护进程的地址和端口
RPC简介
RPC的主要功能目标是构建分布式计算(应用场景)更容易,在提供强大的远程调用服务能力时。不损失本地调用的语义整洁性。
RPC由以下特点:
-
透明性:远程调用其他机器上的程序,对用户来说就像调用本地的方法一样。
-
高性能:RPC Server能够并发处理多个来自Client的请求。
-
可控性:JDK中已经提供了一个RPC框架———-RMI,但是该RPC框架过于重量级并且可控制指出比较少,所以Haoop实现了自定义的RPC框架。
实现RPC程序包括5个部分,即User、User-stub、RPCRuntime、Server-stub、Server
这里的User就是Client端,当User想发起一个远程调用的时候,它实际时通过本地调用User-stub。User-stub负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的RPCRuntime实例传输到远端的实例。远端RPCRuntime实例收到请求后交给Server-stub进行解码后,发起本地端调用,调用结果再返回给User。
HadoopRPC简介
Hadoop中RPC的运行机制
同其他RPC框架一样,HadoopRPC分为4个部分
- 序列化从层:Client与Server端通信传递的信息采用了Hadoop提供的序列化或自定义的Writable类型。
- 函数调用层:HadoopRPC通过动态代理以及Java发射实现函数调用。
- 网络传输层:Hadoop RPC采用了基于TPC/IP的Socket机制。
- 服务端框架层:RPC Server利用Java NIO及采用了事件驱动的I/O模型,提高自己的并发处理能力。
Hadoop RPC 再整个Hadoop应用中十分 的广泛、Client、DataNode、NameNode之间的通信全靠它。例如人们平时操作HDFS的时候使用的时FileSystem类,它内部就有一个DFSClient对象,这个对象负责与 NameNode打交道。再运行时DFSClient在本地创建一个NameNode的代理。然后就操作这个代理,这个代理就会通过网络,远程调用NameNode方法,当然它也能返回值。
Hadoop RPC 默认设计时基于Java套接字通信,基于高性能网络的通信并不能达到最大的性能,也会是一个性能瓶颈,当一个调用要被发送到服务器时,RPC客户端首先分配DataOutputBuffer,它包含了一个常见的Java版本具有32字节的默认内部缓存器 。该缓冲区可以保存所有序列化的数据,然而一个很大的序列化数据不能保存在较小的内部缓存中。
Hadoop的其他属性


YARN
yarn.nodemanager.local-dirs 指定路径来存储中间数据
任务槽:
一个MapReduce 作业的计算工作都由TaskTracker 完成。用户向Hadoop 提交作业,Job Tracker 会将该作业拆分为多个任务, 并根据心跳信息交由空闲的TaskTracker 启动。一个Task Tracker 能够启动的任务数量是由TaskTracker 配置的任务槽( slot ) 决定。槽是Hadoop 的计算资源的表示模型, Hadoop 将各个节点上的多维度资源( CPU 、内存等)抽象成一维度的槽,这样就将多维度资源分配问题转换成一维度的槽分配的问题。在实际情况中,Map 任务和Reduce任务需要的计算资源不尽相同, Hadoop 又将槽分成Map 槽和Reduce 槽, 并且Map 任务只能使用Map槽, Reduce 任务只能使用Reduce槽。
内存:
yarn模型中,节点管理器从一个内存池中分配内存,同时运行的任务数量依赖于内存需求总量,而非槽数量。
虚拟内存和物理内存:
物理内存就是你的机器本身内存了(如内存条的大小)。物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间。同理我们现在大部分使用的是32位的机子,32位的386以上CPU就可以支持最大4GB的物理内存空间了。
虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。比如说当电脑要读取一个比物理内存还要大的文件时,就要用到虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,就把虚拟内里储存的文件释放到原来的目录里了。
安全性
Hadoop 缺乏一个安全的认证机制,以确保试图在集群上执行操作的用户恰是所声称的安全用户。如果把同一集群上的数据划分不同的安全级别,在管理上会方便很多,特别是这意味着低安全级别的数据能够被广泛共享。 然而,为了迎合数据保护的常规需求,共享集群的安全认证是不可或缺的。
1. 一个方案用 Kerberos( 一个成熟的开据网络认证协议)实现用户认证, Hadoop 不直接管理用户隐私,而 Kerberos 也不关心用户的授权细节。换句话说, Kerberos 的职责在于鉴定登录帐号是否是他所声称的用 户, Hadoop 则决定这个用户到底拥有多少权限。
2. 委托令牌。