hadoop
1.平台问题
Apachehadoop:Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架。它支持在商品硬件构建的大型集群上运行的应用程序。Hadoop是根据Google公司发表的MapReduce和Google档案系统的论文自行实作而成。称为社区版Hadoop。
第三方发行版Hadoop:Hadoop遵从Apache开源协议,用户可以免费地任意使用和修改Hadoop,也正因此,市面上出现了很多Hadoop版本。其中有很多厂家在Apache Hadoop的基础上开发自己的Hadoop产品,比如Cloudera的CDH,Hortonworks的HDP,MapR的MapR产品等。
2.hive执行底层原理:

hive执行group by的过程: 会在map阶段先预group by 一次:

hive执行join的过程:
map阶段没做啥,分块,生成key值
shuffle:根据key值重新分布
reduce:关联,汇总,计算

3. hive架构:

hdfs架构:

NameNode(nn):也就是Master,它是一个主管、管理者。使用NameNode存储元数据信息,保存文件名以及文件的块(Block)存储在哪些DataNode中。每个存活的DataNode定时向NameNode发送心跳信息,如果未收到DataNode的心跳,NameNode将认定其已失效,不再向其派发任何文件读请求。NameNode会将失效的DataNode中的块(Block)备份到其他存活的DataNode中。简单来说就是:
(1)管理HDFS的名称空间;
(2)配置副本策略;
(3)管理数据块(Block) 映射信息;
(4)处理客户端读写请求。
DataNode:就是Slave,NameNode下达命令,DataNode执行实际操作。
(1)存储实际的数据块
(2)执行数据块的读/写操作
Client:就是客户端。
(1)文件切分。文件上传HDFS的时候, Client将文件切分成一 个个的Block, 然后进行上传
(2)与NameNode交互,获取文件的位置信息
(3)与DataNode交互,读取或者写入数据
(4)Client提供一 些命 令来管理HDFS,比如NameNode格式化
(5)Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作
Secondany NameNode:并非NameNode的热备。当NameNode挂掉的时候, 它并不能马上替换NameNode并提供服务。
(1)辅助NameNode,分担其工作量,比如定期台并fsimage和edits,并推送给NameNode ;
(2)在紧急情况下,可辅助恢复NameNode
4.hive和spark区别:

5.hive存储格式的区别:
行式存储和列式存储:

textfile,seq,rcfile区别:

6.内部表和外部表的区别:
同为hive使用,那就内部表即可。


外部表加参数使之可以使用drop table 删除: 'external.table.purge'='true'
7.hive的几种排序方式:

sort by 和cluster by 实际案例:
在sort by之前我们还有配置属性:
setmapreduce.job.reduces=2;//配置两个ruduce默认一个,不然sort by是没有用处的。
select* from zxz_5 sort by nid ,year(ntime)desc;
select * from zxz_5 z cluster by z.nid ;
(同似select * from zxz_5 z distribute by z.nid sort by z.nid ;)
cluster by :
虽然简便些但却剥夺了sort的并行性,使他只能和distribute by 一样的列。但是可以实现输出文件的数据全排序
8.hive的执行计划

9.hive的job数是怎么确定的

10.mapreduce原理:
总结如下:


1.有一个待处理的大数据,被划分为大小相同的数据块(如64MB),及与此相应的用户作业程序
2.系统中有一个负责调度的主节点(Master),以及数据Map和Reduce工作节点(Worker)
3.用户作业程序提交给主节点
4.主节点为作业程序寻找和配备可用的Map节点,并将程序传送
5.主节点也为作业程序寻找和配备可用的Reduce节点,并将程序传送给Reduce节点
6.主节点启动每个Map节点执行程序,每个map节点尽可能读取本地或本机架的数据进行 计算
7.每个Map节点处理读取的数据块,并做一些数据整理工作( combining ,sorting等)并将中间结果存放在本地;同时通知主节点计算任务完成并告知中间结果数据存储位置
8.主节点等所有Map节点计算完成后,开始启动Reduce节点运行;Reduce节点从主节点所掌握的中间结果数据位置信息,远程读取这些数据
9.Reduce节点计算结果汇总输出到一个结果文件即获得整个处理结果:
11.控制hive任务中的map数

合并小文件:


如果文件记录数多,计算处理复杂,把大文件拆分为小文件计算:

11-2 控制hive任务中的reduce数:


12.map join 和 reduce job 的区别:




12. hive和关系型数据库的区别,如oracle,mpp:
由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处。本文将从多个方面来阐述Hive和数据库的差异。数据库可以用在Online的应用中,但是Hive是为数据仓库而设计的,清楚这一点,有助于从应用角度理解Hive的特性。

oracle和mpp区别:
-1.查询速度

-2.
gp主要特性:

13.hive优化
1.hive数据倾斜解析:

各个场景详解:
group by , join(大小表,大大表),where,count(distinct),join(数据类型)


mapjoin参数开启:
Hive v0.12.0版本,
缺省状况下MapJoin优化是打开的,也就是hive.auto.convert.join=true。Hive还提供另外一个参数:表文件的大小作为开启和关闭MapJoin的阈值:hive.mapjoin.smalltable.filesize=25000000;

随机数处理:

2.降低io , 连接优化, 桶表优化:

连接优化:

桶表优化原理:
两个表的分桶数为倍数关系即可用桶表关联

3.参数调整优化:
补充:开启并行,严格模式等。

4.控制hive任务中的map数和reduce数 :




控制hive任务中的reduce个数:


大表关联大表随机数处理:
表结构本身有问题,比如,这个地区字段,都是市,北京市是一个值,太原市是一个值,到时候肯定会北京市的数据量特别大导致数据倾斜。这个例子比较极端,只是想说地区人口差异很大,数据量也会有很大差距。
表结构的调整,把一些大地区赋予更多的值,根据实际情况增加。
对于两个大RDD进行join时的数据倾斜,如果只是某几个key导致了倾斜,采用该方式可以用最有效的方式打散key进行join。而且只需要针对少数倾斜key对应的数据进行扩容n倍,不需要对全量数据进行扩容,避免了占用过多内存。
udf函数的类型:
UDF(User Defined Function)。用户自定义函数,一进一出
UDAF(User Defined Aggregation Function)。用户自定义聚集函数,多进一出;类似于:count/max/min
UDTF(User Defined Table-Generating Functions)。用户自定义表生成函数,一进多出;类似于:explode