hadoop大数据处理讲义-c4. hdfs

pwgw

贡献于2016-02-04

字数:0 关键词: 分布式/云计算/大数据

海量数据处理中的云计算 北京邮电大学信息与通信工程学院 刘军 liujun@bupt.edu.cn 2014年春季学期 C4. 海量数据的云存储与HDFS Show Time  完成: – 建立Windows下的单机Hadoop环境 – 运行WordCount程序  要求: – 所有同学在下周2中午12点前将安装过程及运行WordCount程序结果截图,整理成 文档,发送到:liujun@bupt.edu.cn . 邮件标题:海量数据处理作业(姓名) . 文档名:海量数据处理作业_hadoop安装_姓名 – 现场演示Hadoop环境、开发环境和WordCount程序结果 第2页 答疑  大部分同学遇到的问题都是在安装、启动过程中遇到异常  解决方法: – 坚信天上飘过的那五个字! – 脑海中随时带着几个三明治(部署、层次) – 仔细查看Linux命令错误信息、Hadoop日志信息(logs目录下的*.log,*.out) – 忘掉度娘,只用谷哥,强迫自己习惯英文阅读 – 搞定! 第3页 本节目录  HDFS基础  深入HDFS  继续课程设计主题讨论 第4页 海量数据的云存储需求  待处理数据的量级 – 百度:> 200PB – Facebook:> 100PB – Yahoo:> 100PB – 淘宝:> 15PB – ebay:> 10PB  分布式存储技术成为大数据时代存储海量数据的必然选择  要点: – 低成本:大量廉价PC构成的集群作为硬件基础,单节点故障率较高 – 大文件:大量大尺寸的文件(≥100MB – GB级) – 读写特性:顺序读写,极少随机读写;写入后,一般不会再修改 – 目标:要求系统整体高吞吐量,而非低时延 第5页 HDFS The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware. It has many similarities with existing distributed file systems. However, the differences from other distributed file systems are significant. HDFS is highly fault-tolerant and is designed to be deployed on low-cost hardware. HDFS provides high throughput access to application data and is suitable for applications that have large data sets. 第6页 Source :http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html#Introduction HDFS架构 第7页 HDFS系统架构(1)-角色划分 第8页 By Maneesh Varshney, mvarshney@gmail.com(后同) HDFS系统架构(2)-Client 第9页  Client – 系统使用者,调用 HDFS API 操作文件 – 与NN交互,进行文件 元数据操作,以及获 取文件元数据(①) – 与DN交互,进行数据 读写(②③) HDFS系统架构(3)-NameNode(NN) 第10页  NameNode – 系统唯一管理者 – 管理元数据(①) . 保存和管理文件系统的命 名空间,包括目录树、文 件和目录的元数据等 . 保存和构造文件与数据块 所在DN的对应关系(①) – 与Client交互,进行文件操作 与元数据查询(②) – 接收DN的数据块报告,更新 元数据,分配数据存储节点 (③) HDFS系统架构(4)-DataNode(DN) 第11页  DataNode – 数据存储节点 – 与Client交互,进行数据读写 (①②) – 文件分割为数据块,冗余备 份存储在多个DN中(③) – 向NN定期报告数据块存储情 况(④) HDFS系统架构(5)-全景 第12页 HDFS写/读流程 第13页 写入数据(1)-文件拆分 第14页 写入数据(2)-分配DN 第15页  问题 – 选择哪个DN存储数据块最优? 写入数据(3)-写入DN 第16页  问题 – 写入时出错怎么办? 写入数据(4)-完成写入 第17页  问题 – 元数据是怎么存储的? 写入数据总结 第18页 读取数据 第19页 返回DN列表的顺序?读取时出错怎么办? 使用HDFS 第20页 使用HDFS(1)-Shell  HDFS中的文件权限: – 读权限(r)、写权限(w) – 执行权限(x)(控制对目录下的文件和子目录的访问)  HDFS的命令行格式:hadoop fs –cmd – cmd:具体的指令内容 – :一系列可变的参数 第21页 命令 说明 示例 cat 显示非压缩文件的内容 -cat hdfs://nn1.exp.com/file1 chmod 改变文件或目录的访问权限 -chmod 777 hdfs://nn1.exp.com/file1 chown 变更文件或目录的所有者 -chown user1 hdfs://nn1.exp.com/file1 copyFromLocal 从本地复制文件到HDFS文件系统中 -copyFromLocal localf1 /usr/hadoop/file1 copyToLocal 从HDFS复制文件到本地 -copyToLocal /usr/hadoop/file1 localf1 cp 复制文件或目录 -cp /usr/hadoop/file1 /usr/hadoop/file2 get 从HDFS复制文件到本地 -get /usr/hadoop/file1 localf1 ls 列出文件和子目录 -ls /usr/hadoop/file1 mkdir 创建目录 -mkdir /usr/hadoop/dir2 moveFromLocal 将文件或目录从本地移动到HDFS -moveFromLocal localf1 /usr/hadoop/file1 mv 将文件或目录源路径移动到目的路径 -mv /usr/hadoop/file1 /usr/hadoop/file2 put 将文件或目录从本地移动复制HDFS -put localfile1 /usr/hadoop/file1 rm 删除文件或空目录 -rm /usr/hadoop/dir1 tail 显示文件的最后1KB数据 -tail /usr/hadoop/file1 使用HDFS(2)-Java API  复杂操作时,需要用到API方式对文件进行访问(Java、C、HTTP)  示例:合并多个本地话单文件写入HDFS 第22页 1: public class MergeCDRFiles{ 2: public static void main(String[] args) throws IOException { 3: Configuration conf = new Configuration(); 4: FileSystem localInputFS = FileSystem.getLocal(conf); 5: FileSystem hdfsOutputFS = FileSystem.get(conf); 6: Path inputLocalDir = new Path(args[0]); 7: Path hdfsOutputFile = new Path(args[1]); 8: FileStatus[] inputFiles = localInputFS.listStatus(inputDir); 9: FSDataOutputStream out = hdfsOutputFS.create(hdfsOutputFile); 10: for (int i=0; i 0) { 15: out.write(buffer, 0, bytesRead); } 16: in.close(); 17: } 18: out.close(); 19: localInputFS.delete(inputLocalDir); 20: } 21: } }  实例化FileSystem对象 – 本地文件:LocalFileSystem – HDFS文件:DistributedFileSystem  获得文件列表 – FileSystem.listStatus() – FileStatus:文件和目录的路径、文件 长度、块大小、备份数量、修改时间、 所属用户以及权限信息等  创建文件 – FileSystem.create()  读取文件内容 – FileSystem.open() – FSDataInputStream.read()  数据写入文件 – FSDataOutputStream.write()  删除文件 – FileSystem.delete() } 深入HDFS 第23页 深入HDFS(1)-NN中目录/文件的元数据 第24页 FsImage文件 blockid (long) numByte (long) Stamp (long) BlockMap blockid (long) numByte (long) Stamp (long) Inode (INodeFile) DN1 prev next DN2 prev next DN3 prev next BlockInfo 根据DataNode blockReport创建 深入HDFS(1)-NN的效率与可靠问题  每次HDFS文件操作更新FsImage文件? – NO!效率太低! 有没有办法解决?  FsImage保存到内存中? – 有改进,但NN宕机怎么办?  FsImage + 内存元数据 + EditLog = 效率 + 安全性 – EditLog达到一定的大小(fs.checkpoint.size)或从上次保存过后一段时间后 (fs.checkpoint.period),NN将内存中文件和目录元数据更新到FsImage中 – NN启动时,将EditLog与FsImage合并重构内存元数据 第25页 内存 FsImage EditLog FsImage 文件 HDFS 操作 正常更新 宕机重启 深入HDFS(2)-三类容错:节点、网络、数据 第26页 深入HDFS(2)-监测节点错误 第27页 深入HDFS(2)-监测网络错误 第28页 深入HDFS(2)-监测数据错误 第29页 深入HDFS(2)-容忍读数据时的故障 深入HDFS(2)-容忍写数据时的故障 第31页 深入HDFS(2)-容忍写数据时的故障(续) 第32页 深入HDFS(3)-机架感知(预备知识) 第33页 机架 机架交换机 服务器 架间交换机 深入HDFS(3)-机架感知(写入) 第34页 深入HDFS(3)-机架感知(读取)  机架感知的数据读取 – NN返回Client按距离排序后的DN列表 – Client选择距离最小的DN读取 – 距离怎么获得和计算? 第35页 深入HDFS(3)-机架感知(读取)  拓扑表示:树状结构 – 子树的根节点通常是交换机 – 距离为节点到另一节点的跳数 第36页  将拓扑传递给HDFS – NetworkTopology、NodeBase、InnerNode类 – 自定义脚本 topo = [ <“192.168.1.11”, “/d1/r1”>, <“192.168.1.12”, “/d1/r1”>, <“192.168.1.13”, “/d1/r2”>, <“192.168.2.14”, “/d2/r3”> ] print topo.get( argv[1] ) 机房1 机房2 继续课程设计主题讨论  问题定义与描述  为什么需要使用Hadoop  计划使用的Hadoop具体技术  方案构想与预期效果 第37页 本节问题及下节课程预告  本节问题: – HDFS还存在哪些问题?针对这些问题有什么解决方法? . 对HDFS存在问题的详细说明 . 这些问题目前已有的解决方法,以及这些方法的优点和缺点  下节课程预告(欢迎大家踊跃提问) – MapReduce(1) 第38页

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档