MapReduce的高级应用
写在前面前面学习的都是MapReduce较为基本的操作,接下来学习一些MapReduce的高级应用,主要包括使用MapReduce完成join操作、排序操作、二次排序操作和小文件合并操作,这些应用在实际工作中非常有帮助。
MapReduce实现join操作join操作概述如果你之前熟悉数据库,那么肯定知道使用SQL语法实现join操作是非常简单的,但是在大数据场景下使用MapReduce编程模型来实现类似的join操作其实是比较困难的。通常在实际工作中,我们都是借助于Hive、Spark SQL等框架来实现join,既然这里是学习,那么对于MapReduce实现join操作的原理还是有必要学习一下,它对于理解join操作的底层是有非常大的帮助。接下来开始学习,如何使用MapReduce API来实现join操作。
需求分析假设现在有如下两个txt文件,里面的内容如下所示:
1234567891011//emp.txt数据519,smith,clerk,8920,1990-10-01,880.00,20536,alien,salesman,8945,1992-09-11,1600.00, ...
MapReduce其他内容
写在前面MapReduce基础内容除了前面介绍的外,还有两个比较重要的内容:Partitioner操作和自定义RecordReader。
Partitioner操作概述在进行MapReduce计算时,有时候可能需要将最终的输出数据分到不同的文件中,这种情况是非常普遍的。
举个例子,现在需要将销售额按照省份来进行划分,那么就需要将同一省份的数据在一个文件中。
我们知道最终的输出数据都来自Reducer任务,因此想得到多个文件,这就意味着需要有相同数量的Reducer任务在运行。而Reducer任务的数量又来自于Mapper任务,也就是说任务的数量是由Mapper任务决定的。Mapper任务需要划分数据,将不同的数据分配给不同的Reducer任务,之后由它来生成对应的数据文件。我们称Mapper任务划分数据的过程为Partition,称负责划分数据的类为Partitioner。
请注意,MapReduce默认的Partitioner类为HashPartitioner。一般来说,Partitioner会先计算Key的哈希值(通常为md5值),然后通过Reducer个数来执行取模运算,即key ...
如何开发MapReduce应用
写在前面前面学习的都是MapReduce较为基础的内容,接下来学习如何开发MapReduce应用,其中最重要的就是学习MapReduce的类型、输入格式、输出格式和Combiner的使用。
MapReduce的类型其实这里主要学习的是MapReduce的输入和输出类型。前面也说过,使用Hadoop中的MapReduce编程模型非常简单,开发者只需实现map和reduce方法中的输入和输出key/value键值对的类型即可,下面来学习各种数据类型在MapReduce中是如何使用的。
通过查看WritableComparable接口,可以发现Hadoop提供了很多与Java数据类型相对应的数据类型,如下表所示:
Hadoop中数据类型
Java中的数据类型
IntWritable
Integer
BooleanWritable
Boolean
FloatWritable
Float
LongWritable
Long
DoubleWritable
Double
ShortWritable
Short
ByteWritable
Byte
同时可以发现M ...
MapReduce入门
写在前面本篇来学习MapReduce,主要包括MapReduce简介、设计目标、特点、不适合场景、编程模型等内容,并在此基础上通过一个词频统计功能来加深对于MapReduce的理解。
MapReduce简介MapReduce是谷歌开源的一个用于大数据量的计算框架,对于大数据量的计算,通常采用并行计算方式来处理。但是如果让开发人员自己来完全实现一个并行计算程序,这是非常困难的,鉴于此种情况,MapReduce就孕育而生,它是一种简化并行计算的编程模型,允许没有并发计算经验的开发者也能开发出并行计算程序,这无疑大大降低了并行计算的实现门槛。
设计目标从简介中可以知道MapReduce的设计目标就是便于开发人员在不熟悉分布式并发编程的情况下,也能将自己的程序运行在分布式系统上。
MapReduce采用的是“分而治之”的思想,即把对大规模数据集的操作,分发给一个主节点管理下的各个子节点,让它们共同来完成,之后整合各个子节点的中间结果,进而得到最终的计算结果。用一句话来概括MapReduce就是“分散任务,汇总结果”。
特点(1)容易编程。MapReduce只需简单实现一些接口,就能完成一个个分 ...
HDFS高级知识
写在前面本篇来学习HDFS更高级的知识,主要包括Hadoop序列化机制、SequenceFile和MapFile的使用。
Hadoop序列化机制序列化与反序列化序列化是将对象转化为字节流,便于在网络上传输或者写入磁盘进行永久存储;而反序列化就是将字节流转回对象。
序列化在分布式数据处理的“进程间通信”和“永久存储”这两个领域出现的概率较大。请注意,在Hadoop中多个节点进程之间的通信是通过远程过程调用来实现的,即(Remote Procedure Call),简称RPC。
Hadoop的序列化请注意Hadoop没有使用Java的序列化,而是采用自己的序列化机制。原因在于Hadoop的序列化,允许用户复用对象,这样就减少了Java对象的分配和回收,提高了应用效率。
Hadoop提供了Writable接口,用于实现序列化:
12345678@Public@Stablepublic interface Writable { //将状态写入到DataOutput二进制流 void write(DataOutput var1) throws IOException; ...
深入学习HDFS的运行原理
写在前面本篇来深入学习HDFS的运行原理,主要包括HDFS文件的读写流程、副本机制和文件数据的负载均衡和机架感知。
HDFS文件读写流程HDFS文件读流程首先学习HDFS文件的读流程,主要是客户端读取数据,其流程如下所示:
(1)客户端通过调用FileSystem的open方法获取需要读取的数据文件,对于HDFS来说这个FileSystem就是DistributeFileSystem;(2)DistributeFileSystem通过RPC来调用NameNode,进而获取到需要读取的数据文件对应的Block存储在哪些DataNode上;(3)客户端会先到最佳位置(所谓最佳位置其实就是离它最近的)的DataNode上调用FSDataInputStream的read方法,通过反复调用read方法,就可以将数据从DataNode传递到客户端;(4)当读取完所有的数据之后,FSDataInputStream就会关闭与DataNode的连接,然后寻找下一块的最佳位置,也就是说对于客户端而言,它只需要读取连续的流;(5)一旦客户端完成读取操作后,就对FSDataInputStream调用clos ...
访问HDFS文件系统
写在前面本篇来学习如何访问HDFS文件系统,主要包括使用Shell和Java API这两种方式。
使用HDFS Shell方式概述HDFS提供了基于Shell的操作命令来管理HDFS上的数据,这些Shell命令和Linux系统上的命令非常相似,因此熟悉Linux的小伙伴可以快速对HDFS进行操作。
HDFS的基本命令格式为:
1bin/hdfs dfs -cmd <args>
请注意在使用HDFS Shell之前,用户需要提前启动Hadoop。
一些常用的Shell命令接下来学习一些HDFS Shell中常用的命令,如下所示:(1)列出HDFS指定路径下的文件目录。其对应的命令格式如下所示:
1hadoop fs -ls 目录路径
举个例子,查看HDFS根目录下的文件:
123456[hadoop@master bin]$ hadoop fs -ls /Found 4 items-rw-r--r-- 1 hadoop supergroup 38 2020-06-20 22:08 /hello.txtdrwxr-xr-x - hadoop superg ...
HDFS入门
写在前面在前面对HDFS相关内容进行了简要学习,接下来开始学习HDFS入门相关的内容,具体包括:(1)HDFS产生背景;(2)HDFS简介;(3)HDFS缺点;(4)HDFS设计目标;(5)HDFS一些概念;(6)HDFS架构。
认识HDFSHDFS产生背景前面也说了,由于现在每天产生的数据量很大,平常使用的操作系统无法满足数据量的存储和处理,如果将多个操作系统综合为一个大的操作系统,方法是可行,但是却不便于管理和维护,鉴于此就诞生了分布式文件管理系统(Distributed File System),简称DFS。
说白了分布式文件系统就是允许一个文件通过网络在多台主机上以多副本的方式进行存储(可提供容错性),实际上是通过网络来访问文件,这样使得用户看起来就像是在访问本地磁盘中的文件一样。
HDFS简介Hadoop Distributed File System,简称HDFS,它是Hadoop项目的核心子项目,用于分布式计算中的数据存储。
Hadoop官方的描述是:HDFS可以运行在廉价的服务器上,为海量数据存储提供了高容错、高可靠、高扩展性、高获得性和高吞吐率等特征。Hadoop其实 ...
搭建Hadoop伪分布式环境
写在前面前面对Hadoop进行了一个基础的学习,接下来开始学习如何安装Hadoop平台。这里使用VMware Workstation Pro、CentOS7.7、Hadoop使用CDH5.7版本。
本篇主要学习如何在VMware Workstation虚拟机上安装的CentOS系统上搭建Hadoop伪分布式环境。
注意关于VMware Workstation Pro和CentOS7.7的安装这里就跳过,假设现在已经成功在VMware Workstation Pro虚拟机上成功安装了CentOS7.7系统,那么接下来就正式进入Hadoop伪分布式环境搭建。
所谓伪分布式是指在一台机器上启动Hadoop需要的所有进程进行工作;而分布式是指在多台机器上都启动Hadoop,按照集群的规划在不同的机器上启动各自需要的Hadoop进程进行相互协调工作。
Hadoop伪分布式环境搭建CentOS系统上软件下载存放地址为/home/soft,软件安装地址为/envy。
Java安装请注意,推荐使用Oracle JDK,因此需要卸载CentOS默认安装的OpenJDK,操作步骤如下:(1)使用rpm - ...
Hadoop初识
写在前面前面学习了大数据相关的知识,本篇正式进入Hadoop的学习,里面涉及到的知识较多,需要好好复习。本篇文章主要内容如下:(1)Hadoop概述:介绍Hadoop是什么以及它能干什么;(2)Hadoop优势:与其他大数据框架进行对比学习;(3)Hadoop发展史:介绍Hadoop发行到现在经历的一些过程;(4)Hadoop核心组件:介绍Hadoop核心组件有哪些以及各自用处;(5)Hadoop发行版本选择:介绍Hadoop一些发行版的特点和优缺点,以及在工作中如何选择合适的发行版本;(6)Hadoop生态系统:介绍Hadoop的生态系统中的其他框架,以及它们适合的业务场景;(7)Hadoop企业案例:介绍几个使用Hadoop来实现的企业案例。
Hadoop概述Hadoop是Hadoop作者孩子的一个棕黄色玩具大象的名字。
Hadoop是一个开源的可靠的(reliable),可扩展的(scalable),分布式计算(distributed computing)框架。
Hadoop是Apache基金会下的一个分布式系统基础架构,主要包括分布式文件系统HDFS(Hadoop Distri ...