hadoop简介

一. 什么是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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  • 【什么是大数据、大数据技术】 大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法在合理时间内通过传统的应...
    kimibob阅读 2,738评论 0 51
  • HDFS应用场景 适合的应用场景 存储非常大的文件:这里非常大指的是几百M、G、或者TB级别,需要高吞吐量,对延时...
    你值得拥有更好的12138阅读 263评论 0 0
  • 二 、 HDFS体系结构 HDFS 采用的是master/slave架构设计 , 一个HDFS集群包含一个单独的 ...
    什么都不会的码农丶阅读 1,533评论 0 1
  • 1.肯定的言辞 :看到并肯定爱人的行为,越欣赏越有爱 2.精心的时刻:留出一段两个人的交流时间,二人世界 3.赠送...
    雪山飞狐儿阅读 408评论 0 1
  • 现在,大部分的网站都支持游客角色,比如淘宝,可以在不登录的情况下浏览网站,但是,想要使用网站提供的功能时,就必须先...
    是不是不是是阅读 534评论 0 1