Hadoop.

Slides:



Advertisements
Similar presentations
课程介绍 (PPT版本号:2016年1月24日版本) 温馨提示:编辑幻灯片母版,可以修改每页PPT的厦大校徽和底部文字 林子雨
Advertisements

电子工业出版社《云计算(第二版)》配套课件
Big Data Ecosystem – Hadoop Distribution
大數據的學習路線 目前做不到的:機率性太高的(博奕) 大數據的核心:預測 預測來自於:分析及樣本 樣本的產生及收集 樣本的儲存 樣本的處理
第八讲 基于Hadoop的数据仓库Hive (PPT版本号:2016年4月6日版本)
“大云”大数据平台及应用 中国移动通信研究院 郭磊涛 2013年11月.
穆公(朱金清 微博:淘穆公 阿里HBase业务设计实践 穆公(朱金清 微博:淘穆公
云计算学习报告 报告人: 陈 霁 大规模数据处理软件Apache Hadoop.
云计算平台Hadoop的部署.
南京大学计算机科学与技术系 主讲人:黄宜华 2011年春季学期
巨量資料平台: Hadoop的生態系.
11.3 国产大数据库技术 阿里巴巴OceanBase 云创存储数据立方(DataCube)
《大数据技术原理与应用》 课程介绍 (2016春季学期)
第11章 海量信息存储 主讲:刘方明 副教授 华中科技大学计算机学院
云梯的多namenode和跨机房之路
数据采集与Hadoop框架 报告人:黄文君 导 师:王华忠 BEA Confidential.
基于hadoop的数据仓库技术.
發展東華特色課程 期末成果發表 呂進瑞 國立東華大學財金系.
Hadoop与数据分析 淘宝数据平台及产品部基础研发组 周敏 日期:
第二章 JAVA语言基础.
一种基于Hadoop的视频大数据分布式解码方法 冯强
HDFS实战 北京信息职业技术学院 | 朱立.
王耀聰 陳威宇 國家高速網路與計算中心(NCHC)
設置Hadoop環境 王耀聰 陳威宇 楊順發 國家高速網路與計算中心(NCHC)
YARN & MapReduce 2.0 Boyu Diao
Hadoop 單機設定與啟動 step 1. 設定登入免密碼 step 2. 安裝java step 3. 下載安裝Hadoop
NoSQL分布式数据库.
厦门大学数据库实验室NoSQL系列学习之
第3章 分布式文件系统HDFS (PPT版本号:2017年2月版本)
分布式系统中的关键概念及Hadoop的起源、架构、搭建
第2章 大数据处理架构Hadoop (PPT版本号:2017年2月版本)
快速学习环境搭建 安装前预备工作(Linux相关配置) 实操演示(hadoop、hbase为例) 总结&练习题(课后练练手)
雲端計算 參考書籍:Python+Spark 2.0+Hadoop 機器學習與大數據分析實戰
云计算之分布式计算.
王耀聰 陳威宇 國家高速網路與計算中心(NCHC)
Goolge的云计算 分布式数据表BigTable.
雲端運算檔案系統HDFS.
Hadoop I/O By ShiChaojie.
基于Hadoop的数据仓库Hive.
實現雲端運算 Hadoop HDFS 磁碟及記憶體之即時分級服務
kCloudStorage - 基于云技术的廉价冗余天文海量数据存储
第九讲 Hadoop架构再探讨 (2016春季学期)
CHAPTER 6 認識MapReduce.
开源云计算系统简介 电子工业出版社 刘鹏主编《云计算》教材配套课件11.
斯巴達帶大家上雲端.
Hadoop平台與應用規劃實作 報告者:劉育維.
《大数据技术原理与应用》 第十二讲 图计算 (2016春季学期)
基于大数据的物流资源整合 福建师范大学协和学院 沈庆琼.
Cloud Computing Google云计算原理.
大数据管理技术 --NoSQL数据库 HBase 陈 辉 大数据分析技术.
软件工程基础 云计算概论 刘 驰.
大数据介绍及应用案例分享 2016年7月 华信咨询设计研究院有限公司.
大数据与物流 沈庆琼 物流教研室.
基于大数据平台数据管理研究 何家乐 2013年7月 中国科学院高能物理研究所.
Hadoop入门
应用型本科院校大数据专业 实践教学环境改革与探索
Unit 05 雲端分散式Hadoop實驗 -I M. S. Jian
Java變數 2014/6/24.
密级: 亿赞普Hadoop应用浅析 IZP 肖燕京.
進度流程Demo.
ZooKeeper 分布式应用的协调器.
2019/5/3 JAVA Socket(UDP).
第二章 Java语法基础.
第八节 算术运算符和算术表达式.
第二章 Java基本语法 讲师:复凡.
Cloud Computing Google云计算原理.
架构师成长感悟 吴隆烽
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
第2章 Java语言基础.
大数据应用人才培养系列教材 大数据实践 刘 鹏 张 燕 总主编 袁晓东 主编 黄必栋 副主编.
Presentation transcript:

Hadoop

主要内容 Hadoop项目简介 HDFS体系结构 HDFS关键运行机制 Hadoop VS.Google(分布式文件系统) Hadoop API Hadoop环境搭建

Hadoop项目简介 Apache的解决方案 GFS-->HDFS MapReduce-->Hadoop BigTable-->HBase Google云计算 MapReduce BigTable GFS Chubby

Hadoop族群 Cassandra:开源分布式NoSQL数据库系统 Chukwa:于大型分布式系统的数据采集 Hbase:基于列存储模型的分布式数据库 Hive:提供数据摘要和查询的数据仓库 Pig:MapReduce上的一种高级数据流语言

Hadoop项目简介 HDFS为了做到可靠性(reliability)创建了多份数据块(data blocks)的复制(replicas),并将它们放置在服务器群的计算节点中(compute nodes),MapReduce就可以在它们所在的节点上处理这些数据了。

HDFS体系结构 NameNodeMaster DataNodeChunksever

HDFS关键运行机制 --保障可靠性的措施 一个名字节点和多个数据节点 数据复制(冗余机制) --存放的位置(机架感知策略) 故障检测 --数据节点 心跳包(检测是否宕机) 块报告(安全模式下检测) 数据完整性检测(校验和比较) --名字节点(日志文件,镜像文件) 空间回收机制

HDFS关键运行机制 --写文件流程 客户端缓存 流水线复制 并发写控制 流程: 1.客户端把数据缓存到本地临时文件夹 2.临时文件夹数据超过64M,客户端联系NameNode, NameNode分配DataNode,DataNode依照客户端的位置被排列成一个有着最近物理距离和最小的序列 3.与序列的第一个数据服务器建立Socket连接,发送请求头,然后等待回应,依次下传,客户端得到回包,流水线建立成功, 4. 正式发送数据,以4K为大小传送

HDFS关键运行机制 --读文件流程 客户端联系NameNode,得到所有数据块信息,以及数据块对应的所有数据服务器的位置信息 尝试从某个数据块对应的一组数据服务器中选出一个,进行连接(选取算法未加入相对位置的考虑) 数据被一个包一个包发送回客户端,等到整个数据块的数据都被读取完了,就会断开此链接,尝试连接下一个数据块对应的数据服务器,整个流程,依次如此反复,直到所有想读的都读取完了为止

Hadoop VS. Google 技术架构的比较 数据结构化管理组件:Hbase→BigTable 并行计算模型:MapReduce→MapReduce 分布式文件系统:HDFS→GFS 少分布式锁服务: ZooKeeper->Chubby Hadoop云计算应用 Google云计算应用 HBase MapReduce ZooKeeper BigTable MapReduce Chubby HDFS GFS

Hadoop VS. Google HDFS与GFS比较 中心服务器模式的差异

Hadoop VS. Google HDFS与GFS比较 子服务器管理模式差异 GFS:Chunk Server在Chubby中获取独占锁表示其生存状态,Master通过轮询这些独占锁获知Chunk Server的生存状态 HDFS:DataNode通过心跳的方式告知NameNode其生存状态 GFS中,Master损坏时,替补服务器可以快速获知Chunk Server的状态 HDFS中,NameNode损坏后,NameNode恢复时需要花费一段时间获知DataNode的状态 在添加数据存储节点时,GFS的伸缩性较HDFS要好 原因:Hadoop缺乏分布式锁服务

Hadoop VS. Google HDFS与GFS比较 HDFS具备安全模式 GFS不具备安全模式 获知数据块副本状态,若副本不足,则拷贝副本至安全数目(如3个) GFS不具备安全模式 副本损坏处理:API读取副本失败时,Master负责发起拷贝任务

Hadoop VS. Google HDFS与GFS比较 HDFS具备空间回收机制 文件删除时,仅删除目录结构 实际数据的删除在等待一段时间后实施 优点:便于恢复文件

HDFS API Hadoop API被分成(divide into)如下几种主要的包(package):  org.apache.hadoop.conf   定义了系统参数的配置文件处理API。  org.apache.hadoop.fs    定义了抽象的文件系统API。  org.apache.hadoop.Hdfs   HDFS,Hadoop的分布式文件系统实现。  org.apache.hadoop.io  定义了通用的I/O API,用于针对网络,数据库,文件等数据对象做读写操作。 org.apache.hadoop.ipc   用于网络服务端和客户端的工具,封装了网络异步I/O的基础模块。  org.apache.hadoop.mapreduce   Hadoop分布式计算系统(MapReduce)模块的实现,包括任务的分发调度等。  org.apache.hadoop.metrics  定义了用于性能统计信息的API,主要用于mapred和dfs模块。  org.apache.hadoop.record 定义了针对记录的I/O API类以及一个记录描述语言翻译器,用于简 化将记录序列化成语言中性的格式(language-neutral manner)。  org.apache.hadoop.tools  定义了一些命令行的工具。  org.apache.hadoop.util   定义了一些公用的API。 org.apache.hadoop.Secruity 用户和用户组信息

HDFS API --org.apache.hadoop.fs ◦org.apache.hadoop.fs.FileSystem (implements java.io.Closeable) ◦org.apache.hadoop.fs.FilterFileSystem ◦org.apache.hadoop.fs.ChecksumFileSystem ◦org.apache.hadoop.fs.InMemoryFileSystem ◦org.apache.hadoop.fs.LocalFileSystem ◦org.apache.hadoop.fs.HarFileSystem ◦org.apache.hadoop.fs.RawLocalFileSystem 抽象文件系统的基本要素和基本操作。最显著的一个特点就是,FileSystem文件系统是基于流式数据访问的,并且,可以基于命令行的方式来对文件系统的文件进行管理与操作。

HDFS API --org.apche.hadoop.ipc 。org.apache.hadoop.ipc.VersionedProtocol 。org.apache.hadoop.hdfs.protocol.ClientProtocol 。org.apache.hadoop.hdfs.protocol.ClientDatanodeProtocol 。org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol 。org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol 。org.apache.hadoop.hdfs.server.protocol.InterDatanodeProtocol

HDFS API --org.apache.hadoop.HDFS ClientProtocol协议:客户端进程与Namenode进程进行通信 DataNodeProtocol协议:一个DFS Datanode用户与Namenode进行通信的协议 InterDatanodeProtocol协议:Datanode之间的通信 ClientDatanodeProtocol协议 :客户端进程与datenode进程进行通信 NamenodeProtocol协议 :次级Namenode(Secondary NameNode)与Namenode进行通信所需进行的操作 client NameNode DataNode clientProtocol DataNodeProtocol ClientDatanodeProtocol Namenode主要实现了ClientProtocol,DatanodeProtocol,NamenodeProtocol

HDFS API -- ClientProtocol(文件基本操作接口) 获取到指定文件src的全部块的信息返回LocatedBlocks,包括文件长度、组成文件的块及其存储位置(所在的Datanode数据结点) --public LocatedBlocks   getBlockLocations(String src, long offset,  long length)  在制定的文件系统命名空间中创建一个文件入口(entry) ,在命名空间中创建一个文件入口。该方法将创建一个由src路径指定的空文件  --public void create(String src, FsPermission masked, String clientName,  boolean overwrite, short replication, long blockSize)  对指定文件执行追加写操作,返回信息,可以定位到追加写入最后部分块的信息 --public LocatedBlock append(String src, String clientName) 设置副本因子,为一个指定的文件修改块副本因子 --public boolean setReplication(String src, short replication)

HDFS API -- ClientProtocol(文件基本操作接口) 为已经存在的目录或者文件,设置给定的操作权限 --public void setPermission(String src, FsPermission permission) 设置文件或目录属主 --public void setOwner(String src, String username, String groupname) 客户端放弃对指定块的操作 --public void abandonBlock(Block b, String src, String holder) 客户端向一个当前为写操作打开的文件写入数据块 --public LocatedBlock addBlock(String src, String clientName) 客户端完成对指定文件的写操作,并期望能够写完,在写完以后关闭文件 --public boolean complete(String src, String clientName) 客户端向Namenode报告corrupted块的信息(块在Datanode上的位置信息) --public void reportBadBlocks(LocatedBlock[] blocks) throws IOException

HDFS API -- ClientProtocol(文件基本操作接口) 在文件系统命令空间中重命名一个文件或目录 --public boolean rename(String src, String dst) 删除文件或目录src --public boolean delete(String src) 删除文件或目录src,根据recursive选项来执行 --public boolean delete(String src, boolean recursive) throws IOException; 创建目录src,并赋予目录src指定的nasked权限 --public boolean mkdirs(String src, FsPermission masked) throws IOException; 获取指定目录src中的文件列表 --public FileStatus[] getListing(String src) throws IOException;

HDFS API 文件读取 在客户端DFSClient中,有一个 DFSClient.DFSInputStream类。当需要读取一个文件的时候,会生成一个DFSInputStream的实例 DFSInputStream的实例调用 ClientProtocol定义getBlockLocations接口,取得一个 LocatedBlocks类的对象,这个对象包含一组LocatedBlock,那里面有所规定位置中包含的所有数据块信息,以及数据块对应的所有数据服务器的位置信息 读取开始, DFSInputStream的Read方法 如有读取时发现错误,客户端向Namenode报告corrupted块的信息 public void reportBadBlocks(LocatedBlock[] blocks)

HDFS API 文件存入 DFSClient也有一个 DFSClient.DFSOutputStream类,写入开始,会创建此类的实例 DFSOutputStream会从NameNode上拿一个 LocatedBlock 写入开始,调用DFSOutputStream的Write方法

HDFS API -- ClientProtocol(系统管理相关接口) 监听客户端,Namenode监听到某个客户端发送的心跳状态 public void renewLease(String clientName)  获取文件系统的状态统计数据 --public long[] getStats()  注:返回的数组: public int GET_STATS_CAPACITY_IDX = 0;    public int GET_STATS_USED_IDX = 1;    public int GET_STATS_REMAINING_IDX = 2;    public int GET_STATS_UNDER_REPLICATED_IDX = 3;    public int GET_STATS_CORRUPT_BLOCKS_IDX = 4;    public int GET_STATS_MISSING_BLOCKS_IDX = 5; 安全模式开关操作 public boolean setSafeMode(FSConstants.SafeModeAction action) 

HDFS API -- ClientProtocol(系统管理相关接口) 保存FsImage映像,同时将更新同步到EditLog中,要求具有超级权限,并且在安全模式下进行。 --public void saveNamespace() 持久化文件系统元数据,将Namenode结点上的数据结构写入到指定的文件中,如果指定文件已经存在,则追加到该文件中  --metaSave(String filename)

Hadoop集群搭建 一、实验环境 1、三台PC机,Linux操作系统 各主机对应的ip地址: 192.168.1.11 ubuntu1 3、安装jdk 1.5以上版本

二、Hadoop安装 1、在所有的机器上建立相同的用户,例如:grid。 2、SSH配置,实现在机器之间执行指令的时候不需要输入密码。 在ubuntu1(准备设为namenode)上生成密钥对,执行$ssh-keygen -t rsa,然后一路回车,就会按照默认的选项将生成的密钥对保存在.ssh/id_rsa文件中。执行: $cd ~/.ssh $cp id_rsa.pub authorized_keys $scp authorized_keys ubuntu2:/home/grid/.ssh $scp authorized_keys ubuntu3:/home/grid/.ssh

3、在ubuntu1上配置Hadoop。 解压缩,执行:$ tar –zxvf ../hadoop-0.19.1.tar.gz 编辑conf/hadoop-site.xml 编辑conf/master,修改为master的主机名(每个主机名一行) ubuntu1 编辑conf/slaves,加入所有slaves的主机名 ubuntu2 ubuntu3

4、其它机器上的配置 把Hadoop安装文件复制到其他机器上 $ scp –r hadoop-0.19.1 ubuntu2:/home/grid $ scp –r hadoop-0.19.1 ubuntu3:/home/grid 编辑所有机器的conf/hadoop-env.sh文件,将JAVA_HOME变量设置为各自JDK安装的根目录,不同机器可以使用不同的JAVA版本。

三、Hadoop运行 1、格式化分布式文件系统

2、启动Hadoop守护进程

3、停止Hadoop守护进程

HDFS实验:观察数据块在Datanode上的分布

文件副本个数为2

文件f.zip的数据块分布情况

关掉一个Datanode时数据块分布情况,此时文件仍然可用

关掉两个Datanode时数据块的分布情况,此时文件不可用

重新启动另外两个Datanode时数据块分布情况