大型架构及配置技术大数据(一)之大数据,Hadoop,Hadoop安装与配置,HDFS


一、大数据
1.大数据的由来
    随着计算机技术的发展,互联网的普及,信息的积累已经到了一个非常庞大的地步,信息的增长也在不断的加快,随着互联网,物联网建设的加快,信息更是爆炸式增长,收集,检索,统计这些信息越发困难,必须使用新的技术来解决这些问题

2.大数据的定义
    大数据指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,需要新处理模式才能具有更强的决策力,洞察发现力和优化能力的海量,高增长率和多样化的信息资产
    是指从各种各样类型的数据中,快速获得有价值的信息

3.大数据的作用
    企业组织利用相关数据分析帮助他们降低成本,提高效率,开发新产品,做出更明智的业务决策等
    把数据集合并后进行分析得出的信息和数据关系性,用来察觉商业趋势,判定研究质量,避免疾病扩散,打击犯罪或测定即时交通状况
    大规模并行处理数据库,数据挖掘电网,分布式文件系统或数据库,云计算平和可扩展的存储系统等

4.大数据特性
    数量(Volume):
        TB级
        记录/日志
        事务
        表和文件
    速度(Velocity):
        批处理
        实时
        多进程
        数据流
    真实性(Veracity):
        可信性
        真伪性
        来源和信誉
        有效性
        可审计性
    种类(Variety):
        结构化
        非结构化
        多因素
        概率性
    价值(Value):
        统计学
        事件性
        相关性
        假设性

5.大数据与Hadoop
    Hadoop是一种分析和处理海量数据的软件平台
    Hadoop是一款开源软件,使用JAVA开发
    hadoop可以提供一个分布式基础架构
    特点:
        高可靠性,高扩展性,高效性,高容错性,低成本
        
二、Hadoop
1.Hadoop起源
    2003年开始Google陆续发表了3篇论文
        GFS,MapReduce,BigTable
    GFS
        GFS是一个可扩展的分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用
    MapReduce
        MapReduce是针对分布式并行计算的一套编程模型,由Map和Reduce组成,Map是映射,把指令分发到多个worker上,Reduce是规约,把worker计算出的结构合并
    BigTable
        BigTable是存储结构化数据
        BigTable建立在GFS,Scheduler,Lock Service和MapReduce之上
        每个Table都是一个多维的系数图
    GFS,MapReduce和BigTable三大技术被称为Google的三驾马车,虽然没有公布源码,但发布了三个产品的详细设计论
    Yahoo资助的Hadoop,是按照这三篇论文的开源Java实现的,但在性能上Hadoop比Google要差很多
        GFS  --->  HDFS
        MapReduce  --->  MapReduce
        BigTable  --->  Hbase

2.Hadoop常用组件
    HDFS:Hadoop分布式文件系统(核心组件)
    MapReduce:分布式计算框架(核心组件)
    Yarn:集群资源管理系统(核心组件)
    Zookeeper:分布式协作服务
    Hbase:分布式列存数据库
    Hive:基于Hadoop的数据仓库
    Sqoop:数据同步工具
    Pig:基于Hadoop的数据流系统
    Mahout:数据挖掘算法库
    Flume:日志收集工具
    
3.Hadoop核心组件

大型架构及配置技术大数据(一)之大数据,Hadoop,Hadoop安装与配置,HDFS

4.Hadoop生态系统

大型架构及配置技术大数据(一)之大数据,Hadoop,Hadoop安装与配置,HDFS

5.HDFS结构

大型架构及配置技术大数据(一)之大数据,Hadoop,Hadoop安装与配置,HDFS

6.HDFS角色及概念
    Hadoop体系中数据存储管理的基础,是一个高度容错的系统,用于低成本的通用硬件上运行
    角色和概念:
        Client
        Namenode
        Secondarynode
        Datanode
    NameNode
        Master节点,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理所有客户端请求
    Secondary NameNode 
        定期合并fsimage和fsedits,推给NameNode
        紧急情况下,可辅助恢复NameNode
        但Secondary NameNode并非NameNode的热备
    DataNode 
        数据存储节点,存储实际的数据
        汇报存储信息给NameNode
    Client 
        切分文件
        访问HDFS
        与NameNode交互,获取文件位置信息
        与DataNode交互,读取和写入数据
    Block
        每块缺省128MB
        每块可以多个副本
        
7.MapReduce结构

大型架构及配置技术大数据(一)之大数据,Hadoop,Hadoop安装与配置,HDFS

8.MapReduce角色及概念
    源自于Google的MapReduce论文,JAVA实现的分布式计算框架
    角色和概念:
        JobTracker
            Master节点只有一个
            管理所有作业/任务的监控,错误处理等
            将任务分解成一系列任务,并分派给Task Tracker
        TaskTracker
            Slave节点,一般是多台
            运行Map Task和Reduce Task 
            并与JobTracker交互,汇报任务状态
        Map Task 
            解析每条数据记录,传递给用户编写的map()并执行,将输出结果写入本地磁盘
                如果为map-only作业,直接写入HDFS
        Reduce Task 
            从Map Task的执行结果中,远程读取用户 数据,对数据进行排序,将数据按照分组传递给用户编写的reduce的函数执行

9.Yarn结构

大型架构及配置技术大数据(一)之大数据,Hadoop,Hadoop安装与配置,HDFS

10.Yarn角色及概念
    Yarn是Hadoop的一个通用的资源管理系统
    Yarn角色
        Resourcemanager
        Nodemanager
        ApplicationMaster
        Container
        Client
    ResourceManager
        处理客户端请求
        启动/监控ApplicationMaster
        监控NodeManager
        资源分配与调度
    NodeManager
        单个节点上的资源管理
        处理来自ResourceManager的命令
        处理来自ApplicationMaster的命令
    Container 
        对任务运行行环境的抽象,封装了CPU、内存等
        多维资源以及环境变量、启动命令等任务运行相关的信息资源分配与调度
    ApplicationMaster
        数据切分
        为应用程序申请资源,并分配给内部任务
        任务监控与容错
    Client
        用户与Yarn交互的客户端程序
        提交应用程序、监控应用程序状态,杀死应用程序等
        
11.Yarn的核心思想
    将JobTracker和TaskTacker进行分离,它由下面几大构成组件
        ResourceManager一个全局的资源管理器
        NodeManager每个节点(RM)代理
        ApplicationMaster表示每个应用
        每一个ApplicationMaster有 多个Container在NodeManager上运行
 

三、Hadoop安装与配置
1.Hadoop的部署模式有三种
    单机
    伪分布式
    完全分布式
    
2.单机模式
    Hadoop的单机模式安装非常简单
    获取软件
        http://hadoop.apache.org
    安装配置Java环境,安装jps工具
        安装Openjdk和Openjdk-devel
    设置环境变量,启动运行
        hadoop-env.sh
            JAVA HOME= "JAVA安装路径"
            HADOOP_ CONF DIR= "hadoop配置文件路径"
    Hadoop的单机模式安装很简单,只需配置好环境变量即可运行,这个模式一般用来学习和测试Hadoop的功能    
[[email protected] ~]# yum -y install java-1.8.0-openjdk-devel
[[email protected] ~]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
[[email protected] ~]# jps
2215 Jps
[[email protected] ~]# tar -xf hadoop-2.7.7.tar.gz 
[[email protected] ~]# mv hadoop-2.7.7 /usr/local/hadoop
[[email protected] ~]# chown -R 0.0 /usr/local/hadoop
[[email protected] ~]# rpm -ql java-1.8.0-openjdk
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/bin/policytool
[[email protected] ~]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh 
 25 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/    jre"
 33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
[[email protected] ~]# /usr/local/hadoop/bin/hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME            run the class named CLASSNAME
 or
  where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar <jar>            run a jar file
                       note: please use "yarn jar" to launch
                             YARN applications, not this command.
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon
  trace                view and modify Hadoop tracing settings

Most commands print help when invoked w/o parameters.
[[email protected] ~]# mkdir /usr/local/hadoop/input
[[email protected] ~]# cp /usr/local/hadoop/*.txt /usr/local/hadoop/input
[[email protected] ~]# /usr/local/hadoop/bin/hadoop jar \
> /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar \
> wordcount /usr/local/hadoop/input /usr/local/hadoop/output
[[email protected] ~]# cat /usr/local/hadoop/output/part-r-00000    ==>>查看

3.伪分布式
    伪分布式的安装和完全分布式类似,区别是所有角色安装在一台机器上,使用本地磁盘,一般生产环境都会使用完全分布式,伪分布式般是用来学习和测试Hadoop的功能
    伪分布式的配置和完全分布式配置类似

4.Hadoop配置文件及格式
    文件格式
        Hadoop-env.sh
            JAVA HOME
            HADOOP CONF DIR
        xml文件配置格式
            <property>
                <name>关键字</name>
                <value>变量值< /value>
                <description>描述< /description>
                </property> 

四、HDFS分布式文件系统(搭建完全分布式)
1.完全分布式 
    系统规划
    主机名    IP地址              软件   角色
    nn60      192.168.4.60/24     HDFS   NameNode SecondaryNameNode
    node61    192.168.4.61/24     HDFS   DataNode
    node62    192.168.4.62/24     HDFS   DataNode
    node63    192.168.4.63/24     HDFS   DataNode

2.基础环境准备
    新开启3台虚拟机
    禁用selinux
    禁用firewalld
    安装java-1.8.0-openjdk devel
    在3台机器上配置/etc/hosts
    注意 :所有主机都能ping通namenode的主机名 ,namenode能ping通所有节点
    java -version 验证java安装
    jps 验证角色
[[email protected] ~]# vim /etc/hosts    ==>>每台机器都配置
192.168.4.60 nn60
192.168.4.61 node61
192.168.4.62 node62
192.168.4.63 node63
[[email protected] ~]# yum -y install java-1.8.0-openjdk-devel     ==>>所有机器都配置

3.配置SSH信任关系(NameNode)      
    注意:不能出现要求输入yes的情况,每台机器都要能登录成功,包括本机! ! !
    /etc/ssh/ssh_ config
        StrictHostKeyChecking no
[[email protected] ~]# vim /etc/ssh/ssh_config    ==>>所有机器都配置
 60         StrictHostKeyChecking no
[[email protected] ~]# ssh-****** 
[[email protected] ~]# for i in 60 61 62 63;do ssh-copy-id 192.168.4.$i;done
    
4.HDFS完全分布式系统配置        
    环境配置文件: hadoop-env.sh
    核心配置文件: core-site.xml
    HDFS配置文件: hdfs-site.xml
    节点配置文件: slaves
    
5.环境配置:文件hadoop-env.sh
    OpenJDK的安装目录: JAVA_HOME
    Hadoop配置文件的存放目录: HADOOP_CONF_DIR
    
6.核心配置文件core-site.xml
    fs.defaultFS : 文件系统配置参数
    hadoop.tmp.dir :数据目录配置参数
[[email protected] ~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml 
<configuration>
<property>
       <name>fs.defaultFS</name>
       <value>hdfs://nn60:9000</value>
    </property>
    <property>
       <name>hadoop.tmp.dir</name>
       <value>/var/hadoop</value>
    </property>
</configuration>
[[email protected] ~]# mkdir /var/hadoop      ==>>hadoop的数据根目录

7.HDFS配置文件hdfs-site.xml
    Namenode : 地址声明
        dfs.namenode.http-address
    Secondarynamenode :地址声明
        dfs.namenode.secondary.http-address
    文件冗余份数
        dfs.replication 
[[email protected] ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml 
<configuration>
<property>
       <name>dfs.namenode.http-address</name>
       <value>nn60:50070</value>
    </property>
    <property>
       <name>dfs.namenode.secondary.http-address</name>
       <value>nn60:50090</value>
    </property>
    <property>
       <name>dfs.replication</name>
       <value>2</value>
    </property>
</configuration>

8.节点配置文件slaves
    只写DataNode节点的主机名称
        node61
        node62
        node63
    同步配置
    Hadoop所有节点的配置参数完全一样,在一台配置好后,把配置文件同步到其它所有主机上
[[email protected] ~]# vim /usr/local/hadoop/etc/hadoop/slaves 
node61
node62
node63
[[email protected] ~]# for i in 61 62 63;do rsync -aSH /usr/local/hadoop/ 192.168.4.$i:/usr/local/hadoop/ -e 'ssh' & done
[1] 3971
[2] 3972
[3] 3973
[[email protected] ~]# ssh node61 ls /usr/local/hadoop/
bin
etc
include
input
lib
libexec
LICENSE.txt
NOTICE.txt
output
README.txt
sbin
share

10.HDFS完全分布式配置
    在本机创建/var/hadoop文件夹
    在namenode.上执行格式化操作
    启动集群
[[email protected] ~]# /usr/local/hadoop/bin/hdfs namenode -format   ==>>格式化namenode
[[email protected] ~]# /usr/local/hadoop/sbin/start-dfs.sh    ==>>启动集群
    
11.JPS验证角色
    NameNode验证
    DataNode验证
[[email protected] ~]# jps   ==>>验证角色
4803 Jps
4167 NameNode
4350 SecondaryNameNode
    
12.节点验证
    NameNode_上
    bin/hdfs dfsadmin -report
[[email protected] ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report  ==>>查看集群是否组建成功
Live datanodes (3):     ==>>有三个角色成功