🍂Hadoop入门



一、🍁环境准备

提前准备三台虚拟机,构建三台虚拟机免登录(前提三台虚拟机网络配置与本机名都已经配置,可翻看之前文章)

虚拟机相互免秘钥

##右【123】意味着要三台虚拟机同时操作
##三台主机分别生成秘钥
【123】ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
##host验证
【123】vim /etc/ssh/ssh_config 在最后添加
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
##将秘钥分别拷贝给自己和别人
【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@node01
【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@node02
【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@node03
##免密中要输入密码
##关闭主机拍摄快照
power off

验证:测试免密登录
在这里插入图片描述


二、🍁Hadoop✧HDFS

Nutch,Hadoop最早起源于Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。Google,2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。GFS : Google File System和MapReduce :数据计算的方法。Doug cutting花费了自己的两年业余时间,将论文实现了出来。2008年1月,HADOOP成为Apache顶级项目。狭义上来说,hadoop就是单独指代hadoop这个软件,广义上来说,hadoop指代大数据的一个生态圈,包括很多其他的软件。

在这里插入图片描述


1、 分布式文件系统架构

重要思想,就是文件切分思想,通过对文件的切分,划分除等同的存储块Block,块的大小不可改变,但内容的可以跟块的大小不一样。
DFS:分布式文件系统:效率,安全,文件依二进制存储,拆分多个小数据存放,需要时再合并,根据偏移量进行合并,如果文件存储到单块硬盘肯定慢,超出磁盘存储空间等,二进制是一个字节数组,切分为块,切分块时,块大小不一,只有找到全部的文件才进行拼接,如果数据块大小不一致,需要为单独快设计算法,读取时间和程序计算时间。我们的文件应该切分为等大的块 首选确定一个块的大小,然后将文件从头至尾开始切分,从第一个块至第二个快大小都是相同的,除了最后一个块,45M 16M16M13M在HDFS中,数据的等大是计算的前提(最后一个可能不是等大)

  • 名词:access.log 文件
    • 切分之后每个部分被称为Block
    • 每个文件可以切分成ceil(File/Block)
    • HPV1 Block 64M(默认)
    • HPV2 3 Block 128M(默认)
  • 是否能够修改HDF上的数据?
    • 迁移数据量不可控
    • 破坏等大特性,故此不被修改,但可以被追加,默认是关闭追加
  • 是否额能修改已经上传块的大小?
    • 不能,只能上传新的,每个block可以不是128,可以自定义切分,但要等大,最后一个可以不扽大
  • 遗留问题
    • 有可能一个单词,一个数据被切成两分
  • 安全
    • 文件切分一旦一个块丢失则文件损坏,—数据备份
  • 块的管理
    • DataNode 1, DataNode 2,…数据存储节点
    • NameNode 6 记账,记录元数据信息,以及每个块位置信息(映射信息),所有操作都在内存中,NameNode不负责IO操作,只提供地址
    • NameNode安全问题:一但损坏则找不到block,故SencondaryNameNode记录整个集群数据变化的日志信息

块的管理方式
在这里插入图片描述


2、HDFS数据分类
  • 文件
    • 元数据:描述文件大小,权限,时间,所有者,副本数,快的大小,文件与文件快可以不同,
    • 真实数据:即文件存放二进制在计算机上

  • 节点:

在这里插入图片描述

  • NameNode:元素据,文件与块的映射,特殊点:集群关机时,源数据文件和块的映射会被实例化到硬盘上,但块与数据映射关闭不会存放到硬盘
  • 导致节点丢失(防止:启动进入安全模式,不允许客户端对服务查询)
  • 为了保证每个BLK都是有效的,所以每次关闭步进行实例化到硬盘

  • NamNode:心跳机制–DN,每三秒发送一次,当集群启动完毕后保持心跳,超过3秒则失败(暂时标记不可用)10分钟+30秒后则转移数据

  • 接受客户请求:先去NN访问获取地址,再去DN获取数据

  • 日志信息:保证集群中的时候不会出现问题以及问题出现的时候,存日志方式解决(Secondary NameNode)

①、DataNode
  • 存储
    • DN存的时BLK,害怕存放小文件,因为小文件会形成大量的元数据,映射信息,有可能这些信息会大于文件的大小
  • 心跳
    • 启动时,首先检查当前节点的完整性,如果BLK没问题,将其汇报给NN,BLK的名字都是唯一的
    • 每3秒一次心跳汇报当前节点存储信息

在这里插入图片描述


②、NameNode
  • 为了提高效率
    • 所有的数据都会在内存中处理,安全问题掉电擦除,有可能数据丢>失,当正常关闭,序列化到硬盘,开启则进行反序列化
    • 所有的操作都存放日志(硬盘)当读取数据的时候需要硬盘读取,有可能速度不够,关闭直接关闭即可,开启需要从以往数据中寻找对应的请求
  • 方案
    • 同时兼顾效率和安全,放内存速度快,但怕断电,所以每次依然会记录日志,每次操作先记录日志,在将数据修改到内存中,但用户查询的>时候优先使用内存

在这里插入图片描述


③、SencondaryNameNode

作用就是为了合并,fsimage:当前内存中文件系统的快照(序列化)edits日志,合并Fsimage与Edits。


三、🍁搭建Hadoop集群

在这里插入图片描述


① 环境准备
#直接上传安装包
[root@node01 ~]# tar -zxvf hadoop-3.1.2.tar.gz
[root@node01 ~]# mv hadoop-3.1.2 /opt/yjx/
[root@node01 ~]# cd /opt/yjx/hadoop-3.1.2/etc/hadoop/
② 修改配置

[root@node01 hadoop]# vim hadoop-env.sh

##直接在文件的最后添加
export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root

[root@node01 hadoop]# vim core-site.xml

<property>
<name>fs.defaultFS</name>
<value>hdfs://node01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/yjx/hadoop/full</value>
</property>

[root@node01 hadoop]# vim hdfs-site.xml

<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node02:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>node02:50091</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>

[root@node01 hadoop]# vim workers

node01
node02
node03

③ 拷贝至node02、node03
[root@node02 ~]# scp -r root@node01:/opt/yjx/hadoop-3.1.2 /opt/yjx/
[root@node03 ~]# scp -r root@node01:/opt/yjx/hadoop-3.1.2 /opt/yjx/

④ 配置环境变量

[root@node01 hadoop]# vim /etc/profile

# 添加 ,三个虚拟机都要配置
export HADOOP_HOME=/opt/yjx/hadoop-3.1.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
# 记得刷新配置配置文件
source /etc/profile

⑤ 格式化NameNode✧测试
# 先格式化,不要重复此操作
[root@node01 yjx]# hdfs namenode -format
# 启动集群
[root@node01 yjx]# start-dfs.sh

在这里插入图片描述

测试:192.168.168.101:9870
在这里插入图片描述


常用命令:

# 创建文件夹
[root@node01 ~]# hdfs dfs -mkdir -p /yjx
# 上传文件
[root@node01 ~]# hdfs dfs -put zookeeper-3.4.5.tar.gz /yjx/
# 下载文件
[root@node01 ~]# hdfs dfs -D dfs.blocksize=1048576 -put zookeeper-3.4.5.tar.gz /yjx/
HadoopShell命令
http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html
https://www.cnblogs.com/duanxz/p/3799467.html

在这里插入图片描述


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐