Hadoop 1(三)|学习笔记

简介: 快速学习 Hadoop 1(三)

开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Hadoop 1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/75/detail/15841


Hadoop 1(三)

 

内容介绍

一.认识 SOA

二.如何组装服务

三.服务和构建的区别

四.服务的架构

五.微服务

六.SOA 的架构

七.Hadoop,Spark 和Storm

 

六.SOA 的架构

image.png

那么在 SOA 的架构里面,底层是现有的这个系统里面,他们的一个操作系统,在它上面我们部署了很多的应用,我们把它构建化基于这些构建,我们封装出一些服务,可以从一个构建里封装出不同服务,然后这些服务还可以组合多个服务可以组合成一更大的服务,然后把这些服务编排一下,就生成了服务的流程,根据流程来执行的时候,以这种门户的方式展现给用户,在 SOA 里面的一个分层架构当然我说的这些只是一个理论一个概念,真正要使用的话,那要去用相应的东西,比如说开源的,有一个叫 servicemix ,这是一个开源的 service spa 商用的大家可以去用。一个叫websphere ,大家也可以去用,它是 IBM 的东西它里面也支持 SOA 开发。大家要理解 SOA  web service 是两回事,不是说我开发成 web service 系统就是 SOA ,这是第一点第二点是 SOA 里面这个 service 更面向业务逻辑,它和构建本来就是两个不同的维度,相当于一个竖着看,一个横着看,所以它们两个之间是个多的关系,没有说服务是更粗,是若干的构建把它分装出来所以这种基本的概念要理解然后就是 SOA 里面最重要,这三个特性是靠服务总监来实现,只有具备这样的特点才是 SOA 。

 

七.Hadoop,Spark 和 Storm

这节课我们转入到另外一个话题,它不再是个的系统开发,是并行的一个系统框架,常用的,比如 Spark 或者 Storm ,我们可以认为他们 Hadoop 这个上面演化出来,或者认为 Hadoop 是一个基础我们把 Hadoop 拆开,它里面的分布式文件系统,它的大表,这东西我们在未来的几节课里都会去讲。完它之后我们就看一些商业的系统,或者说用的很多的一个系统 Storm Spark 什么的,们都属于并行处理框架我们前面讲的集群使用起来是两个,一个是在做系统的负载均衡,系统压力太大,要把客户端请求均衡到后面的若干台机器上去处理第二是在数据库做容余,就是防止一个数据库节点崩溃之后,其他的节点不能访问,数据不能访问,我要让其他节点备份这两个里面都暗含了一点,就是这个集群里面所有的机器,实际上可以一起来做某一件事情,比如在容余里面,我们可以把据库的读请求发送到 slave 节点上,把写请求master 去写,然后让 master 去同步所有的 slave 。实际上我们就看到写读请求,在做负载均衡的时候,会分到多台机器上去做那如果他们在读不同的部分,每一个节点处理不同的部分,最后把结果合起来就是在并行我们是在拿一个集群去做同样一件事情,只是把一个很大的输入分割成若干个小的部分,每一部分在某一个节点上执行这样执行完了之后,把每一个节点的数据汇聚起来,就能得到最终的结果所以我们现在要谈论的话题是如何进行并行处理很显然如果一台机器不够,再加一台,再加一台,不断的加这样系统的处理能力就会增强那关键的问题是加了之后应该如何去使用它

 image.png

最常用的就是这个 Hadoop 。它真正在面对并行问题的时候,我们用的最基础就是 MapReduce ,在 Hadoop 新的版本里面,它后来有一个 MapReduce 2.0。然后我们讲一下 Storm ,这个推特的东西是怎么样,最后讲一下 Spark 。 Hadoop 现在被收入到 Apache 里面去了,变成 Apache 的一个项目 Hadoop 这个名字本身没有什么意义,实际上的作者在家带孩子,作者在想到这个项目不知道该叫什么的时候,他的小孩儿不太会发声,作者就听他说话,发出一个大概这样的声音,他就把 Hadoop 作为这个项目名字,所以 Hadoop 不是什么东西的缩写,它就是这样定下比较奇怪的一个名字无论如何这个库里面,它就是让我们在大量的数据集上,在一个计算机集群上面去做分布式的并行处理也就我给你一组机器,给你一个很大的输入,你要把它分发到这一组机器上面去做编程,但是这个编程模型要尽量的简单,这就它最初的想法当然它里面除了要去做 mapreduce 这样的并行的处理之外,它为了支撑这个事情,还会有像布式文件系统,还有 HP 这样的大表工具来做支撑 Hadoop 它面向的是成千上万的机器,所以每一台机器它都有本地的计算能力和存储能力。那么的想法就是,我们与其要一个非常大的超级计算机,不如要一堆廉价计算机组成一个很大的计算机的集群,而且,这个集群,因为都是廉价计算机,所以我也不能保证所有的机器都不会出故障,但是我可以保证即使它出故障也能处理所以整个系统会表现出很高的可靠性

image.png

这句话的后面暗含的意思就是我们要去检测到这种错误,而且能够去容错容错在很大程度上就是靠副本的,所以就是用大量的廉价机器去堆出一个超级计算机一样的东西,这就是的基本的想法。

Hadoop 里面核心的东西第一个就是 common 的一个公共的工具库,就是将来要跑起来的一个基础的核心的东西第二就是它的分布式文件系统,这种大量的数据在做存储的时候要存在一个分布式的文件系统里。下节课,我们把分布式文件系统拆开来去看它里面的内容是什么样的,这节课我们后面去使用的

image.png

然后是有 MapReduce 和一个 YARN YARN 就是做作业调度当你给我一批作业的时候,我怎么样在一个集群里面去管理这些资源,也就是把这些作业提交给这些资源,然后让这些资源去执行我还要去看这些 job ,给你这个资源,这资源执行怎么样没有崩?如果了应该怎么办?你给我这个作业的时候,我以什么为依据去给了这些集群里的算机的 MapReduce 实际上这个编程并行的处理框架,它就是要把这一大堆的输入数据,怎么样让一群机器去给他并行的去做直径来提高速度。它在底下还提供了一个对象存储,当然再往细里分,它还有像 hive 这种数据仓库,像 hBace 这种数据库,大表 KY 的数据库等等我们这节课先去看一下并行处理是如何实现的。

image.png

为了去跑这个东西,大家下载了 Hadoop 之后,要按照它的约定做一些配置,其中上面配置是在说如果要跑起来的话,在什么地方去做监听底下 HDFS 的分布式文件系统来做支撑的,就是这个分布式文件系统的服务的位置然后在这个文件里面要配一下分布式文件的 replication 即在数据存储的时候,它的副本的数量因为我们只在一台机器上跑,所以你就设成1。如果你在很多台机你就有可能会有足够的容存储量,然后任何一个数据块在存储的时候都要存比如超过一个要有2个,甚至是3个这样的副本也就是说,拿空间去换可靠性,任何一个数据在存储的时候我存两份或者3份,任何一份失败了,比如 SOAP 坏了,或者是机器崩了,我还有另外一个副本可以拿出来去用 Hadoop 的这个 etc 目录里,这两个文件做相应的配置,配置完之后,就可以去做相应的处理

image.png

如图为 SSH 的东西。

image.png

关键在这里如果你要让它跑起来的话先把这个 FS 的namenode 格式化,至于 namenode 是什么,下节课再解释在它底层,必须要有一个分布式文件系统,这个分布式文件系统有一个像文件分区表一样,可以理解为它叫 normally还有其真正存储数据的,即 DataNode 。也就是说,在很多的集群里很多的节点上,存储数据有一个节点在文件分区表,在那里可以去看这些文件都存在哪里然后才到真正存储文件的 DataNode 上去获取这个文件我们再运行 sbin/start-dfs.sh ,就这个分布式文件系统启动起来,启动起来之后才能去做其他的事情一旦启动起来,还有一个外部界面 http://localhost:9870/ 可以去查看当前环境里都有些什么样的内容,这是做一些准备工作,至少这两步是必须要做的下载好了 Hadoop 之后就要做这两步,做完之后就可以写代码做处理

image.png

那么如何做处理呢?我们先看一下理论上的逻辑这是一个 Google 提出来的方法那么 Google  OSBI 操作系统的会议上,16年前提出来 MapReduce 。这篇论文的题目是完整,他的想法比较简单,就是假设输入文件的数据量非常大,于是把它切成了很多部分,不同的部分,然后我们弄了三个 worker 的是三个进程这三个进程可以在三个机器也可以在一个机器里。一般来说,我们可能会在三个机器,否则在一台机器里,比如三个进程,就没有意义了因为如果没有多台机器,没有一机器群,只有一台机器意义就不大了

当然,如果机器很大有多个,想跑多个进程来处理也可以的。反正有三个不同的进程,在 map 这个阶段,我们认为他要做的事情就是把输入的数据映射成我们想要的一个结果举个例子,我们知道红楼梦这个小说里面涉及到了很多人物,有名有姓的有多少有名无姓的有多少没姓有名的有多少就是这样的人物假设我们来做一个任务,这个任务就是这个用户程序,我们要统计一下在红楼梦里面凡是出现过的人物有多少个,并且他们出现了多少次那么在 map 这个阶段在干什么呢?

就是对于每一个 worker 一共三个 worker ,每次处理其中一块数据,我把这个数据拿出来之后,看到一个人名就发出来一个,比如一个名字出现了一次这样建制,看到一个发一个如果这个人在这段话里面出现了两次,我就发两个这样的信息。那么,这就是在 map 阶段,它把输入映射成了这样的一堆建制队,然后,们三个 Worker一个拿一个,比如一个拿回去是零,一个拿回去2一个拿回去的3。这三个 worker 都是受这个 master控制 master 会说,你们三个各去拿一个,处理完之后,比如零处理完之后告诉 master ,我处理完了, master 看到1还没处理那你接着处理1所以就1给他。那么2处理完之后,也会告诉 master ,我处理完了,master 就说还有4没处理,于是就4给他让他去处理。3处理完了之后,他会说我处理完了 master 发现现在不剩下了,现在零2、3都处理完了,14还没处理完,然后1的处理时间比较长了,因为它可能是零先处理完2后处理完,所以1再分给下面 worker 处理时间比4分给下面 worker处理时间长,于是,master 就说第三个 worker ,也不要闲着,我在没有完成的输入数据里面找一个处理时间特别长的你继续处理为什么呢?其实我也不知道他会不会因为某种原因比如崩溃,或者是碰到其他原因,导致他处理不过来,比如内存很少,我就把这种可能会碰到问题的概率最大了。

到现在为止,执行的时间最长的这个事情,我让已经做完有空闲的那个 worker 去做这样做的一个好处就是,万一边真的出错了,那至少你这边已经开始做了,不用等。那如果这边没出错,很快就完成了, master 就告诉他,不用了,边已经做完了。也就是说,他充分利用 worker 的计算能力,不让 worker 闲着,等到有问题再说,只要没处理完就去处理如果现在没有被处理的输入块了,就找最近正在被处理的时间最长的个,让空闲机器继续处理,从头开始处理这是在 map 这个阶段做的事情每一块数据在处理完之后,他都会把结果写到一个指定的位置上,一个人的人名从 A 开头到 N 开头的写一个地方从 O 开头到 Z 开头的写在另外一个地方,每一个输入都是这样去处理的,如果这个人的人名是 O 开头就放在一边,如果这个人的人名是 S 开头就放在另一边。所以这边另一边就是在指定的不同的位置,在某一台机器上,比如在服务器,我用 A 来表示,另一个是在服务器 B 那么左边的三块都在服务器 A 上,右边的三块都在服务器 B 上。 Intermediate files (on local disks) 就是一个中间结果。然后,进入 Reduce 阶段,这个阶段在干什么前面已经分成了两块worker 就去做,比如从 A  N 的处理把相同的加起来 N 在这三块里面总共有多少个<  N:1 >这样的对呢?100个就产生了< N:100 >这样一个结果。

同理,处理 S 就是从 A  N 的,前面的一半前面的处理,后面的一半后面的处理,就产生了 < S:94 >这样一个结果。他们的输出就会在这两个文件output file 0和 output file 1,这两个文件合起来是最终的文件在整个过程中, Map 这个阶段和 reduce 这个阶段都是并行,即多台机器上的多个 worker 在同时执行,这就是 MapReduce 的一个含义中间过程叫 shutfile 就像洗牌这个动作一样,把它按照一定的规则排好,部分在前面,一部分在后面,这是 MapReduce 的基本的操作

image.png

对于 word count ,我们经常用记录一篇文章里不同的单词出现了多少次这个例子来讲, word count尾代码就是在 Map 阶段,对于每一个单词都发出一个单词 W 1这样的一个东西Reduce 这个阶段要做的事情就是,对每一个单词来说,把这些1全部都加起来产生一个输出,这样就得到了每一个单词出现多少次的这结果,这就是它的伪代码

image.png

所以在 Map Reduce 框架里面就会有 map  reduce 两个东西,在它们两个的执行过程当中操作的全是这种监制队。

相关文章
|
6月前
|
消息中间件 存储 分布式计算
Hadoop学习笔记(HDP)-Part.19 安装Kafka
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
172 0
Hadoop学习笔记(HDP)-Part.19 安装Kafka
|
6月前
|
SQL 分布式计算 Hadoop
Hadoop学习笔记(HDP)-Part.08 部署Ambari集群
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
231 0
Hadoop学习笔记(HDP)-Part.08 部署Ambari集群
|
6月前
|
分布式计算 资源调度 Hadoop
安装hadoop学习笔记
安装hadoop学习笔记
63 0
安装hadoop学习笔记
|
6月前
|
分布式计算 资源调度 Hadoop
Hadoop学习笔记(HDP)-Part.18 安装Flink
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
228 2
Hadoop学习笔记(HDP)-Part.18 安装Flink
|
6月前
|
SQL 分布式计算 Hadoop
Hadoop学习笔记(HDP)-Part.16 安装HBase
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
132 1
Hadoop学习笔记(HDP)-Part.16 安装HBase
|
6月前
|
SQL 分布式计算 Hadoop
Hadoop学习笔记(HDP)-Part.15 安装HIVE
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
197 1
Hadoop学习笔记(HDP)-Part.15 安装HIVE
|
6月前
|
分布式计算 Hadoop 关系型数据库
Hadoop学习笔记(HDP)-Part.10 创建集群
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
156 1
Hadoop学习笔记(HDP)-Part.10 创建集群
|
6月前
|
SQL 消息中间件 关系型数据库
Hadoop学习笔记(HDP)-Part.04 基础环境配置
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
103 1
|
6月前
|
消息中间件 存储 分布式计算
Hadoop学习笔记(HDP)-Part.20 安装Flume
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
102 0
Hadoop学习笔记(HDP)-Part.20 安装Flume
|
6月前
|
分布式计算 资源调度 Java
Hadoop学习笔记(HDP)-Part.17 安装Spark2
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
85 0
Hadoop学习笔记(HDP)-Part.17 安装Spark2

相关实验场景

更多
下一篇
无影云桌面