1.使用大数据训练深度神经网络(Deep Neural Networks , 简称DNN)的方法:
ps: L-BFGS方法:所有的数据都会参与训练,算法融入方差归一化和均值归一化。当数据集过大时,不适用于训练DNN。
2.常见的可高效运算和低耗能存储大数据的方法:
3.Hadoop用来处理离线数据;spark/storm处理实时数据,流式处理
4.Hadoop MapReduce只适用于批量处理数据
5.MapReduce/Spark/Flink/Storm均支持使用YARN调度资源
6.Flink和Spark既支持批量计算,也支持流式计算
7.Spark Streaming支持秒级延迟,其吞吐量优于Storm(毫秒级)
8.请列出Hadoop进程名:
8.1 Datanode负责 HDFS 数据存储。在强制关闭或者非正常断电的情况下datanode不会备份。
8.2 JobTracker是一个后台服务进程,运行在NameNode上。启动之后,会一直监听并接收来自各个TaskTracker发送的心跳信息,包括资源使用情况和任务运行情况等信息。
其主要功能:1.作业控制:JobTracker的作业控制模块则负责作业的分解和状态监控。(最重要的是状态监控:主要包括TaskTracker状态监控、作业状态监控和任务状态监控。主要作用:容错,为任务调度提供决策依据。)2.资源管理。
8.3 NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息等。
8.4 secondaryNameNode是一个用来监控HDFS状态的辅助后台程序。目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间。
8.5 TaskTracker是运行在多个节点上的slaver服务, 运行在DataNode上。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。
注: DataNode 和NameNode 是针对数据存放来而言的; JobTracker和TaskTracker是对于MapReduce执行而言的
9.HDfS 中的 block 默认保存3份
10.HDFS 默认 Block Size为64MB
11.Puppet, Pdsh 和 Zookeeper可以管理集群
12.Client 向 NameNode 发起文件写入的请求;NameNode 根据文件大小和文件块配置情况,返回给 Client 它所管理部分 DataNode 的信息;Client 将文件划分为多个 Block,根据 DataNode 的地址信息,按顺序写入到每一个DataNode 块中。
13.1 Hadoop的核心配置通过两个xml文件来完成:1,hadoop-default.xml;2,hadoop-site.xml。(现在已经不存在)
13.2 Hadoop现在拥有3个配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。这些文件都保存在conf/子目录下。
14.‘jps’命令可以检查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工作
15.MapReduce原理采用“分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果, 得到最终结果。简单地说,MapReduce就是”任务的分解与结果的汇总”。
在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker 是用于执行工作的。一个Hadoop集群中只有一台JobTracker。
在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理 过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。
注:用MapReduce来处理的数据集(或任务)必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
16.1 HDFS写流程:
16.2 HDFS读流程:
17.MapReduce运行的时候,会通过Mapper运行的任务读取HDFS中的数据文件,然后调用自己的方法,处理数据,最后输出。Reducer任务会接收Mapper任务输出的数据,作为自己的输入数据,调用自己的方法,最后输出到HDFS的文件中。
18.现在有10个文件夹,每个文件夹都有1000000个url,请用MapReduce找出top1000000url。
方法一:
运用2个job,第一个job直接用filesystem读取10个文件夹作为map输入,url做key,reduce计算url的sum;下一个job map用url作key,运用sum作二次排序,reduce中取top10000000
1:首先进行wordcount计算
2:进行二次排序
方法二:
建hive表A,挂分区channel,每个文件夹是一个分区。
SELECT x.url,x.c FROM (
SELECT url,count(1) AS c FROM A
WHERE channel ='' group by url
) x
ORDER BY x.c desc limit 1000000;
方法三:还可以用treeMap, 到1000000了每来一个都加进去, 删掉最小的。
19.1 Hadoop中Combiner的作用是reduce的实现,在map端运行计算任务,减少map端的输出数据。Combiner的使用场景是MapReduce的map和reduce输入输出一样,其作用是优化。
19.2 partition的默认实现是hash partition,是map端将数据按照reduce个数取余,进行分区,不同的reduce来copy自己的数据。partition的作用是将数据分到不同的reduce进行计算,加快计算效果。
20.简述Hadoop安装:
1)创建Hadoop用户
2)改IP,修改HOSTS文件域名
3)安装SSH,配置无密钥通信
4)安装JAVA,配置JAVA的环境变量
5)解压hadoop
6)配置conf下的core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml
7)配置hadoop的环境变量
8)hadoop namenode -format
9)start-all.sh
21.hive有哪些保存元数据的方式, 个有什么特点?
1、 内存数据库derby;安装小,但是数据存在内存,不稳定
2、 mysql数据库;数据存储模式可以自己设置,持久化好,查看方便。
22.hive内部表和外部表的区别:
23.HBase存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
一个列族在数据底层是一个文件,所以将经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间。
24.用mapreduce怎么处理数据倾斜问题:
map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完,此称之为数据倾斜。
例一:
源代码:
public int getPartition(K key, V value,
int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
修改后
public int getPartition(K key, V value,
int numReduceTasks) {
return (((key).hashCode()+value.hashCode()) & Integer.MAX_VALUE) % numReduceTasks;
}
方式2:
public class HashPartitioner<K, V> extends Partitioner<K, V> {
private int aa= 0;
/** Use {@link Object#hashCode()} to partition. */
public int getPartition(K key, V value,
int numReduceTasks) {
return (key.hashCode()+(aa++) & Integer.MAX_VALUE) % numReduceTasks;
}
25.如何优化Hadoop框架:
(1) 从应用程序角度进行优化。由于mapreduce是迭代逐行解析数据文件的,怎样在迭代的情况下,编写高效率的应用程序,是一种优化思路。
(2) 对Hadoop参数进行调优。当前hadoop系统有190多个配置参数,怎样调整这些参数,使hadoop作业运行尽可能的快,也是一种优化思路。
(3) 从系统实现角度进行优化。这种优化难度是最大的,它是从hadoop实现机制角度,发现当前Hadoop设计和实现上的缺点,然后进行源码级地修改。该方法虽难度大,但往往效果明显。
(4)linux内核参数调整
26.在开发job时,设置reduce数为0 即可去掉reduce阶段。
27.3个datanode中有一个datanode出现错误时,这个datanode的数据会在其他的datanode上重新做备份。
28.生产环境中使用外部表的好处:
29 - redis:分布式缓存,强调缓存,内存中数据
注:传统数据库:注重关系
30.MapReduce中map的数量有数据块决定,reduce数量随便配置。
31.设置日志收集分析系统:
32.Hive语句实现word count:
SELECT word,count(1) FROM table1
GROUP BY word;
33.给定a, b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,找出a, b文件共同的url?
答案:可以估计每个文件的大小为50亿×64=298G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
34.实时数据应用场景和技术:
35.HBase性能优化思路:
36.数据库怎么导入hive 的,有没有出现问题?
答:使用sqoop导入,我们公司的数据库中设计了text字段,导致导入的时候出现了缓存不够的情况(见云笔记),开始解决起来感觉很棘手,后来查看了sqoop的文档,加上了limit属性,解决了。
37.Hadoop 的 namenode 宕机,怎么解决?
答:先分析宕机后的损失,宕机后直接导致client无法访问,内存中的元数据丢失,但是硬盘中的元数据应该还存在。如果只是节点挂了,重启即可,如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了。但是最终的解决方案应该是在设计集群的初期就考虑到这个问题,做namenode的HA。
38.一个datanode 宕机, 怎么一个恢复?
答:Datanode宕机了后,如果是短暂的宕机,可以实现写好脚本监控,将它启动起来。如果是长时间宕机了,那么datanode上的数据应该已经被备份到其他机器了,那这台datanode就是一台新的datanode了,删除他的所有数据文件和状态文件,重新启动。
39.Mapreduce 流程:
Map—combiner—partition—sort—copy—sort—grouping—reduce
40.Hive中
41.怎么通过Hive sql删除HDFS?
ALTER table ptable
DROP partition (daytime='20140911',city='bj');
元数据,数据文件都删除,但目录中daytime= 20140911还在。
42.比较MapReduce和Spark