Hadoop Core_MapReduce总结(三)

本文介绍MapReduce Shell的应用,包括查看与管理Job任务的方法,以及MapReduce的技术特征,如横向扩展、错误恢复机制、数据本地性、顺序数据处理、推测执行、可扩展性和抽象机制。

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

四、 MapReduce Shell 应用

1、MapReduce 的二级命令

mapred 称为一级命令,直接输入 mapred 回车,即可查看二级命令:

2、MapReduce 的三级命令

输入一级命令 mapred 后,再任意输入一个二级命令,即可查看三级命令:

3、MapReduce shell 应用

   查看当前正在执行的 job 任务

先提交一个 WordCount 任务,然后使用 mapred job -list 查看任务列表

  终止(kill)一个任务的执行

  构造场景:先提交一个 WordCount job,然后通过 kill job-id 来终止任务

  查看一个 job 的日志

  命令格式为:mapred job -logs job-id

五、 MapReduce 技术特征

1、向“外”横向扩展,而非向“上”纵向扩展

  • 集群的构建完全选用价格便宜、易于扩展的低端商用服务器,而非价格昂贵不易扩展的商用服务
  • 大规模数据处理和大规模数据存储的需要,讲求集群综合能力,而非单台机器处理能力,横向增加机器节点数据量

 

2、失效被认为是常态

  • 使用大量普通服务器,节点硬件和软件出错是常态
  • 具备多种有效的错误检测和恢复机制,在某个计算节点失效后会自动转移到别的计算节点。某个任务节点失败后其他节点能够无缝接管失效节点的计算任务
  • 当失效节点恢复后自动无缝加入集群,不需要管理员人工进行系统配置

3、移动计算,把处理向数据迁移(数据本地性)

  • 采用代码/数据互定位的功能,计算和数据在同一个机器节点或者是同一个机架中,发挥数据本地化特点
  • 可避免跨机器节点或是机架传输数据,提高运行效率

4、顺序处理数据、避免随机访问数据

  • 磁盘的顺序访问远比随机访问快得多,因此 MapReduce 设计为面向顺序式大规模数据的磁盘访问处理
  • 利用集群中的大量数据存储节点同时访问数据,实现面向大数据集批处理的高吞吐量的并行处理

5、推测执行

  • 一个作业由若干个 Map 任务和 Reduce 任务构成,整个作业完成的时间取决于最慢的任务的完成时间。由于节点硬件、软件问题,某些任务可能运行很慢
  • 采用推测执行机制,发现某个任务的运行速度远低于任务平均速度,会为慢的任务启动一个备份任务,同时运行。哪个先运行完,采用哪个结果。

6、平滑无缝的可扩展性

  • 可弹性的增加或减少集群计算节点来调节计算能力
  • 计算的性能随着节点数的增加保持接近线性程度的增长

7、为应用开发这隐藏系统底层细节

  • 并行编程有很多困难,需要考虑多线程中复杂繁琐的细节,诸如分布式存储管理、数据分发、数据通信和同步、计算结果收集等细节问题。
  • MapReduce 提供了一种抽象机制将程序员与系统层细节隔离开,程序员只需关注业务,其他具体执行交由框架处理即可。
### Hadoop 环境变量的用途与配置方法 #### JAVA_HOME `JAVA_HOME` 是用于指定 Java 安装路径的关键环境变量。Hadoop 运行依赖于 Java,因此需要通过 `JAVA_HOME` 来告知 Hadoop 使用哪个版本的 JDK 或 JRE。通常情况下,在 Hadoop 的配置文件中会设置此变量以便程序能够找到所需的 Java 执行工具和库文件[^1]。 ```bash export JAVA_HOME=/opt/module/hadoop/jdk ``` #### HADOOP_COMMON_HOME 虽然官方文档并未强制要求定义 `HADOOP_COMMON_HOME` 变量,但在某些场景下它被用来指向 Hadoop Common 库所在的目录。这些库包含了支持其他模块的基础类和服务实现。如果未显声明,则默认采用 `$HADOOP_HOME/share/hadoop/common` 路径作为其值。 #### HADOOP_HDFS_HOME 类似于上述提到的共同组件位置设定方,`HADOOP_HDFS_HOME` 主要服务于分布文件系统的特定需求部分。当存在多个子项目或者插件扩展时尤为有用;如果没有特别定制化安装结构的话,默认也是继承自根级别的主目录布局即 `$HADOOP_HOME`. #### HADOOP_CONF_DIR 为了便于管理和维护不同集群间的差异性参数调整工作,可以通过单独设立一个专门存放 XML 配置文件夹来统一管理所有的站点级别属性定义(如 core-site.xml, hdfs-site.xml)。此时就需要借助 `HADOOP_CONF_DIR` 明确指出实际使用的配置所在之处而非仅仅依靠内置猜测逻辑去寻找标准相对路径下的预设选项列表[^2]. ```bash export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/ ``` #### CLASSPATH_PREPEND_DISTCACHE 这一项较少见于常规部署流程之中,主要用于控制是否应该优先加载远程缓存中的资源而不是本地副本。对于那些频繁更新作业所需素材而又希望减少同步延迟的应用场合来说可能具备一定价值。然而大多数时候保持为空即可满足基本操作需求无需额外干预。 #### HADOOP_YARN_HOME 和 HADOOP_MAPRED_HOME 这两个分别对应 YARN (Yet Another Resource Negotiator) 组件以及 MapReduce 计算框架各自的独立运行空间划分。尽管它们都归属于整个生态系统的一部分并共享许多公共资源池,但是各自又有独特的功能侧重方向所以有必要加以区分对待从而更好地组织内部关系网络图谱[^3]^. 总结起来就是: - **Yarn**: 处理任务调度分配等问题; - **Mapreduce**: 提供数据处理算法执行平台服务等功能特性集合体。 以下是两个典型例子展示如何正确地完成相应初始化过程: ```bash # 设置 YARN home export HADOOP_YARN_HOME=$HADOOP_HOME # 设置 MAPREDUCE home export HADOOP_MAPRED_HOME=$HADOOP_HOME ``` 最后值得注意的是除了以上列举出来的几个重要组成部分之外还有很多其他的辅助型角色同样发挥着不可或缺的作用比如 workers 文件里罗列的工作节点清单等等都需要按照实际情况合理规划安排才能构建起高效稳定的生产环境体系架构[^4][^5]. ```python def check_hadoop_env(): import os java_home = os.getenv('JAVA_HOME') hadoop_home = os.getenv('HADOOP_HOME') if not all([java_home, hadoop_home]): raise EnvironmentError("Environment variables are not set properly.") print(f"Java Home is {java_home}") print(f"Hadoop Home is {hadoop_home}") check_hadoop_env() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值