初识hadoop及伪集群部署

hadoop:包含分布式文件系统和分布式计算的一个框架。 HDFS,mapreduce

  1. HDFS的架构:三种节点:NN,SNN,DN。

    1. 不可替代
    2. 存放海量的数据。
      1. 数据 --》----》文件—》存放HDFS—》数据文件(元数据,内容数据)—》元数据在NN,内容数据形成block在DN。
    3. 非常兼容各种分布式计算
      在这里插入图片描述

HDFS:分布式文件存储系统,提供了 高可靠性、高扩展性和高吞吐率的数据存储服务;

分布式计算框架MapReduce:计算向数据移动,具有易于编程、高容错性和高扩展性等优点;

分布式资源管理框架YARN:负责集群资源的管理和调度;

1.HDFS优点:

高容错性

​ •数据自动保存多个副本

​ • 副本丢失后,自动恢复

适合批处理

​ •移动计算而非数据

​ •数据位置暴露给计算框架(Block偏移量)

适合大数据处理

​ •GB 、TB 、甚至PB 级数据

​ •百万规模以上的文件数量

​ •10K+ 节点

可构建在廉价机器上

​ •通过多副本提高可靠性

​ •提供了容错和恢复 机制

2.HDFS缺点:

低延迟数据访问

​ •比如毫秒级

​ •低延迟与高吞吐率

小文件存取

​ •占用NameNode 大量内存

​ •寻道时间超过读取时间

并发写入、文件随机修改

​ •一个文件只能有一个写者

​ •仅支持append

3.存储模型:字节

文件线性切割成块(Block):偏移量 offset (byte),Block分散存储在集群节点中,单一文件Block大小一致,文件与文件可以不一致,数据文件切割形成的;

Block可以设置副本数,副本分散在不同节点中

•副本数不要超过节点数量

文件上传可以设置Block大小和副本数,已上传的文件Block副本数可以调整,大小不变

只支持一次写入多次读取,同一时刻只有一个写入者,可以append追加数据

4.架构模型

–文件元数据MetaData,文件数据

•元数据

•数据本身

(主)NameNode节点保存文件元数据:单节点 posix

(从)DataNode节点保存文件Block数据:多节点

DataNode与NameNode保持心跳,提交Block列表

HdfsClient与NameNode交互元数据信息

HdfsClient与DataNode交互文件Block数据

在这里插入图片描述

5.节点的作用:

**1.NameNode(NN)主: **

​ 1、接受客户端的读写请求。

​ 2、存储和管理HDFS的元数据(收集DataNode汇报的Block列表信息)。

​ 3、基于内存存储 ,不会和磁盘发生交换;

**2.SNN: **合并元数据文件(edits 和 fsimage)(这个功能也可以由其他节点来完成)

它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。

SNN执行合并时机

​ •根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒

​ •根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB ,最大128M

3.DataNode(DN)从 :

​ 1、存放和管理block(数据),

​ 2、实时往NN汇报

​ 3、通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN。

4.block(数据块):数据文件切割之后形成一个一个的数据块。还有偏移量 offset (byte),每个块默认有3个副本。默认64M,最大128M

5.元数据:除文件内容之外的。包括文件的名字、时间、所属用户、权限、大小等等,包括block的位置信息。

  1. **读写流程:**重点

    1. 写流程

      Client:

      ​ 切分文件Block

      ​ 按Block线性和NN获取DN列表(副本数)

      ​ 验证DN列表后以更小的单位流式传输数据

      ​ 各节点,两两通信确定可用

      Block传输结束后:

      ​ DN向NN汇报Block信息

      ​ DN向Client汇报完成

      ​ Client向NN汇报完成

      ​ 获取下一个Block存放的DN列表

      ​ 最终Client汇报完成

      ​ NN会在写流程更新文件状态

      解释2:

      客户端调用 create()来创建文件, Distributed File System 用 RPC 调用 NameNode

      节点, 在文件系统的命名空间中创建一个新的文件。 NameNode 节点首先确定文件原来不

      存在, 并且客户端有创建文件的权限, 然后创建新文件。

      Distributed File System 返回 DFSOutputStream, 客户端用于写数据。 客户端开始

      写入数据, DFSOutputStream 将数据分成块, 写入 Data Queue。 Data Queue 由 Data

      Streamer 读取, 并通知 NameNode 节点分配数据节点, 用来存储数据块(每块默认复制 3

      块)。 分配的数据节点放在一个 Pipeline 里。 Data Streamer 将数据块写入 Pipeline 中的第

      一个数据节点。 第一个数据节点将数据块发送给第二个数据节点。 第二个数据节点将数据发

      送给第三个数据节点。

      DFSOutputStream 为发出去的数据块保存了 Ack Queue, 等待 Pipeline 中的数据节

      点告知数据已经写入成功。
      在这里插入图片描述

    2. 读流程

      Client:

      ​ •和NN获取一部分Block副本位置列表

      ​ •线性和DN获取Block,最终合并为一个文件

      ​ •在Block副本列表中按距离择优选取

      在这里插入图片描述

  2. fsimage和edits的合并

    edits文件记录了客户端对HDFS所做的各种更新操作,客户端所有的写操作都被记录在了此文件中。
    而fsimage文件记录了元数据的文件,这个文件不是实时的,通俗来说,更像是对HDFS的一个快照,它记录了某个时刻下的HDFS的状态信息。
    触发这两个文件合并的条件
    1.HDFS的重新启动
    2.edits文件达到指定的大小(默认64M,可更改)

    3.设置了指定时间促使两文件合并(默认3600s,可更改)

    合并过程(SecondaryNameNode)

    NameNode中产生一个新的edits文件,名为edits.new后续的更新操作写在此文件中
    SecondaryNameNode通过http协议从Name上获取edits文件和fsimage文件
    在SecondaryNameNode上将fsimage文件加载到内存中,然后将edits文件的操作更新到内存中,然后写成一个新的文件fsimage.ckpt
    SecondaryNameNode通过http协议将fsimage.ckpt文件发送到NameNode上

    NameNode将fsimage.ckpt文件更名为fsimage,将edits.new更名为edits

    注意:

    SecondaryNameNode不是NameNode的热备,但也能起到一定的备份作用,这就说明在一定情况下可能会产生数据丢失情况,所以在Hadoop2.0完全分布式中,抛弃了SecondaryNameNode,采用了双NameNode机制来进行热备

    edits文件和fsimage文件的合并发生在SecondaryNameNode上是因为这两个文件比较合并耗时,如果在NameNode上合并可能会导致系统卡顿,所以在SecondaryNameNode上进行

在这里插入图片描述

在这里插入图片描述

hadoop 伪集群部署

1.环境准备

1.1.配置jdk

从已有服务器中远程拷贝jdk
scp -r jdk1.8.0_171-amd64 root@192.168.200.23:/usr/local/jdk1.8
配置环境变量
vi ~/.bash_profile 
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=/usr/local/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 
使文件生效
source ~/.bash_profile 

1.2.配置SSH免密钥登陆

远程登陆操作示例:
ssh root@192.168.200.22 'ls -l /'

#创建密钥公钥文件,实现是把公钥放在访问方的认证文件里
$  ssh-keygen -t dsa -P '' -f /root/.ssh/id_dsa
$  cd ~/.ssh/
$  ll
总用量 12
id_dsa   #密钥
id_dsa.pub   #公钥
known_hosts

#把公钥放在访问方的认证文件里
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
测试
[root@bd003 .ssh]# ssh root@localhost
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is 2c:67:f7:97:59:8c:de:d0:c5:75:1a:fb:32:35:09:55.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Last login: Tue Jun 11 13:49:32 2019 from 192.168.200.1
[root@bd003 ~]# 
#没有输入密码即可进
复制密钥
/root/.ssh
[root@bd003 .ssh]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@bd002

到此完成

1.3.时间同步

yum install ntp
service ntpd status
ntpdate time.nist.gov
或者
date -s "2019-6-11 09:25:10"

1.4.配置hosts

vi /etc/hosts
添加
192.168.200.21 bd001
192.168.200.22 bd002
192.168.200.23 bd003
192.168.200.24 bd004

查看network
[root@bd003 /]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=bd003

2.hadoop部署

2.1 上传解压安装包

解压
tar -zxvf hadoop-2.7.7.tar.gz
移动
mv hadoop-2.7.7 /opt/bd/

2.2配置hadoop环境变量

vi ~/.bash_profile


export HADOOP_HOME=/opt/bd/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

修改内置的环境变量
/opt/hadoop-2.6.5/etc/hadoop/hadoop-env.sh
文件中修改部分:
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8
#同样的修改mapred-env.sh和yarn-env.sh中的JAVA_HOME

2.3配置hadoop

1./opt/hadoop-2.6.5/etc/hadoop/core-site.xml 	
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://bd003:9000</value>
    </property>
    
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop_data</value>
    </property>
    
</configuration>

2./opt/hadoop-2.6.5/etc/hadoop/hdfs-site.xml 
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>bd003:50090</value>
    </property>

</configuration>

3./opt/hadoop-2.6.5/etc/hadoop/slaves
bd003




2.4 NameNode 格式化

/opt/hadoop-2.6.5/etc/hadoop/bin
./hadoop namenode -format

2.5 启动

/opt/hadoop-2.6.5/sbin
[root@bd003 sbin]# ./start-dfs.sh 

访问: http://192.168.200.23:50070/

上传测试文件

/opt/hadoop-2.6.5/bin
[root@bd003 bin]# ./hdfs dfs -put ~/hadoop-2.6.5.tar.gz  /
原文地址:https://www.cnblogs.com/ernst/p/12819186.html