Apache Hadoop--集群部署

知识点01:Apache Hadoop–概述与起源发展

1.1、Hadoop介绍

  • 狭义上:hadoop指的是Apache一款java开源软件,是一个大数据分析处理平台。
    • Hadoop HDFS:分布式文件系统。 解决了海量数据存储问题。
      Hadoop Distributed File System (HDFS™)

    • Hadoop MapReduce:分布式计算框架。解决海量数据计算问题。
      parallel processing of large data sets.

    • Hadoop YARN:集群资源管理和任务调度。
      A framework for job scheduling and cluster resource management.

      #资源指的是和程序运行相关的硬件资源
      cpu ram内存
      
      #任务调度
      集群资源繁忙的时候 如何分配资源给各个程序  调度
      调度的关键是策略:先来后到  权重
      
  • 广义上:Hadoop指的是hadoop生态圈。
    提供了大数据的几乎所有软件。
    采集、存储、导入、分析、挖掘、可视化、管理…

1.2、Hadoop起源发展

  • Hadoop之父–Doug Cutting 卡大爷

  • 起源项目Apache Nutch。 致力于构建一个全网搜索引擎。
    1、爬取互联网网页 —>存储在哪里? 海量数据存储问题

    2、基于网页创建倒排索引。--->如何计算?  海量数据计算问题
    
  • Google也在做搜索,也遇到这些问题,内部解决了。

    • google不想开源软件,但是又憋的难受,怕被人不知道,写论文发表。
    • 前后写了3篇论文(谷歌是使用c实现的)。
      谷歌分布式文件系统(GFS)------>HDFS
      谷歌版MapReduce 系统------>Hadoop MapReduce
      bigtable---->HBase
    • 基于论文的影响 Nutch团队实现了相应的java版本开源组件。
  • Nutch团队把HDFS和MapReduce抽取独立成为单独软件在2008年贡献给了Apache。开源。

  • Doug Cutting 看到他儿子在牙牙学语时,抱着黄色小象,亲昵的叫hadoop,他灵光一闪,就把这技术命名为 Hadoop,而且还用了黄色小象作为标示 Logo。


知识点02:Apache Hadoop–特性优点(分布式、通用、简单易用)

  • 分布式、扩容能力
    不再注重单机能力 看中的是集群的整体能力。
    动态扩容、缩容。

  • 成本低
    在集群下 单机成本很低 可以是普通服务器组成集群
    意味着大数据处理不一定需要超级计算机。

  • 高效率 并发能力

  • 可靠性

  • 通用性
    #技术是相同的 业务不相同的
    #hadoop精准区分技术和业务。

    做什么?(what need to do)---->业务问题(20%)
    怎么做?(how to do)----->技术问题(80%)
    
    Hadoop把技术实现了 用户负责业务问题。
    
    原来大数据这么简单 可以这么玩。
    

知识点03:Apache Hadoop–发行版本与自身版本发展

3.1、发行版本

  • 官方社区版本 Apache基金会官方
    • 版本新 功能最全的
    • 不稳定 兼容性需要测试 bug多
  • 商业版本 商业公司在官方版本之上进行商业化发行。著名:Cloudera、hotonWorks、MapR
    • 稳的一批 兼容性极好 技术支持 本地化支持 一键在线安装

    • 版本不一定是最新的 辅助工具软件需要收费
      Cloudera发行的hadoop生态圈软件叫做CDH版本。
      Cloudera’s Distribution Including Apache Hadoop。

      https://www.cloudera.com/products/open-source/apache-hadoop/key-cdh-components.html
      
      Hortonworks Data Platform (HDP)
      
  • 本课程中 使用的是Apache 3.3.0版本。

3.2、Hadoop本身版本变化

  • hadoop 1.x
    只有hdfs mapreduce. 架构过于垃圾 性能不高 当下企业中没人使用了。
  • hadoop 2.x
    hdfs MapReduce yarn.
  • hadoop 3.x
    架构和2一样 性能做了优化

知识点04:Apache Hadoop–集群架构与集群角色介绍

  • 通常是有hdfs集群和yarn集群组成。两个集群都是标准的主从架构集群。
  • 两个集群逻辑上分离 物理上在一起。
  • HDFS集群:解决了海量数据存储 分布式存储系统
    • 主角色:namenode(NN)
    • 从角色:datanode(DN)
    • 主角色辅助角色"秘书角色":secondarynamenode (SNN)
  • YARN集群:集群资源管理 任务调度
    • 主角色:resourcemanager(RM)
    • 从角色:nodemanager(NM)

知识点05:Apache Hadoop–集群部署–Hadoop安装部署模式

  • 单机模式 Standalone
    一台机器,所有的角色在一个java进程中运行。 适合体验。
  • 伪分布式
    一台机器 每个角色单独的java进程。 适合测试
  • 分布式 cluster
    多台机器 每个角色运行在不同的机器上 生产测试都可以
  • 高可用(持续可用)集群 HA
    在分布式的模式下 给主角色设置备份角色 实现了容错的功能 解决了单点故障
    保证集群持续可用性。

知识点06:Apache Hadoop–集群部署–了解源码编译

https://archive.apache.org/dist/

Apache软件基金会的所有软件所有版本的下载地址.

  • 源码下载地址
    https://archive.apache.org/dist/hadoop/common/

    hadoop-3.3.0-src.tar.gz    source 源码包
    hadoop-3.3.0.tar.gz        官方编译后安装包
    
  • 对应java语言开发的项目软件来说,所谓的编译是什么?
    xxx.java(源码)---->xxx.class(字节码)---->jar包

  • 正常来说,官方网站提供了安装包,可以直接使用,为什么要自己编译呢?

    • 修改源码之后需要重新编译。
    • 官方提供的最大化编译 满足在各个平台运行,但是不一定彻底兼容本地环境。
    • 某些软件,官方只提供源码。
      native library 本地库。
      官方编译好的 Hadoop的安装包没有提供带 C程序访问的接口。主要是本地压缩支持、IO支持。
  • 怎么编译?
    在源码的根目录下有编译相关的文件BUILDING.txt 指导如何编译。
    使用maven进行编译 联网jar.

  • 可以使用课程提供编译好的安装包
    hadoop-3.3.0-Centos7-64-with-snappy.tar.gz


知识点07:Apache Hadoop–集群部署–集群规划

  • Hadoop集群的规划
    • 根据软件和硬件的特性 合理的安排各个角色在不同的机器上。
      • 有冲突的尽量不部署在一起
      • 有工作依赖尽量部署在一起
      • nodemanager 和datanode是基友
        node1: namenode datanode | resourcemanager nodemanger
        node2: datanode secondarynamenode| nodemanger
        node3: datanode | nodemanger
    • Q:如果后续需要扩容hadoop集群,应该增加哪些角色呢?
      node4: datanode nodemanger
      node5: datanode nodemanger
      node6: datanode nodemanger

知识点08:Apache Hadoop–集群部署–服务器基础环境准备

8.1、服务器基础环境准备

ip、主机名
hosts映射 别忘了windows也配置
防火墙关闭
时间同步
免密登录  node1---->node1 node2 node3
JDK安装

8.2、安装包目录结构

#上传安装包到/export/server 解压

 bin    #hadoop核心脚本 最基础最底层脚本
 etc    #配置目录
 include
 lib
 libexec
 LICENSE.txt
 NOTICE.txt
 README.txt
 sbin  #服务启动 关闭 维护相关的脚本
 share #官方自带实例  hadoop相关依赖jar

知识点09:Apache Hadoop–集群部署–配置文件详解

官网文档:https://hadoop.apache.org/docs/r3.3.0/

  • 第一类 1个 hadoop-env.sh
  • 第二类 4个 core|hdfs|mapred|yarn-site.xml
    site表示的是用户定义的配置,会覆盖default中的默认配置。
    • core-site.xml 核心模块配置
    • hdfs-site.xml hdfs文件系统模块配置
    • mapred-site.xml MapReduce模块配置
    • yarn-site.xml yarn模块配置
  • 第三类 1个 workers

知识点10:Apache Hadoop–集群部署–scp同步、环境变量配置

  • scp安装包到其他机器
    cd /export/server

    scp -r hadoop-3.3.0 root@node2:$PWD
    scp -r hadoop-3.3.0 root@node3:$PWD
    
  • Hadoop环境变量配置
    vim /etc/profile

    export HADOOP_HOME=/export/server/hadoop-3.3.0
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    source /etc/profile
    
    #别忘了 scp环境变量给其他两台机器哦
    

知识点11:Apache Hadoop–集群部署–namenode format操作

  • format准确来说翻译成为初始化比较好。对namenode工作目录、初始文件进行生成。

  • 通常在namenode所在的机器执行 执行一次。首次启动之前
    #在node1 部署namenode的这台机器上执行

    hadoop namenode -format
    
    #执行成功 日志会有如下显示
    21/05/23 15:38:19 INFO common.Storage: Storage directory /export/data/hadoopdata/dfs/name has been successfully formatted.
    
    [root@node1 server]# ll /export/data/hadoopdata/dfs/name/current/
    total 16
    -rw-r--r-- 1 root root 321 May 23 15:38 fsimage_0000000000000000000
    -rw-r--r-- 1 root root  62 May 23 15:38 fsimage_0000000000000000000.md5
    -rw-r--r-- 1 root root   2 May 23 15:38 seen_txid
    -rw-r--r-- 1 root root 207 May 23 15:38 VERSION
    
  • Q:如果不小心初始化了多次,如何?

    • 现象:主从之间互相不识别。

    • 解决
      #企业真实环境中 枪毙

      #学习环境
      删除每台机器上hadoop.tmp.dir配置指定的文件夹/export/data/hadoop-3.3.0。 
      重新format。
      

知识点12:Apache Hadoop–集群启停–命令与状态日志查看

12.1、单节点单进程逐个手动启动

  • HDFS集群
    #hadoop2.x版本命令
    hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode

    #hadoop3.x版本命令
    hdfs --daemon start|stop namenode|datanode|secondarynamenode
    
  • YARN集群
    #hadoop2.x版本命令
    yarn-daemon.sh start|stop resourcemanager|nodemanager

    #hadoop3.x版本命令
    yarn --daemon start|stop resourcemanager|nodemanager
    
  • 优点:精准的控制每个角色每个进程的启停。避免了群起群停(时间成本)。

12.2、脚本一键启动

  • 前提:配置好免密登录。ssh
    ssh-copy-id node1.itcast.cn
    ssh-copy-id node2.itcast.cn
    ssh-copy-id node3.itcast.cn

  • HDFS集群
    start-dfs.sh
    stop-dfs.sh

  • YARN集群
    start-yarn.sh
    stop-yarn.sh

  • 更狠的
    start-all.sh
    stop-all.sh

    [root@node1 ~]# start-all.sh 
    This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
    

12.3、集群进程确认和错误排查

  • 确认是否成功
    [root@node1 ~]# jps
    8000 DataNode
    8371 NodeManager
    8692 Jps
    8264 ResourceManager
    7865 NameNode

  • 如果进程不在 看启动运行日志!!!!!!!!!!!!!
    #默认情况下 日志目录
    cd /export/server/hadoop-3.3.0/logs/

    #注意找到对应进程名字 以log结尾的文件
    

知识点13:Apache Hadoop–Web UI页面

  • Hadoop Web UI页面
    • HDFS集群 http://namenode_host:9870
    • YARN集群 http://resourcemanager_host:8088
      http://node1:9870/dfshealth.html#tab-overview

知识点14:Apache Hadoop–初体验

14.1、初体验之HDFS

  • 本质就是存储文件的 和标准文件系统一样吗?
    • 也是有目录树结构,也是从根目录开始的。
    • 文件是文件、文件夹是文件夹(对于zk来说)
    • 和linux很相似
    • 上传小文件好慢。为什么慢?和分布式有没有关系?

14.2、体验之MapReduce+yarn

  • MapReduce是分布式程序 yarn是资源管理 给程序提供运算资源。 Connecting to ResourceManager
    [root@node1 mapreduce]# pwd
    /export/server/hadoop-3.3.0/share/hadoop/mapreduce

    hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi  2 2
    
  • MR程序运行首先连接YRAN ResourceManager,连接它干什么的?要资源。

  • MR程序好像是两个阶段 ,先Map 再Reduce。

  • 数据量这么小的情况下,为什么MR这么慢? MR适合处理大数据场景还是小数据场景?


知识点15:Apache Hadoop–jobhistory服务配置与功能

  • 背景
    默认情况下,yarn上关于MapReduce程序执行历史信息、执行记录不会永久存储;
    一旦yarn集群重启 之前的信息就会消失。

  • 功能
    保存yarn上已经完成的MapReduce的执行信息。

  • 配置

    • 因为需求修改配置。重启hadoop集群才能生效。
      vim mapred-site.xml

      <property>
      	<name>mapreduce.jobhistory.address</name>
      	<value>node1:10020</value>
      </property>
      
      <property>
      	<name>mapreduce.jobhistory.webapp.address</name>
      	<value>node1:19888</value>
      </property>
      
    • scp同步给其他机器
      scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node2:/export/server/hadoop-3.3.0/etc/hadoop/

      scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node3:/export/server/hadoop-3.3.0/etc/hadoop/
      
    • 重启hadoop集群

    • 自己手动启停jobhistory服务。
      #hadoop2.x版本命令
      mr-jobhistory-daemon.sh start|stop historyserver

      #hadoop3.x版本命令
      mapred --daemon start|stop historyserver
      
      [root@node1 ~]# jps
      13794 JobHistoryServer
      13060 DataNode
      12922 NameNode
      13436 NodeManager
      13836 Jps
      13327 ResourceManager
      

知识点16:Apache Hadoop–HDFS垃圾桶机制

  • 背景:垃圾桶在windows叫做回收站
    在默认情况下 hdfs没有垃圾桶 意味着删除操作直接物理删除文件。

    [root@node1 ~]# hadoop fs -rm /itcast/1.txt
    Deleted /itcast/1.txt
    
  • 功能:和回收站一种 在删除数据的时候 先去垃圾桶 如果后悔可以复原。

  • 配置
    在core-site.xml中开启垃圾桶机制

    指定保存在垃圾桶的时间。单位分钟
    
    <property>
    	<name>fs.trash.interval</name>
    	<value>1440</value>
    </property>
    
  • 集群同步配置 重启hadoop服务。
    [root@node1 hadoop]# pwd
    /export/server/hadoop-3.3.0/etc/hadoop
    [root@node1 hadoop]# scp core-site.xml node2:KaTeX parse error: Expected 'EOF', got '#' at position 125: …t@node1 hadoop]#̲ scp core-site.…PWD
    core-site.xml

  • 垃圾桶使用

    • 配置好之后 再删除文件 直接进入垃圾桶
      [root@node1 ~]# hadoop fs -rm /itcast.txt
      INFO fs.TrashPolicyDefault: Moved: ‘hdfs://node1:8020/itcast.txt’ to trash at: hdfs://node1:8020/user/root/.Trash/Current/itcast.txt
  • 垃圾桶的本质就是hdfs上的一个隐藏目录。
    hdfs://node1:8020/user/用户名/.Trash/Current

  • 后悔了 需要恢复怎么做?
    hadoop fs -cp /user/root/.Trash/Current/itcast.txt /

  • 就想直接删除文件怎么做?
    hadoop fs -rm -skipTrash /itcast.txt

      [root@node1 ~]#  hadoop fs -rm -skipTrash /itcast.txt
      Deleted /itcast.txt
    

今日作业

  • 复习讲义,课堂笔记
  • 搭建Hadoop集群
  • 预先Hadoop HDFS
    • 本质就是文件系统 和linux很类似 学习成本使用成本很低
    • 其次是分布式的文件系统 分布式使得它的底层原理特性很多。

Hadoop配置文件参考

  • hadoop-env.sh
    #java home
    export JAVA_HOME=/export/server/jdk1.8.0_241

    #Hadoop各个组件启动运行身份
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root 
    
  • core-site.xml


    fs.defaultFS
    hdfs://node1:8020

    <!-- 设置Hadoop本地保存数据路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/export/data/hadoop-3.3.0</value>
    </property>
    
    <!-- 设置HDFS web UI用户身份 -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
    
    <!-- 整合hive 用户代理设置 -->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
    <!-- 文件系统垃圾桶保存时间 单位:分 -->
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
    
  • hdfs-site.xml


    dfs.namenode.secondary.http-address
    node2:9868

  • mapred-site.xml


    mapreduce.framework.name
    yarn

    <!-- MR程序历史服务器端地址 -->
    <property>
      <name>mapreduce.jobhistory.address</name>
      <value>node1:10020</value>
    </property>
     
    <!-- 历史服务器web端地址 -->
    <property>
      <name>mapreduce.jobhistory.webapp.address</name>
      <value>node1:19888</value>
    </property>
    
    <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    
  • yarn-site.xml


    yarn.resourcemanager.hostname
    node1

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    
    <!-- 是否将对容器实施物理内存限制 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    
    <!-- 是否将对容器实施虚拟内存限制。 -->
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    
    <!-- 开启日志聚集 -->
    <property>
      <name>yarn.log-aggregation-enable</name>
      <value>true</value>
    </property>
    
    <!-- 设置yarn历史服务器地址 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://node1:19888/jobhistory/logs</value>
    </property>
    
    <!-- 日志保存的时间 7天 -->
    <property>
      <name>yarn.log-aggregation.retain-seconds</name>
      <value>604800</value>
    </property>
    
  • workers
    node1.itcast.cn
    node2.itcast.cn
    node3.itcast.cn

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值