• hive的计算是通过什么实现的
     

hive是搭建在Hadoop集群上的一个SQL引擎,它将SQL语句转化成了MapReduce程序在Hadoop上运行,所以hive的计算引擎是MapReduce,底层存储采用的是HDFS。

  • 为什么不用Java的序列化serilazable

Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,header,继承体系等),不便于在网络中高效传输。所以,hadoop自己开发了一套序列化机制(Writable),特点如下:

1.紧凑

紧凑的格式能让我们充分利用网络带宽,而带宽是数据中心最稀缺的资源

2.快速

进程通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是基本的;

3.可扩展

协议为了满足新的需求变化,所以控制客户端和服务器过程中,需要直接引进相应的协议,这些是新协议,原序列化方式能支持新的协议报文;

4.互操作

能支持不同语言写的客户端和服务端进行交互;

  • MapReduce工作流程

1>输入分片(input split):在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组,输入分片(input split)往往和hdfs的block(块)关系很密切,假如我们设定hdfs的块的大小是64mb,如果我们输入有三个文件,大小分别是3mb、65mb和127mb,那么mapreduce会把3mb文件分为一个输入分片(input split),65mb则是两个输入分片(input split)而127mb也是两个输入分片(input split),换句话说我们如果在map计算前做输入分片调整,例如合并小文件,那么就会有5个map任务将执行,而且每个map执行的数据大小不均,这个也是mapreduce优化计算的一个关键点。

2>map阶段:就是我们写的map函数,map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行;map函数每次处理一行数据,map主要用于数据的分组,为下一步reduce的运算做数据准备,map的输出就是reduce的输入。

3>combiner阶段:combiner阶段是可选的,combiner是一个本地化的reduce操作,它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作,使传入reduce的文件变小,这样就提高了宽带的传输效率,毕竟hadoop计算力宽带资源往往是计算的瓶颈也是最为宝贵的资源,但是combiner操作是有风险的,使用它的原则是combiner的输入不会影响到reduce计算的最终输入,例如:如果计算只是求总数,最大值,最小值可以使用combiner,但是做平均值计算使用combiner的话,最终的reduce计算结果就会出错。

4>Partitioner阶段,一个Partitioner对应一个reduce作业,如果我们mapreduce操作只有一个reduce操作,那么Partitioner就只有一个,Partitioner因此就是reduce的输入分片,这个我们可以编程控制,主要是根据实际key和value的值,根据实际业务类型或者为了更好的reduce负载均衡要求进行,这是提高reduce效率的一个关键所在。

5>reduce阶段:我们编写的reduce函数,reduce的输入是map的输出,reduce是主要的逻辑运算阶段,我们绝大部分业务逻辑都是在reduce阶段完成的,并把最终结果存储在hdfs上的。

  • 如何决定一一个job中需要多少个maptask和reducetask ?
     

一、影响map个数,即split个数的因素主要有:

1)HDFS块的大小,即HDFS中dfs.block.size的值。如果有一个输入文件为1024m,当块为256m时,会被划分为4个split;当块为128m时,会被划分为8个split。

2)文件的大小。当块为128m时,如果输入文件为128m,会被划分为1个split;当块为256m,会被划分为2个split。

3)文件的个数。FileInputFormat按照文件分割split,并且只会分割大文件,即那些大小超过HDFS块的大小的文件。如果HDFS中dfs.block.size设置为64m,而输入的目录中文件有100个,则划分后的split个数至少为100个。

4)splitsize的大小。分片是按照splitszie的大小进行分割的,一个split的大小在没有设置的情况下,默认等于hdfs block的大小。但应用程序可以通过两个参数来对splitsize进行调节。

map个数的计算公式如下:

splitsize=max(minimumsize,min(maximumsize,blocksize))。

如果没有设置minimumsize和maximumsize,splitsize的大小默认等于blocksize

 

二、reduce端的个数取决于用户的需求,默认是有一个reduce,可以在代码中声明【由分区决定】

reduce的输出个数

 

  • 手写Word Count的Mapper和Reducer
     
public static class WCMapper extends Mapper<LongWritable, Text,Text, IntWritable>{
    Text k1 = new Text();
    IntWritable v1 = new IntWritable(1);

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String line = value.toString();
        String[] strings = line.split("\\s+");
        for (String s : strings) {
            k1.set(s);
            context.write(k1,v1);
        }
    }
}

public static class WCReducer extends Reducer<Text, IntWritable,Text, IntWritable> {
    int count;
    IntWritable v2 = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        count = 0;
        for (IntWritable value : values) {
            count += value.get();
        }
        v2.set(count);
        context.write(key,v2);
    }
}
  • hive内部表和外部表的区别?
     

分别从创建和删除两方面说:

创建:

外部表需要使用external关键字指定,需要使用location指定存储数据的位置

内部表不需要指定数据存储的路径,直接将数据存储在默认的目录下

删除:

外部表的数据由hdfs管理,元数据由hive管理,删除的时候只删除元数据,不删除表数据

内部表的数据和元数据均有hive来管理,删除的时候全部删除

  • hive的元数据和存储引|擎
     

元数据包括表的名字,列、分区,目录等其他属性信息,存储在存储引擎中。

默认使用Derby数据库,缺点:一次只能打开一个会话。

可以使用MySQL,优点:允许多用户访问。

  • 请谈- - -下hive的特点是什么? hive和RDBMS有什么异同?
     

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

利剑无意之面试题(三)

数据库:用户与数据库交互,提交 SQL 语句后,马上见到执行结果;存放业务数据;数据库提出范式的概念是为了解决数据冗余和耦合的问题;数据库给业务数据提供存储支撑。
数据仓库:不与用户交互;存放历史数据;反范式设计,专门引入冗余数据,保证数据完整。数据仓库面向分析,里面存放的数据用来做分析和挖掘

  • Hive数据倾斜原因
     

key分布不均匀

业务数据本身的特性

SQL语句造成数据倾斜

  • 从架构设计、部署方式、使用方法、应用场景等方面,比较tfs、hdfs、fastdfs、 Tachyon的异同。
     

https://georgedage.blog.csdn.net/article/details/102756152

相关文章:

  • 2021-09-13
  • 2021-11-03
  • 2021-09-20
  • 2021-07-09
  • 2021-12-13
  • 2022-02-26
  • 2021-09-06
  • 2021-12-23
猜你喜欢
  • 2021-12-12
  • 2022-12-23
  • 2022-02-22
  • 2021-10-05
  • 2022-12-23
  • 2021-12-01
  • 2021-07-23
相关资源
相似解决方案