建议使用Notepad++/ .java文件 打开
0、大数据5V
Volume 体积大,高速率增长的数据量,PB为单位
Velocity 数据增长速度快
Variety 不同数据类型,文本、音频、视频
Veracity 数据不确定性,大量数据带来不完整性和不一致性
Vlue 数据价值
-------------------------------------------------------- Redis ---------------------------------------------------------
1、Redis支持的最大数据量是多少?
Redis可以支持6W,小数据可以达到10W的并发

2、Redis是什么?适用场景是什么
Redis是一个开源的BSD协议,使用ANSIC编写,基于内存的且支持持久化,高性能的K-V的NoSQL数据库
使用场景:
数据高并发的读写,降低数据IO
海量数据配合关系型数据库做高速缓存的读写
可持久化特定数据
分布式架构,做session共享
对扩展性能要求比较高的数据

3、列举一个常用的Redis客户端的并发模型
Redis为单进程单线程模式,采用队列模式并发访问变为串行访问。
Redis本身没有锁的概念,对于多个客户端并不存在竞争,但是客户端连接混乱导致Redis发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题
解决方法:
a 客户端角度,为了保证每个客户端间有序的与Redis进行通讯,对连接进行池化,同时对客户端读写Redis操作实现内部锁synchronized
b 服务器角度,利用setnx实现锁。

4、布隆过滤器
布隆过滤器可以理解为一个不怎么精确的set结构,当使用contains方法判断某个对象是否存在时,他可能会误判。
但是只要参数设置的合理,他的精确度可以足够精准,只会有小小的误判概率。
当布隆过滤器说某个值存在时,这个值可能不存在,这是它的误判率;当他说不存在时,那就肯定不存在,漏报是不可能的。
底层大致是靠hash 0?1 决定判断

5、常见数据库之间的区别
Redis: 分布式缓存,强调缓存,内存中数据
传统数据库:注重关系,注重事务性
Hbase: 列式数据库,稀疏性存储,用于存储海量数据,底层基于HDFS
Hive: 数据仓库,底层是MR,不是数据库,不能用来做用户的交互存储
Hbase和Redis都是基于K-V数据库,Hbase是基于文件系统的,适合 TB+ 数据;Redis是基于内存的,适合低于TB数据

6、luncene全文检索引擎的架构
是apache下的一个开放源代码的全文检索引擎工具包,基于java的全文检索库。
不同于搜索引擎的是,它只是一个工具包,不能单独运行,需要在project中加入luncene的jar包,最终project在JVM中运行。

-------------------------------------------------------- Spark---------------------------------------------------------
7、SparkSQL介绍下(RDD、DataFream)
Spark中原生的RDD是没有数据结构的
对RDD的变换和操作是不能采用传统的SQL方法
SparkSQL应运而生并建立在Spark上,用于交互式查询
Spark最初依赖Hive解析器,改进后的SparkSQL摆脱依赖
RDD
懒执行不可变的支持Lambda(=>…)并行数据集合
RDD最大的好处就是简单,API人性化程度很高
RDD劣势是性能限制,jvm常驻内存对象,这也就决定了存在GC的限制和数据增加时java序列化成本的升高
DataFrame
与RDD类似,也是一个分布式数据容器,但是DF更像是传统数据库的二维表格,除记录数据外,还记录数据结构信息schema
底层封装的是RDD
DataFrame转化成RDD df.rdd
DataSet
DataSet是DataFrame API的一个扩展,是Spark最新的数据抽象,用户友好
DataFrame是DataSet的特列,DataFrame = DataSet[Row]
DataSet是强类型,DataSet[Person],DataSet[Student]
DF只知道字段,不知字段类型,在执行操作时没办法在编译的时候检查是否类型失败
DS不仅知道字段,还知道字段类型,所以有更严格的错误检查
RDD让我们能够决定怎么做,而DF/DS让我们决定做什么,控制的粒度不一样

8、UDF和UDAF
UDF只能实现一进一出的操作,UDAF可以实现多进一出
Hive的UDAF分类:
Simple,继承org.apache.Hadoop.Hive.ql.exec.UDAF类,并在派生类中以静态内部的方法实现UDAFEvaluator接口方法简单直接,但依赖Java反射机制,性能较低
Generic,Hive推荐新的写法,以抽象类代替原有的接口

9、Spark的Yarn和MR的Yarn有什么区别
MR-Yarn:细粒度资源申请
每个Task运行在一个独立的JVM进程中
可单独为不同类型的Task设置不同的资源量,目前支持内存和CPU两种资源
每个Task都要经历 资源申请 -> Task运行 -> 释放资源
Spark-Yarn:粗粒度资源申请
每个节点上可以运行1-n个Excutor服务
每个Excutor单独运行在一个JVM进程中,每个Task则运行在Excutor中的一个线程
同一个Excutor内部的Task可共享内存
Excutor一旦启动,一直运行,直到最后一个task任务运行完毕,程序才结束

10、Spark和MR性能差别
快:Spark多个任务间数据通信基于内存,Hadoop基于磁盘以及对JVM使用优化
消除了HDFS的读写(磁盘)
消除了MR阶段,Spark有丰富算子
粗细粒度
注意:
简单的查询只使用一次shuffle,Spark需要创建(group by)线程池
MR问题:
a MR仅支持MR操作
b 处理效率低,Map中间结果落地磁盘,Reduce写磁盘,多个MR间交互数据开销大
c Map、Reduce端排序
d 不适合迭代计算,交互式处理、流式处理
e 编程不够灵活
Spark:
高效(10-100倍)
内存计算引擎,提供Cache机制来支持需要反复迭代计算多次数据共享,减少数据读取IO开销
DAG引擎,减少多次计算之间中间结果写到HDFS的开销
使用多线程池模型来减少task启动开销,shuffle过程中避免不必要的sort操作以及减少磁盘IO操作
易用
提供丰富API,支持Java、Scala、Python、R四种语言
代码量少(2-5倍)
丰富的算子
DAG执行引擎,中间结果不落地磁盘,减少磁盘IO
线程池模型减少task启动开销
适合迭代计算和机器学习算法
容错:
当执行中途失败时,MR会从失败处继续执行,因为他依赖于磁盘驱动器
Spark必须从头开始执行

11、Spark缓存
Spark缓存机制是Spark优化重点之一,他将需要重复使用或共用的RDD缓存在内存中,可以提高Spark的性能
Spark底层源码中使用StorageLevel来表示缓存机制,其中包括:使用内存,使用磁盘,使用序列化,使用堆外内存
一般默认选择的是Memory_only,其次是Memery_only_Ser,再次是Memory_only_and_Disk

12、cache和checkpoint区别
cache 将共有的/重复使用的RDD按照持久化的级别进行缓存
checkpoint 将业务场景非常长的逻辑计算的中间结果缓存到HDFS上(新线程)

13、local、local[]、local[]
local[N]模式,
N代表可以使用N个线程,每个线程拥有一个core
如果不指定N,则默认是1个线程,该线程拥有1个core。
local[
],代表在本地运行,与自己机器上的逻辑内核一样多的工作线程

14、Spark怎么设置垃圾回收机制
Driver的JVM参数GC方式
yarn-client模式 读取的是spark-class文件中的JAVA_OPTS
yarn-cluster模式 读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的参数值
Excutor的Jvm参数方式
两种模式都是读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的参数值

15、Spark和Hadoop的shuffle区别
Hadoop:
shuffle过程是明显几个阶段,map/spill/merge/shuffle/sort/reduce按照流程顺序执行的,属于push类型
shuffle是 sort-based 类型
优化方法:
map端合并combiner
map端压缩compress
Spark:
shuffle过程是算子驱动的,具有懒执行特点,属于pull类型
shuffle是 hash-based 类型
两阶段,Shuffle Write(ShuffleMapTask) 和 Shuffle Read

16、在Hive中常用排序注意点
order by 对查询结果做全局排序,只允许一个reduce处理,慎用!
sort by 非全局排序,数据进入reducer前完成排序,会对单个reduce数据排序
distribute by 分区排序,按照指定的字段对数据进行划分输出到不同的reduce中,常和sort by结合使用
distribute by xxxx, sort by xoxo 先按照xxxx进行分区,然后再分区内再排序
cluster by 除了具有distribute by的功能外还兼具 sort by 的功能

17、Spark-Excutor
在每个WorkerNode上为某个应用启动一个Excutor进程,负责运行任务并将数据存放于内存/磁盘上,每个任务都有各自独立的Excutor
Excutor是一个应用程序运行的监控和执行容器

18、Spark、Hive、MR数据清洗的区别
多数场景优先考虑Hive进行数据清洗,少部分单独编写MR/Spark进行复杂处理
Spark适合实时数据处理,处理任务比MR快,但是对内存消耗很大
MR适合非实时处理,单纯数据量大的数据
现在做的特征提取,也可以广义理解成数据清洗,公司订单量不大,时间要求不高,用Python脚本处理也是可以的

19、每个RDD实现什么函数达到分片为单位
compute函数,达到“Spark中RDD的计算是以分片为单位”的目的
compute函数会对迭代器进行复合,不需要保存每次计算的结果

20、在大数据计算时,Hive、Spark、Hadoop三大框架join方式
Hive
common join
reduce join
shuffle join
Spark
Broadcast Hash Join
Shuffle Hash Join
Sort Merge Join
Hadoop
map side join 小表join大表
reduce side join 最简单的join,map阶段对不同文件数据打标签,reduce阶段进行实际连接操作
SemiJoin 半连接,map端过滤掉不参加join操作的数据,减少网络IO

-------------------------------------------------------- Kafka---------------------------------------------------------
21、怎么保证Kafka里的数据安全
​ 生产者数据不丢失 producer有丢数据的可能,但是可以通过配置保证消息的不丢失
​ 同步—调节ACK机制的参数(0,1,all)另ACK检查机制为all,设置为0风险很大
​ 异步—通过buffer来进行控制数据的发送,由时间阈值和消息的数量阈值控制,
​ 如果buffer满了数据还没发送出去,如果设置里立即清理模式,风险大,故一定设置为阻塞模式
​ 消费者数据不丢失
​ 通过offset commit来保证数据不丢失,kafka记录了每次消费的offset,便于下次继续在此消费数据

22、Kafka中Key为null问题
生产者发送消息的时候,可以指定Key,作用是为消息选择存储分区,Key可以为空;当指定Key不为空时,Kafka根据Key的hash值与分区数取模来决定数据存储分区位置
当Key=null时,kafka是先从缓存中取分区号,然后判断缓存的值是否为空,若不为空,就将消息存到这个分区,否则重新计算要存储的分区,并将分区号缓存,供下次使用
Kafka定义一个全局变量,这个变量值是配置参数中topic.metadata.refresh.interval.ms设置的值,当缓存过时后就会重新计算分区号
也就是说说在Key为null的情况下,Kafka并不是每条消息都随机选择一个Partition;而是每隔topic.metadata.refresh.interval.ms才会随机选择一次!

23、Kafka底层存储原理
Kafka中的消息是以topic为基本单位进行组织的,不同的topic之间是相互独立的。每个partition存储一部分消息。partition是以文件的形式存储在文件系统中。
partition中的每条Message包含了以下三个属性:offset/MessageSize/data。

24、Kafka和Flume
Kafka 分布式消息之间件,自带存储,提供push和pull存取数据功能
做日志缓存更为合适
Flume agent数据采集器(source,channel,sink)是管道模式,提供了很多的默认实现,让用户通过参数部署及扩展API
数据采集部分做的很好,可以定制很多数据源,减少开发量

25、Kafka为什么快
消息集
生产者在将消息发送给Kafka时,并发发送,减低IO次数
二进制传输
Kafka的消息传递过程中,会将数据转换成字节数据来进行传递
顺序读写磁盘
根据offset递增的顺序读取磁盘,并发读
“零”拷贝
Kafka在传输数据时,log文件中的数据可以通过系统内存直接网络传输,不需经Kafka内存数据的交换
端到端的数据压缩
Kafka直接传输压缩的数据(producer API负责)
当Kafka接收到producer传输的压缩数据时,不会进行解压操作,直接存储
然后consumer获取数据时,直接将压缩好的数据传输过去,consumer接收到压缩数据后再进行解压操作
优/缺点
压缩可以减少网络压力,但是增大了生产者(压缩)和消费者(解压)的压力
压缩方式
lz4,gzip,snappy
producer端中的 compression。code默认为none,表示不进行压缩

26、Storm如果碰上了复杂逻辑,计算时间长,怎样优化来保证实时性?
拆分复杂的业务到多个bolt中,可以利用bolt的tree将速度提升,提高并行度
a setNumWorkers取值
work可以分配到不同supervisor节点上,这是Storm实现多节点并行计算的主要配置手段。
在一定程度上,worker的数量越多越好,但实际生产硬件资源有限。所以只要考虑集群各个节点的内存情况。一个worker耗费832(768+64)内存消耗
还可以调节worker内存空间,如果数据量特别大,代码执行时间较长,考虑增加单个worker工作内存。值得注意的是,一个worker所有executor和task都是共享这个worker内存。
b KafkaSpout取值(假设是从Kafka中读取数据)
如果spout读取的是Kafka的数据,那么正常情况下,设置topic分区数量即可
c Bolt取值
Storm UI界面中,topology在Bolts查看修改几个参数值

27、Kafka应用场景
日志收集 以kafka收集各种服务log,通过kafka接口统一发送各种consumer,eg:Hadoop,Hbase,Solr
消息系统 解耦和生产者与消费者、缓存消息等
用户活动 埋点监控日志分析
运营指标 记录运营监控数据
流式处理 Spark streaming,Storm
事件源

28、进程、线程
进程:
进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。
程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。
线程:
线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,
一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。
线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。
同样多线程也可以实现并发操作,每个请求分配一个线程来处理。
区别:
a 进程是资源分配的最小单位,线程是程序执行的最小单位。
b 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
c 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。
不过如何处理好同步与互斥是编写多线程程序的难点。
d 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

-------------------------------------------------------- Hive---------------------------------------------------------
29、Hive底层原理
架构:
Hive是基于Hadoop的一个数据仓库工具,由Driver驱动器组件,MetaStore元数据组件,用户接口Cli,Hadoop四部分组成。
执行原理:
用户通过客户端提交任务给Driver,编译器获得任务,编译器Compiler根据任务去MetaSotre中获取Hive的元数据信息,
编译器Compiler得到元数据信息,对任务进行编译,将客户端任务转化为物理计划,即MapReduce任务,选择最佳的策略,
将最后的计划交给Driver,Driver将计划Plan转交给执行引擎去执行,获取元数据信息,提交给SourceManager执行任务

30、Hive有哪些方式保存元数据,各有哪些优点
derby 基于内存数据库,此方法只能开启一个Hive客户端,不推荐使用
Mysql 分为远程和本地数据库。大多使用本地Mysql数据库,读写速度快

31、Hive底层与数据库交互原理
Hive的查询功能,是由HDFS+MR结合实现
Hive只是借用Mysql来存储Hive中的表的元数据(metastore)

32、拉链表和快表是如何构建的
拉链表
拉链表是针对数仓设计中表存储数据的方式而定义的,就是记录历史。
记录一个事务从开始,一直到当前状态的所有变化的信息。
快表
快表是一种特殊的高速缓冲存储器,内容是页表中的一部分或全部内容。
在操作系统中引入快表是为了加快地址映射速度。

33、以你的实际经验,说下怎样预防全表扫描?
a.应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
b.应尽量避免在where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫
c.应尽量避免在where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
d.in 和 not in,用具体的字段列表代替,不要返回用不到的任何字段。in 也要慎用,否则会导致全表扫描
e.避免使用模糊查询
f.任何地方都不要使用 select* from table

34、Hive压缩方式
采用RCfile的格式读取的数据量(373.94MB)远远小于sequenceFile的读取量(2.59GB),执行速度前者(68秒)比后者(194秒)快很多,
从以上的运行进度看,snappy的执行进度远远高于bz的执行进度。
在Hive中使用压缩需要灵活的方式:
如果是数据源的话,采用RCFile+bz或RCFile+gz的方式,这样可以很大程度上节省磁盘空间;
而在计算的过程中,为了不影响执行的速度,可以浪费一点磁盘空间,建议采用RCFile+snappy的方式,这样可以整体提升Hive的执行速度。
至于lzo的方式,也可以在计算过程中使用,只不过综合考虑(速度和压缩比)还是考虑snappy适宜

35、Hive与传统数据库比较
个人理解简而言之:
​ Hive只查索引位置,没有具体数据,数据存储在HDFS上
​ 传统数据库存储小量具体的数据;
具体比较汇总如下:
​ 查询语句相似 Hive是hql || 数据库是sql
​ 数据库存储位置 Hive存储在HDFS上 || 数据库是本地存储
​ 数据更新 Hive数仓读多写少,不建议对数据进行修改 || 数据库中的数据需要经常修改
​ 索引 Hive暴力扫描整个数据,延迟高,无索引但可并行访问数据 || 数据库通常会建立索引
​ 执行 Hive大多数查询是基于MR || 数据库通常有自己的执行引擎
​ 执行延迟 Hive延迟有2(本身数据大;MR执行) || 数据库在数据规模小前提下,执行延迟低
​ 可扩展性 Hive基于Hadoop || 数据库由于受到ACID语义限制,扩展有限
​ 数据规模 Hive并行处理大规模数据 || 数据库支持的数据规模小
​ 数据格式 Hive可以自定义数据格式 || 数据库系统定义格式

36、Hive的默认分隔符
\n 对于文本文件来说,每行都是一条记录,因此换行符可以分隔记录
^A(Ctrl+A) 用于分隔字段(列)。在CREATE TABLE语句中可以使用八进制编码\001表示
^B(Ctrl+B) 用于分隔ARRAY或者STRUCT中的元素,或用于MAP中键-值对之间的分隔。在CREATE TABLE语句中可以使用八进制编码\002表示 解析成“,”
^C(Ctrl+C) 用于MAP中键和值之间的分隔。在CREATE TABLE语句中可以使用八进制编码\003表示 解析成“:”

37、写出Hive中目前最优的存储方式和最优的计算引擎,并写出相应的hive的几种存储引擎,以及hive的SQL优化器?
存储方面
textfile、orcfile、rcfile、parquet、sequencefile
执行引擎
mr、tez、spark
词法解析
calcite、cbo
优化
mapjoin
自定义函数
udf
sql语法或自带函数
新特性
Vectorized Query Execution、Hybrid Hybrid Grace Hash Join、LLAP

38、在Hive中,将表名为sample的字段a改名为字段b,并改为string格式的命令
ALTER TABLE sample CHANGE a b STRING COMMENT ‘The datatype of col2 is STRING’ AFTER c;

39、insert into和override write区别
insert into,将某张表中的数据写到另一张表中
overrride write,覆盖之前的内容

40、Hive使用的三种形式
Hive命令行模式
Hive Web界面的启动方式
Jdbc连接Hiveserver2

41、Hive和MR的各自特点
1. 运算资源消耗
无论从时间,数据量,计算量上来看,一般情况下mr都是优于或者等于Hive的。mr的灵活性是毋庸置疑的。
在转换到Hive的过程中,会有一些为了实现某些场景的需求而不得不用多步Hive来实现的时候。
2. 开发成本/维护成本
毫无疑问,Hive的开发成本是远低于mr的。如果能熟练的运用udf和transform会更加提高hvie开发的效率。
另外对于数据的操作也非常的直观,对于全世界程序员都喜闻乐见的sql语法的继承也让它更加的容易上手。
Hive独有的分区管理,方便进行数据的管理。
代码的管理也很方便,就是直接的文本。
逻辑的修改和生效很方便。
但是当出现异常错误的时候,Hive的调试会比较麻烦。特别是在大的生产集群上面的时候。
3. 底层相关性
在使用Hive以后,读取文件的时候,再也不用关心文件的格式,文件的分隔符,只要指定一次,Hive就会保存好。相比mr来说方便了很多。
当侧重关心与业务相关的内容的时候,用Hive会比较有优势。
而在一些性能要求高,算法研究的时候,mr会更加适合。

-------------------------------------------------------- Mysql---------------------------------------------------------
42、数据库隔离级别是什么?有什么作用?
未提交读(Read Uncommitted) 允许脏读,也就是可能读取到其他会话中未提交事务修改的数据
提交读(Read Committed) 只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)
可重复读(Repeated Read) 可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。
在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读,但是innoDB解决了幻读
串行读(Serializable) 完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞
–不可幻读
43、乐观锁和悲观锁的区别?
悲观锁(Pessimistic Lock) 程序员自己管理数据或对象上的锁处理
顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。
传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
乐观锁(Optimistic Lock) 完全依赖数据库来管理锁的工作
顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。
乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
两种锁各有优缺点,不可认为一种好于另一种,
像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。
但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。

47、Mysql主备同步的原理
Mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其他服务器当从服务器。
Mysql复制基于主服务器在二进制日志中跟踪所有对数据库的操作,因此,要进行复制,必须在主服务器上启动二进制日志,从服务器从主接收日志保存更新。

48、如何优化数据库性能
减少数据访问
创建并使用正确索引
只通过索引访问数据
优化SQL执行计划
返回更少的数据
数据分页处理
只返回需要的字段
减少交互次数
batch DML
in list
使用存储过程
优化业务逻辑
使用ResultSet游标处理记录
减少数据库服务器CPU运算
使用绑定变量
合理使用排序
减少比较操作
大量复杂运算在客户端处理
利用更多的资源
客户端多进程并行访问
数据库并行处理

49、一般在什么字段上建索引
表的主键、外键必须有索引
数据量超过300的表应该有索引
经常与其他表进行连接的表,在连接字段上应建立索引
经常出现在 Where 子句中的字段,特别是大表的字段,应建立索引
选择性高的字段上
小字段上
尽量使用单字段索引代替复合索引

50、SQL什么情况下不会使用索引(不包含,不等于,函数)
建立组合索引,但查询谓词并未使用组合索引的第一列,此处有一个INDEX SKIP SCAN概念。
在包含有null值的table列上建立索引,当时使用select count(*) from table时不会使用索引。
在索引列上使用函数时不会使用索引,如果一定要使用索引只能建立函数索引。
当被索引的列进行隐式的类型转换时不会使用索引。如:select * from t where
indexed_column = 5,而indexed_column列建立索引但类型是字符型,这时Oracle会产生
隐式的类型转换,转换后的语句类似于select * from t where to_number(indexed_column) = 5,此时不走索引的情况类似于case3。日期转换也有类似问题,如:
select * from t where trunc(date_col) = trunc(sysdate)其中date_col为索引列,这样写不会走索引,可改写成select * from t where date_col >= trunc(sysdate)
and date_col < trunc(sysdate+1),此查询会走索引。
并不是所有情况使用索引都会加快查询速度,full scan table 有时会更快,尤其是当查询的数据量占整个表的比重较大时,因为full scan table采用的是多块读,
当Oracle优化器没有选择使用索引时不要立即强制使用,要充分证明使用索引确实查询更快时再使用强制索引。
<>
like’%dd’百分号在前
not in ,not exist.

51、Mysql存储引擎中索引的实现机制/LSM结构树
B+Tree
B+Tree和B-Tree不同点
每个节点的指针上限位2d而不是2d+1
内存节点不存储data,只存储Key;叶子节点不存储指针

52、数据库事务的几种粒度
粒度,即细化的程度。锁的粒度越大,则并发性越低且开销大;锁的粒度越小,则并发性越高且开销小。
行锁
粒度中最小的资源
每次锁住一行数据
开销大,加锁慢,会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度最高
页锁
一次锁定一页,25个行锁可升级为一个页锁
表锁
锁定整个表
开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
防止其他事物对该表操作
库锁
可控制整个数据库的操作

53、Mysql有什么引擎
MySIAM储存引擎
注重性能、表级锁、R/W >100:1 且更新少
不支持事务,不支持外键,对事务完整性没有要求或者select,insert为主
优势是访问速度快
支持3种存储格式:
静态表、动态表、压缩表
InnoDB储存引擎(整体性能高,优先考虑)
注重事务、行级锁、R/W比较少、频繁更新大字段
支持自动增长列,支持外键约束
该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。
但是对比MyISAM引擎,写的处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引。
MEMORY存储引擎
存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frm。
memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。
memory存储引擎表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引有其不同的使用范围
Merge存储引擎
merge是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,
merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。
总结 :
innodb整体性能远高于myisam。同时,innodb的索引不仅需要缓存索引本身,也缓存数据,所以innodb需要更大的内存。
如果你不知道一个表需要使用什么存储引擎,建议使用innodb。

54、Mysql主从复制一段时间后,数据突然同步不了怎么办
查看是否进程中Sleep太多(show processlist),再查看状态,再查看Slave
重新做主从,完全同步

55、三范式
1FN 无重复的列
2FN 属性完全依赖于主键[消除部分子函数依赖]
3FN 属性不依赖于其他非主属性[消除传递依赖]

-------------------------------------------------------- Hbase--------------------------------------------------------
56、描述Hbase中scan和get的功能以及实现的异同
按指定RowKey获取唯一一条记录,get 方法(org.apache.hadoop.hbase.client.Get)
处理分两种,设置了 ClosestRowBefore 和没有设置的 rowlock
主要是用来保证行的事务性,即每个 get 是以一个 row 来标记的.一个 row 中可以有很多 family 和 column
按指定的条件获取一批记录, scan 方法(org.apache.Hadoop.hbase.client.Scan)
实现条件查询功能使用的就是 scan 方式
1)scan 可以通过 setCaching 与 setBatch 方法提高速度(以空间换时间)
2)scan 可以通过 setStartRow 与 setEndRow 来限定范围([start, end]start 是闭区间, end 是开区间)。范围越小,性能越高
3)scan 可以通过 setFilter 方法添加过滤器,这也是分页、多条件查询的基础
全表扫描,即直接扫描整张表中所有行记录

57、Hbase中scan对象的setCache和setBatch方法的使用
a setCaching设置的值为每次rpc的请求记录数,默认是1
cache大可以优化性能,但是太大了会花费很长的时间进行一次传输。
b setBatch设置每次取的column size;有些row特别大,所以需要分开传给client,就是一次传一个row的几个column。
batch和caching和hbase table column size共同决意了rpc的次数。

58、Hbase过滤器机制
过滤器的父类(比较过滤器,专用过滤器)
作用:
增强Hbase查询数据功能
减少服务端返回给客户端的数据量

59、Hbase存储什么数据
主要存储需要实时查询的非结构大量数据,利用rowKey以及LMS树结构,实现实时查询
列存储用于非结构化数据,底层采用HDFS,可以存储大量数据

60、Hbase模糊查询
相对检查的模糊查询,可以使用内置比较器:
RegexStringComparator: 正则表达式过滤器
SubStringComparator: 子串过滤器
BinaryPrefixComparator:前缀二进制比较器
BinaryComparator: 二进制比较器,用于按照字典顺序比较byte数据值
如果模糊查询比较复杂:
将rowKey以及需要模糊查询的字段,内容存储到ES当中,利用ES实现模糊查询,返回对应的rowKey,再根据rowKey从hbase中获取数据,两种相互结合。

61、写出Hbase shell中命令
a) Hbase中查询表名为test,值=001
scan ‘test’, { FILTER => “QualifierFilter (=, ‘binary:001’))”}
b) Hbase中查询表名为test, rowley为 user开头的
scan ‘test’, {ROWPREFIXFILTER => ‘user’}

62、一个hadoop环境,整合了hbase和hive,是否有必要给hdfs和hbase部分分别配置压缩策略?给出对压缩策略的建议。
有必要,因为hbase和hive的压缩策略存在差异,没有办法同时兼顾。
Hbase中可以使用protobuf来进行压缩存储的内容,
Hive当中可以存储为parquet以及orc格式进行压缩。

63、Mogodb和hbase的区别
mongodb:文档型数据库,存储主要为json格式数据,单个文档默认大小为16M限制,对列数目没有限制
Hbase:列式存储,基于hdfs数据库,对于单个表列族的数目有限制

-------------------------------------------------------- Hadoop ------------------------------------------------------
1、NameNode的safemode是怎么回事?如何才能退出safemode?
NameNode在刚启动的时候元数据只有文件块信息,没有文件所在DataNode的信息,需要DataNode自己向NameNode汇报。
如果NameNode发现DataNode汇报的文件块信息没有达到NameNode内存中所有文件块的总阈值的一个百分比,NameNode就会处于safemode。
只有达到这个阈值,NameNode才会推出safemode。也可手动强制退出。

2、fsimage和edit的区别?
大家都知道NameNode与secondary NameNode 的关系,当他们要进行数据同步时叫做checkpoint时就用到了fsimage与edit,fsimage是保存最新的元数据的信息,当fsimage数据到一定的大小时会去生成一个新的文件来保存元数据的信息,这个新的文件就是edit,edit会回滚最新的数据。

3、DataNode首次加入cluster的时候,如果log报告不兼容文件版本,那需要NameNode执行格式化操作,这样处理的原因是?
a 这样处理是不合理的,因为那么 NameNode 格式化操作,是对文件系统进行格式化,NameNode 格式化时清空 dfs/name 下空两个目录下的所有文件,之后,会在目录 dfs.name.dir 下创建文件。
b 文本不兼容,有可能时 NameNode 与 DataNode 的 数据里的 namespaceID、clusterID 不一致,找到两个 ID 位置,修改为一样即可解决。

4、SecondaryNameNode的主要职责是什么?简述其工作机制
sn的主要职责是执行checkpoint操作
每隔一段时间,会由secondary NameNode将NameNode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)

5、一个DataNode宕机,怎么一个流程恢复?
DataNode宕机了后,如果是短暂的宕机,可以实现写好脚本监控,将它启动起来。
如果是长时间宕机了,那么DataNode上的数据应该已经被备份到其他机器了,
那这台DataNode就是一台新的DataNode了,删除他的所有数据文件和状态文件,重新启动

6、Hadoop的NameNode宕机,怎么解决?
先分析宕机后的损失,宕机后直接导致client无法访问,内存中的元数据丢失,但是硬盘中的元数据应该还存在,
如果只是节点挂了,重启即可,如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了。
但是最终的解决方案应该是在设计集群的初期就考虑到这个问题,做NameNode的HA。

7、用mapreduce怎么处理数据倾斜问题?
数据倾斜:map/reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,
这是因为某一个Key的条数比其他Key多很多(有时是百倍或者千倍之多),这条Key所在的reduce节点所处理的数据量比其他节点就大很多,
从而导致某几个节点迟迟运行不完,此称之为数据倾斜。
解决:自己实现partition类,用Key和value相加取hash值。

8、Mapreduce的map数量和reduce数量怎么确定,怎么配置?
map的数量有数据块决定,reduce数量随便配置。

9、说下对Hadoop的一些理解,包括哪些组件
详谈Hadoop的应用,包括的组件分为三类,分别说明HDFS,yarn,mapreduce。

10、一些传统的Hadoop问题,mapreduce他就问shuffle阶段,你怎么理解的
Shuffle意义在于将不同map处理后的数据进行合理分配,让reduce处理,从而产生了排序、分区。

11、NameNode负责管理metadata,client端每次读写请求,它都会从磁盘中读取或则会写入metadata信息并反馈client端。(错误)
修改后分析:
NameNode 不需要从磁盘读取 metadata,所有数据都在内存中,硬盘上的只是序列化的结果,只有每次
NameNode 启动的时候才会读取。

12、两个文件合并的问题:给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
主要的思想是把文件分开进行计算,在对每个文件进行对比,得出相同的URL,因为以上说是含有相同的URL所以不用考虑数据倾斜的问题。
a、 可以估计每个文件的大小为5G*64=300G,远大于4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
b、 遍历文件a,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为a0,a1,…a999)当中。这样每个小文件的大小约为300M。
遍历文件b,采取和a相同的方法将url分别存储到1000个小文件(b0,b1…b999)中。这样处理后,所有可能相同的url都在对应的小文件(a0 vs b0, a1 vs b1…a999 vs b999)当中,不对应的小文件(比如a0 vs b99)不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。
c、 比如对于a0 vs b0,我们可以遍历a0,将其中的url存储到hash_map当中。
然后遍历b0,如果url在hash_map中,则说明此url在a和b中同时存在,保存到文件中即可。
d、如果分成的小文件不均匀,导致有些小文件太大(比如大于2G),可以考虑将这些太大的小文件再按类似的方法分成小小文件即可

13、哪种硬件配置对Hadoop作业最有利
配置4/8 GB RAM和ECC内存的双处理器或核心机器是运行Hadoop操作的理想选择。但是,硬件配置因项目特定的工作流程和流程而异,因此需要进行自定义。

14、当两个用户尝试访问HDFS中的同一文件时会发生什么
HDFS NN支持独占只写,因此只有第一个用户将受到文件访问权限,第二个用户被拒绝

15、如何在NN关闭时恢复他
使用文件系统元数据副本的Fslmage启动新的NN
配置DN以及客户端使他们确认新启动的NN
一旦新的NN完成加载从DN收到足够多的块报告的最后一个检查点Fslmage,他将可开始为客户端提高服务
—在大型Hadoop集群的情况下,NN恢复过程会消耗大量时间,在日常维护情况下是很大的挑战

16、Hadoop的Rack Awareness(副本放置策略)
他是一种应用于NN的算法,用于决定块及副本的放置方式
第一个副本和第二个副本不在同一个机架上,第三个副本放置在和第二个副本相同机架节点

17、HDFS块和InputSplit区别
HDFS将输入数据地划分用于处理的块,这些被称为HDFS block块
输入拆分是映射器用于映射操作的逻辑数据划分

18、Hadoop中常见的输入格式
文本输入格式 Hadoop中定义的默认输入格式
序列文件输入格式 读取序列中的文件
键值对输入格式 用于纯文本文件(分成行的文件)的输入格式是键值输入格式

19、Hadoop中块大小改变
使用HDFS-site.xml文件中的参数 dfs.block.size来更改块大小

20、MapReduce框架中的分布式缓存
分布式缓存是Hadoop MR框架的一项功能,用于缓存应用程序的文件
Hadoop框架使缓存文件可用于数据节点上运行每个M/R任务,因此数据文件可以作为指定作业中的本地文件访问缓存文件

21、Hadoop配置文件
Hadoop2.0中 Hadoop-site.xml 拆分为(core-site.xml,HDFS-site.xml,mapred-site.xml)三个文件
Hadoop-env.sh 配置java_home环境变量
core-site.xml 配置zk地址,临时目录等,主机名端口
HDFS-site.xml 配置nn信息,rpc和http通信地址,nn自动切换、zk连接超时时间等,还指定HDFS上的默认阻止权限和复制检查
mapred-site.xml 配置使用yarn
yarn-site.xml 配置ResourceManager配置和NodeManager配置
slaves 配置节点信息
格式化nn和zk

22、如何在Hadoop中实现安全性
Kerberos是一种网络认证协议,其设计目标是通过密匙系统为客户机/服务器应用程序提供强大的认证服务
在高级别使用Kerberos时,有3个步骤来访问服务,每个步骤都涉及与服务器的消息交换
a、身份验证 第一步是将客户端身份验证到服务器,然后客户端提供带时间戳的TGT(票证授予票证)
b、授权 在此步骤中,客户端使用收到的TGT从TGS(票证授予服务器)请求服务票证
c、服务请求 客户端使用服务票证向服务器验证自己

23、什么是商品硬件
商品硬件是一种低成本系统,由可用性较低和质量较差的系统识别。商品硬件包括RAM(随机存取存储器/主存,是与CPU直接交换数据的内部存储器,快速实时读写,断电易失)
因为它执行许多需要RAM执行的服务。一个不需要高端硬件或超级计算机来运行Hadoop,他可以在任何商用硬件上运行。

24、NAS网络附加存储和HDFS区别
NAS网络附属存储,具备资料存储功能的装备,因此也成为了网络存储器,是一种专用数据存储服务器
HDFS在一组计算机上运行,NAS在单个计算机上运行
HDFS容易造成数据冗余,NAS 复制协议,数据冗余的可能性要小很多
HDFS中,数据作为数据块存储在本地驱动器,NAS中,他存储在专用的硬件中

25、NFS与HDFS
NFS是网络文件系统,允许网络中的计算机之间共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写远端NFS服务器上的文件,就像访问本地文件一样
NFS是最古老和最流行的分布式文件存储系统之一,HDFS是最近流行的处理大数据的系统

26、HDFS中文件或目录级别的不同文件权限是什么
用户级别
Owner
Group
Others

          文件下                 目录下
r(读)        读取文件            列出内容的特定目录
w(写)        写一个文件           创建或删除一个目录
x(执行)                           访问子目录

27、Mapper的基本参数
LongWritable和Taxt
文本和intWritable

28、解释覆盖HDFS复制因子的过程
有2种方法可以覆盖HDFS中的复制因子
方法1:在文件基础上
使用Hadoop FS shell 在文件的基础上更改复制因子
$ Hadoop fs - setrep -w2 / my / test_file
test_file是复制因子将设置为2的文件名
方法2:在目录基础上
复制因子在目录基础上更改,即修改给定目录下所有文件的复制因子
$ Hadoop fs -setrep -w5 / my / test_dir
test_dir是目录的名称,目录的复制因子,其中的所有文件都将设置为5。

29、解释NameNode恢复过程
步骤:
a、文件系统元数据副本(Fslmage)启动一个新的NN
b、配置DN和Cli,然后配置的DN和Cli确认新的NN
c、新的NN在完成最后一个检查点Fslmage加载和接收来自DN的块报告时开始为客户端提供服务
注意:
NN在恢复过程在大型Hadoop集群消耗大量时间,因此,建议使用HDFS高可用性框架

30、Hadoop ClassPath如何启动/停止Hadoop守护进程是必不可少的?
ClassPath包含必要的目录,其中包含用于停止/启动Hadoop的jar文件,因此设置ClassPath对于启动/停止Hadoop守护进程至关重要
ClassPath在env.sh文件中,因此一但运行Hadoop,它将自动加载ClassPath

31、为什么HDFS只适用于大型数据集而不适用许多小文件
受NN限制,通常NN被分配巨大空间存储大规模文件的元数据。元数据应该来自单个文件,以实现最佳的空间利用率和成本收益
对于小尺寸文件,NN不使用整个空间,这是性能优化问题

32、为什么需要Hadoop中的数据位置
当数据分配不均衡时,会导致严重的网络拥塞,因此,数据接近计算是一种有效的解决方案,在技术上称为Hadoop中的数据位置。它有助于提高系统的整体吞吐量
数据局部性能的3种:
数据本地 在此类型数据和映射器主流在同一节点。这是最接近数据和最优选的方案
机架本地 在此情况下,映射器和数据驻留在同一机架,但位于不同的数据节点上
不同机架 在此情况下,映射器和数据驻留在不同的机架上

33、DFS与Hadoop框架对比
Hadoop不仅用于存储大数据,还用于处理这些大数据。虽然DFS(分布式文件系统)也可以存储数据,但不容错,网络上的数据移动取决于带宽

34、Sequencefileinputformat
Hadoop使用特定的文件格式,称为序列文件
序列文件将数据存储在系列化键值对中,Sequencefileinputformat是读取序列化文件的输入格式

35、什么是投机执行/推测执行Speculate
如果一个节点正在执行比主节点慢的任务,那么就需要在另一个节点上冗余地执行同一个任务同一个实例。
最先完成的任务会被接受,另一个可能会被杀死,这个过程被称为“投机执行”

36、机架感知
这是一种决定如何根据机架定义放置块的方法
在NN启动时,如果net.topology.script.file.name配置参数不为空,表示已经启动机架感知
当DN注册集和心跳时,会把DN的ip作为参数传入,返回信息为该佳佳信息;如果没有cansh
为了提高容错能力,减少同一机架间的网络流量,名称节点会尽可能的把数据块的副本放到多个机架上
一般情况下,第一个副本和第二个副本不在同一个机架上,第三个副本放置在和第二个副本相同机架节点

37、什么是检查点
多文件数据的修改不是直接回写到磁盘的,很多操作是先缓存到内存的Buffer中,当遇到一个检查点Checkpoint时,系统会强制将内存中的数据回写到磁盘,当然此时才会记录日志,从而产生持久的修改状态。
因此,不用重放一个编辑日志,NN可以直接从Fslmage加载到最终的内存状态,这肯定会减低NN启动时间。

38、Distcp
Distcp是Hadoop的复制工具,主要执行MR作业来复制数据。
Hadoop环境中的主要挑战是各个集群之间复制数据,distcp也将提多个DN并行复制数据。

39、是否可以在不同集群之间复制文件,如何做到?
分布式复制

40、添加新DN后,你需要做些什么?
需要启动平衡器才能在所有节点之间重新分配数据,以便Hadoop集群自动找到新的DN。

41、RDMS和Hadoop区别
RDBMS关系型数据库管理系统,将数据组织为相关的行列系统,通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数据。
RDBMS以面向行的方式存储记录,高效。但是不能有效的获取行中10%列或者在写入是所有列都不知道的情况
RDBMS用于事务性系统存储和处理数据,Hadoop可以用来存储大量数据。

42、你会如何选择不同的文件格式存储和处理数据?
  CSV 文件
   CSV 文件通常用于在 Hadoop 和外部系统之间交换数据。
CSV 是可读和可解析的。
CSV 可以方便地用于从数据库到 Hadoop 或到分析数据库的批量加载。
在Hadoop中使用 CSV 文件时,不包括页眉或页脚行。文件的每一行都应包含记录。
CSV 文件对模式评估的支持是有限的,因为新字段只能附加到记录的结尾,并且现有字段不能受到限制。
CSV 文件不支持块压缩,因此压缩 CSV 文件会有明显的读取性能成本。
  JSON 文件
   JSON 记录与 JSON 文件不同;每一行都是其 JSON 记录。
由于 JSON 将模式和数据一起存储在每个记录中,因此它能够实现完整的模式演进和可拆分性。
此外,JSON 文件不支持块级压缩。
  序列文件
   序列文件以与 CSV 文件类似的结构用二进制格式存储数据。
像 CSV 一样,序列文件不存储元数据,因此只有模式进化才将新字段附加到记录的末尾。
与 CSV 文件不同,序列文件确实支持块压缩。
序列文件也是可拆分的。
序列文件可以用于解决“小文件问题”,方式是通过组合较小的通过存储文件名作为键和文件内容作为值的 XML 文件。
由于读取序列文件的复杂性,它们更适合用于在中间的数据存储。
序列文件是以 Java 为中心的,不能跨平台使用。
  Avro 文件
   适合于有模式的长期存储。Avro 文件存储具有数据的元数据,但也允许指定用于读取文件的独立模式。
启用完全的模式进化支持,允许你通过定义新的独立模式重命名、添加和删除字段以及更改字段的数据类型。
Avro 文件以 JSON 格式定义模式,数据将采用二进制 JSON 格式。
Avro 文件也是可拆分的,并支持块压缩。更适合需要行级访问的使用模式。
这意味着查询该行中的所有列。不适用于行有 50+ 列,但使用模式只需要访问 10 个或更少的列。
Parquet 文件格式更适合这个列访问使用模式。
  Columnar 格式,例如 RCFile,ORC
   RDBM 以面向行的方式存储记录,因为这对于需要在获取许多列的记录的情况下是高效的。
如果在向磁盘写入记录时已知所有列值,则面向行的写也是有效的。
但是这种方法不能有效地获取行中的仅 10% 的列或者在写入时所有列值都不知道的情况。
这是 Columnar 文件更有意义的地方。所以 Columnar 格式在以下情况下工作良好

43、基于Hadoop的数据中心的好处是什么?
随着数据量和复杂性的增加,提高了整体SLA(服务水平协议),eg:Shared Nothing框架,并行处理,内存密集型处理框架,eg:Spark/Impala,Yarn容量调度资源抢占
不仅在商品硬件节点和开源工具更便宜,还可以通过Spark/Impala弥补数据仓库解决方案,从而更高效地并行处理大数据,也适当释放数据仓库资源
便于在大量数据中寻找有价值的结论
灵活,数据收集,支持格式

44、RAM溢出因子
溢出因子(Spill factor)是临时文件中存储文件的大小,也是Hadoop-temp目录

45、简述Hadoop则怎样实现二级排序(Key和Value双排序)
方法1:
Reducer将给定Key的所有值都缓存起来,然后对他们做一个Reducer内排序。
但是,由于Reducer需要保存给定Key的所有值,可能会导致出现内存耗尽的错误。
方法2:
将值的一部分或整个值加入原始Key,生成一个组合(实现WritableComparable接口或者调用setSortComparatorClass函数),这样reduce获取的结果便是先按Key后按value排序的结果
第一种方法编写简单,但并发度小,数据量大的情况下速度慢,也有内存耗尽的风险
第二种方法是将排序的任务交给MR框架shuffle,更符合Hadoop设计思想
Paratitioner,确保拥有相同Key(原始Key,不包括添加的部分)的所有数据都被发往同一个Reducer
Comparator,以便数据达到Reducer后按原始Key分组

46、简述mapreduce中的combine和partition的作用
combiner,是发生在map的最后一个阶段,原理也是一个小型reducer,主要作用是减少到reduce的数据量,缓解网络传输瓶颈,提高reducer执行效率
paratition,主要作用将map阶段产生的所有kv对分配给不同reducer task处理,可以将reduce阶段的处理负载分摊

47、Hadoop常用压缩算法
Lzo、Gzip、Default、Snapyy

48、缓存机制DistributedCash在Hadoop中的应用
在job任务执行前,将需要的文件拷贝到Task机器上进行缓存,提高MR的执行效率

50、MR优化经验
调优可以通过系统配置、程序编写和作业调度算法来进行
设置合理的map/reduce个数
设置合理的blocksize
避免出现数据倾斜
合理利用combine函数
小文件优化处理,在HDFS上用MR对小文件进行合并
参数优化
mapred.map.tasks、mapred.reduce.tasks 设置mr任务数(默认都是1)
mapred.tasktracker.map.tasks.maximum 每台机器上的最大map任务数
mapred.tasktracker.reduce.tasks.maximum 每台机器上的最大reduce任务数
mapred.reduce.slowstart.completed.maps 配置reduce任务在map任务完成到百分之几的时候开始进入,reduce任务是在33%的时候完成copy,要在这之前完成map任务,(map可以提前完成)
mapred.compress.map.output,mapred.output.compress 配置压缩项,消耗cpu提升网络和磁盘io

51、如何确认Hadoop集群健康状况
有完善的集群监控体系(ganglia,nagios)
HDFS dfsadmin -report
HDFS haadmin -getServiceState nnl
通过页面监控,脚本监控

52、Hadoop中job和task区别
job是对一个完整MR程序的抽象封装
task是job运行时,每一个处理阶段的具体实例,并发

53、一个DataNode宕机,怎么恢复
如果是短暂的宕机,可以实现写好脚本监控,将它启动起来。
如果是长时间宕机了,那么DataNode上的数据应该已经被备份到其他机器了,那这台DataNode就是一台新的DataNode了,删除他的所有数据文件和状态文件,重新启动。

54、Hadoop的NaneNode宕机,怎么解决
先分析宕机后的损失,宕机后直接导致client无法访问,内存中的元数据丢失,但是硬盘中的元数据应该还存在。
如果只是节点挂了,重启即可。
如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了。
但是最终的解决方案应该是在设计集群的初期就考虑到这个问题,做NN的HA。

55、Hadoop的TextInputFormat作用是什么,如何自定义实现?
InputFormat会在map操作之前对数据进行两方面的预处理。
a getSplits,返回的是InputSplit数组,对数据进行split分片,每片交给map操作一次。
b getRecordReader,返回的是RecordReader对象,对每个split分片进行转换为Key-value键值对格式传递给map。
常用的InputFormat是TextInputFormat,使用的是LineRecordReader对每个分片进行键值对的转换,以行偏移量作为键,行内容作为值。
自定义类继承InputFormat接口,重写createRecordReader和isSplitable方法,在createRecordReader中可以自定义分隔符。

56、Hadoop和Spark的都是并行计算,那么他们有什么相同和区别?
两者都是用mr模型来进行并行计算,Hadoop的一个作业称为job,job里面分为map task和reduce task,每个task都是在自己的进程中运行的,当task结束时,进程也会结束。
a Spark用户提交的任务成为application,一个application对应一个sparkcontext,app中存在多个job,每触发一次action操作就会产生一个job。
这些job可以并行或串行执行,每个job中有多个stage,stage是shuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job而来的,每个stage里面有多个task,组成taskset有TaskSchaduler分发到各个executor中执行,executor的生命周期是和app一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算。
b Hadoop的job只有map和reduce操作,表达能力比较欠缺而且在mr过程中会重复的读写HDFS,造成大量的io操作,多个job需要自己管理关系。
Spark的迭代计算都是在内存中进行的,API中提供了大量的RDD操作如join,groupby等,而且通过DAG图可以实现良好的容错。

57、为什么要用flume导入HDFS,HDFS的构架是怎样的?
Flume可以实时的导入数据到HDFS中,当HDFS上的文件达到一个指定大小的时候会形成一个文件,或者超过指定时间的话也形成一个文件。
文件都是存储在DN上面的,NN记录着DN的元数据信息,而NN的元数据信息是存在内存中的,所以当文件切片很小或者很多的时候会卡死。

58、MR程序运行的时候会有什么比较常见的问题?
比如说作业中大部分都完成了,但是总有几个reduce一直在运行。
这是因为这几个reduce中的处理的数据要远远大于其他的reduce,可能是因为对键值对任务划分的不均匀造成的数据倾斜。
解决的方法可以在分区的时候重新定义分区规则对于value数据很多的Key可以进行拆分、均匀打散等处理,或者是在map端的combiner中进行数据预处理的操作。

59、简单说一下Hadoop和Spark的shuffle过程?
减少shuffle可以提高性能。
Hadoop:map端保存分片数据,通过网络收集到reduce端。
Spark:spark的shuffle是在DAGSchedular划分Stage的时候产生的,TaskSchedule要分发Stage到各个worker的executor。

60、Hadoop的SequenceFile的格式,并说明下什么是JAVA序列化,如何实现JAVA序列化?
SequenceFile是Hadoop的一个重要数据文件类型,他提供K-V存储,但不同传统K-V的是:他是append only,你不能对已存在的K进行写操作
SequenceFile可以作为小文件的容器,可以将小文件包装起来传递给MR进行处理
SequenceFile提供2种定位文件位置的方法
seek,必须是记录的边界,否则调用next()方法时会报错
sync,可以不是记录的边界,如果不是边界,会定位到下一个同步点
序列化就是把内存的对象的状态信息转换成字节序列以便存储(持久化)和网络传输

61、Hadoop优化
优化的思路可以从配置文件和系统以及代码的设计思路来优化
配置文件的优化
调节适当的参数,在调参数时要进行测试
代码的优化
combiner的个数尽量与reduce的个数相同,数据的类型保持一致,可以减少拆包与封包的进度
系统的优化
可以设置linux系统打开最大的文件数预计网络的带宽MTU的配置
stringBuffer代替string
在开发中尽量使用stringBuffer而不是string,string的模式是read-only的,如果对它进行修改,会产生临时的对象,stringBuffer是可修改的,不会产生临时对象
小文件优化
block块大小设置比较大,读写数据块时间远大于寻道时间。接近于硬盘传输速度
事先合并成大文件,combineTextInputformat,在HDFS上用MR合并成SequenceFile文件(k:文件名,v:文件内容)
shuffle阶段
map端压缩compress
map端聚合combiner
修改配置
修改mapred-site.xml文件配置,eg:心跳时间、磁盘块、压缩方式等

62、有关于Hadoop上join问题
允许在map阶段进行join操作,在join时把小表读入内存中,再拿另外一个表的数据和内存中数据做匹配。
map端的join操作省去reduce操作,效率也快

63、Hadoop任务管理调度器,简要说出其工作方法
Fifo schedular,默认,先进先出原则
Capacity schedular,计算能力调度器,选择占用最小,优先级高的先执行
Fair schedular,公平歹毒器,所有job具有相同资源

64、Hadoop中的压缩方法
Lzo、Gzip、Default、Snapyy
如果要对数据进行压缩,最好是将原始数据转为SequenceFile或者Parquet File(Spark)

65、Hadoop框架文件拆分调用
InputFormat --> TextInputFormat --> RecordReader --> LineRecordReader --> LineReader

66、Hadoop节点动态上线下线应该怎么操作?
当要新上线数据节点的时,需要把数据节点的名字追加在dfs.hosts文件中
一,关闭新增节点的防火墙
二,在 NameNode 节点的 hosts 文件中加入新增数据节点的 hostname
三,在每个新增数据节点的 hosts 文件中加入 NameNode 的 hostname
四,在 NameNode 节点上增加新增节点的 SSH 免密码登录的操作
五,在 NameNode 节点上的 dfs.hosts 中追加上新增节点的 hostname
六,在其他节点上执行刷新操作:hdfs dfsadmin -refreshNodes
七,在 NameNode 节点上,更改 slaves 文件,将要上线的数据节点 hostname 追加到 slaves 文件中
八,启动 DataNode 节点
九,查看 NameNode 的监控页面看是否有新增加的节点
节点下线:
一,修改/conf/hdfs-site.xml 文件
二,确定需要下线的机器,dfs.osts.exclude 文件中配置好需要下架的机器,阻止下架的机器去连接 NameNode
三,配置完成之后进行配置的刷新操作./bin/Hadoop dfsadmin -refreshNodes,作用是在后台进行 block 块的移动
四,当执行三的命令完成之后,需要下架的机器就可以关闭了,可以查看现在集群上连接的节点
五,机器下线完毕,将他们从 excludes 文件中移除

大数据知识点汇总---Redis,Spark,Kafka,Hive,Mysql,Hbase,Hadoop...相关推荐

  1. 【大数据开发】SparkSQL——Spark对接Hive、Row类、SparkSQL函数、UDF函数(用户自定义函数)、UDAF函数、性能调优、SparkSQL解决数据倾斜

    文章目录 一.Spark对接Hive准备工作 1.1 集群文件下载 1.2 导入依赖 1.3 打开集群metastore服务 二.Spark对接Hive 2.1 查询Hive 2.2 读取MySQL中 ...

  2. 大数据之-Hadoop3.x_了解一下hive和hbase的区别---大数据之hadoop3.x工作笔记0084

    全部都是文字,简单说一下自己的理解,hive和hbase都是基于hadoop的,但细节不同,对于开发来说,hive提供了类似sql的操作,支持jdbc,你写了sql以后他可以自己帮你转换为MapRed ...

  3. 全球100款大数据工具汇总,入行必备

    全球100款大数据工具汇总,入行必备 1. Talend Open Studio 是第一家针对的数据集成工具市场的ETL(数据的提取Extract.传输Transform.载入Load)开源软件供应商 ...

  4. 大数据(1)---全球100款大数据工具汇总(前50款)

    全球100款大数据工具汇总(前50款) 大数据 01  Talend Open Studio 是第一家针对的数据集成工具市场的ETL(数据的提取Extract.传输Transform.载入Load)开 ...

  5. 全球大数据工具汇总简介

    1. Talend Open Studio 是第一家针对的数据集成工具市场的ETL(数据的提取Extract.传输Transform.载入Load)开源软件供应商.Talend的下载量已超过200万人 ...

  6. 大数据项目(基于spark)--新冠疫情防控指挥作战平台项目

    大数据项目(基于spark)–新冠疫情防控指挥作战平台项目 文章目录 第一章 项目介绍 1.1 项目背景 1.2 项目架构 1.3 项目截图 1.4 功能模块 第二章 数据爬取 2.1 数据清单 2. ...

  7. 【计算机大数据毕设之基于spark+hadoop的大数据分析论文写作参考案例】

    [计算机大数据毕设之基于spark+hadoop的大数据分析论文写作参考案例-哔哩哔哩] https://b23.tv/zKOtd3L 目  录 一 引言​1 二 系统分析​2 2.1 必要性和可行性 ...

  8. 大数据改变世界,Spark改变大数据——中国Spark技术峰会见闻

    作者:张相於,当当网推荐系统开发经理 责编:周建丁(zhoujd@csdn.net) 笔者5月15日参加了"中国云计算技术大会"中的"中国Spark技术峰会", ...

  9. 【若泽大数据实战第十六天】Hive的安装部署 + 课程一个月总结

    前言: Hadoop的课程已经告一段落,基本上在零基础课程里不会再出现了,接下来的课程由若总来上,第一讲Have. 复习前一个月的课程内容: 1.Linux Linux: 文件(*****) 权限(* ...

  10. Spark大数据开发学习:Spark基础入门

    在诸多的大数据技术框架当中,Spark可以说是占据了非常重要的地位,继Hadoop之后,基于实时数据处理需求的不断上升,Spark开始占据越来越大的市场份额,而Spark,也成为大数据的必学知识点.今 ...

最新文章

  1. 一种PacBio测序数据组装得到的基因组序列的纠错方法技术 (专利技术)
  2. PAT甲级1028 List Sorting:[C++题解]排序,cin和cout会超时
  3. ie兼容响应式布局的实现总结 和 针对ie浏览器的CSS
  4. disabled运用;div,li元素禁用点击事件;防止a标签打开url;禁用click事件,删除onclick
  5. 基于ASP.NET MVC框架开发Web论坛应用程序
  6. 二叉树的宽度 java_Java语言描述二叉树的深度和宽度
  7. CocosCreator休闲游戏发布到字节跳动平台
  8. 批量ping及telnet工具
  9. PostgreSQL update多张表关联查询更新
  10. linux逻辑分区如何创建,linux 创建扩展分区以及逻辑分区
  11. 日常生活 之 有哪些道理是你慢慢才明白的?
  12. linux pdf 宋宝华,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  13. deepin linux哪个级别,Linux,国产的Deepin系统排名第十
  14. 从博客搭建和装修学到的东西
  15. Lua ipairs与pairs的区别
  16. 计算机最学生写作的影响,计算机对学生英语写作影响的元分析
  17. 大力哥谈 DALI - 灯具内部 DALI 产品的新标识 - D4i
  18. Hi3556v200配置RTL8189FS
  19. 基于RS422通信的FPGA软件设计第四天
  20. 微信企业号开发:微信考勤百度地图定位二

热门文章

  1. 替代传统C/S和B/S技术的下一代客户/服务器编程技术
  2. 设置eclipse中的编辑区的背景颜色、注释文字的颜色、修改注释内作者名和时间...
  3. SQL不能以实例名连接问题处理
  4. VisualStudio\Spy++查窗口句柄,监控窗口消息
  5. ram计算机中术语,计算机术语 RAM ROM
  6. c++ 编译代码时Link失败,无法关闭目标文件
  7. #pragma push_macro(new) 及扩展操作
  8. 冰点文库下载器2021新版 v3.2.16
  9. 【线性代数及其应用】04 -线性变换
  10. VisionMaster 学习笔记(仪表盘检测)