1.Hadoop介绍

本文介绍了Hadoop在大数据领域的关键角色,包括其四大特征、数据类型、HDFS分布式文件系统、MapReduce计算框架以及YARN资源管理器。还概述了Hadoop生态系统中的组件和广泛应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Hadoop的介绍
大数据/四大特征:大量(voume)、多样(varity)、高速(velocity)、价值(value)。
大数据的3种数据类型:结构化数据、半结构话数据、非结构话数据。
大数据具有海量的数据规模、快速的数据流转、多样的数据数据类型以及价值密度四大特征。
Hadoop由Apache软件基金会开发,是一个开源的、可靠的、可扩展的、用于分布式局算计的分布式系统基础框架。
Hadoop是分布式文件系统(HDFS),HDPS又是拥有可扩展、高容错、高性能的分布式文件系统,负责数据的分布式存储和备份,文件些人后只能读取,不能修补。
MapReduce是分布式计算机框架,包含Map(映射)和Reduce(归约)两个阶段。
Hadoop是Apache软件基金会的Lucence项目创建人:道格-卡延,Lucence是一个应用广泛的文本搜索系统库。
Hadoop特点:高可靠性、高扩展性、高效性、高容错性、低成本、可构建在廉价机器上、Hadoop基本框架用java语言编写。
Hadoop的核心组件:HDFS、MapReduce、YARN
HDFS主要包括了:
一、HDFS结构:分布式文件系统)用于存储;
一个数据块的存储容量为(128MB)
1.NameNode:用于存储元数据以及处理客户端(Client)发出的请求。
2.Secondary  NameNode:用于备份NameNode的数据。
3.DataNata:是真正存储数据的地方,在DataNode中,文件以数据块进行存储。
二、分布式原理
1.HDFS并不是一个单机文件系统,而是分布在多个集群节点上的文件系统。
2当存储文件时,文件的数据分布在多个节点上。
3.数据从多个节点读取。
三、HDFS宕机处理
1.副本备份、2.副本存放、3.宕机处理.
HDFS的特点:高容错性、适合大规模数据处理、流式数据访问。
HDFS的缺点:不适合低延迟数据访问、无法高效存储大量小文件、不支持多用户写入及任意修改文件。MapReduce(分布式计算机框架):MapReduce是一个分布式运算程序的编程框架。
MapReduce简介:MapReduce是Haoop的核心计算框架,是用于大规模数据集(大于1T)并行运算的编程框架。
MapReduce工作原理:
1.数据的输入与分片阶段。
2.Map阶段。
3.Shuffle/Sort阶段。排序工作发生在Shuffle.
4.Reduce阶段。
5.数据输出阶段。
YARN(集群资源管理器)
YARN是Hadoop的资源管理器,提交应用至YARN上执行可以提高资源在集群种得利用率,提高执行速率。
YARM简介:YARM的目标是适得Hadoop数据处理能力超越MapReduce.
YARM基本结构:RM、NM、AM、Client Allication(客户端应用程序)
1.ResourceManager(简介RM):一个全局的资源管理器,负责整个系统的资源管理和分配,主要的两个组件构成,即调度器(Schedjuler)应用程序管理器(Applications Manager,ASN)。
2.NodeManager:每个节点上的资源和任务管理器。
Hadoop生态系统中常用的组件如下:
1.HBase
2.Hive
3.Pig
4.Sqoop
5.Flume
6.Oozie
7.ZooKeeper
8.Mahout
Hadoop的应用场景:
1.在线旅游
2.移动数据
3.电子商务
4.能源开采
5.图像处理
6.诈骗检测
7.IT安全
8.医疗保健
9.搜索引擎
10.社交平台

家人们都是课上的笔记,有些东西简写了,可以去搜都能搜的到,我也是这学期刚开这门课,对大家提到的帮助可能不多,望各位大神多多关照!

package mergeData.mapreduce; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.FileSplit; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; public class MergeDataDriver { /********** Begin **********/ public static class Map extends Mapper{LongWritable, Text, NullWritable,Text>{} /********** End **********/ } /********** Begin **********/ public static class Reduce extends Reducer{ } /********** End **********/ public static void main(String[] args) throws Exception { //创建配置信息 Configuration conf = new Configuration(); // 创建任务 Job job = Job.getInstance(conf); //如果输出目录存在,我们就删除 String outputpath = "/root/files"; Path path = new Path(outputpath); FileSystem fileSystem = path.getFileSystem(conf); if (fileSystem.exists(path)) { fileSystem.delete(path, true); } /********** Begin **********/ //设置执行类 //设置自定义Mapper类 //设置自定义Reducer类(若没用reduce可删除) //设置map函数输出数据的key和value的类型 //设置reduce函数输出数据的key和value的类型(若没用reduce可删除) //设置输入输出路径 /********** End **********/ //提交作业,若成功返回true,失败返回falase boolean b = job.waitForCompletion(true); if (b
最新发布
03-21
### Hadoop MapReduce 中 Mapper 和 Reducer 的实现与 Job 配置 #### 1. Mapper 类的实现 Mapper 是 MapReduce 程序的核心组件之一,负责处理输入数据并将它们转换为中间键值对。如果未显式定义,则会使用默认的 `IdentityMapper`。 在自定义实现时,需继承 `org.apache.hadoop.mapreduce.Mapper` 接口,并重写其方法: - **setup() 方法**: 初始化阶段运行一次。 - **map() 方法**: 对每条输入记录调用一次。 - **cleanup() 方法**: 处理完成后运行一次。 以下是示例代码片段: ```java import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class WordCountMapper extends Mapper<LongWritable, Text, Text, LongWritable> { private final static LongWritable one = new LongWritable(1); private Text word = new Text(); @Override protected void setup(Context context) throws IOException, InterruptedException { // 可在此处初始化资源或变量 } @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); for (String token : line.split("\\s+")) { // 假设以空格分割单词 word.set(token); context.write(word, one); // 输出<word, 1> } } @Override protected void cleanup(Context context) throws IOException, InterruptedException { // 清理操作可放在这里 } } ``` 上述代码实现了简单的词频统计功能[^2]。 --- #### 2. Reducer 类的实现 Reducer 负责接收来自多个 Mapper 的相同 Key 的 Value 列表,并对其进行汇总或其他计算逻辑。如果不提供自定义 Reducer,默认会使用 `IdentityReducer`。 同样需要继承 `org.apache.hadoop.mapreduce.Reducer` 并覆盖相应的方法: - **setup() 方法**: 减少任务启动前的一次性设置工作。 - **reduce() 方法**: 按照相同的 Key 合并所有的 Values。 - **cleanup() 方法**: 执行清理动作。 下面是一个典型的 Reducer 实现例子: ```java import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class WordCountReducer extends Reducer<Text, LongWritable, Text, LongWritable> { @Override protected void setup(Context context) throws IOException, InterruptedException { // 设置环境参数等 } @Override protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException { long sum = 0L; for (LongWritable val : values) { sum += val.get(); // 将所有值相加得到总数 } context.write(key, new LongWritable(sum)); // 输出<word, total_count> } @Override protected void cleanup(Context context) throws IOException, InterruptedException { // 关闭连接或者释放资源 } } ``` 此部分展示了如何将 Mapper 发送过来的结果进一步加工成最终输出[^3]。 --- #### 3. Job 配置实例分析 为了使整个流程正常运作起来,还需要编写驱动程序来配置和提交作业。这通常涉及以下几个方面: - 输入路径、输出路径设定; - 自定义 Mapper 和 Reducer 注册; - 数据序列化格式声明; - Combiner 或 Partitioner 定义(如有必要); 完整的 Java 示例如下所示: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class WordCountDriver { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "Word Count Example"); job.setJarByClass(WordCountDriver.class); FileInputFormat.addInputPath(job, new Path(args[0])); // 输入目录 FileOutputFormat.setOutputPath(job, new Path(args[1])); // 输出目录 job.setMapperClass(WordCountMapper.class); job.setCombinerClass(WordCountReducer.class); // 使用 Reduce 功能作为 Combine 步骤优化性能 job.setReducerClass(WordCountReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` 这段脚本设置了基本的工作流结构,并指定了所需的类文件位置以及 I/O 参数[^1]。 --- ### 总结说明 以上分别介绍了 Mapper 和 Reducer 的具体编码方式及其背后原理,同时也提供了实际应用中的 Driver 设计思路。通过这些步骤可以构建出一个标准的分布式批处理应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值