Hadoop需要掌握的几点:
1.Hdfs
相当于是Hadoop的存储器,客户端与Namenode交互,Hdfs根据Namenode在Hdfs查找其DataNode获取数据
1. HDFS 可以存储大量的数据,通常用于处理和分析大规模数据集。它将数据分成较小的块,并将这些块分布在多个服务器上。这样可以在多个机器上并行处理数据,提高了处理效率。
2. HDFS 采用主从架构,其中 NameNode 作为主节点负责管理文件系统的元数据,而 DataNode 作为从节点负责存储实际的数据块。客户端与 NameNode 交互以获取文件的元数据,并与 DataNode 交互以读写实际的数据。
**2.MapReduce(
MapReduce是Hadoop中一种用于大规模数据处理的编程模型和框架,MapReduce模型的核心思想是将大数据集划分成小的数据块,然后在多台计算机上并行处理这些数据块。在Hadoop中,MapReduce框架负责处理所有与分布式计算相关的细节
MapReduce模型包括两个主要阶段:Map阶段和Reduce阶段。在Map阶段,输入数据被分割成一系列的键值对,并应用用户定义的Map函数来处理这些键值对,从而产生一系列的中间键值对。在Reduce阶段,用户定义的Reduce函数将具有相同键的所有中间值合并在一起,生成最终的输出结果。
MapReduce模型的主要优点在于其处理大规模数据的可扩展性和可靠性。它能够在分布式环境下运行,并且可以自动处理多个节点之间的数据分发、任务调度和错误恢复等问题。此外,MapReduce还提供了数据本地处理的机制,以确保计算任务尽可能地在数据存储的节点上运行,减少了数据在网络中的传输开销。
具体介绍:
MapperReduce包含Mapper和Reduce
其中Mapper为输入
在MapReduce编程模型中,Key主要用于两个目的:
- 数据分组:MapReduce框架将输入数据按照Key进行分组,相同Key的数据会被分到同一个Reduce任务进行处理。这样可以将具有相同特征或属性的数据进行聚合,便于后续的数据处理和分析。
- 数据排序:在MapReduce中,输入数据会首先根据Key进行排序,以便更好地进行后续的处理。排序可以确保相同Key的数据紧邻存放,从而便于Reduce任务对数据进行合并和计算。
此外,MapReduce中的Key类型必须实现WritableComparable接口,为了方便用户使用,Hadoop提供有一些内置的Key类型。常见的Key类型有IntWritable、LongWritable、Text、FloatWritable等。但有时还须使用自己定义的数据类型作为Key。
1. Map先从文件中拿取数据的key和value数据其对应的是Map<>的前两个类型,获取(key,value)键值对经过Mapper的map方法逻辑处理形成新的(K,v)键值对,
2.通过context.write输出到OutputCollector收集器;OutputCollector把收集到的(k,v)键值对写入到环形缓冲区中,环形缓冲区默认大小为100M,只写80%(环形缓冲区其实是一个数组,前面写着,后面有个组件清理这,写到文件中,防止溢出)。当环形缓冲区里面的数据达到其大小的80%时,就会触发spill溢出;
3.spill溢出前需要对数据进行分区和排序,即会对环形缓冲区里面的每个(k,v)键值对hash一个partition值,相同partition值为同一分区,然会把环形缓冲区中的数据根据partition值和key值两个关键字升序排序;同一partition内的按照key排序;
4.将环形缓冲区中排序后的内存数据不断spill溢出到本地磁盘文件,如果map阶段处理的数据虽较大,可能会溢出多个文件;
5.多个溢出文件会被merge合并成大的溢出文件,合并采用归并排序,所以合并的maptask最终结果文件还是分区且区内有序的7、@reduce task根据自己的分区号,去各个map task节点上copy拷贝相同partition的数据到reduce task本地磁盘工作目录;
6.reduce task会把同一分区的来自不同map task的结果文件,再进行merge合并成一个大文件(归并排序),大文件内容按照k有序;
7.合并成大文件后,shuffle的过程也就结束了,后面进入reduce task的逻辑运算过程,首先调用GroupingComparator对大文件里面的数据进行分组,从文件中每次取出一组(k,values)键值对,调用用户自定义的reduce()方法进行逻辑处理;
8.最后通过OutputFormat方法将结果数据写到part-r-O00**结果文件中;
shuffle是MR处理流程中的一个过程,它的每一个处理步骤是分散在各个map task和reduce,task节点上完成的,整体来看,分为3个操作:(1)分区partition(2) Sort根据key排序(3) Combiner进行局部value的合并
注: shuffie中的环形缓冲区大小会影响到MapReduce程序的执行效率,原则上说,缓冲区越大,磁盘IO的次数越少,执行速度就越快。环形缓冲区的大小可以通过在mapred-site.xml中设置mapreduce.task.io .sort.mb的值来改变,默认100M。溢出的时候调用combiner组件,逻辑和reduce的一样,合并,相同的key,value相加,这样传效率高,不用一下子传好多相同的key,在数据呈非常大的时候,这样的优化可以节省很多网络带宽和本地磁盘IO流的读写,具体的代码实现:定义一个combiner类,集成Reducer,输入类型和map的输出类型相同。
3.yarn
YARN是Hadoop中资源管理系统(资源调度器),用于统一管理和调度集群中的资源。它是一个通用资源管理系统,可以为上层应用提供统一的资源管理和调度。
YARN的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的 ApplicationMaster(AM)。在此架构中,ResourceManager负责整个集群的资源管理和分配,而ApplicationMaster则负责特定应用程序的调度和协调。
YARN的引入为Hadoop集群带来了许多改进。首先,它简化了Hadoop集群的管理,使得资源管理和调度更加灵活和可扩展。其次,YARN支持各种计算框架,如MapReduce、Spark、Storm等,可以在同一个集群上运行和集成。这使得不同的计算框架可以共享资源和数据,提高了资源利用率和数据共享。
Hive的作用:
Hive是基于Hadoop的一个数据仓库工具,用于进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。 Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行
注意:Hive不可以存储数据,它相当于一个中介,可以通过输入HiveQL(类SQL)语句来将HiveQL语句转变成MapReduce任务,在HadoopD数据库存储、查询和分析存储在Hadoop中的大规模数据
Zeppelin
一个Hive可视化的界面
Zeppelin是一个基于Web的交互式数据查询分析工具,可以在线使用Scala和SQL对数据进行查询分析并生成报表。Zeppelin的后台数据引擎可以是Spark,并且开发者可以通过实现更多的解释器来为Zeppelin添加数据引擎。此外,Zeppelin还可以与其他数据源进行连接和查询,如JDBC、Mongodb等。它提供了一个可视化的界面,用户可以通过简单的拖拽和配置来创建和分享自己的数据分析工作簿。Zeppelin还支持Markdown等其他语言,可以用于制作文档和报告。
``