分布式数据库技术相关知识概述
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式数据库技术相关知识概述相关的知识,希望对你有一定的参考价值。
分布式数据库技术-基础知识概述
- 1. NoSQL数据库的类型有哪些?
- 2. 怎么判断一个数据库是否是NoSQL数据库?
- 3. NoSQL技术诞生的最初发点是为了解决什么问题?
- 4. 列族数据库存储结构?
- 5. NoSQL数据库有哪些不同类型并举例说明?
- 6. 文档数据库存储的基本元素是哪些?
- 7. Nosql事务处理的BASE特点指的是?
- 8. TRDB擅长解决哪些问题,NoSQL擅长解决问题?
- 9. CAP定理的三大特性?
- 10. MongoDB的特点是什么?
- 11. MongoDB由什么语言编写和实现的?
- 12. MongoDB数据库的命名规则?
- 13. MongoDB成为最好NoSQL数据库的原因是什么?
- 14. MongoDB运行必须需要大量RAM内存?
- 15. Redis的基本数据结构类型有哪些?Redis集群模式?
- 16. MongoDB的主要特征是什么?mongodb的分片集群的组成?
- 17. MongoDB配置文件采用什么格式?
- 18. MongoDB和Redis数据库有什么区别?
- 19. MongoDB中查看数据库和集合的命令?
- 20. 什么是“mongod”进程和“mongo”进程?
- 21. MongoDB中的基本命令?根据条件修改一条数据和多条数据的内容命令?
- 22. Redis的几个常见命令?Redis中常见字符串命令
- 23. Redis订阅命令?
- 24. Redis消息发布/订阅机制的原理是什么?主要命令有哪些?
- 25. 如何启动redis服务?
- 26. Redis 数据库对大小写敏感不?Redis选择不同的数据库使用什么命令?
- 27. 单机环境下什么是影响数据库读写速度的最大瓶颈?
- 28. 把数据从硬盘读写处理,改为内存处理,是属于什么类型的扩展?
- 29. NoSQL主要解决了大数据环境下的什么问题?
- 30. 进行大数据分析,NoSQL相对TRDB至少具有什么优势?
- 31. 键值数据库、文档数据库、列族数据库对值查找能力的比较?
- 32. Redis安装包如何使用? 发布者和订阅者的消息订阅机制?
- 33. 大型网站应用时对于海量数据的解决方案有哪些?
- 34. 论述TRDB与NoSQL的技术特点区别?
- 35. 实例化一个mongo客户端,服务器地址:localhost(本地),端口号:27017
- 36. 实例化一个mongo数据库, 创建并获取数据库中集合,在集合中插入一条文档。
- 37. 实例化一个mongo客户端,服务器IP地址,端口号:27017,实例化一个mongo数据库db, 创建集合,获取数据库中集合tt文档中具有n和a属性值,在集合tt中获取文档中的内容,打印输出每条文档中的键 “n”对应的值。
- 38. 使用 Java 代码在mongodb中完成文档的检索(查询)、更新与删除。
- 39. 创建集合t2将以下文档插入 db2 数据库的 t2 集合中;检索 t2 中的所有文档;更新 Xi 的信息为25岁;删除Xiao的信息。
- 40. HBase对于空(NULL)的列,占不占用存储空间?MapReduce的基本设计思想?
- 41. Spark 的四大组件?Spark的主要特点?
- 42. Spark是hadoop哪个组件的替代方案? Spark为什么比Mapreduce快?Hadoop和Spark能否部署在同一个集群?
- 43. Hadoop和Spark能不能同时部署?
- 44. Spark的几个主要概念:RDD、DAG、阶段、分区、窄依赖、宽依赖?
- 45. spark集群部署模式有哪几种?SparkContext的概念?Executor,Worker?Spark组成部件有哪些?
- 46. Spark的出现是为了解决Hadoop MapReduce的不足,试列举Hadoop MapReduce的几个缺陷,并说明Spark具备哪些优点。
1. NoSQL数据库的类型有哪些?
NoSQL数据库的四种类型是:
- 键值数据库,应用于分布式数据存储与管理;
- 列族数据库,用于分布式数据存储与管理;
- 文档数据库,应用于存储索引并管理面向文档的数据或者类似的半结构化数据;
- 图形数据库。
键值对存储数据库,列存储数据库,文档型数据库,图形数据库
2. 怎么判断一个数据库是否是NoSQL数据库?
- 非关系型
- 分布式
- 开放源码
- 具有横向扩展能力
3. NoSQL技术诞生的最初发点是为了解决什么问题?
- 解决传统关系型数据库无法解决的数据存储及访问问题。
- 要解决大数据应用问题。
- 要解决互联网上应用问题。
- 要解决处理速度的响应和海量数据的储存问题。
4. 列族数据库存储结构?
- 命名空间
- 行键
- 列族
- 列
5. NoSQL数据库有哪些不同类型并举例说明?
- 键值数据库
相关产品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached
- 列族数据库
相关产品:BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS
3 . 文档数据库
相关产品:MongoDB、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit
- 图形数据库
相关产品:Neo4J、OrientDB、InfoGrid、GraphDB
6. 文档数据库存储的基本元素是哪些?
- 键值对
- 文档
- 集合
- 数据库
7. Nosql事务处理的BASE特点指的是?
基本可用、软状态、最终一致性
8. TRDB擅长解决哪些问题,NoSQL擅长解决问题?
- TRDB擅长解决结构化数据
- NoSQL擅长解决非结构或半结构化数据
9. CAP定理的三大特性?
一致性,可用性,分区容错性
10. MongoDB的特点是什么?
- 高性能
- 丰富的查询语言
- 高可用性
- 水平扩展能力
- 多个存储引擎的支持
数据文件存储格式为BSONB;
对于文档内的对象可以创建索引;
将图片、视频等文件转换成二进制的数据;
11. MongoDB由什么语言编写和实现的?
- C++
12. MongoDB数据库的命名规则?
- 符合UTF-8标准的字符串
- 不能是空字符串,如
""
- 不得含有
“”(空格)、.、$、/、\\、\\0(空字符)
- 区分大小写,建议全部小写
- 名称最多为64字节
- 不得使用保留的数据库名,
如admin、local、config、test
13. MongoDB成为最好NoSQL数据库的原因是什么?
- 面向文件的
- 高性能
- 高可用性
- 易扩展性
- 丰富的查询语言
14. MongoDB运行必须需要大量RAM内存?
不需要大量内存
15. Redis的基本数据结构类型有哪些?Redis集群模式?
-
String类型、Hash类型、链表、Set集合
-
Redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,每个节点都保存数据,节点之间互相连接从而知道整个集群状态。
16. MongoDB的主要特征是什么?mongodb的分片集群的组成?
MongoDB的主要特征是:MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
特点:
- MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段。
- Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- Map函数和Reduce函数是使用javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
一个 MongoDB 分片集群的组成:
- shard:每个分片是整体数据的一部分子集。每个分片都可以部署为副本集。强烈建议在生产环境下将分片部署为副本集且最少部署 2 个分片
- mongos:充当查询路由器,提供客户端应用程序和分片集群之间的接口。应用程序直接连接 mongos 即可,可以部署一个或多个。
- config servers:配置服务器存储集群的元数据和配置(包括权限认证相关)。从 MongoDB 3.4 开始,必须将配置服务器部署为副本集(CSRS,全称是 Config Servers Replica Set)。
17. MongoDB配置文件采用什么格式?
采用YAML
格式
18. MongoDB和Redis数据库有什么区别?
- Redis主要把数据存储在内存中,其“缓存”的性质远大于其“数据存储“的性质,其中数据的增删改查也只是像变量操作一样简单;
- MongoDB却是一个“存储数据”的系统,增删改查可以添加很多条件,就像SQL数据库一样灵活
名称
类型
数据存储选项
查询类型
附加功能
Redis
基于内存的非关系型数据库
字符串、列表、集合、哈希、有序集合
针对数据类型有专属命令,另有批量操作和不完全的事务支持
发布与订阅、复制、持久化、脚本扩展
MongoDB
基于硬盘的非关系型文档存储数据库
无 schema 的 BSON 文档
创建、读取、更新、删除、条件查询等
复制、分片、空间索引等
19. MongoDB中查看数据库和集合的命令?
show dbs;
20. 什么是“mongod”进程和“mongo”进程?
mongod
是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,和执行后台管理操作。
当我们运行mongod命令意味着正在启动MongoDB进程,并且在后台运行。
- 什么是"
mongo
" 它是一个命令行工具用于连接一个特定的mongod实例。
当我们没有带参数运行mongo命令它将使用默认的端口号和localhost连接
21. MongoDB中的基本命令?根据条件修改一条数据和多条数据的内容命令?
- update() 方法
db.集合名称.update(query, update, multi: boolean)
query
:查询条件update
:更新操作符multi
:可选,默认是false,表示只更新找到的第一条数据,值为true表示把满足条件的数据全部更新
db.stu.update(name:'hr',name:'mnc') # 全文档进行覆盖更新
db.stu.update(name:'hr',$set:name:'hys') # 指定键值更新操作
db.stu.update(,$set:gender:0,multi:true) # 更新全部
multi参数必须和$set一起使用!
- save() 方法
db.集合名称.save(document)
db.stu.save(_id:'20170101', name:'gj', gender:2)
db.stu.save(name:'gj', gender:2)
db.stu.find()
save()
方法通过传入的文档来替换已有文档。
注:如果
save()
法也指定了_id
,则对文档进行更新;未指定_id
则会执行插入功能,MongoDB
默认自动生成一个不重复的_id
。
update()
方法仅适用于修改某条数据中的某个键值;save()
方法适用于修改整条数据。
22. Redis的几个常见命令?Redis中常见字符串命令
STRING 拥有一些和其他键值存储相似的命令,比如 GET(获取值),SET(设置值),DEL(删除值)
1.$ redis-cli
2.redis-cli 127.0.0.1:6379> set hello redis
3.OK
4.redis-cli 127.0.0.1:6379> get hello
5."redis"
6.redis-cli 127.0.0.1:6379> del hello
7.(integer) 1
8.redis-cli 127.0.0.1:6379> get hello
Redis中的列表
LPUSH 命令可用于将元素推入列表的左侧
RPUSH 命令可将元素推入列表的右侧
LPOP 和 RPOP 就分别从列表的左侧和右侧弹出元素
LINDEX 可以获取指定位置上的元素
LRANGE 可以获取指定范围的全部元素
对 Redis
字符串执行自增和自减的命令列表如下:
命令 | 用法 | 说明 |
---|---|---|
INCR | INCR key | 将 key 存储的值加上 1 |
DECR | DECR key | 将 key 存储的值减去 1 |
INCRBY | INCRBY key increment | 将 key 存储的值加上 increment |
DECRBY | DECRBY key decrement | 将 key 存储的值减去 decrement |
INCRBYFLOAT | INCRBYFLOAT key increment | 将 key 存储的值加上浮点数 increment |
Redis 还可以对字节串的一部分内容进行读取/写入:
命令 | 用法 | 说明 |
---|---|---|
APPEND | APPEND key value | 将 value 追加到 key 键存储的值的末尾 |
GETRANGE | GETRANGE key start end | 获取 start 到 end 间的子串 |
SETRANGE | SETRANGE key offset value | 从 start 偏移量开始,将与 value 长度一致的子串设置为 value |
常用的列表命令:
命令 | 用法 | 说明 |
---|---|---|
LPUSH | LPUSH key value [value ...] | 将一个或多个 value 推入到列表的左侧 |
RPUSH | RPUSH key value [value ...] | 将一个或多个 value 推入到列表的右侧 |
LLEN | LLEN key | 返回列表 key 的长度 |
LREM | LREM key count value | 根据参数 count 的值,移除列表中与参数 value 相等的元素 |
23. Redis订阅命令?
Redis 发布订阅命令:
序号 | 命令及描述 |
---|---|
1 | PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。 |
2 | PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。 |
3 | PUBLISH channel message 将信息发送到指定的频道。 |
4 | PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道。 |
5 | SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。 |
6 | UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道。 |
24. Redis消息发布/订阅机制的原理是什么?主要命令有哪些?
发布原理:发布消息时现根据chanel
找到对应订阅者链表,然后遍历发送消息。
订阅原理:Redis的底层结构中,Redi服务器结构体中定义了一个pubsub_channels字典,维护了频道和订阅者的对应关系,每次客户端添加订阅时将对应的客户端信息添加到链表的末尾
主要命令:
ping
沟通命令,查看状态dbsize
查看当前数据库中key的数量selectdb
切换库命令flushdb
删除当前数据库的所有数据exit
或者quit
退出客户端连接
25. 如何启动redis服务?
- 直接启动
进入redis
根目录下,在bin
目录中找到redis-server
,执行如下命令:./redis-server &
注意:如果加上 ‘&’ ,使得redis以后台程序方式运行
- 通过指定的配置文件启动
同样,在redis的根目录下进行启动,只不过这次启动命令中需要指定对应的配置文件:
#首先需要找到自己指定的配置文件,然后启动服务时在后面添加即可
./redis-server /etc/redis/redis.conf
redis-server redis.conf
26. Redis 数据库对大小写敏感不?Redis选择不同的数据库使用什么命令?
- Redis的Key值是大小写敏感,使用字符窜做键值时注意大小写
SELECT index
27. 单机环境下什么是影响数据库读写速度的最大瓶颈?
机械硬盘
28. 把数据从硬盘读写处理,改为内存处理,是属于什么类型的扩展?
- 纵向扩展👌
- 把大数据放在不同服务器的内存上进行处理 是 横向扩展
29. NoSQL主要解决了大数据环境下的什么问题?
NoSQL
主要解决了大数据环境下的数据存储处理速度问题
30. 进行大数据分析,NoSQL相对TRDB至少具有什么优势?
技术优势和成本优势
扩展简单;快速读写;成本低廉;数据模型灵活;
- 擅长大量数据的写入和读取
- 快速的查询响应,灵活的数据模型
- 数据结构变更或更新非常方便,不需要更改已有数据的数据结构
- 击碎了性能瓶颈,可以使执行速度变的更快
31. 键值数据库、文档数据库、列族数据库对值查找能力的比较?
键值数据库对值查询功能较弱、文档数据库较强、列族数据库很强。
键值数据库
- 优点:扩展性好,灵活性好,大量操作时性能高
- 缺点:数据无结构化,通常只被当做字符串或者二进制数据,只能通过键来查询值
文档数据库
- 优点:数据结构灵活,可以根据 value 构建索引
- 缺点:缺乏统一查询语法
列族数据库
- 优点:可扩展性强,查找速度快,复杂性低
- 缺点:功能局限,不支持事务的强一致性
32. Redis安装包如何使用? 发布者和订阅者的消息订阅机制?
发布者和订阅者不是直接传输消息的,是通过代理来传输的。
- Redis安装包如何使用?
- 创建redis 用户和数据目录
- 编辑redis服务启动文件
- 验证redis 启动
- 使用客户端连接redis
- 创建命令软连接
- 编译安装后的命令
- 发布者和订阅者的消息订阅机制?
- Redis提供了基于“
发布/订阅
”模式的消息机制,当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher)。而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE命令接收信息的时候,我们称这个客户端为订阅者(subscriber)。 - 为了解耦发布者(publisher)和订阅者(subscriber)之间的关系,Redis 使用了
channel
(频道)作为两者的中介 —— 发布者将信息直接发布给channel
,而channel
负责将信息发送给适当的订阅者,发布者和订阅者之间没有相互关系,也不知道对方的存在。
- Jedis客户端回调方法是阻塞的。数据量大,逻辑处理复杂,会导致本地堆集过多的消息,异步处理避坑
- Jedis订阅方法subscribe本身也是阻塞的,如果你是在系统启动的时候去加载订阅者,注意异步避坑,防止阻塞,系统一直停在这个位置,不能完全启动
- 消息分发方式是广播,对于同一个channel,每个订阅者都可以收到同样的消息,如果此消息不能被重复消费,注意使用分布式锁避坑
- 如果没有订阅者,发布者的消息会被丢弃,没有存储机制,所以在发布消息之前,确保订阅者已经完成订阅操作
33. 大型网站应用时对于海量数据的解决方案有哪些?
- 使用缓存;
- 页面静态化技术;
- 数据库优化;
- 分离数据库中活跃的数据;
- 批量读取和延迟修改;
- 读写分离;
- 使用NoSQL和Hadoop等技术;
- 分布式部署数据库;
- 应用服务和数据服务分离;
- 使用搜索引擎搜索数据库中的数据;
- 进行业务的拆分;
34. 论述TRDB与NoSQL的技术特点区别?
NoSQL是弥补传统关系型数据库技术的不足而产生的新的数据库技术。
- 数据库数据存储模式不一样,TRDB为强数据存储模式,NOSQL为弱数据存储模式(没有严格的限制)﹔
- 分布式技术是NOSQL的核心技术思路,而TRDB以集中部署一台物理机为最初出发点;
- TRDB的事务严格遵循ACID原则(ACID强事务,确保数据的可用和准确性。而NOSQL遵循Base原则;
- TRDB都遵循SQL操作标准,NOSQL没有统一的操作标准;
- TRDB基于单机的硬盘数据处理技术为主,NOSQL基于分布式的或者内存数据处理技术为主;
TRDB:(1)使用强存储模式技术。
(2)采用SQL技术标准来定义和操作数据库
(3)采用强事务保证可用性及安全性
(4)主要采用单机集中式处理(CP,Centralized Processing)方式。
NoSQL:(1)使用弱存储模技术
(2)没有采用SQL技术标准来定义和操作数据库
(3)采用弱事务保证数据可用性及安全性或根本没有事务处理机制。
(4)主要采用多机分布式处理(DP,Distributed Processing)方式
35. 实例化一个mongo客户端,服务器地址:localhost(本地),端口号:27017
MongoClient mongoclient = new MongoClient(“localhost”,27017);
36. 实例化一个mongo数据库, 创建并获取数据库中集合,在集合中插入一条文档。
MongoClient mongoclient=new MongoClient(“localhost”,27017);
MongoDataBase mongodatabase=new MongoDatabase(“mydb”);
mongoDatabase.createCollection("test");
MongoCollection collection = mongoDatabase.getcollection(“test”);
Document document = new Document();
document.append(“id”,1);
collection.insertOne(document);
Python代码:
from pymongo import MongoClient
# 如果是本地连接host,port参数可以省略(27017是默认端口)
client = Mongoclient("localhost", 27017)
# 数据库和集合能够自动创建
collection = client[mydb][test]
# collection = client.db名.集合名 # 与上边用法相同
collection.insert("name":"zz","age":19)
37. 实例化一个mongo客户端,服务器IP地址,端口号:27017,实例化一个mongo数据库db, 创建集合,获取数据库中集合tt文档中具有n和a属性值,在集合tt中获取文档中的内容,打印输出每条文档中的键 “n”对应的值。
try
/********* Begin *********/
//启动本地服务,端口号为27020
MongoClient mongoClient = new MongoClient("localhost",27017);
//连接名为databaseName数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
//获取集合test
MongoCollection<Document> collection =mongoDatabase.getCollection("test");
//创建集合test1
mongoDatabase.createCollection("test1");
//获取集合test1
MongoCollection<Document> collection=mongoDatabase.getCollection("test1")
MongoCollection<Document> tt = mongoDatabase.getCollection("tt");
FindIterable<Document> documents =tt.find();
collection.insertMany(tt);
collection.find("n":$all)
for (Document document : documents)
System.out.println(document.getString("n"));
from pymongo import MongoClient
# 如果是本地连接host,port参数可以省略(27017是默认端口)
client = Mongoclient("localhost", 27017)
# 数据库和集合能够自动创建
col = client[db][tt] # 获取db数据库中的tt集合
# 获取具有n和a属性的文档也就是,一行行的字典数据
# $exists:检查某个键是否存在,1表示存在,0表示不存在
for doc in db.roles.find('n':'$exists':True):
print(doc["n"]) # 打印输出每条文档中的键 “n”对应的值
38. 使用 Java 代码在mongodb中完成文档的检索(查询)、更新与删除。
检索文档:
使用驱动 com.mongodb.client.MongoCollection
类中的 find()
方法来获取集合中的所有文档。
此方法返回一个游标,所以你需要遍历这个游标。
//检索所有文档
/**
* 1. 获取迭代器FindIterable<Document>
* 2. 获取游标MongoCursor<Document>
* 3. 通过游标遍历检索出的文档集合
**/
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext())
System.out.println(mongoCursor.next());
更新文档:
你可以使用 com.mongodb.client.MongoCollection
类中的 updateMany()
方法来更新集合中的文档:
//更新文档:将第一关例子文档中nums=90的文档修改为nums=100
collection.updateMany(Filters.eq("nums", 90), new Document("$set",new Document("nums",100)));
删除文档:
要删除集合中的第一个文档,首先你需要使用 com.mongodb.DBCollection
类中的 findOne()
方法来获取第一个文档,然后使用 remove()
方法删除。
//删除符合条件的第一个文档
collection.deleteOne(Filters.eq("nums", 100));
//删除所有符合条件的文档
collection.deleteMany (Filters.eq("nums", 100));
39. 创建集合t2将以下文档插入 db2 数据库的 t2 集合中;检索 t2 中的所有文档;更新 Xi 的信息为25岁;删除Xiao的信息。
_id name sex age
1 Xi man 23
try
//启动本地服务,端口号为27020
MongoClient mongoClient = new MongoClient("localhost",27017);
//连接名为databaseName数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("db2");
//获取集合test
MongoCollection<Document> collection =mongoDatabase.getCollection("t2");
//插入要求中的数据到集合t2
Document document1=new Document();
document1.append("_id","1");
document1.append("name","Xiaoming");
document1.append("sex","man");
document1.append("age",23);
List<Document> documents = new ArrayList<Document>();
documents.add(document1);
collection.insertMany(documents);
//更新 Xiaohong 的信息为23岁
collection.updateMany(Filters.eq("name", "Xiaohong"), new Document("$set",new Document("age",25)));
//删除Xiaoliang的信息
collection.deleteOne (Filters.eq("name", "Xiaoliang"));
catch (Exception e)
System.err.println( e.getClass().getName() + ": " + e.getMessage());
40. HBase对于空(NULL)的列,占不占用存储空间?MapReduce的基本设计思想?
不占用,计算向数据靠拢
MapReduce基本设计思想:
- 对付大数据并行处理:分而治之。
- 上升到抽象模型:Map与Reduce。在此过程中,首先将输入数据划分成许多个块,并分别使用一个Map函数对每一个数据块进行 并行处理,第一步输出中间结果。然后将中间结果进行混洗和排序,再递交给Reduce进行处理。同理,Reduce也采用并行计算,最后输出最终结果。
- 上升到结构:自动并行化并隐藏底层细节。
41. Spark 的四大组件?Spark的主要特点?
四大组件:
- SparkStreaming, 针对实时数据进行流式计算的组件;
- SparkSQL, 用来操作结构化数据的组件;
- GraphX, Spark面向图计算提供的框架与算法库; MLlib, 一个机器学习算法库。
Spark 主要特点:
- 速度快
- 易用性
- 通用性
- 兼容性
42. Spark是hadoop哪个组件的替代方案? Spark为什么比Mapreduce快?Hadoop和Spark能否部署在同一个集群?
- Mapreduce,因为迭代计算,交互式计算,且rdd中间运算结果在内存中,延迟小,task以线程维护,任务启动快。
可以
43. Hadoop和Spark能不能同时部署?
Hadoop和Spark不是互斥的,可以一起工作。
44. Spark的几个主要概念:RDD、DAG、阶段、分区、窄依赖、宽依赖?
RDD:是Resillient Distributed Dataset (弹性分 布式数据集)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
DAG:是Directed Acyclic Graph (有 向无环图)的简称,反映RDD之间的依赖关系
阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。
分区:一个就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个可以分成多个分区,每个分区就是一个数据集片段。
宽依赖:宽依赖是指1个父RDD分区对应多个子RDD分区
窄依赖:窄依赖是指1个父RDD分区对应1个子RDD的分区
45. spark集群部署模式有哪几种?SparkContext的概念?Executor,Worker?Spark组成部件有哪些?
模式:本
以上是关于分布式数据库技术相关知识概述的主要内容,如果未能解决你的问题,请参考以下文章