• 1. Hadoop / MapReduce 讨论与学习
  • 2. Hadoop 源起Apache Lucene 开源的高性能全文检索工具包 Apache Nutch 开源的 Web 搜索引擎 Google 三大论文 MapReduce / GFS / BigTable Apache Hadoop 大规模数据处理 2
  • 3. Hadoop 生态系统Hadoop 核心 Hadoop Common 分布式文件系统HDFS MapReduce框架 并行数据分析语言Pig 列存储NoSQL数据库 Hbase 分布式协调器Zookeeper 数据仓库Hive(使用SQL) Hadoop日志分析工具Chukwa3
  • 4. Hadoop VS. Google技术架构的比较 数据结构化管理组件:Hbase → BigTable 并行计算模型:MapReduce → MapReduce 分布式文件系统:HDFS → GFS Hadoop缺少分布式锁服务ChubbyHBaseMapReduceHDFSBigTableMapReduceGFSHadoop云计算应用ChubbyGoogle云计算应用4
  • 5. 名词对照——HDFSHadoopGoogle中文相关解释NameNodeMaster主控服务器整个文件系统的大脑,它提供整个文件系统的目录信息,并且管理各个数据服务器Secondary NameNode无备份主控服务器备用的主控服务器,在身后默默的拉取着主控服务器的日志,等待主控服务器牺牲后转正。DataNodeChunk Server数据服务器分布式文件系统中的每一个文件,都被切分陈若干数据块,每一个数据块都被存储在不同的服务器上,这些服务器称之为数据服务器。BlockChunk数据块每个文件都会被切分陈若干块,每一块都有连续的一段文件内容,是存储的基本单位,在这里统一称作数据块。Packet无数据包客户端写文件的时候,不是一个字节一个字节写入文件系统的,而是累计到一定数量后,往文件系统中写入,每发送一次的数据,都称为一个数据包。Chunk无传输块将数据切成更小的块,每一个块配上一个奇偶校检码,这样的块,就是传输块。5
  • 6. 名词对照——MapReduceHadoopGoogle中文相关解释JobTrackerMaster作业服务器用户提交作业的服务器,同时,它还负责各个作业任务分配,管理所有的任务服务器TaskTrackerWorker任务服务器负责执行具体的任务JobJob作业用户的每一个计算请求,称为一个作业TaskTask任务每一个作业,都需要拆分开了,然后交由多个服务器来完成,拆分出来的执行单元,就称之为任务Speculative TaskBackup Task备份任务每一个任务,都有可能执行失败或者缓慢,为了降低为此付出的代价,系统会未雨绸缪的实现在另外的任务服务器上执行同一个任务,这就是备份任务Slot无插槽一个任务服务器可能有多个插槽,每个插槽负责执行一个具体的任务6
  • 7. Hadoop 应用IBM Facebook Amazon Yahoo! 中国移动研究院 英特尔研究院 金山软件、百度、腾讯、新浪、搜狐、淘宝 7
  • 8. 海量数据处理MapReduce的局限性 实时增量搜索 图形计算 交互式计算 ...8
  • 9. MapReduce简介 解决问题 海量输入数据 简单任务划分 集群计算环境 MapReduce特色 将计算抽象成Map、Reduce操作 任务执行独立 计算顺序改变不影响结果9
  • 10. MapReduce工作原理10Map: (k1,v1) -> list (k2,v2) Reduce: (k2,list(v2)) -> list (k3,v3)
  • 11. MapReduce 模型Input split shuffle output 交换11
  • 12. MapReduce 工作步骤12
  • 13. 统计单词数The weather is goodThis guy is a good manToday is goodGood man is goodthe 1 weather 1 is 1 good 1today 1 is 1 good 1this 1 guy 1 is 1 a 1 good 1 man 1good 1 man 1 is 1 good 1a 1 good 1 good 1 good 1 good 1 good 1man 1 man 1the 1weather 1today 1guy 1is 1 is 1 is 1 is 1this 1a 1good 5guy 1is 4man 2the 1this 1today 1weather 113
  • 14. Hadoop 实现机制数据分布存储(分布式文件系统) 本地计算,移动计算而不移动数据 执行流程 FileSplit / Map / Combine(Partition) Copy / Sort / Reduce 分布式计算 作业和任务调度和执行(map/reduce slots) 推测式执行 故障处理 针对不同应用环境的优化14
  • 15. 分布存储与并行计算Data Data data data data data Data data data data data Data data data data data Data data data data data Data data data data data Data data data data data Data data data data data Data data data data data Data data data data data Data data data data data Data data data data data Data data data data dataResults Data data data data Data data data data Data data data data Data data data data Data data data data Data data data data Data data data data Data data data data Data data data dataHadoop ClusterDFS Block 1DFS Block 1DFS Block 2DFS Block 2DFS Block 2DFS Block 1DFS Block 3DFS Block 3DFS Block 3MAPMAPMAPReduce15
  • 16. HDFS Architecture16
  • 17. HDFS 通讯协议17
  • 18. HDFS 可靠性措施一个名字节点和多个数据节点 数据复制(冗余机制) 存放的位置(机架感知策略) 故障检测 数据节点 心跳包(检测是否宕机) 块报告(安全模式下检测) 数据完整性检测(校验和比较) 名字节点(日志文件,镜像文件) 空间回收机制18
  • 19. HDFS 写文件流程客户端缓存 流水线复制 并发写控制 流程: 1.客户端把数据缓存到本地临时文件夹 2.临时文件夹数据超过64M,客户端联系NameNode,NameNode分配DataNode,DataNode依照客户端的位置被排列成一个有着最近物理距离和最小的序列。 3.与序列的第一个数据服务器建立Socket连接,发送请求头,然后等待回应,依次下传,客户端得到回包,流水线建立成功, 4. 正式发送数据,以4K为大小传送19
  • 20. HDFS 读文件流程客户端联系NameNode,得到所有数据块信息,以及数据块对应的所有数据服务器的位置信息 尝试从某个数据块对应的一组数据服务器中选出一个,进行连接(选取算法未加入相对位置的考虑) 数据被一个包一个包发送回客户端,等到整个数据块的数据都被读取完,就会断开此链接,尝试连接下一个数据块对应的数据服务器,整个流程,依次如此反复,直到所有想读的都读取完为止20
  • 21. Hadoop 中的 MapReduce 架构21
  • 22. MapReduce 作业执行流程22
  • 23. MapReduce 任务请求调度过程23
  • 24. Hadoop安装配置与编写MapReduce程序24
  • 25. 版本介绍Apache版 Cloudera版 自动化工具 版本选择:Hadoop 0.20.203.0 稳定性 性能优化 25
  • 26. 必要条件支持平台 GNU/Linux Windows(Cygwin) 必需软件 JDK1.6以上 SSH无密码访问26
  • 27. Hadoop工作模式单机 单进程 测试和调试 伪分布 多进程 小范围模拟集群 真实分布 各节点版本一致 27
  • 28. 系统配置环境变量 设置java虚拟机路径 节点角色 masters:第二名称节点 slaves:数据节点、tasktracker Hadoop配置 core-site.xml hdfs-site.xml mapred-site.xml 28
  • 29. 启动系统格式化HDFS Hadoop namenode -format 运行脚本 start-all.sh start-dfs.sh start-mapred.sh jps命令查询java进程 29
  • 30. 运行状态查看内置web服务器 JobTrackerIP:50030 TaskTrackerIP:50060 NamenodeIP:50070 DatanodeIP:50075 日志文件 JobTracker/TaskTracker Namenode/Datanode 30
  • 31. 安装常见问题Incompatible namespaceIDs Could not obtain block Java heap space ssh密码问题 Incompatible build versions Cannot delete // Namenode is in safe mode connect to host master port 22: Conncetion timed out 31
  • 32. 举例:单词计数Page 1:the weather is good. Page 2 : good weather is good. 32 (key,value) (the,1)(weather,1)(is,1)(good,1) (key,value) (good,1)(weather,1)(is,1)(good,1) (key,value) (the,1)(weather,2)(is,2)(good,3)Map1Map2Reduce
  • 33. Map函数void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) {       String line = value.toString();       StringTokenizer t= new StringTokenizer(line); while (t.hasMoreTokens()) {          word.set(t.nextToken());          output.collect(word, one);   }    }33
  • 34. Reduce函数void reduce(Text key, Iterator values, OutputCollector output, Reporter reporter) {       int sum = 0;        while (values.hasNext()) {        sum += value.next().get(); } output.collect(key,new IntWritable(sum)); } 34
  • 35. 程序运行重写Map/Reduce函数 设置Job属性 打包程序并向JobTracker提交 监控程序进度 得到最终结果 35
  • 36. Thank You !