5.大数据学习之旅——hadoop-简介及伪分布式安装

版权声明:版权归零零天所有 https://blog.csdn.net/qq_39188039/article/details/86222318

Hadoop简介

是Apache的顶级项目,是一个可靠的、可扩展的、支持分布式计算的开源
项目。

起源

创始人:Doug Cutting 和Mike
2004 Doug和Mike创建了Nutch - 利用通用爬虫爬取了互联网上的所有数
据,获取了10亿个网页数据 - 10亿个网页数据是非结构化数据,就意味
着这些数据是无法存储到数据库中
在这里插入图片描述
Doug发现了Google在2003年发表的一篇论文:《Google File System》,设计
了NDFS - Nutch Distributed File System解决了Nutch的存储问题
Doug发现了Google在2003年发表的另一篇论文:《Google MapReduce》,
这篇论文讲述了Google分布式系统的中的计算问题,Doug根据这篇论文设
计了MapReduce
后来,从Nutch0.8版本开始,就将NDFS和MapReduce模块独立出来成为了
Hadoop,并且将NDFS更名为HDFS
Doug带着Hadoop去了Yahoo,在Yahoo期间,设计了Pig, Hive, HBase等框架
Yahoo将Hadoop等框架贡献给了Apache
Hadoop:Doug在命名的时候希望用一些无意义的单词,就是为了防止重

Hadoop的版本

  1. Hadoop1.0:HDFS和MapReduce
  2. Hadoop2.0:完全重构的一套系统,不兼容1.0。包含了
    HDFS、MapReduce和Yarn
  3. Hadoop3.0:包含了HDFS、MapReduce、Yarn以及Ozone

Hadoop的模块

  1. Hadoop Common:基本模块
  2. Hadoop Distributed File System:HDFS。进行数据的分布式存储
  3. Hadoop YARN:进行任务调度和节点资源管理
  4. Hadoop MapReduce:基于Yarn对海量数据进行并行处理
  5. Hadoop Ozone:基于HDFS进行对象的存储

Hadoop的伪分布式安装

Hadoop的安装方式

  1. 单机安装。除了MapReduce模块以外,其他的都不能使用
  2. 伪分布式安装。利用一台主机模拟Hadoop的运行环境,可以使用
    Hadoop的所有模块
  3. 全分布式安装。在真正的集群上去安装Hadoop。

伪分布式的安装

  1. 关闭防火墙 service iptables stop
    vim /etc/sysnconfig/network
    更改HOSTNAME,例如
    HOSTNAME=hadoop01
    source /etc/sysconfig/network
  2. 修改主机名。在Hadoop集群中,主机名中不允许出现_以及-,如果出现
    会导致找不到这台主机。
    vim /etc/hosts
    添加 ip 主机名 ,例如
    192.168.60.132 hadoop01
  3. 更改hosts文件
  4. 配置免密互通
    ssh-keygen
    ssh-copy-id 用户名@主机地址,例如
    ssh-copy-id root@hadoop01
  5. 重启计算机 reboot
  6. 安装jdk
  7. 解压Hadoop的安装包 tar -xvf hadoop-2.7.1_64bit.tar.gz
  8. 进入安装目录下的子目录etc下的子目录hadoop cd
    hadoop-2.7.1/etc/hadoop
  9. 编辑hadoop-env.sh vim hadoop-env.sh
  10. 将JAVA_HOME替换为具体的jdk安装目录, 例如
    export JAVA_HOME=/home/preSoftware/jdk1.8
  11. 将HADOOP_CONF_DIR替换为具体的Hadoop的配置目录。例如
    export HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop
  12. 重新生效 source hadoop-env.sh
  13. 编辑core-site.xml vim core-site.xml
  14. 添加内容
<!-- 指定HDFS中的管理节点 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定存储位置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/software/hadoop-2.7.1/tmp</value>
</property>
  1. 编辑hdfs-site.xml vim hdfs-site.xml
  2. 添加内容
<!-- hdfs中的复本数量 -->
<!-- 在伪分布式中,复本数量必须为1 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
  1. 将mapred-site.xml.template复制为mapred-site.xml cp mapred-
    site.xml.template mapred-site.xml
  2. 编辑mapred-site.xml vim mapred-site.xml
  3. 添加内容:
<!-- 在Hadoop的2.0版本中,MapReduce是基于Yarn运行 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
  1. 配置yarn-site.xml vim yarn-site.xml
  2. 添加内容
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
  1. Hadoop本身是主从结构,配置slaves指定从节点
    vim slaves
    添加从节点的地址
  2. 配置环境变量
    vim /etc/profile
    添加:
    export HADOOP_HOME=/home/software/hadoop-2.7.1
    export PATH= P A T H : PATH: HADOOP_HOME/bin:$HADOOP_HOME/sbin
    重新生效
    source /etc/profile
  3. 格式化数据目录 hadoop namenode -format
    在这里插入图片描述
  4. 启动hadoop start-all.sh
    在这里插入图片描述
  5. 如果启动成功,可以在浏览器中输入地址:50070访问hadoop的页面

HDFS


本身是用于存储数据的
在这里插入图片描述

  1. 存储数据的节点 - datanode, 管理数据的节点 - namenode
  2. HDFS存储数据的时候会将文件进行切块,并且给每一个文件块分配
    一个递增的编号
  3. HDFS存储数据的时候会对数据进行备份,每一个备份称之为是一个
    复本。在伪分布式下,复本设置为1,但是在全分布式下,复本默认
    是3个
  4. 3个复本是放到不同的datanode中。复本的放置策略 - 机架感知策
    略:
    1. 第一个复本:客户端连接的是哪一个datanode,复本就放到哪一
      个datanode上
    2. 第二个复本:要放到另一个机架的datanode上
    3. 第三个复本:放到和第二个复本同机架的另一个datanode上
    4. 如果有更多的复本数量,其他的复本随机放到其他的datanode
  5. 如果某一个datanode宕机,那么这个时候namenode就会将这个
    datanode上所存放的复本进行复制,保证整个hdfs中有指定的复本数量
  6. namenode需要管理datanode,namenode中存储管理信息 — 元数据 -
    metadata — FileName replicas block-Ids id2host:
    1. 记录文件存储位置 /node01/a.txt
    2. 记录文件切的块数
    3. 文件块存储的datanode的地址
      /test/a.log,3,{b1,b2},[{b1:[h0,h1,h3]},{b2:[h0,h2,h4]}] — 存储的文件
      时a.log文件,存储在/test路径下,复本数量为3,切了2块,编号
      为b1,b2,b1存放在h0,h1,h3节点下,b2存放在h0,h2,h4节点下
  7. datanode主动向namenode发送心跳,保持namenode对datanode的管
    理。心跳信息包含:1.节点状态 2.节点存储的数据
  8. 如果超过10min中,namenode没有收到datanode的心跳,那么就认
    为这个datanode已经lost,那么namenode就会将这个lost的datanode
    中的数据进行备份

优点

  1. 支持超大文件:将文件进行切块分别放到不同的节点上
  2. 检测和快速应对硬件故障:心跳机制
  3. 流式数据访问
  4. 简化的一致性模型:只要一个文件块写好,那么这个文件块就不允许
    在进行改动,只能读取
  5. 高容错性:多复本。
  6. 可构建在廉价机器上:HDFS具有较好的扩展性。

缺点

  1. 高延迟数据访问:不适合于交互式,也就意味着Hadoop不适合做实
    时分析,而是做的离线分析
  2. 大量的小文件:文件的存储要经过namenode,namenode中要记录元
    数据,元数据是存储在内存中。大量的小文件会产生大量的元数据,导
    致内存被大量占用,降低namenode的处理效率
  3. 多用户写入文件、修改文件:在hadoop2.0版本中,不支持修改,但
    是支持追加
  4. 不支持超强的事务

技术细节

Block

HDFS在存储数据的时候是将数据进行切块,分别存储到不同的节点上。
在Hadoop1.0版本中,每一个block默认是64M大小,在Hadoop2.0版本
中,每一个block默认是128M大小
400M - 4 - 其中前3块,每一块是128M,第4块是16M
100M - 1 - 文件块按照实际大小100M存储
好处:

  1. 利于大文件的存储
  2. 方便传输
  3. 便于计算

NameNode

负责datanode的管理以及存储元数据。
元数据存在内存(快速查询)和磁盘(崩溃恢复)中
HDFS的结构中,namenode存在单点问题
fsimage - 存储元数据。但是注意fsimage中的元数据和内存中并不一致,
也就意味着fsimage中的数据并不是实时数据
edits - 存储HDFS的操作
fstime - 记录上一次的更新时间
在这里插入图片描述

触发更新的条件:

  1. 文件大小 — 根据配置文件设置的edits log大小 fs.checkpoint.size 默认
    64MB
  2. 定时更新 — 根据配置文件设置的时间间隔:fs.checkpoint.period 默
    认3600秒
  3. 重启hdfs的时候也会触发更新 — 在合并过程中,HDFS不对外提供
    写服务,只提供读服务 — 重启hdfs的时候进行的更新阶段 — 安
    全模式

安全模式:

  1. 只能读不能写
  2. 检查复本数量以及总量 — 导致伪分布式环境下,复本数量必须设
    置为1
    安全模式:
    如果重启hdfs,处于安全模式,等待一会儿,检查完数据都没有问题,
    自动退出安全模式
    在学习期间,重启hdfs之后如果长期处于安全模式中,说明数据有损
    坏:
  3. 强制退出安全模式 hadoop dfsadmin -safemode leave
  4. 关闭HDFS
  5. 删除dfs、nm-local-dir、logs
  6. 重新格式化 hadoop namenode -format
    SecondaryNameNode
    不是namenode的热备份,而是进行fsimage和edits的合并的

hdfs体系结构

在这里插入图片描述

hdfs读取数据

在这里插入图片描述

#hdfs写入数据
在这里插入图片描述

mr原理

在这里插入图片描述

ssn合并流程

在这里插入图片描述

上一篇 4.大数据学习之旅——Avro

猜你喜欢

转载自blog.csdn.net/qq_39188039/article/details/86222318