大数据面试题

目录
一、linux相关内容 2
1、 什么是交换空间? 2
2、 Linux下的权限有哪些? 2
3、 如何在Linux下更改权限? 3
4、 什么是守护进程? 3
5、 使用vi编辑器时有哪些不同的模式? 3
6、 计算文件夹大小的命令是什么? 3
7、 Linux常用命令: 3
8、 简述三次握手四次挥手 4
9、 Http 请求的 GET 和 POST 方式的区别 5
10、 硬链接和软链接的区别 5
11、 Linux中要找出某一文件属于哪个RPM软件包的命令: 6
12、 如何查看所有java进程 6
13、 LINUX中如何查看某个端口是否被占用 6
14、 如何定时执行任务: 7
15、 如何通过配置文件修改修改IP 7
16、 Linux如何挂载磁盘 7
17、 linux安装软件的几种方式: 7
18、 如何查找一个文件大小超过5M的文件 7
19、 如果知道一个文件名称,怎么查这个文件在linux下的哪个目录,如:要查找tnsnames.ora文件 8
20、 Linux通过日志文件统计IP访问次数排序,取前n条 8
二、SQL内容 8
1、Mysql中有哪几种锁? 8
2、delete、drop、truncate区别 8
3、MySQL的复制原理以及流程 9
4、 MySQL 中 InnoDB 支持事物的4种隔离级别: 9
5、MySQL 中 InnoDB 支持事物的4种隔离级别的不同级别的现象 9
6、什么是存储过程?用什么来调用? 9
7、什么叫视图? 10
8、索引的作用?它的优点缺点是什么? 10
9、 Hive中的排序关键字有哪些 10
10、Sql语句: 10
11、 变换表 12
12、 有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路): 13
13、 一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。 13
14、 数据库和数仓的区别 13
15、 谈你对星形模型和雪花模型理解和认识? 13
16、 数仓的一般分层及数据流转: 14
17、 数据为什么分层和数据分层的价值 14
18、 数仓设计的思路?业务需求驱动?数据驱动? 15
19、 MySQL支持哪些存储引擎? 16
20、 谈谈你对hive 的优化 16
16
三、大数据 16

  1. 请描述一下hdfs写文件的过程 16
  2. HBASE中compact用途是什么,什么时候触发,分为哪两种,有什么区别 17
  3. Hbase 的特点是什么 17
  4. Hbase的rowkey设计原则 17
  5. hive内部表与外部表的区别 18
  6. 什么是数据倾斜?数据倾斜的原因有哪些? 18
  7. Hive分区和分桶区别 18
  8. HDFS副本存放策略 18
  9. HDFS中大量小文件带来的问题以及解决方法 18
  10. HDFS的三个核心组件是什么, 有什么作用 19
  11. Kafka的设计是什么样的呢 19
  12. fsimage和edit的区别 19
  13. Sqoop的作用和使用 19
  14. HBase 宕机如何处理? 19
  15. ZooKeeper有哪些作用 19
  16. Hive中Metastore的作用 19
  17. spark的RDD怎么理解 20
  18. 什么是ETL 20
  19. 软件开发的一般流程 20
  20. 数据仓库的概念 20

一、linux相关内容
1、什么是交换空间?
交换空间是Linux使用的一定空间,用于临时保存一些并发运行的程序。当RAM没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况

2、Linux下的权限有哪些?
Linux下有3种权限:

读取:用户可以读取文件或列出目录
写入:用户可以写入新文件到目录的文件
执行:用户可以运行文件或查找特定文件一个目录

3、如何在Linux下更改权限?
假设你是系统管理员或文件或目录的所有者,则可以使用chmod命令授予权限。使用+符号添加权限或 - 符号拒绝权限,以及以下任何字母:u(用户),g(组),o(其他),a(所有),r(读取),w(写入)和x(执行)。例如,命令chmod go + rw FILE1.TXT授予对文件FILE1.TXT的读写访问权限,该文件分配给组和其他组

4、什么是守护进程?
守护进程是提供基本操作系统下可能无法使用的多种功能的服务。其主要任务是监听服务请求,同时对这些请求采取行动。服务完成后,它将断开连接并等待进一步的请求

5、使用vi编辑器时有哪些不同的模式?
在vi下有3种模式:

命令模式: 这是你在编辑模式下开始的模式
编辑模式:这是允许你进行文本编辑的模式
Ex模式:这是你用vi与vi交互的模式处理文件

6、计算文件夹大小的命令是什么?
要计算文件夹的大小,请使用命令

du -sh folder1

7、Linux常用命令:
1.查找文件
find / -name filename.txt
根据名称查找/目录下的 filename.txt 文件。
2.查看一个程序是否运行
ps –ef|grep tomcat
查看所有有关 tomcat 的进程
3.终止线程
kill -9 19979
终止线程号位 19979 的线程
4.查看文件,包含隐藏文件
ls -al
5.当前工作目录
pwd
6.复制文件包括其子文件到自定目录
cp -r sourceFolder targetFolder
7.创建目录
mkdir newfolder
8.删除目录(此目录是空目录)
rmdir deleteEmptyFolder
9.删除文件包括其子文件
rm -rf deleteFile
10.移动文件
mv /temp/movefile /targetFolder
扩展重命名 mv oldNameFile newNameFile
11.切换用户
su -username

8、简述三次握手四次挥手

9、Http 请求的 GET 和 POST 方式的区别

GET产生一个TCP数据包:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
POST产生两个TCP数据包:
 对于POST方式的请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

10、硬链接和软链接的区别

· 硬链接
只能引用同一文件系统中的文件,引用的是文件在文件系统中的物理索引(也称inode)。当移动或删除原始文件时,硬链接被破坏,因为它引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件所在目录,有助于文件安全性。若删除的文件有相应硬链接,则文件依然会保留,知道所有对它的引用都被删除;
· 软链接
其实就是新建立一个文件,这个文件就是专门用来执行别的文件的(相当一Windows中的快捷方式)。所产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删除这个软链接文件,就相当于不需要这个链接,和原来存在的实体原文件没有任何关系,但删除原来的文件,则相应的软链接不可用;
· 两者区别
硬链接不会建立inode,只是在文件原来的inode link count域再增加1,因此硬链接是不可跨文件系统的;而软链接会重建一个inode,其结构与其他的不一样,只是一个指明源文件的字符串信息。源文件一旦删除,软链接将毫无意义;软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名进行链接,硬链接不可以;软链接可以对目录进行连接,硬链接不可以;ln默认创建的是硬链接,使用-s可以创建软链接;

11、Linux中要找出某一文件属于哪个RPM软件包的命令:
rpm -qf filename;

12、如何查看所有java进程
grep是搜索关键字
ps -ef | grep java

如何杀掉某个服务的进程
kill 命令用于终止进程
-9 强迫进程立即停止
kill -9 [PID]
这里pid需要用 ps -ef | grep 查询pid

13、LINUX中如何查看某个端口是否被占用
netstat -anp | grep 端口号

图中主要看监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用,查看具体端口号,只要有如图这一行就表示被占用了

14、如何定时执行任务:
Crontab

15、如何通过配置文件修改修改IP
想修改ip,需要编辑哪个配置文件,修改完配置文件后,如何重启网卡,使配置生效?

答:使用vi或者vim编辑器编辑网卡配置文件/etc/sysconfig/network-scripts/ifcft-eth0

修改网卡后,可以使用命令重启网卡:
ifdown eth0
ifup eth0
也可以重启网络服务:
service network restart

16、Linux如何挂载磁盘
mount /dev/sdc1 /disk/disktwo/ //进行挂载
或者
vim /etc/fstab
/dev/sdc1(磁盘分区) /disk/disktwo(挂载目录) ext3(文件格式)defaults 0 0

17、linux安装软件的几种方式:
 源码安装
 RPM安装
yum安装
apt安装

18、如何查找一个文件大小超过5M的文件
find . -type f -size +100M

19、如果知道一个文件名称,怎么查这个文件在linux下的哪个目录,如:要查找tnsnames.ora文件
find / -name tnsnames.ora

20、Linux通过日志文件统计IP访问次数排序,取前n条

日志内容如下:

1.119.144.106 - - [03/Jan/2019:12:47:50 +0800] image.aa.com "GET /image/public/index.php/index/uploads/

第一列是IP地址,现在我想根据IP统计它的数量,就可以写一个shell命令如下:
cat logs/xxx.log | awk ‘{print $(1)}’ | sort | uniq -c | sort -k 1 -n -r|head -10

二、SQL内容
1、Mysql中有哪几种锁?
从锁的类别上来讲,有共享锁和排他锁.
共享锁: 又叫做读锁. 当用户要进行数据的读取时,对数据加上共享锁.共享锁可以同时加上多个.
排他锁: 又叫做写锁. 当用户要进行数据的写入时,对数据加上排他锁.排他锁只可以加一个,他和其他的排他锁,共享锁都相斥.
用上面的例子来说就是用户的行为有两种,一种是来看房,多个用户一起看房是可以接受的. 一种是真正的入住一晚,在这期间,无论是想入住的还是想看房的都不可以.
锁的粒度取决于具体的存储引擎,InnoDB实现了行级锁,页级锁,表级锁.
他们的加锁开销从大大小,并发能力也是从大到小.

2、delete、drop、truncate区别
truncate 和 delete只删除数据,不删除表结构 ,drop删除表结构,并且释放所占的空间。
删除数据的速度,drop> truncate > delete
delete属于DML语言,需要事务管理,commit之后才能生效。drop和truncate属于DDL语言,操作立刻生效,不可回滚。
使用场合:
当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a where clause), 用 delete.

3、MySQL的复制原理以及流程
复制基本原理流程
1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;
2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;
3. 从:sql执行线程——执行relay log中的语句;

4、 MySQL 中 InnoDB 支持事物的4种隔离级别:
读未提交(read uncommitted)
读已提交(read committed)
可重复读(repeatable read)
串行(serializable)

5、MySQL 中 InnoDB 支持事物的4种隔离级别的不同级别的现象
Read Uncommitted:可以读取其他 session 未提交的脏数据。
Read Committed:允许不可重复读取,但不允许脏读取。提交后,其他会话可以看到提交的数据。
Repeatable Read: 禁止不可重复读取和脏读取、以及幻读(innodb 独有)。
Serializable: 事务只能一个接着一个地执行,但不能并发执行。事务隔离级别最高。
不同的隔离级别有不同的现象,并有不同的锁定/并发机制,隔离级别越高,数据库的并发性就越差。

6、什么是存储过程?用什么来调用?
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
调用:
1)可以用一个命令对象来调用存储过程。
2)可以供外部程序调用,比如:java程序。

7、什么叫视图?
视图:
是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。


8、索引的作用?它的优点缺点是什么?
索引作用:
协助快速查询、更新数据库表中数据。
为表设置索引要付出代价的:
一是增加了数据库的存储空间

二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

9、 Hive中的排序关键字有哪些
sort by ,order by ,cluster by ,distribute by
sort by :不是全局排序,其在数据进入reducer前完成排序
order by :会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序).只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
cluster by : 当distribute by 和sort by的字段相同时,等同于cluster by.可以看做特殊的distribute + sort
distribute by :按照指定的字段对数据进行划分输出到不同的reduce中

10、Sql语句:

表结构预览
–学生表
Student(SId,Sname,Sage,Ssex)
–SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

–课程表
Course(CId,Cname,TId)
–CId 课程编号,Cname 课程名称,TId 教师编号

–教师表
Teacher(TId,Tname)
–TId 教师编号,Tname 教师姓名

–成绩表
SC(SId,CId,score)
–SId 学生编号,CId 课程编号,score 分数

10.1、查询“01”课程比“02”课程成绩高的所有学生的学号;
select distinct t1.sid as sidfrom
(select * from sc where cid=‘01’)t1
left join
(select * from sc where cid=‘02’)t2
on t1.sid=t2.sid where t1.score>t2.score

10.2、查询平均成绩大于60分的同学的学号和平均成绩;
select
sid
,avg(score)from sc group by sid
having avg(score>60)

10.3、查询所有同学的学号、姓名、选课数、总成绩
select
student.sid as sid
,sname
,count(distinct cid) course_cnt
,sum(score) as total_score from student
left join sc
on student.sid=sc.sid group by sid,sname

10.4、查询没学过“张三”老师课的同学的学号、姓名;
select
sid,sname from student where sid not in
(
select
sc.sid
from teacher
left join course
on teacher.tid=course.tid
left join sc
on course.cid=sc.cid
where teacher.tname=‘张三’
)

11、变换表
答案一、
怎么把一个表year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成这样一个结果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4

select year, 
(select amount from aaa m where month=1 and m.year=aaa.year) as m1,
(select amount from aaa m where month=2 and m.year=aaa.year) as m2,
(select amount from aaa m where month=3 and m.year=aaa.year) as m3,
(select amount from aaa m where month=4 and m.year=aaa.year) as m4
from aaa group by year

12、有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。 
显示格式: 
语文 数学 英语 
及格 优秀 不及格

select
(case when 语文>=80 then ‘优秀’
when 语文>=60 then ‘及格’
else ‘不及格’) as 语文,
(case when 数学>=80 then ‘优秀’
when 数学>=60 then ‘及格’
else ‘不及格’) as 数学,
(case when 英语>=80 then ‘优秀’
when 英语>=60 then ‘及格’
else ‘不及格’) as 英语,
from table

13、一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。

答案1、select id, Count() from tb group by id having count()>1
答案2、select * from(select count(ID) as count from table group by ID)T where T.count>1
14、数据库和数仓的区别
数据库是面向事务的设计,数据仓库是面向主题设计的。 数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。
数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计。
数据库是为捕获数据而设计,数据仓库是为分析数据而设计,它的两个基本的元素是维表和事实表。
(维是看问题的角度,比如时间,部门,维表放的就是这些东西的定义,事实表里放着要查询的数据,同时有维的ID

15、谈你对星形模型和雪花模型理解和认识?
维度表等价于我们常说的字典表。事实表就是字典表之外的数据表。
1.1 星型
多张维度表,一张事实表,维度表之间没有关系。查询性能要好些,存储有冗余的。星型模型使用的比较多。

1.2 雪花型
雪花型是星型建模的扩展,维度表之间有关系。存储减少冗余,查询性能有损失,需要多级连接。
和星型模型的共性就是只有一张是事实表。

1.3 星座型
星座型也是星型模型的扩展,存在多张事实表。

16、数仓的一般分层及数据流转:
操作数据层ODS(Operational Data Store):
明细数据层DWD(Data Warehouse Detail):
汇总数据层DWS(Data Warehouse Summary):
应用数据层ADS(Application Data Store):

数据仓库的数据流转:
源数据层(source)–>贴源层(ods.rds)–>数仓层(dw)–>数据集市层(dm)–>mysql–>报表展示

17、数据为什么分层和数据分层的价值
数据为什么分层:
清晰数据结构:
数据血缘追踪:
减少重复开发:
把复杂问题简单化:
屏蔽原始数据的异常:
屏蔽业务的影响,不必改一次业务就需要重新接入数据.

空间换时间。通过建设多层次的数据模型供用户使用,避免用户直接使用操作型数据,可以更高效的访问数据。
把复杂问题简单化。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
便于处理业务的变化。随着业务的变化,只需要调整底层的数据,对应用层对业务的调整零感知.

价值:
高效的数据组织形式【易维护】
面向主题的特性决定了数据仓库拥有业务数据库所无法拥有的高效的数据组织形式,更加完整的数据体系,清晰的数据分类和分层机制。因为所有数据在进入数据仓库之前都经过清洗和过滤,使原始数据不再杂乱无章,基于优化查询的组织形式,有效提高数据获取、统计和分析的效率。
时间价值【高性能】
数据仓库的构建将大大缩短获取信息的时间,数据仓库作为数据的集合,所有的信息都可以从数据仓库直接获取,数据仓库的最大优势在于一旦底层从各类数据源到数据仓库的ETL流程构建成型,那么每天就会有来自各方面的信息通过自动任务调度的形式流入数据仓库,从而使一切基于这些底层信息的数据获取的效率达到迅速提升。
从应用来看,使用数据仓库可以大大提高数据的查询效率,尤其对于海量数据的关联查询和复杂查询,所以数据仓库有利于实现复杂的统计需求,提高数据统计的效率。
集成价值【简单化】
数据仓库是所有数据的集合,包括日志信息、数据库数据、文本数据、外部数据等都集成在数据仓库中,对于应用来说,实现各种不同数据的关联并使多维分析更加方便,为从多角度多层次地数据分析和决策制定提供的可能。
历史数据【历史性】
记录历史是数据仓库的特性之一,数据仓库能够还原历史时间点上的产品状态、用户状态、用户行为等,以便于能更好的回溯历史,分析历史,跟踪用户的历史行为,更好地比较历史和总结历史,同时根据历史预测未来。

18、数仓设计的思路?业务需求驱动?数据驱动?
构造数据仓库有两种方式:一是自上而下,一是自下而上。
“自上而下”的方式,即一个企业建立唯一的数据中心,就像一个数据的仓库,其中数据是经过整合、经过清洗、去掉脏数据的、标准的,能够提供统一的视图。要建立这样的数据仓库,并不从它需要支持哪些应用入手,而是要从整个企业的环境入手,分析其中的概念,应该有什么样的数据,达成概念完成整;(会考虑到很全面的设计)
“自下而上”的方式,建设数据仓库应该按照实际的应用需求,加载需要的数据,不需要的数据不要加载到数据仓库中。这种方式建设周期较短,客户能够很快看到结果。(针对客户的需求,需求要什么就做什么)
二者都要达到同一个目标:企业级数据仓库。实际上在建设数据仓库的时候,一般都参照这两种方式结合使用没有硬性规定。

19、MySQL支持哪些存储引擎?
MySQL支持多种存储引擎,比如InnoDB,MyISAM,Memory,Archive等等.在大多数的情况下,直接选择使用InnoDB引擎都是最合适的,InnoDB也是MySQL的默认存储引擎.
InnoDB和MyISAM有什么区别?
InnoDB支持事物,而MyISAM不支持事物
InnoDB支持行级锁,而MyISAM支持表级锁
InnoDB支持MVCC, 而MyISAM不支持
InnoDB支持外键,而MyISAM不支持
InnoDB不支持全文索引,而MyISAM支持

20、谈谈你对hive 的优化

三、大数据

1.请描述一下hdfs写文件的过程
1、客户端访问NameNode,NameNode检查路径和权限,如果路径中有与要上传的文件重名的文件就不能上传了,不能覆盖,如果没有才创建,创建名为file.copying的临时文件;
2、NameNode触发副本放置策略,如果客户端在集群内的某一台机器,那么副本第一块放置在该服务器上,然后再另外挑两台服务器;如果在集群外,namenode会根据策略先找一个机架选出一个datanode,然后再从另外的机架选出另外两个datanode,然后namenode会将选出的三个datanode按距离组建一个顺序,然后将顺序返回给客户端;
3、客户端会根据返回的三个节点和第一个节点建立一个socket连接(只会和第一个节点建立),第一个节点又会和第二个节点建立socket连接,由第二个节点又会和第三个节点建立一个socket连接,这种连接的方式叫Pipeline;
4、客户端会将block切分成package(默认是64kB),以流式在pipeline中传输
好处:
   (1)速度快:时间线重叠(其实流式也是一种变异的并行);
   (2)客户端简单:副本的概念是透明的;
5、由DataNode完成接收block块后,block的metadata(MD5校验用)通过一个心跳将信息汇报给NameNode;
6、如果再pipeline传输中,任意节点失败,上游节点直接连接失败节点的下游节点继续传输,最终在第5步汇报后,NameNode会发现副本数不足,一定会出发DataNode复制更多副本,客户端Client副本透明;
7、client一直重复以上操作,逐一将block块上传,同时DataNode汇报block的位置信息,时间线重叠;
8、最终,如果NameNode收到了DataNode汇报的所有块的信息,将文件的.copying去掉,文件可用。
2.HBASE中compact用途是什么,什么时候触发,分为哪两种,有什么区别
在hbase中每当有memstore数据flush到磁盘之后,就形成一个storefile,当storeFile的数量达到一定程度后,就需要将 storefile 文件来进行 compaction 操作。
Compact 的作用:
1).合并文件
2).清除过期,多余版本的数据
3).提高读写数据的效率
HBase 中实现了两种 compaction 的方式:minor and major. 这两种 compaction 方式的区别是:
1、Minor 操作只用来做部分文件的合并操作以及包括 minVersion=0 并且设置 ttl 的过
期版本清理,不做任何删除数据、多版本数据的清理工作。
2、Major 操作是对 Region 下的HStore下的所有StoreFile执行合并操作,最终的结果是整理合并出一个文件。
3.Hbase 的特点是什么

  1. Hbase一个分布式的基于列式存储的数据库,基于Hadoop的hdfs存储,zookeeper进行管理。

  2. Hbase适合存储半结构化或非结构化数据,对于数据结构字段不够确定或者杂乱无章很难按一个概念去抽取的数据。

  3. Hbase为null的记录不会被存储.
    4)基于的表包含rowkey,时间戳,和列族。新写入数据时,时间戳更新,同时可以查询到以前的版本.

  4. hbase是主从架构。hmaster作为主节点,hregionserver作为从节点。
    4.Hbase的rowkey设计原则
    1.rowkey长度原则
    rowkey是一个二进制码流,可以是任意字符串,最大长度 64kb ,实际应用中一般为10-100bytes,以byte[] 形式保存,一般设计成定长,建议越短越好,不要超过16个字节
    2.rowkey散列原则
    如果rowkey按照时间戳的方式递增,不要将时间放在二进制码的前面,建议将rowkey的高位作为散列字段,由程序随机生成,低位放时间字段,这样将提高数据均衡分布在每个RegionServer,以实现负载均衡的几率。如果没有散列字段,首字段直接是时间信息,所有的数据都会集中在一个RegionServer上,这样在数据检索的时候负载会集中在个别的RegionServer上,造成热点问题,会降低查询效率
    3.rowkey唯一原则
    必须在设计上保证其唯一性,rowkey是按照字典顺序排序存储的,因此,设计rowkey的时候,要充分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。
    5.hive内部表与外部表的区别
    创建表时:创建内部表,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。
    删除表时:删除内部表时,内部表的元数据和数据会被一起删除掉;外部表只删除元数据,不删除数据。
    6.什么是数据倾斜?数据倾斜的原因有哪些?
    数据倾斜就是数据的分布不平衡,某些地方特别多,某些地方又特别少,导致在处理数据的时候,有些很快就处理完了,而有些又迟迟未能处理完,导致整体任务最终迟迟无法完成,这种现象就是数据倾斜。
    1)key分布不均匀;
    2)数据本身的特性,原本按照日期进行分区,如果在特定日期数据量剧增,就有可能造成倾斜;
    3)建表时考虑不周,分区设置不合理或者过少;
    4)某些 HQL 语句本身就容易产生数据倾斜,如 join。
    7.Hive分区和分桶区别
    Hive实际是存储在HDFS上的抽象,Hive的一个分区名对应一个目录名,子分区名就是子目录名,并不是一个实际字段,
    可以这样理解,当我们在插入数据的时候指定分区,其实就是新建一个目录或者子目录,或者在原有的目录上添加数据文件。
    分桶表是在表或者分区表的基础上,进一步对表进行组织,Hive使用对分桶所用的值进行hash,并用hash结果除以桶的个数做取余运算的方式来分桶,保证了每个桶中都有数据,但每个桶中的数据条数不一定相等。
    8.HDFS副本存放策略
    第一block在复制和client哪里node于(假设client它不是群集的范围内,则这第一个node是随机选取的。当然系统会尝试不选择哪些太满或者太忙的node)。
    第二个副本放置在与第一个节点不同的机架中的node中(随机选择)。
    第三个副本和第二个在同一个机架,随机放在不同的node中。
    9.HDFS中大量小文件带来的问题以及解决方法
    hadoop中目录,文件和块都会以对象的形式保存在namenode的内存中, 大概每个对象会占用150bytes. 小文件数量多会大量占用namenode的内存; 使namenode读取元数据速度变慢, 启动时间延长; 还因为占用内存过大, 导致gc时间增加等。
    解决办法:
    两个角度, 一是从根源解决小文件的产生, 二是解决不了就选择合并.
    从数据来源入手, 如每小时抽取一次改为每天抽取一次等方法来积累数据量.
    如果小文件无可避免, 一般就采用合并的方式解决. 可以写一个MR任务读取某个目录下的所有小文件, 并重写为一个大文件.
    10.HDFS的三个核心组件是什么, 有什么作用
    NameNode. 集群的核心, 是整个文件系统的管理节点. 维护着
    a) 文件系统的文件目录结构和元数据信息
    b) 文件与数据块列表的对应关系
    DataNode. 存放具体数据块的节点, 主要负责数据的读写, 定期向NameNode发送心跳
    SecondaryNameNode. 辅助节点, 同步NameNode中的元数据信息, 辅助NameNode对fsimage和editsLog进行合并.
    11.Kafka的设计是什么样的呢
    Kafka将消息以topic为单位进行归纳
    将向Kafka topic发布消息的程序成为producers.
    将预订topics并消费消息的程序成为consumer.
    Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker.
    producers通过网络将消息发送到Kafka集群,集群向消费者提供消息
    12.fsimage和edit的区别
    namenode与secondary namenode 组成了namenode的高可用,当他们要进行数据同步时叫做checkpoint时就用到了fsimage与edit,fsimage是保存最新的元数据的信息,当fsimage数据到一定的大小事会去生成一个新的文件来保存元数据的信息,这个新的文件就是edit,edit会回滚最新的数据。
    13.Sqoop的作用和使用
    sqoop的作用就是将关系型数据库中的某张表数据抽取到Hadoop的hdfs文件系统当中,底层运用的还是Map Reduce 。它利用MapReduce加快数据传输速度,批处理方式进行数据传输。也可以将HDFS上的文件数据或者是Hive表中的数据导出到关系型数据库中的某张表。
    14.HBase 宕机如何处理?
    宕机分为 HMaster 宕机和 HRegisoner 宕机.
    如果是 HRegisoner 宕机,HMaster 会将其所管理的 region 重新分布到其他活动的 RegionServer 上,由于数据和日志都持久在 HDFS 中,该操作不会导致数据丢失,所以数据的一致性和安全性是有保障的。
    如果是 HMaster 宕机, HMaster 没有单点问题, HBase 中可以启动多个HMaster,通过 Zookeeper 的 Master Election 机制保证总有一个 Master 运行。即ZooKeeper 会保证总会有一个 HMaster 在对外提供服务。
    15.ZooKeeper有哪些作用
    数据发布与订阅(配置中心)
    负载均衡
    命名服务(Naming Service)
    分布式通知/协调
    集群管理与Master选举
    分布式锁
    分布式队列
    16.Hive中Metastore的作用
    作为hive的元信息管理,元数据包含用Hive创建的database、table等的元信息。元数据存储在关系型数据库中。如Derby、MySQL等
    客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可
    17.spark的RDD怎么理解
    RDD 是 Spark 的灵魂,也称为弹性分布式数据集。一个 RDD 代表一个可以被分区的只读数据集。RDD 内部可以有许多分区(partitions),每个分区又拥有大量的记录(records)。Rdd的五个特征: 1. dependencies: 建立 RDD 的依赖关系,主要 RDD 之间是宽窄依赖的关系,具有窄依赖关系的 RDD 可以在同一个 stage 中进行计算。 2. partition: 一个 RDD 会有若干个分区,分区的大小决定了对这个 RDD 计算的粒度,每个 RDD 的分区的计算都在一个单独的任务中进行。 3. preferedlocations: 按照“移动数据不如移动计算”原则,在 Spark 进行任务调度的时候,优先将任务分配到数据块存储的位置。 4. compute: Spark 中的计算都是以分区为基本单位的,compute 函数只是对迭代器进行复合,并不保存单次计算的结果。 5. partitioner: 只存在于(K,V)类型的 RDD 中,非(K,V)类型的 partitioner 的值就是 None。
    RDD 的算子主要分成2类,action 和 transformation。这里的算子概念,可以理解成就是对数据集的变换。action 会触发真正的作业提交,而 transformation 算子是不会立即触发作业提交的。每一个 transformation 方法返回一个新的 RDD。只是某些 transformation 比较复杂,会包含多个子 transformation,因而会生成多个 RDD。这就是实际 RDD 个数比我们想象的多一些 的原因。通常是,当遇到 action 算子时会触发一个job的提交,然后反推回去看前面的 transformation 算子,进而形成一张有向无环图。
    18.什么是ETL
    ETL是Extracting-Transfroming-Loading的缩写,指从任何外部系统提取、转换、载入数据到目标地。这是数据集成过程的三大基本步骤。 Extracting:从源数据中提取目标数据集 Transfroming:将目标数据集进行业务逻辑转换 Loading:以合适的格式将经过业务逻辑转换的数据集载入到目标地。
    19.软件开发的一般流程
    需求确认—-概要设计——详细设计——编码——单元测试——集成测试——系统测试——上线——维护
    20.数据仓库的概念
    数据仓库(Data Warehouse) 是一个面向主题的(Subject Oriented) 、集成的( Integrate ) 、相对稳定的(Non -Volatile ) 、反映历史变化( Time Variant) 的数据集合用于支持管理决策。对于数据仓库的概念我们可以从两个层次予以理解,首先,数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;其次,数据仓库是对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。

    21、两个文件合并的问题
    给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
    主要的思想是把文件分开进行计算,在对每个文件进行对比,得出相同的URL,因为以上说是含有相同的URL所以不用考虑数据倾斜的问题。详细的解题思路为:
    可以估计每个文件的大小为5G*64=300G,远大于4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
    遍历文件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即可。
    比如对于a0 vs b0,我们可以遍历a0,将其中的url存储到hash_map当中。然后遍历b0,如果url在hash_map中,则说明此url在a和b中同时存在,保存到文件中即可。
    如果分成的小文件不均匀,导致有些小文件太大(比如大于2G),可以考虑将这些太大的小文件再按类似的方法分成小小文件即可

你可能感兴趣的:(大数据)