美文网首页
hadoop简介

hadoop简介

作者: quanzongwei | 来源:发表于2019-08-15 19:11 被阅读0次

一. 什么是hadoop

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

hadoop基本特点

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

二. 解决的问题

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

三. 应用场景

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

四. NFS

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


NFS

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

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

五. 系统架构

主要分为三部分

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

5.1 HDFS

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


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

5.1.1 数据分块

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


enter description here

5.1.2 副本选择

5.1.2.1 数据块写

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


replicas wite

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

副本选择算法如下:

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

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

示例:

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来替代


map reduce architecture

5.3 Yarn

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

hadoop1.0和2.0的区别


1.0和2.0的区别

yarn在hadoop中的角色


yarn in hadoop

yarn运行过程


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
<configuration>
  <!-- 指定hdfs的nameservice -->
  <property>
      <name>fs.defaultFS</name>
      <value>hdfs://server1:9000</value>
  </property>
  <property>
      <name>io.file.buffer.size</name>
      <value>131072</value>
  </property>
</configuration>
  1. 配置mapred-site.xml
<configuration>
  <!-- Configurations for MapReduce Applications: -->
  <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
   </property>
   <!-- 以下是143内存错误需要加的参数-->
   <property>
        <name>mapreduce.map.memory.mb</name>
        <value>1500</value>
        <description>每个Map任务的物理内存限制</description>
    </property>
    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>3000</value>
        <description>每个Reduce任务的物理内存限制</description>
    </property>
    <property>
        <name>mapreduce.map.java.opts</name>
        <value>-Xmx1200m</value>
    </property>
    <property>
        <name>mapreduce.reduce.java.opts</name>
        <value>-Xmx2600m</value>
    </property>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
  1. 配置workers
server1 # 本机
  1. 配置yarn-site.xml
<configuration>
    <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>server1</value>
    </property>
    <!-- 配置外网只需要替换外网ip为真实ip,否则默认为 localhost:8088 -->
    <!-- <property>
                 <name>yarn.resourcemanager.webapp.address</name>
          <value>外网ip:8088</value>
    </property> -->
    <!-- Configurations for NodeManager: -->
    <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
    <property>

    <!--执行mapreduce任务时候类不存在错误,需要导入以下类库; 执行hadoop classpath命令获取-->
    <property>
        <name>yarn.application.classpath</name>
        <value>/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/*</value>
    </property>
    <!-- 以下是143内存错误需要加的参数-->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>22528</value>
        <discription>每个节点可用内存,单位MB</discription>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1500</value>
        <discription>单个任务可申请最少内存,默认1024MB</discription>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>16384</value>
        <discription>单个任务可申请最大内存,默认8192MB</discription>
    </property>
</configuration>
  1. 配置hdfs-site.xml
<configuration>
<!-- Configurations for NameNode: -->
<property>
  <name>dfs.namenode.name.dir</name>
  <value>/var/lib/hadoop/hdfs/name/</value>
</property>
<property>
  <name>dfs.blocksize</name>
  <value>268435456</value>
</property>
<property>
  <name>dfs.namenode.handler.count</name>
  <value>100</value>
</property>
<!-- Configurations for DataNode: -->
<property>
  <name>dfs.datanode.data.dir</name>
  <value>/var/lib/hadoop/hdfs/data/</value>
</property>
<!--副本数配置, 不可以大于集群中的节点总数-->
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
<property>
  <name>dfs.http.address</name>
  <value>server1:50070</value>
</property>
</configuration>

八. 启动

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

相关文章

  • java大数据之hadoop

    一、Hadoop简介 1.1 Hadoop是什么 The Apache Hadoop project develo...

  • 大数据技术原理与应用:大数据处理架构Hadoop生态圈

    Hadoop生态圈 概述 Hadoop简介什么是Apache hadoop?Apache Hadoop项目是以可靠...

  • Hadoop简介

    什么是hadoop hadoop是apache下的一款开源分布式大数据处理框架,通过多台廉价机器搭建集群的方式 ,...

  • Hadoop简介

    Hadoop是一个Apache基金会所开发的分布式系统基础架构,具有高容错、高可靠性、高扩展性、高效、低成本等特点...

  • Hadoop简介

    从数据爆炸开始。。。 一、 第三次工业革命 第一次:18世纪60年代,手工工厂向机器大生产过渡,以蒸汽机的发明...

  • Hadoop简介

    Hadoop 介绍 Hadoop是Apache组织的一个分布式计算框架(java语言),其最核心的设计就是:HDF...

  • Hadoop简介

    Hadoop概述开源分布式计算平台,以HDFS、MapReduce为核心,为用户提供了系统底层细节透明的分布式基础...

  • hadoop简介

    Hadoop简介 *Hadoop 擅长处理一次写入,多次读出的数据 hadoop两大核心组件是 HDFS 和 ma...

  • Hadoop简介

    Hadoop产生的意义 随着信息社会的进步,信息数据的激增,海量数据的存储和分析成为难题,即使硬盘的存储容量不断提...

  • Hadoop简介

    1. Hadoop简介 由于几乎所有的书中都会提到Hadoop的发展史, 这里就不说Hadoop的历史时间线了. ...

网友评论

      本文标题:hadoop简介

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