1、在系统内添加一块硬盘,划分成两个分区,并实现开机自动挂载。

vmwareworkstation中添加一块硬盘,linux中lsblk -f查看添加的硬盘,通过fdisk /dev/硬盘 对添加硬盘进行分区,使用mkfs -t -ext4对分进行格式化,更改/etc/fstab文件进行挂载

 

2、本地资源库配置流程

上传光盘镜像并挂载,备份原repo文件,并复制其中任一份修改baseurl为file:///镜像挂载地址,关闭检查,enabled设置为1,修改name以及[]中内容

 

3、网络资源库配置流程

主节点关闭防火墙并设置为开机不自启,安装HTTPD,将镜像挂载或软链接至/var/www/html下  其他节点备份原repo文件,并复制其中任一份修改baseurl为http:/// IP+/var/www/html下挂载或软链接的文件名,关闭检查,enabled设置为1,修改name以及[]中内容

 

4、安装jdk

dk解压,/etc/profile.d下添加java.sh,根据位置添加环境变量,并source 通过whereis java查询到的位置,更换软链接

 

5、配置无密码访问

每台主机ssh-keygen创建公钥-私钥,各节点通过ssh-copy-id将公钥拷贝至主节点

 

6、配置静态IP

setup,找到网络管理选项,关闭DHCH,修改子网掩码,DNS,IP地址,路由IP

 

7、关闭防火墙,并开机不自启

service iptables stop    chkconfig iptables off

 

8、Crontab 每个*的含义

分 时 日 月 星期

 

9.怎么理解分布式?

 

分散

拆分

 

10.HDFS副本存放机制

 

第1个副本存放在客户端,如果客户端不在集群内,就在集群内随机挑选一个合适的节点进行存放;

第2个副本存放在与第1个副本同机架且不同节点,按照一定的规则挑选一个合适的节点进行存放;

第3个副本存放在与第1、2个副本不同机架且距第1个副本逻辑距离最短的机架,按照一定的规则挑选一个合适的节点进行存放;

11.Namenode作用

一:管理,维护文件系统的元数据/名字空间/目录树               管理数据与节点之间的映射关系(管理文件系统中每个文件/目录的block块信息),

二:管理DataNode汇报的心跳日志/报告

三:客户端和DataNode之间的桥梁(元数据信息共享)

 

12.DataNode作用

 

一:负责数据的读写操作

二:周期性的向NameNode汇报心跳日志/报告

三:执行数据流水线的复制

13.什么是机架感知?

 

通俗的来说就是nameNode通过读取我们的配置来配置各个节点所在的机架信息

 

14.什么时候会用到机架感知?

 

NameNode分配节点的时候   (数据的流水线复制和HDFS复制副本时)

 

15.HDFS数据写入流程?

 

1:Client 发起文件写入请求,通过 RPC 与 NameNode 建立通讯,NameNode检查目标文件,返回是否可以上传;

2:Client 请求第一个 block 该传输到哪些 DataNode 服务器上;

3:NameNode 根据副本数量和副本放置策略进行节点分配,返回DataNode节点,如:A,B,C

4:Client 请求A节点建立pipeline管道,A收到请求会继续调用B,然后B调用C,将整个pipeline管道建立完成,后逐级返回消息到Client;

5:Client收到A返回的消息之后开始往A上传第一个block块,block块被切分成64K的packet包不断的在pepiline管道里传递,从A到B,B到C进行复制存储

6:当一个 block块 传输完成之后,Client 再次请求 NameNode 上传第二个block块的存储节点,不断往复存储

7.当所有block块传输完成之后,Client调用FSDataOutputSteam的close方法关闭输出流,最后调用FileSystem的complete方法告知NameNode数据写入成功

 

16.HDFS数据读取流程?

 

1:Client 发起文件读取请求,通过 RPC 与 NameNode 建立通讯,NameNode检查目标文件,来确定请求文件 block块的位置信息

2:NameNode会视情况返回文件的部分或者全部block块列表,对于每个block块,NameNode 都会返回含有该 block副本的 DataNode 地址

3:这些返回的 DataNode 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后;

4:Client 选取排序靠前的 DataNode 调用FSDataInputSteam的read方法来读取 block块数据,如果客户端本身就是DataNode,那么将从本地直接获取block块数据

5:当读完一批的 block块后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的 block 列表,继续读取

6.所有block块读取完成后,Client调用FSDataInputStream.close()方法,关闭输入流,并将读取来所有的 block块合并成一个完整的最终文件

 

17.HDFS数据完整性如何保证?

 

数据写入完毕以后进行校验

数据读取之前进行校验

对比判断是否有数据丢失

 

NameNode会周期性的通过DataNode汇报的心跳信息中获取block块的校验和进行检查数据完整性,如果发现校验和不一致,会从其他副本节点复制数据进行恢复,从而保证数据的完整性

 

18.HDFS 特性?(适用场景:一次写入,多次读取)

 

1、海量数据存储

 

2、大文件存储

 

3.高容错性

a.数据自动保存多个副本;通过增加副本的形式,提高容错性

b.某一个副本丢失以后,可以自动恢复,这是由 HDFS 内部机制实现的

19.HDFS缺点?

 

1.不擅长低延时数据访问

由于hadoop针对高数据吞吐量做了优化,牺牲了获取数据的延迟,所以对于低延迟访问数据的业务需求不适合HDFS。

2.不擅长大量小文件存储

存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。

3.不支持多用户并发写入一个文本

同一时间内,只能有一个用户执行写操作

4.不支持文件随机修改(多次写入,一次读取)

仅支持数据末尾 append(追加),不支持文件的随机修改。

 

20.什么时候进入安全模式?

 

在集群重启(二次启动)的时候

人为进入

 

21.安全模式有什么特点?

 

安全模式中只能读取数据,不能修改数据(增、删、改)

 

22.在安全模式下集群在做什么?

 

在安全模式下集群在进行恢复元数据,即在合并fsimage和edits log,并且接受datanode的心跳信息,

恢复block的位置信息,将集群恢复到上次关机前的状态

 

23.如何进入/退出安全模式?

 

进入:hdfs dfsadmin -safemode enter

退出:hdfs dfsadmin -safemode leave

 

24.Fsimage 和 Edits 的作用是什么?

 

fsimage存储的是系统最近一次关机前的集群镜像,

edits是客户端对HDFS文件系统的所有操作日志

恢复集群到上次关机前的状态

 

25.什么时候会使用Fsimage Edits?

 

1.在集群二次启动时,会使用fsimage和edits合并进行恢复元数据

2.SecondayNameNode周期性的拉取fsimage和edits进行合并生成新的fsimage

 

26.SecondaryNamenode 的工作机制是什么?

NameNode创建一个Edits.new

SNN从NameNode节点拷贝Fsimage和Edits文件到SNN---->SNN将两个文件导入内存进行合并操作生成一个新的Fsimage.ckpt文件----->

SNN将新的Fsimage.ckpt发送到NameNode节点----->重命名为Fsimage替换原先的Fsimage---------->原先的Edits生成Edits.new文件--->

将Edits替换为新的Edits.new

27.SecondaryNamenode存在的意义是什么?

 

一:进行Fsimage和Edits的合并操作,减少edits日志大小,加快集群的启动速度

二:将Fsimage与Edits进行备份,防止丢失

 

28.SecondaryNamenode工作的触发因素有哪些?

 

1.时间维度,默认一小时触发一次   dfs.namenode.checkpoint.period :3600

2.次数维度,默认100万次触发一次 dfs.namenode.checkpoint.txns : 1000000

3、六十秒判断一次是否达到100W

 

29.使用SNN的FSimage和Edits还原Namenode流程是什么?

 

进入到SNN的数据存储文件夹----->将最新版本的Fsimage以及Edits拷贝至nameNode节点,放在NN节点相应的配置目录下----->重启集群

 

30.集群扩容1     新节点需要做哪些准备?

 

1.配置JDK

2.配置SSH免密钥

3.关闭防火墙

4.关闭selinux

5.修改主机名

6.修改hosts

 

31.集群扩容2     集群添加一个节点的流程?

 

*   在配置文件目录添加dfs.hosts白名单文件,文件中加入包括新增节点在内的所有节点

*  在hdfs.site.xml中配置白名单文件生效

<property>

<name>dfs.hosts</name>

<value>/export/install/hadoop-2.6.0-cdh5.14.0/etc/hadoop/dfs.hosts</value>

</property>

 

*  配置slaves文件,将新增节点加入

*  刷新hdfs和yarn

hdfs dfsadmin -refreshNodes

yarn rmadmin -refreshNodes

 

*  新节点开启相应服务

 

浏览WEB界面

 

32.如何合并小文件?

 

HDFS -> local    :hadoop fs -getmerge  小文件目录   下载的目录

local -> HDFS   :  遍历所有的已有小文件追加到一个文件中,再上传(文件不在HDFS)

 

33.设置 开启权限控制的key是什么?

 

dfs.permissions

 

34.使用java API 在hdfs创建一个全新的目录的过程是?

 

//实例Configuration

Configuration configuration = new Configuration();

//实例文件系统

FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.100.88:8082"),configuration);

//使用文件系统对象调用mkdirs(相应的API )

boolean mkdirs = fileSystem.mkdirs(new Path("目录路径"));

35.MapReduce核心思想

分而治之,先分后合

 

36.偏移量

指的是每行行首到首行行首的距离

 

37.Suffle包含哪些步骤

宏观层面:

1.分区

2.排序

3.Combiner(局部聚合)

4.分组

 

38.MR从读取数据开始到将最终结果写入HDFS经过哪些步骤

第一步:InputFormat

InputFormat 在HDFS文件系统中读取要进行计算的数据

输出给Split

第二步:Split

Split 将数据进行逻辑切分,切分成多个任务。

输出给RR

第三步:RR

RR 将切分后的数据转换成key value进行输出

key : 每一行行首字母的偏移量

value: 每一行数据

输出给Map

第四步:Map

接收一条一条的数据(有多少行数据Map运行多少次,输出的次数根据实际业务需求而定)

根域业务需求编写代码

Map的输出是 key value的 list

输出给Shuffle(partition)

---------------------------------------Map---------------------------------

第五步: partition

partition: 按照一定的规则对 **key value的 list进行分区

输出给Shuffle(sort)

第六步:Sort

Sort :对每个分区内的数据进行排序。

输出给Shuffle(Combiner)

第七步:Combiner

Combiner: 在Map端进行局部聚合(汇总)

目的是为了减少网络带宽的开销

输出给Shuffle(Group)

第八步:Group

Group: 将相同key的key提取出来作为唯一的key

将相同key对应的value提取出来组装成一个value 的List

输出给Shuffle(reduce)

------------------------------------Shuffle--------------------------------

第九步:reduce

reduce: 根据业务需求对传入的数据进行汇总计算。

输出给Shuffle(outputFormat)

第十步:outputFormat

outputFormat:将最终的额结果写入HDFS

------------------------------------reduce---------------------------------

 

39.如何设置ReduceTask的数量

在驱动类中添加  setNumReduceTasks

 

40.combiner的作用

局部聚合,以此减少网络开销

 

41.combiner运行在MapReduce的哪一端?

Map端

 

42.Maptask的数量是可以人为设置的吗?

不可以,MapTask数量决定数据,一般就是所有输入文件的总块数(block)

 

43.Shuffle阶段的Partition分区算法是什么

hashPartition,对Map输出的key进行hash,然后和reduce task进行取模运算

 

 

44.Split逻辑切分数据,节分大小是多大?

128M,默认一个block块对应一个split切片

 

 

45.内存角度介绍Map的输出到Reduce的输入的过程。

1.map不断向内存中的环形缓存区输出数据,在此过程中会使用hashpartition算出分区;

2.当环形缓存区中的数据达到默认的0.8阈值时,锁定这0.8的数据,进行排序和combiner,开启溢写,将数据flush到磁盘生成临时文件,当临时文件达到4个时进行merge合并

,在此过程中,剩下的0.2剩余空间继续接收map输出的数据,此过程同时进行,互不影响

3.当map输出完成后会对本地的临时文件进行merge合并,然后等待reduce拉取

4.reduce task通过http从map task拉取属于自己分区的数据到内存中,到达0.8阈值时,锁定这0.8的数据,进行一次排序,开启溢写,

  将数据flush到磁盘生成临时文件,当临时文件达到4个时进行merge合并

5.归并排序所有文件,发送给reduce

 

46.最优的Map效率是什么?

尽量减少环形缓冲区flush的次数(减少磁盘IO的使用次数)

如何能够减少环形缓冲区flush的次数:

1、增大环形缓冲区的内存大小

2、增大环形缓冲区阈值的大小 (考虑剩余的空间是不是够系统使用)

3、对输出数据的进行压缩(压缩-解压的过程会消耗CPU)

 

47.最优的reduce是什么?

尽量减少环形缓冲区flush的次数,尽量将所有的数据在内存中计算

 

 

48.在MR阶段,有哪些优化的点?(至少两个点)

 软件层面【系统软件和集群软件】,硬件层面,网络层面

 1、加大环形缓冲区的内存

 2、增大缓冲区阈值的大小 (考虑剩余的空间是不是够系统使用)

 3、对输出的进行压缩(压缩-解压的过程会消耗CPU)

 

49.集群优化的核心思路是什么?

所有能够减少网络带宽的开销、减少磁盘io的使用的次数的配置项,都是集群调优的可选项。

 

50、什么是Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)

 

51、Hive的意义(最初研发的原因)

避免了去写MapReduce,提供快速开发的能力,减少开发人员的学习成本。

 

52、Hive的内部组成模块,作用分别是什么

 

2.元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;

默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore

 

   (1)解析器(SQL Parser):解析HQL语义

   (2)编译器(Physical Plan):将HQL根据语义转换成MR程序

   (3)优化器(Query Optimizer):对MR程序进行优化

   (4)执行器(Execution):把MR任务提交到hadoop集群

 

53、Hive支持的文件格式

可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE等

 

54、进入Hiveshell窗口的方式

1.hive

2. 启动服务 hiveserver2

beeline

! connect jdbc:hive2://主机名:10000

 

55、Hive数据库、表在HDFS上存储的路径是什么

/user/hive/warehouse

 

56、like与rlike的区别

like的内容不是正则,而是通配符。

rlike的内容可以是正则,正则写法与Java一样。

 

57、内部表与外部表的区别

删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

 

58、分区表的优点是,分区字段的要求是

优点:提高指定分区查询分析的效率

分区字段的要求:分区字段不能出现在表中已有的字段内

 

59、分桶表的优点是,分桶字段的要求是

优点:使取样(sampling)和join 更高效

分桶字段的要求:分桶字段必须是表中已有的字段

 

60、数据导入表的方式

1.直接向表中插入数据

insert into table 表名 values (数据);

2.通过load方式加载数据

覆盖:

load data local inpath '本地数据路径' overwrite into table 表名 partition(分区字段='值');

load data  inpath 'HDFS数据路径' overwrite into table 表名 partition(分区字段='值');

添加:

load data local inpath '本地数据路径'  into table 表名 partition(分区字段='值');

load data  inpath 'HDFS数据路径'  into table 表名 partition(分区字段='值');

3.通过查询插入数据

insert overwrite table 表名1 partition(分区字段='值') select 指定字段 from 表名2;

4.多插入模式

from 原始表

insert overwrite table 被插入表1 partition(分区字段='值'') select 指定字段

insert overwrite table 被插入表2 partition(分区字段='值')  select 指定字段;

5.查询语句中创建表并加载数据

create table 表1 as select 指定字段 from 表2;

6.创建表时通过location指定加载数据路径

create external table 表1 (表1字段...) row format delimited fields terminated by '分隔符' location 'HDFS路径';

 

61、数据导出表的方式

1.将查询的结果导出到本地

insert overwrite local directory '本地路径' select 指定字段 from 表名;

2.将查询的结果格式化导出到本地

insert overwrite local directory '本地路径' row format delimited fields terminated by '分隔符' collection items terminated by '分隔符' select 指定字段 from 表名;

3.将查询的结果格式化导出到HDFS

insert overwrite local directory '本地路径' row format delimited fields terminated by '分隔符' collection items terminated by '分隔符' select 指定字段 from 表名;

4.Hadoop命令导出到本地

dfs -get /export/servers/exporthive/000000_0 /export/servers/exporthive/local.txt;

dfs -get 表中数据在HDFS上的存储位置 本地路径;

5.hive shell 命令导出

hive -e "select * from myhive.score;" > /export/servers/exporthive/score.txt

hive -e "select 指定字段 from 表名;" > 本地路径;

6.export导出到HDFS上

export table score to '/export/exporthive/score';

export table 表名 to '本地路径';

7.Sqoop导出数据

 

 

62、order by与sort by的区别

order by 是全局排序,而 sort by 是局部分区内部进行排序

 

63、where 与 having的区别

1.where是作用在表的所有字段,having是作用在查询的字段上。

2.在where子句中不能使用聚合函数,在having语句中可以使用聚合函数

 

64、distribute by何时使用,通常与哪个联合使用

按照指定的字段进行分区时,对数据进行分区时使用

通常和sort by联合使用,Hive要求distribute by语句要写在sort by语句之前

 

65、Cluster by何时使用

要根据某个字段进行分区,并且以这个字段进行排序时使用Cluster by

 

66、distribute by+sort by(相同字段) 与Cluster by的区别

 cluster by 的结果有限制,只能正序排列,而 distribute by+sort by 可根据需求进行排序

 

67、hive -e/-f/-hiveconf分别是什么意思

hive -e 后面的参数是‘命令行’

hive -f 后面的参数是文件

hive -hiveconf 设置hive运行时候的参数配置

 

 

68、hive声明参数有哪些方式,优先级是什么

配置文件(配置文件参数)

hive -hiveconf (命令行参数)

在hive的shell窗口set(参数声明)

 

参数声明>命令行参数>配置文件参数

 

69、编写hiveUDF代码,方法名称叫什么

evaluate

 

70、企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?

在实际的项目开发当中,hive表的数据存储格式一般选择:orc或parquet。压缩方式一般选择snappy。

 

71、hive自定义函数的类型

1.UDF(User-Defined-Function) 一进一出

2.UDAF(User- Defined Aggregation Funcation) 聚集函数,多进一出。Count/max/min

3.UDTF(User-Defined Table-Generating Functions) 一进多出,如lateral view explore)

 

72、Fetch抓取中

设置more有什么效果

执行某些查询语句,不会执行mapreduce程序

 

设置none有什么效果

执行查询语句,所有的查询都会执行mapreduce程序

   

73、本地模式有什么好处

在数据量较小时,提高查询效率

原因:

查询数据的程序运行在提交查询语句的节点上运行(不提交到集群上运行),

 

74、当一个key数据过大导致数据倾斜时,如何处理

当发生数据倾斜时,使用局部聚和可以起到性能调优的效果(在Map端进行聚合)

当发生倾斜时,查询语句会转化成至少两个MR程序,第一个程序进行局部聚和,第二个MR程序进行最终聚和。

 

75、Count(distinct) 的替换语句如何编写

使用嵌套查询

例:

select count(distinct id) from score;

转|换

select count(id) from (select id from score group by id) a;

 

76、如何使用分区剪裁、列剪裁

什么是分区剪裁:需要哪个分区,就获取哪个分区的数据

什么是列剪裁:需要哪个列,就获取哪个列的数据

 

77、如何理解动态分区调整

以第一个表的分区规则,来对应第二个表的分区规则,将第一个表的所有分区,全部拷贝到第二个表中来,第二个表在加载数据的时候,不需要指定分区了,直接用第一个表的分区即可

 

 

78、数据倾斜时,如何将众多数据写入10个文件

1.设置reduce数量10,使用id,对id进行分区distribute by

2.设置reduce数量10,然后使用 distribute by rand()

rand字段为随机数 ,从而随机的将数据写入到文件中

 

79、reduce数量的计算是什么

决定reduce数量的因素,

参数1:每个Reduce处理的最大数据量

参数2:每个任务最大的reduce数

计算reducer数的公式

N=min(参数2,总输入数据量/参数1)

 

80、并行执行有什么好处

在没有依赖的前提下,开启并行执行(多任务多阶段同时执行),从而起到优化执行效率的作用

 

81、严格模式不能执行哪些命令

1、用户不允许扫描所有分区

2、使用了order by语句的查询,要求必须使用limit语句

3、限制笛卡尔积的查询

 

82、JVM重用有什么好处

重复利用JVM,以减少JVM开启和关闭的次数,减少任务开销,提高效率

 

83、什么是MR本地计算

数据存储后,计算这批数据的程序已经写完,程序在进行分发时,优先将程序分发到程序所用到数据所在的节点。

 

84、先join后过滤的优化方案

 

 先过滤后关联(join)

 

例如

SELECT a.id   FROM bigtable a   LEFT **JOIN ori b ON a.id = b.id**   WHERE **b.id <= 10;**

优化方案

1、SELECT a.id   FROM ori    LEFT JOIN bigtable b ON **(b.id <= 1**0 AND **a.id = b.id**);

2、SELECT a.id   FROM bigtable a    RIGHT JOIN (

       SELECT id   FROM ori  WHERE id <= 10

       ) b ON a.id = b.id;

 

 

85、影响Map数量的因素

当文件大小很小时,影响map的数量的因素是文件的个数

当文件大小很大时,影响map的数量的因素是数据块的数量

 

86、什么是MR本地模式

任务提交时,运行在提交HQl 所在的节点,不提交到集群。(本地计算提交到集群。本地模式不提交到集群)

 

87.HBase的基本介绍

a.Hbase是建立在hdfs之上的一个数据库,

b.不支持join等SQL复杂操作

c.支持的数据类型:byte[],

d.依靠横向扩展,一个表可以有上十亿行,上百万列。

e.面向列(族)的存储和权限控制

f.对于为空(null)的列,并不占用存储空间,是一个稀疏表。

 

 

88.HBASE的适用场景

海量数据、精确查询、快速返回

海量数据:指的是数据量的背景

精确查询:业务场景

快速返回:是业务对时效性的要求

 

 

89.Hbase和Hadoop之间的关系

HDFS:

海量数据存储,适合一次性扫描大量数据。

适合一次写入多次读取

不适合频繁更新的数据

 

HBASE:

适用一次扫描少量数据。

适合多次写入多次读取

支持数据更新

支持删除数据

 

 

90.Hbase与RDBMS的关系

RDBMS :

支持SQL查询

支持事务

支持Join

 

HBASE :

不支持SQL查询

不支持事务

不支持Join

 

 

91. Hbase详细架构

Client:

访问数据的入口,包含访问hbase的API接口,维护着一些cache来加快对hbase的访问

 

Zookeeper:

1.zookeeper的选举机制保证任何时候,集群中只有一个master

2.实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master

3.存储Hbase的schema

4.存贮所有Region的寻址入口

 

Master:

1.为Region server分配region

2.负责region server的负载均衡

3.发现失效的region server并重新分配其上的region

4.处理schema(元数据)更新请求

  说明:Hmaster短时间下线,hbase集群依然可用,长时间不行。

 

Region server:

1.Region server维护Master分配给它的region,处理对这些region的IO请求

2.Region server负责切分在运行过程中变得过大的region

 

 

92.列族Column Family

列族是表的schema的一部分,而列不是。(schema包含表名和列族)

每个列都所属于某一个列族。一个列族可以包含多个列。一个列族与列的关系是一对多。

 

 

93.时间戳

标记一个数据的不同版本,时间戳可以由hbase(在数据写入时自动 )赋值,hbase支持工程师自己定义时间戳。每个 cell中,不同版本的数据按照时间倒序排序

 

 

94.hbase本身提供数据回收机制

1.保存数据的最后n个版本

2.保存最近一段时间内的版本

 

 

95. Cell

存储数据的最小单位,由{row key, column( = + ), version} 唯一确定的单元确定一个精确的数据

 

 

95.VersionNum

数据的版本号,默认值为系统时间戳。

 

97. hbase物理存储

1.一个regionserver内部可以有多个region,这多个region可能来自多个表或一个表。一个region只能属于一个 regionserver.

2.一个regionserver只有一个HLog

3.一个region里面可以有多个store

4.一个store里面有一个memstore与0个或多个storeFile

5. storeFile的数据类型为HFile

 

 

98.rtegion的切分

region按大小分割的(默认10G)。每个表一开始只有一个region,随着数据的增加,一个region逐渐变大,达到 10G,进行分裂,等分成两个region.

 

 

99. Memstore与storefile

一个region由多个store组成,每个store包含一个列族的所有数据 Store包括位于内存的memstore和位于硬盘的 storefile

客户端检索数据时,先在memstore找,找不到再找storefile

 

 

100.HLog(WAL log)

保证数据完整性

每个Region Server维护一个Hlog,而不是每个Region一个.

 

101.Hlog的切分机制

1.当数据写入hlog以后,hbase发生异常。关闭当前的hlog文件

2.当日志的大小达到HDFS数据块的0.95倍的时候,关闭当前日志,生成新的日志

3.每隔一小时生成一个新的日志文件

 

 

102.HBase的特征

1.海量存储:Hbase适合存储PB级别的海量数据,在几十到百毫秒内返回数据。

2.列式存储:这里的列式存储其实说的是列族存储列族理论上可以很多,但实际上建议不要超过6个

3.极易扩展:处理能力(RegionServer)的扩展,是基于存储的扩展(HDFS)

hbase在最初设计的时候就考虑了扩展性。

4.稀疏:在列数据为空的情况下,是不会占用存储空间的。

 

103. hbase写请求过程

1.Client先访问zookeeper,找到Meta表,并获取Meta表元数据。确定当前将要写入的数据所对应的HRegion和 HRegionServer服务器。

2.Client向该HRegionServer服务器发起写入数据请求。

3.Client先把数据写入到HLog,以防止数据丢失,然后将数据写入到Memstore。   

4.Memstore达到阈值,会把Memstore中的数据flush到Storefile中

5.当Storefile越来越多,达到一定数量时,会触发Compact合并操作,将多个小文件合并成一个大文件。

6.Storefile越来越大,Region也会越来越大,达到阈值后,会触发Split操作,变成两个文件。

 

说明:hbasez 支持数据修改(伪修改),实际上是相同rowkey数据的添加。hbase只显示最后一次的添加

 

104.hbase读的过程

1、首先Client先去访问zookeeper,从zookeeper里面获取meta表所在的位置信息

2、Client通过刚才获取到的IP来访问Meta,读取Meta内的数据,

3、Client通过元数据(meta表内的数据)中存储的信息,找到region在哪个HRegionServer ,访问对应的 HRegionServer读取数据

 

 

 

105. region的分配过程

前提:一个region只能分配给一个region server

 

1.master记录了当前有哪些可用的region server。以及当前哪些region分配给了哪些region server,哪些region还没有分配。

2.当需要分配的新的region,并且有一个region server上有可用空间时,master就给这个region server发送一个装载请求,把region分配给这个region server。

3.region server得到请求后,就开始对此region提供服务。

 

 

106. region server上线

前提:master使用zookeeper来跟踪region server状态。

 

1.当某个region server启动时,首先在zookeeper上的/hbase/rs目录下建立代表自己的znode。

2.master订阅了/hbase/rs目录上的变更消息,当/hbase/rs目录下的文件出现新增或删除操作时,master可以得到来自zookeeper的实时通知。因此一旦region server上线,master能马上得到消息

 

 

107.region server下线

前提:master使用zookeeper来跟踪region server状态。

 

1.当region server下线时,它和zookeeper的会话断开。

2.zookeeper而自动释放代表这台server的文件上的独占锁(znode)

3.zookeeper将变化发送给master

4.master 将挂掉的region server的region分配给其它还活着的regionserver

 

 

108.Hmaster的上线

前提:hbase集群中可以设置多个Hmaster,真正对外提供服务的只有一个

 

1.从zookeeper上获取唯一 一个代表active master的锁,用来阻止其它master成为真正的master。

2.扫描zookeeper上的/hbase/rs节点,获得当前可用的region server列表。

3.master和每个region server通信,获得当前已分配的region和region server的对应关系。 4.master扫描.META.表,计算得到当前还未分配的region,将他们放入待分配region列表。

 

 

 

109.Hmaster下线后的影响

master只维护表和region的元数据,不参与表数据IO的过程,所以master下线短时间内对整个hbase集群没有影响。表的数据读写还可以正常进行。

无法创建删除表,无法修改表的schema,无法进行region的负载均衡,无法处理region 上下线,无法进行region的 合并(region的split可以正常进行) 当hmaster下线后,启动Zookeeper的选举机制,选出新的Hmaster,新的Hmaster上线,执行上线流程。

 

 

110.flush机制

全局的memstore的flush机制默认为堆总大小(多个memstore 多个region)的40%,超过该大小会触发flush到磁盘的操作,会阻塞客户端读写,flush将所有的memstore全部flush.

单个的memstore默认为数据达到128M或1h将会flush.

 

hbase不建议配置过多列族:过多的列族会消耗大量的内存,同时数据在flush时消耗磁盘IO. 一个regionserver续写操作可用堆内存的80%,读取占用40% ,写入占用40%。这两个参数直接影响hbase读写性能。

 

 

111.compact机制

默认3个小的storeFile文件达到三个,合并成大的Storefile文件。

 

 

112.split机制

默认一个HFile达到10G的时候就会进行切分

 

 

113.hbase预分区的优点

1.增加数据读写效率:数据分布在多台regionserver节点

2.负载均衡,防止数据倾斜:当数据时离散的发送时,预分区可以解决数据倾斜

3.方便集群调度region: 分布在多个节点便于调度

 

 

114.rowKey的获取方式

1.通过rowkey直接查找

2.通过startkey endkey 范围查找

3.全表扫描

 

 

115.rowkey

最大长度是 64KB,完全可以自行设计。Hbase会对表中的数据按照rowkey排序(字典序),建议越短越好(在保证业务需求的前提下),不要超过16个字节.

 

 

116.rowkey散列原则

建议将rowkey的高位(左边)作为散列字段, 低位(右边)放时间字段,这样将提高数据均衡分布在每个 RegionServer,以实现负载均衡的几率。

 

若不按照此原则:

让时间戳作为高位,数据将按照时间的顺序进行存储可能会引发热点问题

 

 

117.什么是热点问题

让时间戳作为高位得前提下,有一点时间业务数据爆炸增长时,这个阶段的数据将存储在少数的节点上。

 

举例:如果以手机号为高位数据什么样的情况下会出现热点问题?

 

 

118.如何解决热点问题

原则:将分散的数据,放在rowkey的高位

 

1.哈希(随机数):将哈希值放在高位

2.反转:反转固定长度或者数字格式的数据(时间戳反转、手机号反转,订单号反转)

3.加盐:本质时是加随机数,并且放在高位。

 

 

119.Impala与Hive关系

impala 使用hive的元数据库metadata.

兼容hive的绝大多数sql语法,若要使用impala 必须启动hive的metastore服务。

 

120.impala 基本介绍

impala 是一个SQL查询工具,提供实时的查询。基于hive并使用内存进行计算,兼顾数据仓库。

121.Hadoop为什么比传统技术方案快

1、分布式存储

2、分布式并行计算

3、节点横向扩展

4、移动程序到数据端

5、多个数据副本

122.大数据有什么特点?

  1. 海量化

数据量大(多)

  1. 多样化

结构化数据,半结构化数据,和非结构化数据

  1. 快速化

数据的增长速度快

  1. 高价值

海量数据价值高

123.hdfs的shell客户端操作命令分别代表什么意思?

  1. -ls  显示文件、目录信息
  2. -mkdir 在hdfs上创建目录,-p表示会创建路径中的各级父目录
  3. -put 将单个src或多个srcs从本地文件系统复制到目标文件系统
  4. -get 将文件复制到本地文件系统
  5. -appendFile 追加一个文件到已经存在的文件末尾
  6. -cat 显示文件内容
  7. -tail 将文件的最后的内容
  8. -chmod 改变文件的权限。使用-R将使改变在目录结构下递归进行
  9. -copyFromLocal 从本地文件系统中拷贝文件到hdfs路径去
  10. -copyToLocal 从hdfs拷贝到本地
  11. -cp 从hdfs的一个路径拷贝hdfs的另一个路径
  12. -mv 在hdfs目录中移动文件
  13. -rm 删除指定的文件。只删除非空目录和文件。-r 递归删除
  14. -df 统计文件系统的可用空间信息
  15. -du  显示目录中所有文件大小,当只指定一个文件时显示此文件的大小

 

124.大数据能做什么?

  1. 海量数据快速查询
  2. 海量数据的存储(数据量大,单个大文件)
  3. 海量数据的快速计算(与传统的工具对比)
  4. 海量数据实时计算(立刻马上)
  5. 数据挖掘(挖掘以前没有发现的有价值的数据)

125.hdfs的主要功能什么?

Hdfs的主要功能作用是分布式存储大量的数据

 

126.hadoop的垃圾桶机制在哪一个文件中配置的?

core-site.xml文件中配置

127.垃圾桶配置参数是什么?

fs.trash.interval

128.启动jobHistoryserver服务进程的命令?

mr-jobhistory-daemon.sh start historyserver 启动

mr-jobhistory-daemon.sh stop historyserver 关闭

129.jobhistoryserver的webUI访问的默认端口是什么?

默认端口是19888

130.安装hadoop时需要配置的文件有哪些?

  1. hadoop-env.sh
  2. core-site.xml
  3. hdfs-site.xml
  4. mapred-site.xml
  5. yarn-site.xml
  6. Slaves

131.首次启动 HDFS 时,必须对其进行格式化操作的命令?

bin/hdfs namenode  -format或者bin/hadoop namenode –format

132.hadoop安装包目录包括哪些文件夹,各有什么作用?

  1. bin:Hadoop最基本的管理脚本和使用脚本的目录
  2. etc:Hadoop配置文件所在的目录
  3. include:对外提供的编程库头文件
  4. lib:该目录包含了Hadoop对外提供的编程动态库和静态库
  5. libexec:各个服务对用的shell配置文件所在的目录
  6. sbin:Hadoop管理脚本所在的目录
  7. share:Hadoop各个模块编译后的jar包所在的目录,官方自带示例

133.Hadoop 特性优点?

  1. 扩容能力
  2. 成本低
  3. 高效率
  4. 可靠性

134.Hadoop部署的方式分别是哪几种?

  1. Standalone mode(独立模式)
  2. Pseudo-Distributed mode(伪分布式模式)
  3. Cluster mode(群集模式)

135.网络同步时间的命令?

ntpdate cn.pool.ntp.org(ntpdate 地址)

136.设置主机名在哪一个文件中?

/etc/sysconfig/network

137.配置IP、主机名映射的文件是哪一个?

/etc/hosts

138.启动HDFS NameNode的命令?

hadoop-daemon.sh start namenode

139.单节点启动HDFS DataNode

hadoop-daemon.sh start datanode

140.单节点启动YARN ResourceManager?

yarn-daemon.sh  start resourcemanager

 

141.HDFS集群的一键启动和关闭脚本命令分别是什么?

start-dfs.sh启动脚本   stop-dfs.sh 停止脚本

143.简单概述hadoop的combinet与partition的区别

combine和partition都是函数,中间的步骤应该只有shuffle! combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义的,partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。这里其实可以理解归类。

144. HBase依赖什么提供消息通信机制

Zookeeper

145.请详细描述Hbase中一个Cell 的结构

HBase 中通过row 和columns 确定的为一个存贮单元称为cell。Cell:由{row key, column(=<family> + <label>), version}唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。

 

146.hbase中compact触发时机

1)、Memstore刷写后,判断是否compaction

2)、CompactionChecker线程,周期轮询

147.hbase与mysql的区别

Mysql面向行存储数据,整个行的数据是一个整体,存储在一起

Hbase面向列存储数据,整个行的数据是一个整体,存储在一起,有利于压缩和统计

148.hbase的compact作用

1.合并文件

2.清理过期数据

3.提高读写数据的效率

149.大数据的处理流程

数据生产 --》数据采集 --》数据存储 --》需求分析 --》数据预处理 --》数据计算 --》结果数据存储 --》结果数据展现

 

150.Hbase宕机如何处理

宕机分为 HMaster 宕机和 HRegisoner 宕机,如果是 HRegisoner 宕机,HMaster 会将其所管理的 region 重新分布到其他活动的 RegionServer 上,由于数据和日志都持久在 HDFS 中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。如果是 HMaster 宕机, HMaster 没有单点问题, HBase 中可以启动多个HMaster,通过 Zookeeper 的 Master Election 机制保证总有一个 Master 运行。即ZooKeeper 会保证总会有一个 HMaster 在对外提供服务

Logo

更多推荐