2023年3月7日
Q1.hive外部表和内部表的区别:
1)hive外部表和内部表的区别,本质是:该表是否由hive进行全生命周期的管理。
2)具体的区别体现在:
a.外部表建表时需要external修饰,而内部表不需要。
b.hive管理内部表的元数据、实际表数据。drop操作时,删除了元数据及实际的表数据;hive仅管理外部表的元数据。drop操作时,则只删除元数据。
c.创建表时,内部表的存储路径一般是在默认的位置,而外部表的存储路径一般搭配 location 指定数据存放位置。
d.表结构和分区发生变化时,内部表会自动同步到元数据;而外部表需要使用语句进行修复。
Q2.简述对Hive桶的理解?
1)数据分桶是指:将数据集分解为更容易管理的若干部分的一种技术。Hive 桶技术,是基于hash值对数据进行划分,可以让查询发生在小范围,继而提高查询效率。
2)主要作用:
a.在处理大规模数据集时,如果进入开发、修改查询阶段,可以使用整个数据集的一部分进行抽样测试查询、修改。此时利用hive桶,提升查询、修改效率,可以使得开发更高效。
b.可以利用map-side join操作,让数据查询、连接操作更快速高效。由于hive桶为表加上了额外的结构,在处理部分查询时能利用这个结构。如,连接两个在相同列上划分了桶的表,可以使用 Map 端连接 ,即Map-side join高效实现。又如,JOIN操作时,对于两个有相同列的表,如果对这两个表同一列进行了桶操作,那么将保存相同列值的桶进行JOIN操作就可以,可以大大减少JOIN的数据量,操作更高效。
Q3.HBase和Hive的区别?
1)从大数据架构上,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题。
2)Hbase和Hive是两种基于Hadoop的不同技术。其中,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库,而Hive是一种类SQL的引擎,并且运行MapReduce任务。两者可以搭配使用。
Q4.简述Spark宽窄依赖
1)RDD和它的父RDD的关系有两种类型:宽依赖和窄依赖。
2)宽依赖:指的是多个子RDD的Partition会依赖同一个父RDD的Partition,关系是一对多,父RDD的一个分区的数据去到子RDD的不同分区里面,会有Shuffle的产生。
3)窄依赖:指的是每一个父RDD的Partition最多被子RDD的一个Partition使用,是一对一的,也就是父RDD的一个分区去到了子RDD的一个分区中,这个过程没有Shuffle产生。
Q5.Hadoop和Spark的相同点和不同点
1)Hadoop和Spark的相同点:
Hadoop和Spark都是并行计算,两者都是用MR模型进行计算;两者都提供了灾难恢复
2)Hadoop和Spark的不相同点:
a.Hadoop将中间结果存放在HDFS中,每次MR都需要刷写-调用。而Spark中间结果存放优先存放在内存中,内存不够再存放在磁盘中,不放入HDFS,避免了大量的IO和刷写读取操作;
b.Hadoop底层使用MapReduce计算架构,只有map和reduce两种操作,适合高时延环境下批处理计算的应用。Spark是基于内存的分布式计算架构,提供更加丰富的数据集操作类型,主要分成转化操作和行动操作,包括map、reduce、filter、flatmap等,数据分析更加快速,所以适合低时延环境下计算的应用;
c.基于MapReduce框架的Hadoop主要分为map和reduce两个阶段,所以在一个job里面能做的处理很有限,对于复杂的计算,需要使用多次MR;Spark计算模型是基于内存的迭代式计算模型,根据用户编写的RDD算子和程序,在调度时根据宽窄依赖可以生成多个Stage,根据action算子生成多个Job。所以Spark相较于MapReduce,计算模型更加灵活,可以提供更强大的功能。
d.Hadoop适合处理静态数据,对于迭代式流式数据的处理能力差;Spark通过在内存中缓存处理的数据,提高了处理流式数据和迭代式数据的性能。
Q6.Spark为什么比MapReduce块?
原因如下:
1)Spark是基于内存计算,减少了低效的磁盘交互;
2)高效的调度算法,基于 DAG,有向无环图计算模型可以减少磁盘I/O次数;
3)通过复用线程池中的线程来减少启动、关闭task所需要的开销。
Q7.说说你对Hadoop生态的认识
hadoop生态:
hadoop生态是基于hdfs大数据的存储方案,提供了全栈的大数据处理方案。例如,离线批处理由MapReduce、Hive完成,实时交互由HBase、Impala完成,流计算由Storm完成。除此之外,提供了Sqoop转库工具、Flume大吞吐量的采集工具以及分布式协调服务ZK、Kafka分布式MQ、Hue图形化查询器等软件,还提供了Mahout机器学习引擎。
随着spark计算引擎的出现,也出现了spark生态圈,批处理由Spark本身的Core就可以完成、实时交互由Spark SQL进行查询、流计算由Spark Streaming进行完成。除此之外还提供了MLib、GraphX这些计算工具方便进行计算。
Q8.实战
1)#填入获得前k个排名的函数
def takeTopK(pairList, k):
temp = sorted(pairList.items(), key=lambda x: x[1], reverse=True)
print(temp[0:k])
2)#写出DF计算的函数
DF =round(math.log(data_counts/(headlineDF3+1)), 2)
3)整体代码运行及执行结果
尚未完成。
学习资源引自datawhale开源学习课程~感恩!
https://blog.csdn.net/qq_41474121/article/details/109119761
https://www.cnpython.com/tags/476019