MapReduce序列化Writable接口
基本序列化类型往往不能满足所有需求,比如在Hadoop框架内部传递一个自定义bean对象,那么该对象就需要实现Writable序列化接口。
实现Writable序列化步骤
必须实现Writable接口。
反序列化时,需要反射调用空参构造函数,所以必须有空参构造。
123public CustomBean() { super();}
重写序列化方法。
1234@Overridepublic void write(DataOutput out) throws IOException { ....}
重写反序列化方法。
...
MapReduce编程规范及示例编写
MapReduce编程规范
Mapper类
用户自定义一个Mapper类继承Hadoop的Mapper类
Mapper的输入数据是KV对的形式(类型可以自定义)
Map阶段的业务逻辑定义在map()方法中
Mapper的输出数据是KV对的形式(类型可以自定义)
注意:map()方法是对输入的一个KV对调用一次!
Reducer类
用户自定义Reducer类要继承Hadoop的Reducer类
Reducer的输入数据类型对应Mapper的输出数据类型(KV对)
Reducer的业务逻辑写在reduce()方法中
注意:Reduce()方法是对相同K的一组KV ...
MapReduce编程框架
MapReduce思想
MapReduce思想在生活中处处可见。我们或多或少都曾接触过这种思想。MapReduce的思想核心是分而治之,充分利用了并行处理的优势。
MapReduce任务过程是分为两个处理阶段:
Map阶段:Map阶段的主要作用是“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。Map阶段的这些任务可以并行计算,彼此间没有依赖关系。
Reduce阶段:Reduce阶段的主要作用是“合”,即对map阶段的结果进行全局汇总。
官方WordCount案例源码解析
经过查看分析官方WordCount案例源码我们发现一个统计单词数量的MapReduce程序的代 ...
Hadoop日志采集综合案例
需求分析
定时采集已滚动完毕日志文件,即类似access.log.1和access.log.2的文件,access.log文件不采集。
将待采集文件转移到临时目录,临时目录再上传到hdfs目录。
临时目录中的日志文件上传到hdfs目录后转移到备份目录,如此,方便直接服务器寻找日志文件,不用访问hdfs目录。
代码实现
idea创建一个maven工程,工程名为collect_log,pom文件加入以下依赖。
123456789101112131415161718192021222324252627282930313233343536373839<dependencie ...
Hadoop的限额与归档以及集群安全模式
HDFS文件限额配置
高级管理命令,可以输入 hdfs dfsadmin -help 查看。
HDFS文件的限额配置允许我们以文件大小或者文件个数来限制我们在某个目录下上传的文件数量或者文件内容总量,以便达到我们类似百度网盘网盘等限制每个用户允许上传的最大的文件的量。
数量限额
12345678#创建hdfs文件夹hdfshdfs dfs -mkdir -p /user/root/lagou#给该文件夹下面设置最多上传两个文件,上传文件,发现只能上传一个文件hdfs dfsadmin -setQuota 2 /user/root/lagou#清除文件数量限制hdfs dfsadmin ...
NameNode与SecondaryNameNode
问题1:NameNode如何管理和存储元数据?
计算机中存储数据两种:内存或者是磁盘。
元数据存储磁盘:存储磁盘无法面对客户端对元数据信息的任意的快速低延迟的响应,但是安全性高。
元数据存储内存:元数据存放内存,可以高效的查询以及快速响应客户端的查询请求,数据保存在内存,如果断点,内存中的数据全部丢失。
解决方案:内存+磁盘;NameNode内存+FsImage的文件(磁盘)。
问题2:磁盘和内存中元数据如何划分?两个数据一模一样,还是两个数据合并到一起才是一份完整的数据呢?
一模一样:client如果对元数据进行增删改操作,需要保证两个数据的一致性。FsImage文件操作起来效率 ...
HDFS读写解析
HDFS读数据流程
客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位,64kb大小来做校验)。
客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。
HDFS写数据流程
客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存 ...
HDFS的Java客户端操作
客户端环境准备
将hadoop-2.9.2.tar.gz安装包解压到非中文路径(例如:C:\softwares\Java\hadoop-2.9.2)。
配置HADOOP_HOME环境变量
配置Path环境变量
idea创建一个Maven工程ClientDemo
pom文件导入相应的依赖坐标+日志配置文件
123456789101112131415161718192021222324252627282930313233343536373839<dependencies> <!-- 单元测试junit依赖--> <d ...
HDFS的Shell客户端操作
Shell 命令行操作HDFS
基本语法
1hdfs dfs 具体命令 OR bin/hdfs dfs 具体命令
命令大全
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051[root@linux121 hadoop-2.9.2]# bin/hdfs dfsUsage: hadoop fs [generic options][-appendToFile <localsrc> ... <dst>][-cat [-ignoreCrc ...
HDFS分布式文件系统的概念和架构
HDFS 简介
HDFS (全称:Hadoop Distribute File System,Hadoop 分布式文件系统)是 Hadoop 核心组成,是分布式存储服务。
分布式文件系统横跨多台计算机,在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。
HDFS是分布式文件系统中的一种。
HDFS的重要概念
HDFS 通过统一的命名空间目录树来定位文件; 另外,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色(分布式本质是拆分,各司其职);
典型的 Master/Slave 架构
HDFS 的架构是典型的 Master/Slave 结构 ...