01-Hadoop

一、hadoop简介

1、优势

  1. 高可靠性:底层维护多个数据副本,所以即使hadoop某个计算元素或存储出现故障也不会导致数据丢失。
  2. 高扩展性:在集群间分配任务数据,可方便扩展很多节点
  3. 高效性:在MapRedurce的思想下,Hadoop是并行工作的,以加快任务的处理。
  4. 高容错性:能够自动将失败的任务重新分配

2、hadoop中的组件

在hadoop不久之后,由于MR的低效性,出现了许多更为高效的计算框架!
例如: Tez,Storm,Spark,Flink

3、HDFS

必须进程:

①Namenode(1个): 负责文件,名称等元数据(属性信息)的存储!

          文件名,大小,文件切分了多少块(block),创建和修改时间等!

  职责: 接受客户端的请求!

      接受DN的请求!

         向DN分配任务!

②Datanode(N个): 负责文件中数据的存储!

  职责: 负责接受NM分配的任务!

         负责数据块(block)的管理(读,写)!

可选进程:

①SecondaryNamenode(N个): 负责辅助NameNode工作!

4、MapReduce

① MapReduce是一个编程模型!这个模型由两个阶段组成,一个称为Map阶段,另一个称为Reduce阶段!

  在Map阶段和Reduce阶段分别启动若干进程负责运算!这些进程称为Task!

② 在Map阶段启动的Task称为MapTask!

     在Reduce阶段启动的Task称为ReduceTask!

③ 将一个MapReduce程序称为一个Job,一个Job中会启动若干个Task!

④ 在Job启动时,Job会先创建一个MRAppMaster进程,由这个进程和RM进行通信,为Job中的每个Task申请计算所需要的资源!

⑤ Task的请求,会被RM缓存到一个调度队列中,由NM领取Task,领取后NM会根据Task要求,提供计算资源!

 提供后,为了避免计算资源在当前Task使用时被其他的task抢占,NM会将资源封装到一个Container中!

⑥ Container可以对计算资源进行隔离!

5、YARN

YARN负责集群中所有计算资源的管理和调度!

核心进程:

① ResourceManager(1个): 负责整个集群所有资源的管理!

  职责: 负责接受客户端的提交Job的请求!

         负责向NM分配任务!

         负责接受NM上报的信息!

② NodeManager(N个):  负责单台计算机所有资源的管理!

  职责: 负责和RM进行通信,上报本机中的可用资源!
         负责领取RM分配的任务!
         负责为Job中的每个Task分配计算资源!

概念:
Container(容器): NodeManager为Job的某个Task分配了2个CPU和2G内存的计算资源。为了防止当前Task在使用这些资源期间,被其他的task抢占资源。将计算资源,封装到一个Container中,在Container中的资源,会被暂时隔离,无法被其他进程所抢占。当前Task运行结束后,当前Container中的资源会被释放!允许其他task来使用。

二、hadoop安装

1、环境要求

必须保证已经安装了JDK,有JAVA_HOME环境变量!

2、安装

解压在linux下编译的Hadoop!

3、建议将HADOOP_HOME提升为全局变量

后续的HADOOP体系中的所有的框架,都通过HADOOP_HOME找到hadoop的安装目录!

将bin,sbin目录配置到PATH中!

4、目录结构

bin: 常用的工具hadoop所在的目录

sbin: 提供对集群的管理功能,例如启动和停止进程!

etc: 默认的配置文件目录

三、hadoop的使用

1、配置文件

hadoop有4个默认我配置文件,这4个文件会随着Hadoop启动时,自动加载。如果希望对这4个文件加载的默认属性进行覆盖!用户需要自定义配置文件!

文件格式:
core-site.xml----->core-default.xml
hdfs-site.xml----->hdfs-default.xml
yarn-site.xml----->yarn-default.xml
mapred-site.xml----->mapred-default.xml

默认配置文件目录: $HADOOP_HOME/etc/hadoop

2、HDFS的运行模式

① 本地模式: 使用当前计算机的文件系统作为HDFS的文件系统!
fs.defaultFS=file:///(默认)

② 分布式文件系统: 通过运行NN,DN等进程,由这些进程组成一个分布式的系统,进行文件的读写!
fs.defaultFS=hdfs://NN所在的主机名:9000

3、启动一个分布式文件系统

① 在$HADOOP_HOME/etc/hadoop,配置core-site.xml

fs.defaultFS=hdfs://NN所在的主机名:9000

② 配置Hadoop默认的工作目录,在$HADOOP_HOME/etc/hadoop,配置core-site.xml

hadoop.tmp.dir=配置一个当前用户有写权限的非tmp目录

③ 格式化NN

hadoop namenode -format

目的: 1)生成NN的工作目录

    2)在工作目录下生成NN所要使用的特殊的文件,例如VERSION,fsiamge000000

注意: 一个集群搭建完成后,只需要格式化一次!

④ 启动

hadoop-daemon.sh start namenode|datanode

⑤ 查看
jps

http://NN所运行的主机名:50070

4、MR的运行模式

本地模式: 在本机使用多线程的方式模拟多个Task的运行!
mapreduce.framework.name=local(默认)

分布式模式: 在YARN上运行!
mapreduce.framework.name=yarn(默认)

5、配置MR在yarn上运行

① 在$HADOOP_HOME/etc/hadoop,配置mapred-site.xml
mapreduce.framework.name=yarn

②配置YARN
在$HADOOP_HOME/etc/hadoop,配置yarn-site.xml
配置yarn.resourcemanager.hostname=RM运行的主机名
yarn.xxxx-auxservice=mapreduce_shuffle

③启动YARN
yarn-daemon.sh start resourcemanager | nodemanager

④查看
jps
http://rm所运行的主机名:8088

⑤提交作业
hadoop jar xxx.jar 主类名 输入目录.. 输出目录

要求: 输出目录必须不存在,输入目录中必须全部是文件

posted @ 2022-02-27 14:52  bug开发工程师  阅读(33)  评论(0编辑  收藏  举报