1、关系数据库和非关系数据库之间的区别?
- 关系型数据库
通俗来讲,关系型数据库类似Excel,以二维表为数据结构,表和字段类型的关系需要明确定义,以SQL语句为操作指令,又称SQL数据库;
- 非关系型数据库
非关系型数据库类似Word,不以表格模式,不预定义关键数据的模式,不只有SQL为操作指令,可以使用其他类型的查询语言,又称NoSQL数据库(not only sql);
常见NoSQL数据库有四种类型:
面向文档的数据库,用于存储、管理、检索文档的信息。如MangoDB、CouchDB
键值存储数据库,使用不同键的数据库,其中每个键只与集合中的一个值相关联。把它当作一本字典。NoSQL最简单的数据库类型之一,如Redis、Tokyo Cabint
分布式数据库, 使用表、行和列,但与关系数据库不同,列的名称和格式在同一表中的行与行之间可能不同,弥补了SQL数据库拓展性的缺陷。
图存储数据库,使用图结构进行具有节点、边和属性的语义查询,以表示和存储数据。
用哪个取决于你想要编辑和处理什么数据。
2、三范式是啥?
第一范式,表中所有字段都不可再拆分,达到原子级
第二范式,在1F基础上,表中每一列都和主键相关,而不是只和主键一部分相关(针对联合主键的),一个表只能保存一种数据。
第三范式,在2F基础上,每一列数据都和主键直接相关,而不能间接相关
减少数据冗余**!!!**
3、Linux是啥?常用的Linux命令?
三大操作系统之一,Windows、linux、MacOS
https://www.linuxcool.com/cd
4、外部表 内部表区别
- 外部表(external table)更安全
内部表数据由Hive自身管理,外部表数据由HDFS管理;删除内部表会删除元数据和存储数据,而外部表仅仅只删除元数据,HDFS上的文件不会被删除
但使用外部表时需注意,执行drop后,再在jenkins调度重新跑数,会导致数据量翻倍,因为原来的数据还在并没有删除。现在已经把外部表全部改为内部表,之后不会再出现这个问题
5、Hive的文件存储格式区别
随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如Hive、Spark SQL、Impala、Presto等,同时也产生了多个高性能的列式存储格式,例如RCFile、ORC、Parquet等
- SEQUENCEFILE:生产中绝对不会用,k-v格式,比源文本格式占用磁盘更多
- TEXTFILE:生产中用的多,行式存储
- RCFILE:生产中用的少,行列混合存储,OCR是它的升级版
- ORC:生产中最常用,列式存储
- PARQUET:生产中最常用,列式存储
- AVRO:生产中几乎不用,不用考虑
- JSONFILE:生产中几乎不用,不用考虑
- INPUTFORMAT:生产中几乎不用,不用考虑
目前三种主流的文件存储格式textfile、orc、parquet
压缩比:ORC > Parquet > textFile(textfile没有进行压缩)
查询速度:三者几乎一致
引擎支持:ORC目前也被Spark SQL、Presto等查询引擎支持,但是Impala对于ORC目前没有支持,仍然使用Parquet作为主要的列式存储格式。相对于Parquet格式,Presto对ORC格式支持得更好。
对于大数据场景下的数据分析需求,使用orc、parquet这两种存储格式总会带来存储和性能上的提升,但是在实际使用时还需要针对实际的数据进行选择。另外由于不同开源产品可能对不同的存储格式有特定的优化,所以选择时还需要考虑查询引擎的因素。
6、Mapreduce是什么
Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。
简单来说,Mapreduce是一个编程模型,用以进行海量数据的并行计算。
Mapreduce的特点:软件框架 并行处理 可靠且容错 大规模集群 海量数据集
缺点:
① 表达能力有限。计算都必须要转化成Map和Reduce两个操作,但这并不适合所有的情况,难以描述复杂的数据处理过程。
② 磁盘IO开销大。每次执行时都需要从磁盘读取数据,并且在计算完成后需要将中间结果写入到磁盘中,IO开销较大。
③ 延迟高。一次计算可能需要分解成一系列按顺序执行的MapReduce任务,任务之间的衔接由于涉及到IO开销,会产生较高延迟。而且,在前一个任务执行完成之前,其他任务无法开始,因此难以胜任复杂、多阶段的计算任务。
hive与presto效率区别
Hive是把一个查询转化成多个MapReduce任务,然后一个接一个执行。执行的中间结果通过对磁盘的读写来同步。然而,Presto没有使用MapReduce,它是通过一个定制的查询和执行引擎来完成的。它的所有的查询处理是在内存中,这也是它的性能很高的一个主要原因。
7、OLAP和OLTP??
OLTP:业务处理系统 OLAP:数据分析系统