hadoop简介

一. 什么是hadoop

hadoop是一个具有分布式存储和分布式计算能力的分布式软件系统

hadoop基本特点

  • 可靠性(数据冗余)
  • 成本低(把数据存储在普通的计算机上)
  • 效率高(把计算分发到多个节点)
  • 可扩容(根据需求, 动态的调整节点集群的大小)

二. 解决的问题

  • 海量数据可靠存储
  • 海量数据分析与计算

三. 应用场景

  • 搜索引擎
  • 日志分类和检索
  • 数据报表(一般是内网, 不需要公网访问)

四. NFS

NFS即网络文件系统, 多台主机共享服务器中的数据


hadoop简介_第1张图片
NFS

但是这种文件系统存在一些缺陷

  1. 缺少数据冗余
  2. 数据集中, 无法进行分布式计算

五. 系统架构

主要分为三部分

  • 海量数据存储: hdfs
  • 海量数据分析: mapreduce
  • 资源调度: yarn

5.1 HDFS

HDFS是一个可靠的有容错机制的分布式文件系统


hadoop简介_第2张图片
HDFS architecture
  1. HDFS系统由一个命名节点(nameNode)和多个数据节点(dataDode)构成
  2. 写数据可以在dataNode中直接写, 也可以先通过nameNode再随机选一个dataNode
  3. 读取数据的时候, 通过nameNode查询映射关系,再查询指定的数据节点
  4. 支持构造一个伪分布式系统, 在一台机器上运行多个数据节点
  5. nameNode响应用户请求,执行mkdir put get list等文件管理操作

5.1.1 数据分块

一个文件被分为多个数据块, 数据块的大小可配置, 除了最后一个数据块以外, 其他的数据块大小一样, 默认128M


hadoop简介_第3张图片
enter description here

5.1.2 副本选择

5.1.2.1 数据块写

每个数据块的冗余副本数可配置


hadoop简介_第4张图片
replicas wite

首先了解下rack的概念, rack, 机架, 通过配置将一个区域的机器放到一个机架中, 通常一个机架内部节点之间的通信速度较快
(简单理解为一个机房即可)

副本选择算法如下:

  1. 数据块插入的节点存储数据块的第一副本(如果是通过nameNode插入, 那么随机选一个数据节点存储数据块的第一副本)
  2. 选择其他的rack(机架), 将第二和第三副本写入这个rack(机架)的两个不同的数据节点
  3. 如果副本数配置大于3, 则剩余的副本随机分不到不同的dataNode节点

这种策略既保证了数据的可靠性, 又一定程度上提高了性能

示例:

hadoop简介_第5张图片
replicas write example

该架构中,存在1个hadoop集群, 3个机架(rack), 一个nameNode, 8个dataNode分布在3个机架上
以下是写请求的全过程:
首先客户端对文件进行切分

  1. 客户端向nameNode发起写请求
  2. nameNode创建文件名称, 返回需要插入的节点列表信息
  3. 客户端向host2写入block1
    3.1. host2数据写成功后向客户端返回响应信息
    3.1.1. 客户端通知nameNode,block1数据写入host2成功
    3.2. host2数据写成功后, host2向rack2(集群中其他的随机rack)中的host1写入block1
    3.2.1. host1数据写成功后, 向nameNode同步信息
    3.2.2. host1数据写成功后, host1向rack2(2号副本和3号副本写入的rack是相同的)中的host3写入block1
    3.2.2.1. host3数据写入成功后, 向nameNode同步信息
    3.3. host2数据写成功后,向nameNode同步信息
  4. 客户端向host7写入block2
    4.1. host7数据写成功后向客户端返回响应信息
    4.1.1. 客户端通知nameNode,block2数据写入host7成功
    4.2. host7数据写成功后, host7向rack3(集群中其他的随机rack)中的host8写入block2
    4.2.1. host8数据写成功后, 向nameNode同步信息
    4.2.2. host8数据写成功后, host8向rack3(2号副本和3号副本写入的rack是相同的)中的host4写入block2
    4.2.2.1. host4数据写入成功后, 向nameNode同步信息
    4.3. host2数据写成功后,向nameNode同步信息
  5. 文件写入完成

注:

  • 3.1和3.2和3.3并行执行
  • 4.1和4.2和4.3并行执行
  • 3.2.1和3.2.2并行执行
  • 4.2.1和4.2.2并行执行

在hadoop支持存储类型和存储策略之后, 保存文件的时候可以指定存储策略, 只有支持对应的存储类型的数据节点上才可以
保存这种数据, 如果支持这种存储策略的节点不足(少于副本数配置),则执行备选方案

5.1.2.2 数据库读

读取数据的时候优先选择离用户最近的rack(机架)

5.2 MapReduce

主要用于分布式数据计算, 可以使用上次分享的spark来替代


hadoop简介_第6张图片
map reduce architecture

5.3 Yarn

主要用于资源调度, 2.x版本引入, 是hadoop重要组件

hadoop1.0和2.0的区别


hadoop简介_第7张图片
1.0和2.0的区别

yarn在hadoop中的角色


hadoop简介_第8张图片
yarn in hadoop

yarn运行过程


hadoop简介_第9张图片
enter description here
  1. resourceManager: 资源管理器, 全局只有一个
  2. nodeManager: 节点管理器, 每个节点对应一个,向resourceManager同步节点信息(CPU内存等等)
  3. application master: 应用管理器,负责处理节点内部的任务的分配
  4. container: 资源的抽象, application master负责分配自己所在节点的资源给某个task(任务),这组资源就被抽象为container

客户端提交任务到resourceManager, 然后resourceManager进行资源分配

数据节点之间使用RPC通信,比如Container处理后的数据传递给其他节点的application master

六. 安装

  1. 安装JDK1.8
  2. 安装hadoop3.1.2

七. 配置

单机伪分布式
1.配置环境变量~/.bashrc

export JAVA_HOME=/root/jdk1.8.0_121
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/root/hadoop-3.1.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. 配置hadoop-env.sh
export JAVA_HOME=/root/jdk1.8.0_121
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"

  1. 配置core-site.xml

  
  
      fs.defaultFS
      hdfs://server1:9000
  
  
      io.file.buffer.size
      131072
  

  1. 配置mapred-site.xml

  
  
       mapreduce.framework.name
       yarn
   
   
   
        mapreduce.map.memory.mb
        1500
        每个Map任务的物理内存限制
    
    
        mapreduce.reduce.memory.mb
        3000
        每个Reduce任务的物理内存限制
    
    
        mapreduce.map.java.opts
        -Xmx1200m
    
    
        mapreduce.reduce.java.opts
        -Xmx2600m
    
    
        mapreduce.framework.name
        yarn
    

  1. 配置workers
server1 # 本机
  1. 配置yarn-site.xml

    
          yarn.resourcemanager.hostname
          server1
    
    
    
    
    
          yarn.nodemanager.aux-services
          mapreduce_shuffle
    

    
    
        yarn.application.classpath
        /root/hadoop-3.1.2/etc/hadoop:/root/hadoop-3.1.2/share/hadoop/common/lib/*:/root/hadoop-3.1.2/share/hadoop/common/*:/root/hadoop-3.1.2/share/hadoop/hdfs:/root/hadoop-3.1.2/share/hadoop/hdfs/lib/*:/root/hadoop-3.1.2/share/hadoop/hdfs/*:/root/hadoop-3.1.2/share/hadoop/mapreduce/lib/*:/root/hadoop-3.1.2/share/hadoop/mapreduce/*:/root/hadoop-3.1.2/share/hadoop/yarn:/root/hadoop-3.1.2/share/hadoop/yarn/lib/*:/root/hadoop-3.1.2/share/hadoop/yarn/*
    
    
    
        yarn.nodemanager.resource.memory-mb
        22528
        每个节点可用内存,单位MB
    
    
        yarn.scheduler.minimum-allocation-mb
        1500
        单个任务可申请最少内存,默认1024MB
    
    
        yarn.scheduler.maximum-allocation-mb
        16384
        单个任务可申请最大内存,默认8192MB
    

  1. 配置hdfs-site.xml



  dfs.namenode.name.dir
  /var/lib/hadoop/hdfs/name/


  dfs.blocksize
  268435456


  dfs.namenode.handler.count
  100



  dfs.datanode.data.dir
  /var/lib/hadoop/hdfs/data/



    dfs.replication
    1


  dfs.http.address
  server1:50070


八. 启动

start-dfs.sh
start-yarn.sh

两个网站被启动
server1:50070 文件查看
server:8088 节点状态查看

九. 基本操作

hadoop fs -mkdir /testdir
hadoop fs -put /root/xxx /testdir
hadoop fs -get xxx xxx
hadoop fs -ls /

# 计算圆周率
hadoop jar hadoop-mapreduce-examples-3.1.2.jar pi 5 5
# word count
hadoop jar hadoop-mapreduce-examples-3.1.2.jar wordcount /wordcount/input /wordcount/output

十. 文件目录

  • 启动命令执行目录: /hadoop-3.1.2/sbin
  • 配置文件目录: /hadoop-3.1.2/etc/hadoop
  • mapreduce example所在目录: /hadoop-3.1.2/share/hadoop/yarn

十一. 探讨

  1. 数据分块后, 数据就不完整了, 各个节点是否可以处理各自的数据块? 比如一个很大的文本文件
    答: mapreduce进行文件split操作后, 除了第一个split块, 其他的split块自动跳过第一行, 该行数据不作处理
    参考: https://wiki.jikexueyuan.com/project/hadoop/read-data.html
  2. 为啥不把整个文件多所有数据块写入同一个rack?
    答: 因为写入多个rack, 读取的时候从不同的rack获取数据, 可以提高读取数据的速度, 不会因为单个rack的带宽瓶颈
    而降低IO性能
    参考: https://blog.csdn.net/u010670689/article/details/82715181

参考

安装教程
https://blog.csdn.net/dream_an/article/details/80258283
hdfs 架构
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
hdfs rack只看一张图
https://blog.51cto.com/zengzhaozheng/1347777
hadoop生态-图片好
https://www.cnblogs.com/zhangwuji/p/7594725.html
yarn 架构
https://www.cnblogs.com/wcwen1990/p/6737985.html

你可能感兴趣的:(hadoop简介)