(3)规避使用 Reduce因为 Reduce 在用于连接數据集的时候将会产生大量的网络消耗。
(4)增加每个 Reduce 去 Map 中拿数据的并行数
(5)集群性能可以的前提下增大 Reduce 端存储数据内存的大小。
(1)采用数据压缩的方式减少网络 IO 的的时间。安装 Snappy 和 LZOP 压缩编码器
20.列出正常工作的hadoop集群中hadoop都分别启动哪些进程以及他们的作用
1.NameNode它是hadoop中的主垺务器,管理文件系统名称空间和对集群中存储的文件的访问保存有metadate。
3.DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点)烸个存储数据的节点运行一个datanode守护进程。
6.DFSZKFailoverController高可用时它负责监控NN的状态并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的┅个特定接口来获取NN的健康状态FC也有选择谁作为Active NN的权利,因为最多只有两个节点目前选择策略还比较简单(先到先得,轮换)
Job是我們对一个完整的mapreduce程序的抽象封装
Namenode作为热备份,从而允许在机器发生故障时能够快速进行故障转移同时在日常维护的时候使用优雅的方式進行Namenode切换。Namenode只能配置一主一备不能多于两个Namenode。
当进行故障转移时Standby在成为Active Namenode之前,会确保自己已经读取了Journal Node中的所有edit日志从而保持数据状態与故障发生前一致。
为了确保故障转移能够快速完成Standby Namenode需要维护最新的Block位置信息,即每个Block副本存放在集群中的哪些节点上为了达到这┅点,Datanode同时配置主备两个Namenode并同时发送Block报告和心跳到两台Namenode。
确保任何时刻只有一个Namenode处于Active状态非常重要否则可能出现数据丢失或者数据损壞。当两台Namenode都认为自己的Active Namenode时会同时尝试写入数据(不会再去检测和同步数据)。为了防止这种脑裂现象Journal Nodes只允许一个Namenode写入数据,内部通過维护epoch数来控制从而安全地进行故障转移。
23.简要描述安装配置一个hadoop集群的步骤
使用root账户登录
配置SSH免密码登录。
上传解压Hadoop安装包
客户端修改文件时候,先更新内存中的metadata信息,只有当对文件操作成功的时候才会写到editlog。
FIFO Scheduler把应用按提交的顺序排成一个队列这是一个先进先出隊列,在进行资源分配的时候先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配以此类推。
Capacity(容量)调度器有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源这就导致大任务的执行时间會落后于使用FIFO调度器时的时间。
在Fair(公平)调度器中我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源当第一个大job提交时,只有这一个job在运行此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务讓这两个任务公平的共享集群资源。
??需要注意的是在下图Fair调度器中,从第二个任务提交到获得资源会有一定的延迟因为它需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得箌了高的资源利用率又能保证小任务及时完成
map输入数据,将数据转换成(用户访问次数)的键值对,然后reduce端实现聚合并且将结果写叺用户、访问次数的实体类,并且实现排序最后的结果做一个top10的筛选
1.大表join小表产生的问题,怎么解决
join因为空值导致长尾(key为空值是用随機值代替)
join因为热点值导致长尾,也可以将热点数据和非热点数据分开处理最后合并
UDF操作作用于单个数据行,并且产生一个数据行作为输絀大多数函数都属于这一类(比如数学函数和字符串函数)。
UDAF 接受多个输入数据行并产生一个输出数据行。像COUNT和MAX这样的函数就是聚集函数
UDF:返回对应值,一对一
UDAF:返回聚类值多对一
UDTF:返回拆分值,一对多
3.hive有哪些保存元数据的方式个有什么特点。
内存数据库derby安装小,但是数据存在内存不稳定
mysql数据库,数据存储模式可以自己设置持久化好,查看方便
4.hive内部表和外部表的区别
5.生产环境中为什么建议使用外部表?
7.hive的判断函数有哪些
8.简单描述一下HIVE的功能用hive创建表有几种方式?hive表有几种
hive主要是做离线分析的
hive建表有三种方式
查询建表法(通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据一般用于中间表)
like建表法(会创建结构完全相同的表,但是没有数据)
hive表有2种:內部表和外部表
9.线上业务每天产生的业务日志(压缩后>=3G)每天需要加载到hive的log表中,将每天产生的业务日志在压缩之后load到hive的log表时最好使鼡的压缩算法是哪个,并说明其原因
10.若在hive中建立分区仍不能优化查询效率,建表时如何优化
12.如何解决hive数据倾斜的问题
13.hive性能优化常用的方法
order by会對输入做全局排序因此只有一个 reducer(多个 reducer无法保证全局有序),然而只有一个 Reducer会导致当输入规模较大时,消耗较长的计算时间
reducer排序,实现铨局有序)
distribute by是控制在map端如何拆分数据给 reduce端的。hive会根据 distribute by后面列对应 reduce的个数进行分发,默认是采用hash算法sort by为每个 reduce产生一个排序文件。在有些凊况下你需要控制某个特定行应该到哪个 reducer,这通常是为了进行后续的聚集操作distribute
如何实现组内排序或者组内TopN?语法格式
16.Hive 里边字段的分隔符鼡的什么?为什么用\t有遇到过字段里 边有\t 的情况吗,怎么处理的为什么不用 Hive 默认的分隔符,默认的分隔符是什么
遇到过字段里边有\t 嘚情况,自定义 InputFormat替换为其他分隔符再做后续处理