split => map => shuffle => reduce => output
- 创建新Job实例,并调度HDFS资源
- 启用MapTask执行map函数
- 启动ReduceTask执行reduce函数
- JobClient轮询获知任务完成
作业(Job):MapReduce程序指定的一个完整计算过程
任务(Task):MapReduce框架中进行并行计算的基本事务单元
一个作业(Job)在执行过程中可以被拆分为若干Map和Reduce任务(Task)完成
FIFO,Fair,Capacity
文件内部快速排序(Sort)
多个文件归并排序(Merge)
待处理的大数据 => 划分 => 提交给主节点 => 传送给map节点,做一些数据整理工作(combining) => 传送给Reduce节点
主节点失效:一旦某个任务失效,可以从最近有效的检查点开始重新执行,避免从头开始计算的时间浪费。
工作节点失效:如果主节点检测工作节点没有得到回应,则认为该工作节点失效。主节点将把失效的任务重新调度到其它工作节点上执行。
JobTracker 是 Map-reduce 的集中处理点,存在单点故障。
JobTracker 完成了太多的任务,造成了过多的资源消耗
ApplicationMaster:头头,申请资源和分配任务
ResourceManager:小头,监控头头和下属,资源分配和调度
NodeManager:下属,资源管理,接受命令
弹性分布式数据集
一个RDD的不同分区可以在集群中的不同节点上进行并行计算
放内存
action,transformation,persistence
读入外部数据源
transformation
action
数据复制和记录日志
中间持久化到内存,中间数据在内存中的RDD操作中传递
存放对象可是Java对象
有向无环图
运行在工作节点(WorkerNode)的一个进程,负责运行Task
应用>作业>阶段>任务
Driver Program(SparkContext)
Cluster Manager
Worker Nodes(Executor(Task))
HDFS、HBase
① Driver解析生成Task
② Driver向Cluster Manager申请资源
③ Cluster Manager分配资源和节点,并创建Executor
④ Executor向Driver注册
⑤ Driver将代码和文件传给Executor
⑥ Executor运行Task
宽依赖:一对多和多对多
窄依赖:多对一或一对一
逆流划分,遇到窄依赖就做合并,遇到宽依赖就断开
① 创建RDD对象
② 创建DAG,也即RDD之间的依赖关系,再分解为多个Stage,每个Stage中有多个Task
③ Task被TaskScheduler分给WorkerNode上的Executor执行
④ Worker执行Tasks
RDD维护可以用来创建丢失分区的信息
RDD缓存:包括基于内存和磁盘的缓存
内存缓存=哈希表+存取策略
Shuffle数据的持久化:必须是在磁盘上进行缓存的
数据库是长期储存在计算机内、有组织的、可共享的数据集合。
Database Management System
数据定义语言,定义数据库中的数据对象。
数据操纵语言,操纵数据实现对数据库的基本操作。
数据库、数据库管理系统、应用系统、数据库管理员、用户
RAID(是什么?由什么组成?)
磁盘冗余阵列
由若干同样的磁盘组成的阵列
文件内记录的组织(5种记录的组织方式?它们分别怎么记录的?)
堆文件组织:随便放
顺序文件组织:升序或降序的放,指针链结构
散列文件组织:某个属性值通过哈希函数求得的值作为存储地址
聚类文件组织:有联系的记录存储在同一块内
独立于主文件记录的一个只含索引属性的小的文件
两大类:有序索引 vs 散列索引
聚类(非聚类)索引:区别在于是否与主文件顺序一致
稠密索引、稀疏索引、多级索引
删除:
对稠密索引,删除相应的索引项;
对稀疏索引,如果被删记录的索引值在索引块中出现,则用主文件被删记录的下一个记录的查找键A替换。若A已出现在索引块,则删除被删记录的对应索引键。插入:
对稠密索引且查找键未在索引块出现,在索引中插入。
对稀疏索引:若数据块有空闲放得下新数据,不用修改索引;否则加入新数据块,在索引块中插入一个新索引项
是DBMS中一个逻辑工作单元,通常由一组数据库的操作组成
原子性(Atomic)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
| 划分技术 | 定义(磁盘数 = n) | 优点 | 缺点 |
|---|---|---|---|
| 循环划分 | |||
| 散列划分 | |||
| 范围划分 |
划分技术 定义(磁盘数 = n) 优点 缺点 循环划分 (i mod n) 最适合顺序扫描 难以处理范围查询 散列划分 值域为0…n-1的散列函数 h 顺序存取 无聚簇, 因此难以回答范围查询 范围划分 划分向量 [ v 0 , v 1 , . . . , v n − 2 ] [v_0, v_1, ..., v_{n-2}] [v0,v1,...,vn−2]
偏斜的种类(2种偏斜是?划分偏斜的两种划分是?)
处理偏斜(3种方法?)
属性值偏斜:某些值在许多元组的划分属性上出现,所有在划分属性上值相同的元组被分配在同一分区中
划分偏斜
范围划分:一个坏的划分向量可能将过多元组分配到一个分区以及过少元组分配到其他分区
散列划分:只要选择好的散列函数就不太可能发生
范围划分中处理偏斜:生成平衡的划分向量的方法——每读出关系的1/n,下一条元组的划分属性值就加入划分向量
利用直方图处理偏斜:从直方图可以相对直接地构造出平衡的划分向量
利用虚拟处理器来处理偏斜:偏斜的虚拟分区被分散到若干实际处理器上
增加事务吞吐量,主要用于扩展事务处理系统以支持更大的每秒事务数
• 读/写一页之前, 该页必须以共享/排他方式加锁
• 对页加锁时, 该页必须从磁盘读出
• 释放页锁之前, 该页如果更新过则必须写到磁盘
操作内并行 —— 查询内每个操作并行执行
操作间并行 —— 查询内不同操作并行执行
Not Only SQL
典型的NoSQL数据库通常包括键值数据库、列族数据库、文档数据库和图数据库
C(Consistency):一致性,是指任何一个读操作总是能够读到之前完成的写操作的结果;
A(Availability):可用性,是指快速获取数据,可以在确定的时间内返回操作结果;
P(Tolerance of Network Partition):分区容忍性,是指当出现网络分区的情况时,分离的系统也能够正常运行。
BASE(Basically Availble, Soft-state, Eventual consistency)
BASE的基本含义是基本可用(Basically Availble)、软状态(Soft state)和最终一致性(Eventual consistency)
NewSQL是对各种新的可扩展/高性能数据库的简称
NewSQL特点:
支持关系数据模型
使用SQL作为主要的接口
实时、分布式、流式的计算系统
请求应答(同步):实时图片处理、实时网页分析
流式处理(异步):逐条处理、分析统计
数据流处理:可用来实时处理新数据和更新数据库,兼具容错性和可扩展性。
连续计算:可进行连续查询并把结果即时反馈给客户端。
分布式远程程序调用
可靠、快速、高容错,水平扩展
Nimbus(类JobTracker
zookeeper
Supervisor(类TaskTracker
worker(类Child
和前面类似
Client提交Topology => Nimbus将任务存储到 => Zookeeper => Supervisor获取分配任务并启动 => Worker执行具体的 (Task)
任务级失败
Bolt任务crash引起的消息未被应答 或 acker任务失败
=> Spout的fail方法将被调用。Spout任务失败
=> 与Spout任务对接的外部设备(如MQ)负责消息的完整性。集群节点(机器)故障
- Storm集群中的节点故障:任务转移
- Zookeeper集群中的节点故障:保证少于半数的机器宕机仍可运行
Nimbus节点故障:没有Nimbus,Worker不会在必要时被安排到其他主机,客户端也无法提交任务。
Stream:无限的Tuple序列
Spouts:水龙头,Stream的源头
Bolts:处理Tuple,创建新Streams
Topology:Spouts和Bolts组成的抽象网络
用于告知Topology如何再两个组件(Spouts、Bolts)之间进行Tuple的传送
ShuffleGrouping:随机分组
FieldsGrouping:按照字段分组
AllGrouping:广播发送,所有Tuple向所有Task发
GlobalGrouping:全局分组,所有Tuple送到同一Task
NonGrouping:不分组
DirectGrouping:指定发送,指定接收
输入数据按照时间片分成一段一段的DStream,每一段数据转换为Spark的RDD
表示数据流的RDDs序列
Transformations:从一个Dstream修改数据以创建另一个DStream
标准的RDD操作:map, countByValue, reduce, insert…
有状态操作:window, countByValueAndWindow…
- RDDs可以记住从原始的容错输入创建它的操作序列
- 批量输入数据被复制到多个工作节点的内存中,因此是容错的
Spark Streaming与Storm对比
| Spark Streaming | Storm |
|---|---|
| 无法实现毫秒级的流计算 | 可以实现毫秒级响应 |
| 低延迟执行引擎可以用于实时计算 | |
| 相比于Storm,RDD数据集更容易做高效的容错处理 |
Storm和Hadoop架构组件功能对应关系
| Hadoop | Storm | |
|---|---|---|
| 应用名称 | Job | Topology |
| 系统角色 | JobTracker | Nimbus |
| TaskTracker | Supervisor | |
| 组件接口 | Map/Reduce | Spout/Bolt |
计算模型
Superstep: 并行结点计算
对于每个结点(六种可能操作)
终止条件(两个)
接受上一个superstep发出的消息
执行相同的用户定义函数
修改它的值或者其输出边的值
将消息送到其他点(由下一个superstep接受)
改变图的拓扑结构
没有额外工作要做时结束迭代所有顶点同时变为非活跃状态
没有信息传递
Pregel系统也使用主/从模型
用于全局通信、全局数据和监控
在superstep末尾,来自每个从节点的部分聚合值聚合在一个树结构种
① 主节点分割图,并给每个从节点分配一个或多个部分
② 主节点指导每个从节点执行一个superstep
③ 最后,主节点指示每个从节点保存各自的图
- 检查点:主节点定期指示从节点将分区的状态保存到持久化存储中
- 错误检测:定时使用“ping”信息
- 恢复
主节点将图形分区重新分配给当前可用的从节点
所有工作人员都从最近可用的检查点重新加载分区状态- 局部恢复:记录传出的信息、只涉及恢复分区
在大规模下小概率事件将成为常态(小概率事件有什么?)
磁盘机器损坏、RAID卡故障、网络故障、电源故障、数据错误、系统异常
| HDFS | GFS | MooseFS | 说明 |
|---|---|---|---|
| NameNode | Master | Master | 提供文件系统的目录信息,分块信息,数据块的位置信息,管理各个数据服务器。 |
| DataNode | Chunk Server | Chunk Server | 分布式文件系统中的每一个文件,都被切分成若干个数据块,每一个数据块都被存储在不同的服务器上 |
| Block | Chunk | Chunk | 每个文件都会被切分成若干个块(默认64MB),每一块都有连续的一段文件内容,是存储的基本单位。 |
| Packet | 无 | 无 | 累计到Packet后,往文件系统中写入一次 |
| Chunk | 无 | Block(64KB) | 在每一个数据包中,都会将数据切成更小的块(512字节),每一个块配上一个奇偶校验码(CRC),这样的块就是传输块。 |
| Secondary NameNode | 无 | Metalogger | 备用的主控服务器,拉取着主控服务器的日志,等待被扶正 |
| 功能 | 说明 |
|---|---|
| Namespace | 命名空间 |
| Shell命令 | 直接和HDFS以及其他Hadoop支持的文件系统进行交互 |
| 数据复制 | |
| 机架感知 | 存放策略是将一个副本存放在本地机架上的节点,一个副本放在同一机架上的另一个节点 |
| Editlog | 是整个日志体系的核心 |
| 集群均衡 | |
| 空间的回收 |
① HDFS Client向远程的Namenode发起RPC请求
② Namenode返回文件的block拷贝的DataNode列表
③ Client选取离客户端近的DataNode读取block
④ 若文件读取还没结束,Client继续向NameNode获取下一批block列表
⑤ 读完后,关闭与DataNode的连接,为读取下一个block寻找最佳DataNode
① HDFS Client向远程的Namenode发起RPC请求
② NameNode检查文件是否存在,是否有权操作
③ 将文件切分为多个packets,向NameNode申请新blocks,获取适合存储的DataNode列表
④ 开始以管道的形式将packet写入DataNode,存储后将剩下的传递到下一个DataNode,呈流水线的形式
⑤ 最后的DataNode会返回ack packet,在pipeline里传给Client。Client收到后从ack queue移除相应packet
| 数据写入方式 | 优点 | 不足 |
|---|---|---|
| 链式写入 | 负载均衡 | 链条过长 |
| 主从写入 | 链条短 | 单点压力大 |
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,