大数据_知识点
1、在系统内添加一块硬盘,划分成两个分区,并实现开机自动挂载。vmwareworkstation中添加一块硬盘,linux中lsblk -f查看添加的硬盘,通过fdisk /dev/硬盘 对添加硬盘进行分区,使用mkfs -t -ext4对分进行格式化,更改/etc/fstab文件进行挂载2、本地资源库配置流程上传光盘镜像并挂载,备份原repo文件,并复制其中任一份修改baseurl为file:/
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.大数据有什么特点?
- 海量化
数据量大(多)
- 多样化
结构化数据,半结构化数据,和非结构化数据
- 快速化
数据的增长速度快
- 高价值
海量数据价值高
123.hdfs的shell客户端操作命令分别代表什么意思?
- -ls 显示文件、目录信息
- -mkdir 在hdfs上创建目录,-p表示会创建路径中的各级父目录
- -put 将单个src或多个srcs从本地文件系统复制到目标文件系统
- -get 将文件复制到本地文件系统
- -appendFile 追加一个文件到已经存在的文件末尾
- -cat 显示文件内容
- -tail 将文件的最后的内容
- -chmod 改变文件的权限。使用-R将使改变在目录结构下递归进行
- -copyFromLocal 从本地文件系统中拷贝文件到hdfs路径去
- -copyToLocal 从hdfs拷贝到本地
- -cp 从hdfs的一个路径拷贝hdfs的另一个路径
- -mv 在hdfs目录中移动文件
- -rm 删除指定的文件。只删除非空目录和文件。-r 递归删除
- -df 统计文件系统的可用空间信息
- -du 显示目录中所有文件大小,当只指定一个文件时显示此文件的大小
124.大数据能做什么?
- 海量数据快速查询
- 海量数据的存储(数据量大,单个大文件)
- 海量数据的快速计算(与传统的工具对比)
- 海量数据实时计算(立刻马上)
- 数据挖掘(挖掘以前没有发现的有价值的数据)
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时需要配置的文件有哪些?
- hadoop-env.sh
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
- Slaves
131.首次启动 HDFS 时,必须对其进行格式化操作的命令?
bin/hdfs namenode -format或者bin/hadoop namenode –format
132.hadoop安装包目录包括哪些文件夹,各有什么作用?
- bin:Hadoop最基本的管理脚本和使用脚本的目录
- etc:Hadoop配置文件所在的目录
- include:对外提供的编程库头文件
- lib:该目录包含了Hadoop对外提供的编程动态库和静态库
- libexec:各个服务对用的shell配置文件所在的目录
- sbin:Hadoop管理脚本所在的目录
- share:Hadoop各个模块编译后的jar包所在的目录,官方自带示例
133.Hadoop 特性优点?
- 扩容能力
- 成本低
- 高效率
- 可靠性
134.Hadoop部署的方式分别是哪几种?
- Standalone mode(独立模式)
- Pseudo-Distributed mode(伪分布式模式)
- 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 在对外提供服务
更多推荐
所有评论(0)