Hadoop

hadoop(1)---hadoop的介绍和几种模式。

元气小坏坏 提交于 2021-02-13 12:16:15
一、什么是hadoop? Hadoop软件库是一个开源框架, 允许使用简单的编程模型跨计算机集群分布式处理大型数据集。 它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储。 库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用程序层的故障,从而在计算机集群之上提供高可用性服务,每个计算机都可能容易出现故障。是大数据技术的基础。 hadoop所包含的模块(从官网借鉴的): ♥ hadoop分布式文件系统(HDFS):一种分布式文件系统,能够提供高可靠、高可用、可扩展以及对应用程序数据的高吞吐量访问。 ♥ yarn :作业调度和资源管理的框架。 ♥ MapReduce :基于yarn框架,用于并行计算处理大型数据集,是一种计算框架。 ♥ ambari :基于Web的工具,用于配置,管理和监控Apache Hadoop集群,包括对Hadoop HDFS,Hadoop MapReduce,Hive,HCatalog,HBase,ZooKeeper,Oozie,Pig和Sqoop的支持。Ambari还提供了一个用于查看群集运行状况的仪表板,例如热图,以及可视化查看MapReduce,Pig和Hive应用程序的功能,以及以用户友好的方式诊断其性能特征的功能。 ♥ avro :数据序列化系统。 ♥ cassandra:可扩展的多主数据库,没有单点故障。 ♥ hbase

HDFS 读写数据流程

做~自己de王妃 提交于 2021-02-12 18:59:59
一、上传数据 二、下载数据 三、读写时的节点位置选择 1.网络节点距离(机架感知) 下图中: client 到 DN1 的距离为 4 client 到 NN 的距离为 3 DN1 到 DN2 的距离为 2 2.Block 的副本放置策略 NameNode 通过 Hadoop Rack Awareness 确定每个 DataNode 所属的机架 ID 简单但非最优的策略 将副本放在单独的机架上 这可以防止在整个机架出现故障时丢失数据,并允许在读取数据时使用来自多个机架的带宽。 此策略在群集中均匀分布副本,平衡组件故障的负载。 但是此策略会增加写入消耗,因为写入时会将块传输到多个机架。 常见情况策略(HDFS 采取的策略) 当复制因子为 3 时,HDFS 的放置策略是: 若客户端位于 datanode 上,则将一个副本放在本地计算机上,否则放在随机 datanode 上 在另一个(远程)机架上的节点上放置另一个副本,最后一个在同一个远程机架中的另一个节点上。 机架故障的可能性远小于节点故障的可能性。 此策略可以减少机架间写入流量,从而提高写入性能,而不会影响数据可靠性和可用性(读取性能)。 这样减少了读取数据时使用的聚合网络带宽,因为块只放在两个唯一的机架,而不是三个。 如果复制因子大于 3,则随机确定第 4 个及后续副本的放置,同时保持每个机架的副本数量低于上限(基本上是(副本 -

hadoop学习笔记(六):HDFS文件的读写流程

拈花ヽ惹草 提交于 2021-02-12 18:59:41
一、HDFS读取文件流程: 详解读取流程: Client调用FileSystem.open()方法:   1 FileSystem通过 RPC 与NN通信,NN返回该文件的部分或全部block列表(含有block拷贝的DN地址)。   2 选取举栗客户端最近的DN建立连接,读取block,返回 FSDataInputStream 。 Client调用输入流的read()方法:   1 当读到block结尾时,FSDataInputStream关闭与当前DN的连接,并未读取下一个block寻找 最近DN 。   2 读取完一个block都会进行 checksum 验证 ,如果读取DN时出现错误,客户端会通知NN,然后再从下一个拥有该block拷贝的DN继续读。   3 如果block列表读完后,文件还未结束,FileSystem会继续从NN获取下一批block列表。 关闭FSDataInputStream 二、HDFS文件写入流程: 详细写入流程: Client调用FileSystem的create()方法:   1 FileSystem向NN发出请求,在NN的namespace里面创建一个新的文件,但是并 不关联任何块 。   2 NN检查文件是否 已经存在、操作权限 。如果检查通过,NN记录新文件信息,并在某一个DN上创建数据块。   3 返回FSDataOutputStream

hadoop--HDFS之读写流程

时间秒杀一切 提交于 2021-02-12 18:49:20
HDFS的读写流程 一、写操作 前提:File大小为200M,block.size为128M,block分为两块block1和block2(块小于block.size的不会占用一个真个block大小,而是实际的大小)。 写操作的流程图 1. Client向NameNode发起写入请求。 2. NameNode返回可用的DataNode列表。 若client为DataNode节点,那存储block时,规则为:副本1,当前client的节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;其他副本随机挑选。 若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个节点上;副本2,不同副本1,机架上;副本3,同副本2相同的另一个节点上;其他副本随机挑选。 3. client向DataNode发送block1,数据首先被写入FSDataOutputStream对象内部的Buffer中,然后数据被分割成一个个data package,每个Packet大小为64k字节,每个Packet又由一组chunk和这组chunk对应的checksum数据组成,默认chunk大小为512字节,每个checksum是对512字节数据计算的校验和数据。 当Client写入的字节流数据达到一个Packet的大小,这个Packet会被构建出来

(转载)Hadoop -- HDFS读写过程解析

冷暖自知 提交于 2021-02-12 17:47:35
一、文件的打开 1.1、客户端 HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为: public FSDataInputStream open(Path f, int bufferSize) throws IOException { return new DFSClient.DFSDataInputStream( dfs.open(getPathName(f), bufferSize, verifyChecksum, statistics)); } 其中dfs为DistributedFileSystem的成员变量DFSClient,其open函数被调用,其中创建一个DFSInputStream(src, buffersize, verifyChecksum)并返回。 在DFSInputStream的构造函数中,openInfo函数被调用,其主要从namenode中得到要打开的文件所对应的blocks的信息,实现如下: synchronized void openInfo() throws IOException { LocatedBlocks newInfo = callGetBlockLocations(namenode, src, 0, prefetchSize); this

HDFS Federation(联邦)简介

孤街浪徒 提交于 2021-02-12 15:27:07
1 文档编写目的 本文主要介绍HDFS Federation(联邦)相关知识,为后续文章《如何为CDH集群启用Federation(联邦)》做一个简单的铺垫。Federation即为“联邦”,该特性允许一个HDFS集群中存在多组Namenode同时对外提供服务,分管一部分目录(水平切分),彼此之间相互隔离,但共享底层的Datanode存储资源。 文章目录结构: 1. 文档编写目的 2. Federation 2.1 单组Namenode架构 2.2 单组Namenode局限性 2.3 为什么要引入Federation 3. Federation 介绍 3.1 Federation 架构 3.1.1 主要优点 3.1.3 主要缺点 3.2 Federation 局限性 4. 总结 2 Federation 背景 2.1 单组Namenode架构 HDFS 主要有两大模块: Namespace (命名空间): 由目录、文件和块组成,它支持所有命名空间相关的文件操作,如创建、删除、修改,查看所有文件和目录。 Block Storage Service (块存储服务):包括Block管理和存储两部分 Block 管理 通过控制注册以及阶段性的心跳,来保证Datanode的正常运行; 处理Block的报告信息和维护块的位置信息; 支持Block相关的操作,如创建、删除、修改

(转载)Hadoop -- HDFS简介

孤街醉人 提交于 2021-02-12 15:26:45
一、HDFS的基本概念 1.1、数据块(block) HDFS(Hadoop Distributed File System)默认的最基本的存储单位是64M的数据块。 和普通文件系统相同的是,HDFS中的文件是被分成64M一块的数据块存储的。 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。 1.2、元数据节点(Namenode)和数据节点(datanode) 元数据节点用来管理文件系统的命名空间 其将所有的文件和文件夹的元数据保存在一个文件系统树中。 这些信息也会在硬盘上保存成以下文件:命名空间镜像(namespace image)及修改日志(edit log) 其还保存了一个文件包括哪些数据块,分布在哪些数据节点上。然而这些信息并不存储在硬盘上,而是在系统启动的时候从数据节点收集而成的。 数据节点是文件系统中真正存储数据的地方。 客户端(client)或者元数据信息(namenode)可以向数据节点请求写入或者读出数据块。 其周期性的向元数据节点回报其存储的数据块信息。 从元数据节点(secondary namenode) 从元数据节点并不是元数据节点出现问题时候的备用节点,它和元数据节点负责不同的事情。 其主要功能就是周期性将元数据节点的命名空间镜像文件和修改日志合并,以防日志文件过大。这点在下面会相信叙述。

MapReduce与Yarn 的详细工作流程分析

可紊 提交于 2021-02-11 21:28:41
MapReduce详细工作流程之Map阶段 如上图所示 首先有一个200M的待处理文件 切片:在客户端提交之前,根据参数配置,进行任务规划,将文件按128M每块进行切片 提交:提交可以提交到本地工作环境或者Yarn工作环境,本地只需要提交切片信息和xml配置文件,Yarn环境还需要提交jar包;本地环境一般只作为测试用 提交时会将每个任务封装为一个job交给Yarn来处理(详细见后边的Yarn工作流程介绍),计算出MapTask数量(等于切片数量),每个MapTask并行执行 MapTask中执行Mapper的map方法,此方法需要k和v作为输入参数,所以会首先获取kv值; 首先调用InputFormat方法,默认为TextInputFormat方法,在此方法调用createRecoderReader方法,将每个块文件封装为k,v键值对,传递给map方法 map方法首先进行一系列的逻辑操作,执行完成后最后进行写操作 map方法如果直接写给reduce的话,相当于直接操作磁盘,太多的IO操作,使得效率太低,所以在map和reduce中间还有一个shuffle操作 map处理完成相关的逻辑操作之后,首先通过outputCollector向环形缓冲区写入数据,环形缓冲区主要两部分,一部分写入文件的元数据信息,另一部分写入文件的真实内容 环形缓冲区的默认大小是100M

Hive表字段Comment中文乱码

流过昼夜 提交于 2021-02-11 20:33:10
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 1.问题描述 默认 Hive 中创建有中文注释的表时,无论是在 Hive CLI 还是 Hue 中该注释显示都会是乱码。如使用以下建表语句: create external table test_table ( s1 string comment 'abc', s2 string comment ' 你好啊 ' ) row format delimited fields terminated by '#' stored as textfile location '/lilei/test_table'; 在 Hive CLI 中查看如下: Hue 中显示一样,这里省略。 2.解决办法 这个问题是因为 mysql 中的元数据库表 COLUMNS_V2 中的字段 COMMENT 编码问题导致的,需要设置为 utf-8 ,如下所示: 在 mysql 中设置该字段的编码为 utf-8 ,如下所示: mysql –u root –p use metastore; alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;FLUSH PRIVILEGES; 注意 Hive 元数据这个数据库应使用 utf-8 创建,如: create

YARN详解

社会主义新天地 提交于 2021-02-11 18:38:24
1. YARN架构 1.1 简介 1.1.1 架构 YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等几个组件构成。 YARN总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManger启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。 1.1.2 Job提交流程 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。 ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。 ApplicationMaster首先向ResourceManager注册