hadoop离线day02--Apache Hadoop

hadoop离线day02--Apache Hadoop


内容大纲

#Apache Hadoop入门
    介绍概念  狭义  广义
    hadoop起源
    hadoop特性优点
#Apache Hadoop搭建
    hadoop集群 主从架构
        hdfs集群 yarn集群
    集群角色 集群规划
    集群配置
    format初始化
    启停脚本
    webUI页面
    hadoop初体验   现象与疑惑 后续学习方向
#Apache hadoop辅助功能
    jobhistory服务 查看历史执行记录
    文件系统垃圾桶机制 回收站

Apache Hadoop入门

  • 介绍

    • 狭义上:hadoop指的是Apache一款java开源软件,是一个大数据分析处理平台。

      • Hadoop ==HDFS:分布式文件系统==。 解决了海量数据存储问题。

        Hadoop Distributed File System (HDFS™)
      • Hadoop ==MapReduce:分布式计算框架==。解决海量数据计算问题。

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

    • 广义上:Hadoop指的是==hadoop生态圈==。

      提供了大数据的几乎所有软件。
      采集、存储、导入、分析、挖掘、可视化、管理...
  • 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。

  • Hadoop特性优点

    • ==分布式、扩容能力==

      不再注重单机能力 看中的是集群的整体能力。
      动态扩容、缩容。
    • ==成本低==

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

    • ==可靠性==

    • ==通用性==

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

Apache Hadoop集群搭建

  • 发行版本

    • ==官方社区版本== 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 2.7.5==稳定版本。

  • Hadoop本身版本变化

    • hadoop 1.x

      只有hdfs mapreduce. 架构过于垃圾 性能不高 当下企业中没人使用了。
    • ==hadoop 2.x==

      hdfs MapReduce  yarn  尤其2.x高系列版本 2.6~2.9 当下企业中使用最多。
    • hadoop 3.x

      架构和2一样 性能做了优化
  • Hadoop集群

    • 通常是有==hdfs集群==和==yarn集群==组成。两个集群都是标准的==主从架构==集群。

    • 两个集群逻辑上分离 物理上在一起。

    • HDFS集群:解决了海量数据存储 分布式存储系统

      • 主角色:namenode(NN)

      • 从角色:datanode(DN)

      • 主角色辅助角色"秘书角色":secondarynamenode (SNN)

    • YARN集群:集群资源管理 任务调度

      • 主角色:resourcemanager(RM)

      • 从角色:nodemanager(NM)

  • Hadoop部署模式

    • 单机模式 Standalone

      一台机器,所有的角色在一个java进程中运行。 适合体验。
    • 一台机器 每个角色单独的java进程。 适合测试
    • ==分布式 cluster==

      多台机器  每个角色运行在不同的机器上  生产测试都可以
    • 高可用集群 HA

      在分布式的模式下 给主角色设置备份角色  实现了容错的功能 解决了单点故障
      保证集群持续可用性。
  • 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
      .....
  • Hadoop源码编译

    • 源码下载地址

      https://archive.apache.org/dist/hadoop/common/
      ​
      hadoop-2.7.5-src.tar.gz    source 源码包
      hadoop-2.7.5.tar.gz        官方编译后安装包
    • 对应java语言开发的项目软件来说,所谓的==编译==是什么?

      xxx.java(源码)---->xxx.class(字节码)---->jar包
    • 正常来说,官方网站提供了安装包,可以直接使用,为什么要自己编译呢?

      • ==修改源码==之后需要重新编译。

      • 官方提供的最大化编译 满足在各个平台运行,但是不一定彻底==兼容本地环境==。

      • 某些软件,官方只提供源码。

      native library 本地库。
      官方编译好的 adoop的安装包没有提供带 C程序访问的接口。主要是本地压缩支持、IO支持。
    • 怎么编译?

      在源码的根目录下有编译相关的文件BUILDING.txt 指导如何编译。
      使用maven进行编译 联网jar.
    • 可以使用课程提供编译好的安装包

      hadoop-2.7.5-with-snappy-centos7.tar.gz

Hadoop具体安装部署

  • 服务器基础环境准备

    ip、主机名
    hosts映射 别忘了windows也配置(C:\Windows\System32\drivers\etc\hosts)   
    防火墙关闭
    时间同步
    免密登录  node1---->node1 node2 node3
    JDK安装
  • 安装包目录结构

    #上传安装包到/export/server 解压
    ​
     bin    #hadoop核心脚本 最基础最底层脚本
     etc    #配置目录
     include
     lib
     libexec
     LICENSE.txt
     NOTICE.txt
     README.txt
     sbin  #服务启动 关闭 维护相关的脚本
     share #官方自带实例  hadoop相关依赖jar
  • 配置文件的修改

    https://hadoop.apache.org/docs/r2.7.5/
    • 第一类 1个 ==hadoop-env.sh==

      [root@node1 hadoop]# pwd
      /export/server/hadoop-2.7.5/etc/hadoop
      ​
      export JAVA_HOME=/export/server/jdk1.8.0_65
    • 第二类 4个 ==core|hdfs|mapred|yarn-site.xml==

      • site表示的是用户定义的配置,会覆盖default中的默认配置。

      • ==core-site.xml== 核心模块配置

        
        
                fs.defaultFS
                hdfs://node1:8020
        
                hadoop.tmp.dir
                /export/data/hadoopdata
        
        
      • ==hdfs-site.xml== hdfs文件系统模块配置

        
        
                dfs.namenode.secondary.http-address
                node2:50090
        
        
      • ==mapred-site.xml== MapReduce模块配置

        mv mapred-site.xml.template mapred-site.xml
        vi mapred-site.xml
        ​
        
        
        
                mapreduce.framework.name
                yarn
        
        
      • yarn-site.xml yarn模块配置

        
        
            yarn.resourcemanager.hostname
            node1
        
            
        
        
            yarn.nodemanager.aux-services
            mapreduce_shuffle
        
        
          yarn.log-aggregation-enable
          true
        
        
          yarn.log-aggregation.retain-seconds
          604800
        
    • 第三类 1个 ==slaves==

      • 指定各个从角色位置信息 便于==一键启动==的时候读取。

      • 配合hadoop安全管理 ==黑白名单机制==。

      • 一行写一个IP或者主机名

      node1
      node2
      node3
  • scp安装包到其他机器

    [root@node1 hadoop]# cd /export/server/
    [root@node1 server]# scp -r hadoop-2.7.5/ root@node2:$PWD
    [root@node1 server]# scp -r hadoop-2.7.5/ root@node3:$PWD
  • vim vim /etc/profile
    ​
    export HADOOP_HOME=/export/server/hadoop-2.7.5
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    ​
    #scp环境变量文件给其他机器
    [root@node1 server]# scp /etc/profile node2:/etc/
    [root@node1 server]# scp /etc/profile node3:/etc/
    ​
    #3台机器统一的source环境变量
    source /etc/profile
  • hadoop namenode format

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

    • 通常在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/hadoopdata。 重新format。
        #本方法会导致所有数据丢失,仅适合学习使用。
  • Hadoop集群启动

    • 单节点单进程逐个手动启动

      • HDFS集群

        hadoop-daemon.sh start|stop  namenode|datanode|secondarynamenode
      • YARN集群

        yarn-daemon.sh start|stop resourcemanager|nodemanager
      • 优点:精准的控制每个角色每个进程的启停。PS总不能每次都全部启停吧~ 机器多了怎么办启停一下花一整天嘛~~

    • 脚本一键启动

      • 前提:配置好免密登录。ssh

      • 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
  • 集群进程确认和错误排查

    • 确认是否成功

      [root@node1 ~]# jps
      8000 DataNode
      8371 NodeManager
      8692 Jps
      8264 ResourceManager
      7865 NameNode
      #node2,和node3的jps应该都不一样,需要结合本次设置来看,具体请看上面的hadoop的集群规划我贴图在下面对应看就好啦
    • hadoop离线day02--Apache Hadoop_第1张图片 我是集群规划的贴图
    • 如果进程不在 看启动运行日志!!!!!!!!!!!!!

      #默认情况下 日志目录
      cd /export/server/hadoop-2.7.5/logs/
      ​
      #注意找到对应进程名字 以log结尾的文件

Hadoop初体验

  • Hadoop Web UI页面

    • HDFS集群 http://namenode_host:50070

    • YARN集群 http://resourcemanager_host:8088

      (如果是根据我的配置安安分分配置的小伙伴可以直接用node1:50070|node1:8088直接网页登录啦~~~)

  • 初体验

    • 体验HDFS文件系统 :本质就是存储文件的 ,和标准文件系统一样吗?

      • 也是有目录树结构,也是从根目录开始的。

      • 文件是文件、文件夹是文件夹

      • 和linux很相似

      • 上传小文件好慢。==为什么慢?和分布式有没有关系?==

    • 体验MapReduce+yarn

      • MapReduce是分布式程序 yarn是资源管理 给程序提供运算资源。 Connecting to ResourceManager

        [root@node1 mapreduce]# pwd
        /export/server/hadoop-2.7.5/share/hadoop/mapreduce
        ​
        hadoop jar hadoop-mapreduce-examples-2.7.5.jar pi  2 2
      • MapReduce程序本质是java程序 意味着后面你要写代码。

      • MR程序运行首先连接YRAN ResourceManager,连接它干什么的?==要资源==。

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

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


Hadoop辅助功能

  • MapReduce jobhistory服务

    • 背景

      默认情况下,yarn上关于MapReduce程序执行历史信息  一旦yarn重启 就会消失。
      
      
      
    • 功能

      保存yarn上MapReduce的历史信息。
      
      
      
    • 配置

      • 因为需求修改配置。==重启hadoop集群==才能生效。

        vim mapred-site.xml
        ​
        
            mapreduce.jobhistory.address
            node1:10020
        
            mapreduce.jobhistory.webapp.address
            node1:19888
        
      • scp同步给其他机器

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

      • 自己手动启停jobhistory服务。

        [root@node1 ~]# mr-jobhistory-daemon.sh start historyserver
        starting historyserver, logging to /export/server/hadoop-2.7.5/logs/mapred-root-historyserver-node1.itcast.cn.out
        ​
        [root@node1 ~]# jps
        13794 JobHistoryServer
        13060 DataNode
        12922 NameNode
        13436 NodeManager
        13836 Jps
        13327 ResourceManager
        ​
        ​
        mr-jobhistory-daemon.sh stop historyserver
  • HDFS 垃圾桶机制

    • 背景 在windows叫做回收站 后悔药

      在默认情况下 hdfs没有垃圾桶 意味着删除操作直接物理删除文件。
      ​
      [root@node1 ~]# hadoop fs -rm /itcast/1.txt
      21/05/23 16:49:42 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
      Deleted /itcast/1.txt
    • 功能:和回收站一种 在删除数据的时候 先去垃圾桶 如果后悔可以复原。

    • 配置

      在core-site.xml中开启垃圾桶机制
      ​
      指定保存在垃圾桶的时间。
      ​
      
          fs.trash.interval
          1440
      
    • 集群同步配置 重启hadoop服务。

      [root@node1 hadoop]# pwd
      /export/server/hadoop-2.7.5/etc/hadoop
      [root@node1 hadoop]# scp core-site.xml node2:$PWD
      core-site.xml                                              100% 1027   898.7KB/s   00:00    
      [root@node1 hadoop]# scp core-site.xml node3:$PWD
      core-site.xml 
    • 垃圾桶使用

      • 配置好之后 再删除文件 直接进入垃圾桶

        [root@node1 ~]# hadoop fs -rm /itcast.txt
        21/05/23 16:55:25 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1440 minutes, Emptier interval = 0 minutes.
        21/05/23 16:55:25 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

扩展

  • 配置web UI页面访问身份

    • core-site.xml

    
    
        hadoop.http.staticuser.user
        root
    
  • 关于Hadoop源码编译

    • 核心:联网下载jar pom的能力。

你可能感兴趣的:(Hadoop)