前言
这节课主要关注于分析和挖掘数据, 将机器学习和数据挖掘应用在大数据中, 跟深度学习、GPU集群无关。
什么是大数据
“Big Data” involves data whose volume, diversity and complexity requires new techniques, algorithms and analyses to extract valuable knowledge (hidden).
现代数据越来越多越来越大, 不能用传统数据库技术进行存储。
流数据实时生产出来立即被捕捉并分析, 并产生有价值的信息,这个过程越快越好, 最好是秒级的,因为商机稍纵即逝。
网络传输的速度远远鳗慢于本地计算(CPU,内存,硬盘)的速度, 并且网络不可靠。
每个节点处理特定的数据, 数据不需要在节点间移动,除非必须移动。
所以把数据存储在计算节点中, 每个计算节点都运行着你的代码以及这些数据, 每个计算节点都只有一部分数据,不会有全部的数据。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eZmUnr9k-1629863724087)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p486)]
数据种类 ?Structured data (we know the schema) ?Tables, relational databases ?Semi-Structured data (we can infer the schema) ?XML files, Tagged text ?Unstructured data (we don’t know the schema) ?Text, images, audio, video
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUoIbzDO-1629863724098)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p488)]
数据存储在每个节点中,进行本地存储+计算, 相同的数据会存储在2个节点上, 预防宕机,互备, 可以通过网络交换信息来解决某些问题。
你不用担心到底是哪个节点运行着哪些数据, 做的怎样的操作, 也不用担心在不同的节点运行了2次相同的数据, 有自己的容错机制,不会因为一个地方算错了而整个重算, 容错部分会被自动完成。
你只需要担心最后的运算结果即可。
如果集群中机器宕机, 我们只要按一个按钮去增加机器或重启即可。
节点中需要有冗余数据,做灾备, 其中一台机器down了之后,其他机器可以去处理那台down机的数据工作。
大数据应用场景
我们可以把大数据变得更小,更容易管理, 可以用于数据挖掘和机器学习。
?Big data may (more like should) result in: ?Better statistics/models ?Novel insights ?New opportunities for research and industry
大数据包括数据可视化,数据挖掘与分析,
capture, store, search, analyse and visualise the data.
持续的数据流被捕获,数据存储后, 要实时进行处理和分析,要快速高效。
APP收集你的个人信息个人习惯, 例如看一个视频看多久, 然后利用大数据技术, 进化出你喜欢的专属于你的模式给你, 用来赚钱。
用Apache Spark处理机器学习+数据挖掘问题 对数据进行预处理而获得有质量的数据。
MapReduce
MapReduce是一个抽象的概念,一种并行编程模型, 可以使用Hadoop或Spark来实现MapReduce。
MapReduc遵循分而治之策略来处理分布式计算中的数据集, Map是用来分,Reduce是用来治。
MapReduce思想把大数据拆成小块, 并分别在小块数据上进行一系列操作, 之后再把数据进行合并。
MapReduce基于函数式编程, 对键值对进行操作。
? For a text file, the key could be the line number, and the value would be the actual text in that line.
? Or we think of a classification dataset in machine learning, the key could be the instance number and the value, the actual instance with its corresponding features.
moving computation only is much cheaper and faster than moving computation and data at the same time。
MapReduce是如何做到的数据本地化or数据较少移动?
数据是分布式的,需要用到分布式文件系统, HDFS,Hadoop Distributed File System。
我们要用分布式文件系统把数据分散到不同的节点上, 操作和处理动作是作用在所有的节点上, 每个节点只运算与处理在自己本机的数据, 只有特定的数据才会通过网络移动,
把整块数据分成若干块,放到若干个节点中, 之后我们需要把不同节点的结果合并到一起。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XpFLrTym-1629863724101)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p489)]
在Python中的Map与Reduce的玩法是: Map负责对集合中所有的元素应用某个函数, 而Reduce则负责把集合中的所有元素进行某种计算(例如:累加,累减)然后把集合缩减成1个数字。
用键值对来处理,可以自动排序?
在分布式场景下,若干有节点down了,该怎么办? 机器运行速度慢该怎么办? 设置一个task,让1个新的节点去接替坏的节点? 把down的那台节点的数据转到另一个节点上?
自己写逻辑,遵循MapReduce的规范, 分布式细节不用自己考虑,会被自动分发与执行, 在MapReduce中的数据流动对于我们来说是透明的。
你的任意一个逻辑实现都要分成这么两个步骤: 1)Map 2)Reduce
根据说句的不同可以设置多样化的map与reduce策略。
在分布式计算中,重要的是要确保reduce不依赖于元素的顺序来执行操作,因为我们可能需要将其应用到不同的位置以减少网络的开销,并且列表可能没有出现你期望的顺序。
大数据的HelloWorld
Counting words in a big document 从一堆字符串中查询频率,Wordcount
Our task is to count the frequency of words in a document or collection of documents. To understand what I want to achieve, let me create a simple string with some content.
本地Python实现版本:
text = “Welcome to the World of Big Data Hello World Bye World Hello MapReduce GoodBye MapReduce” dic = {} for word in text.split(" "): if word not in dic.keys(): dic[word]=1 else: dic[word]+=1
print(dic)
但如果文件非常大,文件里的数据非常多, 怎么办? 海量数据的场景下分布式运算
- 分布式计算,把数据打散到不同节点,每个节点只[分析/处理]其中一部分数据;
- 把不同节点的运算结果进行合并,发送到若干个结果节点上,每个结果节点要的数据都要分好累,根据分类原则,落到不同的结果节点上;
我们只需要实现2个函数即可:map与reduce, map的本质就是拆解,reduce的本质就是聚合。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NIOD7lDq-1629863724106)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p497)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VAuUlMbU-1629863724107)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p498)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1tBRZprm-1629863724109)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p496)] spilt和shuffle都是主动去获取, 得到数据->切分->归类->组装->交付
来洋葱,拿洋葱,切洋葱,放洋葱,拼洋葱,送洋葱。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uUv6BGDZ-1629863724110)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p499)] split过程:workers把数据分别拿到自己的手上, map:把每一行切分成键值对:单词和次数,次数每次都是1。 shuffle:把不同的单词放到不同的盒子里,归类,这个是由shuffle算法来决定的,现在都是智能化全自动化,不用手动做了,随机采样等等。 reduce:聚合,把相同的数据放到一块做整合,reduce的结果输出的执行过程是高度并行的,不用互相等待。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AvbhXxNX-1629863724111)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p490)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Vc1PFO0-1629863724114)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p493)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GFNz1Uby-1629863724115)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p501)]
map() 输入是1个个的键值对(k1,v1), key是文档ID(不重要),value是文档内容。
通过编程,把文档内容进行[拆分/分割], 把字符串拆成一个个的单词, 把拆分出来的单词写成key,value写成1, 在这个阶段我们不用自己做累加, 只要出现1次,傻瓜式的写个1就行, 再把这堆键值对形成1个List并输出。
shuffle 自动完成,自动排序中间数据,按key分组 , 把map输出过来的集合中的数据[分组/分类/排序], 把所有节点中相同的key的value都收集起来放到一起, 形成每个key对应的value集合,拥有相同key的list, 这样就形成了"hello",[1,1,1],之后输出给Reduce。
reduce() 拿到shuffle的输入后,给每个key中的value集合做加法,然后放到key里输出。 (把List简化reduce成一个数了)
伪代码: map(key,value):
for each word w return (w,1)
reduce(key,listValues) result = 0 for each element in listValues result += element return (key,result)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k2Nx5IIN-1629863724117)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p492)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pBuRm8mA-1629863724117)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p491)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTNIbJ70-1629863724120)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p495)] 假设有3个节点,每个节点的本地硬盘上都有数据。
https://blog.csdn.net/qq_35078688/article/details/83240661
https://blog.csdn.net/zhinengxuexi/article/details/83351705?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
https://baike.baidu.com/item/MapReduce/133425?fr=aladdin
内部机制与原理
In MapReduce the data must have been distributed across nodes in blocks/partitions (on a Distributed File system). These blocks are usually quite big, around 128MB, where there is quite a bit of data to process.
A mapper is a process that executes the map function we have programmed for each key-value pair in a block of data.
A mapper could manage multiple blocks, and there could be more than one mapper in a single node.
Mapper的数量与节点数量无关, 根据数据大小与用途来做设置。
A reducer is also a process that runs our reduce function for each key k2.
Of course, the shuffle phase sends the (k2, list(v2)) to the same reducer process.
In Hadoop, these mapper processes write their outputs to a buffer in memory which will might be written on the drive if they don’t fit in main memory.
This slows things down because the shuffle must read its input from the drive and sending it to the reduce, that again, this could be very slow depending on our design.
Once again this will store the output on the drive. Finally, the reducers read the data again from drive (if they are not in the buffer), and then write the result into the drive again.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qIuKPNxb-1629863724121)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p502)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7LOgaXmn-1629863724122)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p503)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vrQgSZ8P-1629863724124)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p500)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPCSwt6a-1629863724125)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p504)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pK8lbwag-1629863724126)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p505)]
组合器Combiner
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9NT2atOS-1629863724127)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p506)]
Note that each arrow from the map to the shuffle means that this information will be sent over the network. If we imagine that the dotted blue lines distinguish here between three different nodes (one of each takes one line of text), there will be some data movement involve.
To avoid excessive data transfer between nodes, MapReduce provides the option to implement something called Combiners: local aggregators. These combiners work very similarly to the reduc- ers (usually the same code is used), and the different implementation of the MapReduce paradigm (E.g. Hadoop or Spark) may decide to actually use it or not depending on what is faster.
Combiners perform some partial merging of the results of a map phase before sending it over the network saving, which could be really useful when there is a significant repetition in the inter- mediate keys produced by each map task. This is very useful in the word count example which may generate hundreds or thousands keys!
在通过网络存储发送之前, 组合器会对Map阶段的结果执行一些部分合并, 当每个Map任务产生的中间键有很大的重复时, 这可能非常有用。 这在单词计数的例子中是非常有用的, 可能会产生成百上千个键!
Hadoop
HDFS是通用的文件存储 YARN是通用的资源管理 spark的竞对是hive hive默认引擎是mapreduce 准确说spark的竞对是mapreduce 这样更合理一点 两个都是计算引擎
当然Hive也可以On spark
http://hadoop.apache.org/docs/r1.0.4/cn/mapred_tutorial.html
https://www.cnblogs.com/654321cc/p/12169109.html
Apache Hadoop Hadoop(不会在本机安装Hadoop)生态系统,
Introduction to HDFS Erasure Coding in Apache Hadoop(课外读物)
https://blog.cloudera.com/introduction-to-hdfs-erasure-coding-in-apache-hadoop/
如何实现这些MapReduce遗留下来的东西
?Data locality ?Transparency (hide complexity away) ? Fault-tolerance
? Decide how to split the work across machine keeping in mind the data locality principle, and automatic/transparent communication between nodes. ? Deal with hardware failure, or even worse, slow machines. You might be thinking, well, my computer didn’t break in three years… yes but if you have 10,000 nodes, even if they only failed every 3 years, you would have 10 failures per day! In other words, what are the expected design features for a distributed system in Big Data? We want this to be fault tolerant, provide automatic communication and capable to scale out to thousand of computers. How does MapReduce handle a hardware failure? In MapReduce, you simply launch another task that will take over in case that node that is not responding does not finish the assigned task. This is usually referred as speculative execution.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OQPGbnXS-1629863724128)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p507)]
优缺点
Hadoop的优点和应用 总的来看,Hadoop有以下优点:
高可靠性:这个是由它的基因决定的。它的基因来自Google。Google最擅长的事情,就是“垃圾利用”。Google起家的时候就是穷,买不起高端服务器,所以,特别喜欢在普通电脑上部署这种大型系统。虽然硬件不可靠,但是系统非常可靠。
高扩展性:Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可以方便地进行扩展。说白了,想变大很容易。
高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。这个其实也算是高可靠性。
低成本:Hadoop是开源的,依赖于社区服务,使用成本比较低。
基于这些优点,Hadoop适合应用于大数据存储和大数据分析的应用,适合于服务器几千台到几万台的集群运行,支持PB级的存储容量。
Hadoop的应用非常广泛,包括:搜索、日志处理、推荐系统、数据分析、视频图像分析、数据保存等,都可以使用它进行部署。
目前,包括Yahoo、IBM、Facebook、亚马逊、阿里巴巴、华为、百度、腾讯等公司,都采用Hadoop构建自己的大数据系统。
除了上述大型企业将Hadoop技术运用在自身的服务中外,一些提供Hadoop解决方案的商业型公司也纷纷跟进,利用自身技术对Hadoop进行优化、改进、二次开发等,然后对外提供商业服务。
Hadoop版本
1.0版本与2.0版本 2011年11月,Hadoop 1.0.0版本正式发布,意味着可以用于商业化。
但是,1.0版本中,存在一些问题:
1 扩展性差,JobTracker负载较重,成为性能瓶颈。
2 可靠性差,NameNode只有一个,万一挂掉,整个系统就会崩溃。
3 仅适用MapReduce一种计算方式。
4 资源管理的效率比较低。
所以,2012年5月,Hadoop推出了 2.0版本 。
2.0版本中,在HDFS之上,增加了YARN(资源管理框架)层。它是一个资源管理模块,为各类应用程序提供资源管理和调度。
Hadoop V1
Follows a Client/Server architecture
Initially Yarn didn’t exist
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QUJaqroQ-1629863724130)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p508)]
?Map Reduce layer ?Job Tracker: in the driver node ?Task Tracker: in the worker nodes
?HDFS layer ?Name Node: usually in driver node ?Data Node: usually only in the workers
All these processes can be executed in the same machine.
Hadoop V2
Yarn (Yet Another Resource Negotiator) , taking away resource administration from the MapReduce module
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uUbE3zLI-1629863724131)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p517)]
Hadoop组件
经过时间的累积,Hadoop已经从最开始的两三个组件, 发展成一个拥有20多个部件的生态系统。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2cWj3DC-1629863724133)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p515)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S0vO7WYj-1629863724134)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p526)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wpNM3G2S-1629863724136)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p527)]
在整个Hadoop架构中,计算框架起到承上启下的作用, 一方面可以操作HDFS中的数据, 另一方面可以被封装,提供Hive、Pig这样的上层组件的调用。
HBase:来源于Google的BigTable;是一个高可靠性、高性能、面向列、可伸缩的分布式数据库。
Hive:是一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Pig:是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。
ZooKeeper:来源于Google的Chubby;它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度。
Ambari:Hadoop管理工具,可以快捷地监控、部署、管理集群。
Sqoop:用于在Hadoop与传统的数据库间进行数据的传递。
Mahout:一个可扩展的机器学习和数据挖掘库。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZSfxzm1v-1629863724137)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p516)]
Hadoop的核心,说白了,就是HDFS和MapReduce。 HDFS为海量数据提供了存储,而MapReduce为海量数据提供了计算框架。
Hadoop Common
HDFS
Hadoop Distributed File System (HDFS)
容错机制
?Replication (default 3x): data is available in different nodes to provide fault tolerance. This incurs a 200% overhead in storage space and other resources (e.g. bandwidth when writing data)
?Erasure coding uses far less storage (approx. by 50% compared with 3x replication == 1.5x)
?Erasure coding is a branch of information theory which extends a message with redundant data for fault tolerance. Implementing this in Hadoop is not trivial! Requires changes across many parts of the HDFS
原理
基本概念
整个HDFS有三个重要角色: NameNode(名称节点) DataNode(数据节点) Client(客户端)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPIiIVbM-1629863724139)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p509)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ap1H4Sej-1629863724140)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p524)]
Master-worker pattern
NameNode:是Master节点(主节点),可以看作是分布式文件系统中的管理者 ,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制、位置信息等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。 可以有第2个NameNode做备份扩容使用。
DataNode:是Slave节点(从节点),是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode,还负责在被请求时检索block,DataNode发送心跳给NameNode。
Client:客户端,访问HDFS,与NameNode交互,获得文件位置信息;与DataNode交互,读取和写入数据。切分文件?
Block(块):Block是HDFS中的基本数据读写单元;HDFS中的文件都是被切割为block(块)进行存储的;这些块被复制到多个DataNode中;块的大小(通常为64MB,128MB)和复制的块数量在创建文件时由Client决定。块很大的目的是减少寻找数据时间。Typically, each block is replicated 3 times in different machines
读写流程
写流程: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IrQr0WPW-1629863724141)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p528)]
- 客户端请求名称节点去创建文件;
- NameNode去创建命名空间;
- 客户端往写DataNode中写入
- 数据通过节点传播复制
- NameNode等待最后的确认
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-odWXY287-1629863724142)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p510)]
1 用户向Client(客户机)提出请求。例如,需要写入200MB的数据。
2 Client制定计划:将数据按照64MB为块,进行切割;所有的块都保存三份。
3 Client将大文件切分成块(block)。
4 针对第一个块,Client告诉NameNode(主控节点),请帮助我,将64MB的块复制三份。
5 NameNode告诉Client三个DataNode(数据节点)的地址,并且将它们根据到Client的距离,进行了排序。
6 Client把数据和清单发给第一个DataNode。
7 第一个DataNode将数据复制给第二个DataNode。
8 第二个DataNode将数据复制给第三个DataNode。
9 如果某一个块的所有数据都已写入,就会向NameNode反馈已完成。
10 对第二个Block,也进行相同的操作。
11 所有Block都完成后,关闭文件。NameNode会将数据持久化到磁盘上。
读流程: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jal8LFoU-1629863724143)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p525)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YkWxVD4v-1629863724144)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p511)]
1 用户向Client提出读取请求。
2 Client向NameNode请求这个文件的所有信息。
3 NameNode将给Client这个文件的块列表,以及存储各个块的数据节点清单(按照和客户端的距离排序)。
4 Client从距离最近的数据节点下载所需的块。
(注意:以上只是简化的描述,实际过程会更加复杂。)
命令
hadoop fs -ls
List files
hadoop fs -cp
Copy files from HDFS to HDFS
hadoop fs -mv
Move files from HDFS to HDFS
hadoop fs -rm
Remove files in HDFS
hadoop fs -rmr
Remove recursively in HDFS
hadoop fs -cat
Show the content of a file in HDFS
hadoop fs -mkdir
Make a folder HDFS
hadoop fs -put
Copy files from Local to HDFS
hadoop fs -copyToLocal
Also:
hadoop fs -get
Copy files from HDFS to local.
YARN
Hadoop YARN – resource manager (from V2)
?YARN is organised around 4 key concepts
?The Resource Manager: Control resources available in the cluster (for all applications). Takes part of the duty from the JobTracker
?Node Manager: Launch and track processes assigned to workers (one process per node)
?Container: It is a subset of resources of the cluster (key concept!)
?Application master: Manages a particular application, and runs on a container. Responsible for fault tolerance
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tfMiYWva-1629863724145)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p518)]
Hadoop MapReduce
Hadoop1.x使用Hadoop MapReduce。
当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。
Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9vIbl3Lw-1629863724147)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p512)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZmfvDs3J-1629863724147)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p513)] 1 Hadoop将输入数据切成若干个分片,并将每个split(分割)交给一个map task(Map任务)处理。
2 Mapping之后,相当于得出这个task里面,每个词以及它出现的次数。
3 shuffle(拖移)将相同的词放在一起,并对它们进行排序,分成若干个分片。
4 根据这些分片,进行reduce(归约)。
5 统计出reduce task的结果,输出到文件。
MapReduce这个框架模型,极大地方便了编程人员在不会分布式并行编程的情况下, 将自己的程序运行在分布式系统上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3tpED6yd-1629863724149)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p514)]
JobTracker用于调度和管理其它的TaskTracker, JobTracker可以运行于集群中任一台计算机上。TaskTracker负责执行任务,必须运行于DataNode上。
public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length < 2) {
System.err.println("Usage: wordcount <in> [<in>...] <out>");
System.exit(2); }
Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class);
for (int i = 0; i < otherArgs.length - 1; ++i) {
FileInputFormat.addInputPath(job, new Path(otherArgs[i])); }
FileOutputFormat.setOutputPath(job,
new Path(otherArgs[otherArgs.length - 1]));
System.exit(job.waitForCompletion(true) ? 0 : 1); }
执行过程
- The client launches the process
(connection with the ResourceManager)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqWprjD2-1629863724150)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p519)]
- The ResourceManager allocates a single container where the ApplicationMaster is executed
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KBNgclvt-1629863724151)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p520)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iEzXyRHC-1629863724153)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p521)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flal3hhP-1629863724155)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p522)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4JBPVX1T-1629863724158)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p523)]
?Summary:
-
The client launches the process (connection with the ResourceManager) -
The ResourceManager requests a container where the ApplicationMaster is executed -
The ApplicationMaster requests the containers to execute all the tasks (in different nodes) -
All the tasks are executed in the containers. Containers are released once its tasks are finished -
The ApplicationMaster finishes when all tasks have been completed and release the container
推荐书籍
Big data related books ? Big Data: A Revolution That Will Transform How We Live, Work and Think (2013). Victor Mayer-Schonberger. John Murray, ISBN: 978-1848547926 ? Mahout in Action (2011). Sean Owen, Robin Anil, Ted Dunning, Ellen Friedman Manning Publications, ISBN: 978-1935182689 ? Hadoop: The Definitive Guide (2015). Tom White. O’Reilly Media, ISBN: 978-1491901632 ? Mining of Massive Datasets (2014). Jure Lescovec, Anand Rajaraman, Jeffrey D. Ullman. Cambridge University Press, ISBN: 978-1107077232 ? Learning Spark: Lightning-Fast Big Data Analysis (2015). Holden Karau, Andy Konwinski, Patrick Wendell, Matei Zaharia. O’Reilly Media, ISBN: 978-1449358624 ? Advanced Analytics with Spark: Patterns for Learning from Data at Scale (2015). Sandy Ryza, Uri Laserson, Sean Owen, Josh Wills. O’Reilly Media, ISBN: 978-1491912768
Machine Learning and Data mining books Pattern Classification (2000). Richard O. Duda, Peter E. Hart, David G. Stork. Wiley-Interscience, ISBN: 978-0471056690 Data mining and knowledge discovery handbook. Odied Maimon y Lior Rokach (2010). Springer. ISBN: 978-0387098234 Pattern Recognition and Machine Learning. Christopher M. Bishop (2006) Springer. ISBN: 978-0387-31073-2
其他
jupyter 控制台 pip3 install jupyterlab jupyter-lab http://localhost:8888/lab
录播课
https://echo360.org.uk/media/511b7b24-79be-4703-9627-102edb1664c6/public
https://echo360.org.uk/media/e64c1896-b36a-4b95-bd2b-fa85b0683010/public
https://echo360.org.uk/media/8f04dca5-b88e-40de-97d3-bab710fece9e/public
https://echo360.org.uk/media/33744891-d448-4a47-a15e-1578c8780443/public
https://echo360.org.uk/media/cb7c7066-00a3-40fe-b9c9-e1df8e23b387/public
|