Hadoop基础

作者: 任总 | 来源:发表于2019-04-01 22:28 被阅读0次

    一、大数据

    • 大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
    • 一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。

    1、大数据的结构

    • 大数据包括结构化、半结构化和非结构化数据,非结构化数据越来越成为数据的主要部分。
    结构化数据:
    • 结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。
    • 结构化数据,简单来说就是数据库,如MySQL、Oracle、SQL Server等。结合到典型场景中更容易理解,比如企业ERP、财务系统;医疗HIS数据库;教育一卡通;政府行政审批;其他核心数据库等。
    半结构化数据:
    • 半结构化数据可以通过灵活的键值调整获取相应信息,且数据的格式不固定,如json,同一键值下存储的信息可能是数值型的,可能是文本型的,也可能是字典或者列表。
    • 半结构化数据,属于同一类实体可以有不同的属性,即使他们被组合在一起,这些属性的顺序并不重要。常见的半结构数据有XML和JSON。
    • 它是一种适于数据库集成的数据模型,也就是说,适于描述包含在两个或多个数据库(这些数据库含有不同模式的相似数据)中的数据。
    非结构化数据:
    • 它没有元数据,非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、XML, HTML、各类报表、图像和音频/视频信息等等。
    • 非结构化数据其格式非常多样,标准也是多样性的,而且在技术上非结构化信息比结构化信息更难标准化和理解。所以存储、检索、发布以及利用需要更加智能化的IT技术,比如海量存储、智能检索、知识挖掘、内容保护、信息的增值开发利用等。

    2、大数据的获取

    第一步:爬行
    • 搜索引擎是通过一种特定规律的软件跟踪网页的链接,从一个链接爬到另外一个链接,像蜘蛛在蜘蛛网上爬行一样,所以被称为“蜘蛛”也被称为“机器人”。搜索引擎蜘蛛的爬行是被输入了一定的规则的,它需要遵从一些命令或文件的内容。
    第二步:抓取存储
    • 搜索引擎是通过蜘蛛跟踪链接爬行到网页,并将爬行的数据存入原始页面数据库。其中的页面数据与用户浏览器得到的HTML是完全一样的。
    第三步:分析处理
    • 搜索引擎将蜘蛛抓取回来的页面,爬取了海量的非结构化信息,由于非结构化数据的多样性带来了数据分析的新的挑战,我们需要一系列的工具去解析,提取,分析数据。语义引擎需要被设计成能够从“文档”中智能提取信息。

    3、发展历史

    • 2003年:谷歌公司发布一篇论文名叫The Google File System,论述了如何使用商用服务器分布式存储海量数据,用来大规模分布式程序密集式运行,可以扩展到上万个节点,适用流式数据处理。
    • 2004年:谷歌公司发布了另一篇论文名叫MapReduce: Simplified Data Processing On Large Cluster,系统的阐述了MapReduce编程模型和处理机制,是一个PB级的并行处理框架。
    • 2006年:谷歌公司发布了另一篇论文名叫BigTable:A Distributed Storage System for Structure Data,仅仅支持键值对的格式存储

    二、Hadoop

    1、Hadoop定义

    • Hadoop原本来自于谷歌一款名为MapReduce的编程模型包。谷歌的MapReduce框架可以把一个应用程序分解为许多并行计算指令,跨大量的计算节点运行非常巨大的数据集。使用该框架的一个典型例子就是在网络数据上运行的搜索算法。Hadoop最初只与网页索引有关,迅速发展成为分析大数据的领先平台。
    • 我们可以理解为HDFS + MapReduce = Hadoop,Hadoop使用的存储数据库是HBase。
    • MapReduce是批处理系统,缺陷是由于处理机制导致大量数据处理会变慢

    2、函数式编程:

    • 类似于Lisp, ML函数式编程语言;它的特性就是高阶函数;把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。
    map:
    • map(f())的作用是把一个任务映射成多个
      map:接受一个函数为参数,并将其应用于列表中的所有元素;从而生成一个结果列表;
      例如:"1", "2", "3", "4"
    fold:

    fold(g(), init)接受两个参数:第一个是函数,第二个是初始值,作用是把多个任务折叠


    根据map的结果列表,把列表中数据处理折叠成一个唯一最终结果

    3、mapreduce:

    • mapper是一个运行实例。举例来说,统计一本书每个单词出现的次数:mapper: 每100页一个单位,5 mappers同时运行用于拆分成为单词;10000000,生成一个结果列表;reducer:负责把同一个单词发送到同一个reducer,这个过程叫做shuffle and sort。
    • mapper:处理的结果是键值对,键:值,例如:”this 1, is 1, this 1, how 1”同一个键只能发往同一个reducer
    • reducer: 就是把这些键值合成一个离目标最近的结果;例如“this 500 is 20”


      mapreduce的作业提交
    mapreduce逻辑结构
    partitioner分区器
    combiner合并器

    4、Hadoop:存储和处理平台

    hdfs:集群,NN名称节点,SNN辅助名称节点,DN数据节点
    mapreduce:集群是一个有中心节点工作方式的集群,JobTracker集群资源和作业管理,TaskTracker运行作业任务
    任务分别为:map和reduce

    5、编程模型与数据处理引擎MRv1和MRv2

    • MRv1主要由编程模型(由新旧API组成)、数据处理引擎(由MapTask和ReduceTask组成)和运行时环境(由一个JobTracker和若干个TaskTracker组成)三部分组成,为了保证编程模型的向后兼容性,MRv2重用了MRv1中的编程模型和数据处理引擎,但运行时环境被完全重写,

    • 引入YARN作为通用资源调度平台后,Hadoop得以支持多种计算框架,如MapReduce、Spark、Storm等。MRv1是Hadoop1中的MapReduce,MRv2是Hadoop2中的MapReduce。下面是MRv1和MRv2之间的一些基本变化:

      • MRv2中,重用了MRv1中的编程模型和数据处理引擎。但是运行时环境被重构了。jobtracker被拆分成了通用的资源调度平台YARN和负责各个计算框架的任务调度模型AM。
      • MRv1中任务是运行在Map slot和Reduce slot中的,计算节点上的Map slot资源和Reduce slot资源不能重用。而MRv2中任务是运行在container中的,map任务结束后,相应container结束,空闲出来的资源可以让reduce使用。
    Hadoop与Hadoop2.0区别
    • 在Hadoop2.0以后mapreduce被切割开,底层的通用框架独立了出来叫做YARN,只实现集群资源管理,而对应的任务则使用,RM集群资源管理器, NM节点资源管理器, AM应用程序主节点,运行在container中。
    一个任务就会分成两个框架
    * 框架一
    • RM: Resource Manager负责全局资源管理,资源的状态由NM报告,如果RM要启动一个container,会向NM发指令
    • NM: Node Manager 节点管理
    * 框架二
    • AM: Application Master应用管理,当container启动后 由AM管理
    • container:运行mr任务;

    6、hadoop的三个著名的插件:hive,pig,Hbase

    7、Hadoop Distribution分发版:有两个著名的商业分发版

    1、Cloudera: CDH
    2、Hortonworks: HDP
    另外还有Intel:IDH、MapR

    三、基于伪分布式模型运行的hadoop部署

    • 单机模型:一般测试使用,不建议使用;
    • 伪分布式模型:运行于单机;
    • 分布式模型:集群模型,真集群

    Hadoop,基于Java语言研发;
    jdk:1.6, 1.7, 1.8
    hadoop-2.6.2版本需要jdk 1.6+
    hadoop-2.7版本需要 jdk 1.7+

    注意:因为实验主机使用java要求内存至少2G

    1、安装jdk

    [root@node-61 ~]# yum install epel-release -y
    
    #安装jdk
    [root@node-61 ~]# yum install java-1.8.0-openjdk-devel -y
    
    #设置环境变量
    [root@node-61 ~]# vim /etc/profile.d/java.sh
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    
    [root@node-61 ~]# . /etc/profile.d/java.sh
    
    #验证版本
    [root@node-61 ~]# java -version
    openjdk version "1.8.0_191"
    OpenJDK Runtime Environment (build 1.8.0_191-b12)
    OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
    
    

    2、下载Hadoop-2.7.7

    下载地址:https://hadoop.apache.org/releases.html

    [root@node-61 ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
    [root@node-61 ~]# mkdir /bdapps
    [root@node-61 ~]# tar xf hadoop-2.7.7.tar.gz -C /bdapps/
    [root@node-61 ~]# ln -sv /bdapps/hadoop-2.7.7/ /bdapps/hadoop
    [root@node-61 ~]# vim /etc/profile.d/hadoop.sh
    
    export HADOOP_PREFIX=/bdapps/hadoop
    export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin
    export HADOOP_YARN_HOME=${HADOOP_PRFIX}
    export HADOOP_MAPPERD_HOME=${HADOOP_PRFIX}
    export HADOOP_COMMON_HOME=${HADOOP_PRFIX}
    export HADOOP_HDFS_HOME=${HADOOP_PRFIX}
    

    3、创建一个组和用户,工作目录

    [root@node-61 ~]# groupadd hadoop
    [root@node-61 ~]# useradd -g hadoop yarn
    [root@node-61 ~]# useradd -g hadoop hdfs
    [root@node-61 ~]# useradd -g hadoop mapred
    

    4、创建数据目录和日志目录

    [root@node-61 ~]# mkdir -pv /data/hadoop/hdfs/{nn,snn,dn}
    [root@node-61 ~]# chown -R hdfs:hadoop /data/hadoop/hdfs #修改属主属组
    [root@node-61 ~]# ll /data/hadoop/hdfs/
    total 0
    drwxr-xr-x 2 hdfs hadoop 6 Mar 11 23:33 dn
    drwxr-xr-x 2 hdfs hadoop 6 Mar 11 23:33 nn
    drwxr-xr-x 2 hdfs hadoop 6 Mar 11 23:33 snn
    
    [root@node-61 ~]# mkdir /bdapps/hadoop/logs
    [root@node-61 ~]# chmod g+w /bdapps/hadoop/logs
    [root@node-61 ~]# chown -R yarn:hadoop /bdapps/hadoop/*
    

    5、配置Hadoop

    • Hadoop配置文件是xml格式,配置信息保存在<configuration>中,在<configuration>中每一个配置都以 <property>开头 和以</property>结尾,每个<property>内部至少有两个属性,一个是参数名称<name>,另一个是对应参数的值<value>,还有 <final>。

    core-site.xml 配置文件

    • core-site.xml文件包含了NameNode主机地址及监听RPC端口信息,对于伪分布式模型来说,其主机地址为localhost。NameNode默认使用的RPC端口为8020。
    #core-site.xml 
    [root@node-61 ~]# vim /bdapps/hadoop/etc/hadoop/core-site.xml 
    
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    .............
    <configuration>
          <property>
                    <name>fs.defaultFS</name>                #函数名称
                    <value>hdfs://localhost:8020</value>    #函数对应的值,定义端口
                    <final>true</final>
          </property>
    </configuration>
    

    hdfs-site.xml配置文件

    • hdfs-site.xml主要用于配置HDFS相关属性,例如复制因子(即数据块的副本数)、NN和DN用于存储数据的目录等。数据块的副本对于伪分布式的Hadoop应该为1,而NN和DN用于存储的数据的目录为前面步骤中专门为其创建的目录。另外前面的步骤中也为SNN创建了相关的目录,这里也一并配置其为启用状态。
    #hdfs-site.xml
    [root@node-61 ~]#  vim /bdapps/hadoop/etc/hadoop/hdfs-site.xml
            <configuration>
                <property>
                    <name>dfs.replication</name>  #数据块的副本数
                    <value>1</value>    #定义数值为1
                </property>
                <property>
                    <name>dfs.namenode.name.dir</name> #名称节点路径
                    <value>file:///data/hadoop/hdfs/nn</value> #定义名称节点存放路径
                </property>
                <property>
                    <name>dfs.datanode.data.dir</name> #数据节点数据目录
                    <value>file:///data/hadoop/hdfs/dn</value> #定义数据节点数据目录
                </property>
                <property>
                    <name>fs.checkpoint.dir</name> #检查点目录
                    <value>file:///data/hadoop/hdfs/snn</value> #定义检查点目录
                </property>
                <property>
                    <name>fs.checkpoint.edits.dir</name>#检查点编辑目录
                    <value>file:///data/hadoop/hdfs/snn</value>#定义检查点编辑目录
                </property>
            </configuration>
    

    mapred-site.xml配置文件

    • mapred-site.xml文件用于配置集群的MapReduce framework,此处应该指定使用yarn,另外的可用值还有local和classic(经典的)。mapred-site-xml默认不存在,但有模块文件mapred-site.xml.template,只需要将其复制mapred-site.xml即可。
    [root@node-61 ~]# mv  /bdapps/hadoop/etc/hadoop/mapred-site.xml.template /bdapps/hadoop/etc/hadoop/mapred-site.xml
    [root@node-61 ~]# vim /bdapps/hadoop/etc/hadoop/mapred-site.xml
    
            <configuration>
                <property>
                    <name>mapreduce.framework.name</name> #集定义群
                    <value>yarn</value> #集群值为yarn
                </property>
            </configuration>
    

    yarn-site.xml配置文件

    • yarn-site.xml用于配置YARN进程及YARN的相关属性。首先要指定ResourceManager守护进程的主机和舰艇的端口,对于伪分布式模型来讲,其主机为localhost,默认端口为8032,其次需要指定ResourceManager使用scheduler(调度器),以及NodeManager的辅助服务。
    [root@node-61 ~]# vim /bdapps/hadoop/etc/hadoop/yarn-site.xml 
            <configuration>
                <property>
                    <name>yarn.resourcemanager.address</name>
                    <value>localhost:8032</value> #值为地址端口
                </property>
                <property>
                    <name>yarn.resourcemanager.scheduler.address</name>#调度器地址
                    <value>localhost:8030</value> #值地址端口
                </property>
                <property>
                    <name>yarn.resourcemanager.resource-tracker.address</name>#资源追踪器
                    <value>localhost:8031</value>#值为地址端口
                </property>
                <property>
                    <name>yarn.resourcemanager.admin.address</name>#管理地址
                    <value>localhost:8033</value>#值为地址端口
                </property>
                <property>
                    <name>yarn.resourcemanager.webapp.address</name> #web管理地址
                    <value>localhost:8088</value> #值为地址端口
                </property>
                <property>
                    <name>yarn.nodemanager.aux-services</name> #节点管理的辅助服务
                    <value>mapreduce_shuffle</value> #值为shuffle类
                </property>
                <property>
                    <name>yarn.nodemanager.auxservices.mapreduce_shuffle.class</name>#使用哪一种shuffle类
                    <value>org.apache.hadoop.mapred.ShuffleHandler</value>#值为使用apache中的ShuffleHandler类
                </property>
                <property>
                    <name>yarn.resourcemanager.scheduler.class</name> #定义使用哪个调度器类
                    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> #值为使用apache中的CapacityScheduler类
                </property>
            </configuration>    
    

    6、格式化HDFS

    • 在HDFS的NN启动之前需要先初始化其用于存储数据的目录。如果hdfs-site.xml中dfs.namenode.name.dir属性指定的目录不存在,格式化命令会自动创建;如果事先存在,请确保其权限设置正确,此时格式操作会清除其内部的所有数据并重新建立一个新的文件系统。使用hdfs用户格式化操作。
    [root@node-61 ~]# su - hdfs
    [hdfs@node-61 ~]$ hdfs namenode -format
    
    #验证格式化是否成功
    [hdfs@node-61 ~]$ ls /data/hadoop/hdfs/nn/current/
    fsimage_0000000000000000000  fsimage_0000000000000000000.md5  seen_txid  VERSION
    
    

    7、启动Hadoop的hdfs集群

    #启动名称节点namenode
    [hdfs@node-61 ~]$ hadoop-daemon.sh start namenode
    starting namenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-namenode-node-61.out
    [hdfs@node-61 ~]$ jps
    7619 Jps
    7550 NameNode
    
    #启动辅助名称节点secondarynamenode
    [hdfs@node-61 ~]$ hadoop-daemon.sh start secondarynamenode
    starting secondarynamenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-secondarynamenode-node-61.out
    [hdfs@node-61 ~]$ jps
    7685 Jps
    7644 SecondaryNameNode
    7550 NameNode
    
    #启动数据节点datanode
    [hdfs@node-61 ~]$ hadoop-daemon.sh start datanode
    starting datanode, logging to /bdapps/hadoop/logs/hadoop-hdfs-datanode-node-61.out
    [hdfs@node-61 ~]$ jps
    7713 DataNode
    7644 SecondaryNameNode
    7789 Jps
    7550 NameNode
    
    

    8、启动Hadoop的yarn集群

    #使用yarn用户启动
    [root@node-61 ~]# su - yarn
    [yarn@node-61 ~]$ yarn-daemon.sh start resourcemanager  #启动rm
    starting resourcemanager, logging to /bdapps/hadoop/logs/yarn-yarn-resourcemanager-node-61.out
    [yarn@node-61 ~]$ yarn-daemon.sh start nodemanager  #启动nm
    starting nodemanager, logging to /bdapps/hadoop/logs/yarn-yarn-nodemanager-node-61.out
    [yarn@node-61 ~]$ jps
    18848 Jps
    18508 ResourceManager
    18748 NodeManager
    

    四、hadoop测试使用

    1、hdfs的User Commands用户命令

    • hdfs数据块分片存储在节点指定目录下,这里是/data/hadoop/hdfs/dn/current/BP-*****,并有它的固定名称格式和目录结构,如果数据是文本格式,可以使用cat命令查看内容。
      dfs 客户端工具
      fetchdt
      fsck
      version

    mkdir命令创建目录

    [hdfs@node-61 ~]$ hdfs dfs -mkdir /test
    [hdfs@node-61 ~]$ hdfs dfs -ls /
    Found 1 items
    drwxr-xr-x   - hdfs supergroup          0 2019-03-13 21:52 /test
    

    put命令上传到hdfs指定目录

    [hdfs@node-61 ~]$ hdfs dfs -put  /etc/fstab /test/fstab
    [hdfs@node-61 ~]$ hdfs dfs -ls /test
    Found 1 items
    -rw-r--r--   1 hdfs supergroup        465 2019-03-13 21:56 /test/fstab
    

    ls -R命令递归查询指定目录

    [hdfs@node-61 ~]$ hdfs dfs -ls -R /
    drwxr-xr-x   - hdfs supergroup          0 2019-03-13 21:56 /test
    -rw-r--r--   1 hdfs supergroup        465 2019-03-13 21:56 /test/fstab
    

    cat命令显示文件内容

    [hdfs@node-61 ~]$ hdfs dfs -cat /test/fstab
    
    #
    # /etc/fstab
    # Created by anaconda on Tue Sep 25 19:41:12 2018
    ...........
    

    2、Administration Commands管理命令

        balancer
        datanode
        dfsadmin
        mover
        namenode
        secondarynamenode
    

    3、在hadoop运行测试程序

    • Hadoop-YARN自带了许多示例程序,他们位于hadoop安装路径下share/hadoop/mapreduce/中,运行要使用hdfs用户。
    [root@node-61 ~]# su - hdfs
    Last login: Wed Mar 13 21:52:24 CST 2019 on pts/0
    [hdfs@node-61 ~]$ yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar  wordcount  /test/fstab  /test/fstab.out  
    #使用示例程序中的wordcount单词统计方法,统计fastab文件夹并把结果保存到fatab.out下
    
    #查询输出文档统计结果
    [hdfs@node-61 ~]$ hdfs dfs -cat /test/fstab.out/part-r-00000
    #   7
    '/dev/disk' 1
    /   1
    /boot   1
    /dev/mapper/centos-root 1
    /dev/mapper/centos-swap 1
    /etc/fstab  1
    0   6
    19:41:12    1
    2018    1
    25  1
    Accessible  1
    Created 1
    See 1
    Sep 1
    Tue 1
    UUID=2644b409-66f3-48dd-922f-acb280404e1d   1
    anaconda    1
    and/or  1
    are 1
    blkid(8)    1
    by  2
    defaults    3
    filesystems,    1
    findfs(8),  1
    for 1
    fstab(5),   1
    info    1
    maintained  1
    man 1
    more    1
    mount(8)    1
    on  1
    pages   1
    reference,  1
    swap    2
    under   1
    xfs 2
    
    

    4、web界面

    • HDFS和YARN ResourceManager各自提供个一个web接口,通过这些接口可以检查HDFS集群和YARN集群的相关信息。他们的访问接口分别为HDFS-NameNode:http://<NameNodeHost>:50070
      YARN_ResourceManager:http://<ResourceManager>:8088


      HDFS的web信息界面1
      HDFS的web信息界面2

    参考链接:https://blog.csdn.net/wzz87/article/details/79372162
    https://blog.csdn.net/jiewuyou/article/details/37742669

    相关文章

      网友评论

        本文标题:Hadoop基础

        本文链接:https://www.haomeiwen.com/subject/inrypqtx.html