大数据学习笔记

大数据

Hadoop HDFS 分布式文件系统

现需要分布式存储的原因

  • 数据量太大,单机存储能力有上限,需要靠数量来解决问题
  • 数量的提升带来的是网络传输、磁盘读写、CPU、内存等各方面的综合提升。 分布式组合在一起可以达到1+1>2的效果

分布式的基础架构

主从模式

大数据框架,大多数的基础架构上,都是符合:中心化模式的。

即:有一个中心节点(服务器)来统筹其它服务器的工作,统一指挥,统一调派,避免混乱。

这种模式,也被称之为:一主多从模式,简称主从模式(Master And Slaves)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Hadoop:从模式(中心化模式)的架构

HDFS的基础架构

HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一全称是:

  • Hadoop Distributed File System(Hadoop分布式文件系统)
  • 是Hadoop技术栈内提供的分布式数据存储解决方案
  • 可以在多台服务器上构建存储集群,存储海量的数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

HDFS的角色

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NameNode:

  • HDFS系统的主角色,是一个独立的进程
  • 负责管理HDFS整个文件系统
  • 负责管理DataNode

DataNode:

  • HDFS系统的从角色,是一个独立进程
  • 主要负责数据的存储,即存入数据和取出数据

SecondaryNameNode:

  • NameNode的辅助,是一个独立进程
  • 主要帮助NameNode完成元数据整理工作(打杂)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

HDFS集群环境部署

见Linux.md

HDFS的 Shell操作

进程的启停管理

Hadoop HDFS组件内置了HDFS集群的一键启停脚本。

  • $HADOOP_HOME/sbin/start-dfs.sh,一键启动HDFS集群
    • 执行原理:
      • 在执行此脚本的机器上,启动SecondaryNameNode
      • 读取core-site.xml内容(fs.defaultFS项),确认NameNode所在及其,启动NameNode
      • 读取workers内容,确认DataNode所在机器,启动全部DataNode
  • $HADOOP_HOME/sbin/stop-dfs.sh,一键关闭HDFS集群
    • 执行原理:
      • 在执行此脚本的机器上,关闭SecondaryNameNode
      • 读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,关闭NameNode
      • 读取workers内容,确认DataNode所在机器,关闭全部NameNode

单进程启停

  • $HADOOP_HOME/sbin/hadoop-daemon.sh,此脚本可以单独控制所在机器的进程的启停
    用法:

    hadoop-daemon.sh (start|status|stop) (namenode|secondarynamenode|datanode)
    
  • $HADOOP_HOME/bin/hdfs,此程序也可以用以单独控制所在机器的进程的启停
    用法:

    hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)
    

hdfs文件系统基本信息

HDFS作为分布式存储的文件系统,有其对数据的路径表达方式:

HDFS同Linux系统一样,均是以/作为根目录的组织形式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

区分

Linux:file:///

Linux:file:///usr/local/hello.txt

HDFS:hdfs://namenode:port/

HDFS:hdfs://node1:8020/usr/local/hello.txt

协议头file:/// 或 hdfs://node1:8020/可以省略

  • 需要提供Linux路径的参数,会自动识别为file://
  • 需要提供HDFS路径的参数,会自动识别为hdfs://

除非你明确需要写或不写会有BUG,否则一般不用写协议头

HDFS文件系统的操作命令

👉命令官方指导文档

  • 老版本用法
hadoop fs [generic options]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 新版本用法
hdfs dfs [generic options]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建文件夹
hadoop fs -mkdir [-p] <path> ...
hdfs dfs -mkdir [-p] <path> ...
  • path 为待创建的目录
  • -p选项的行为与Linux mkdir -p一致,它会沿着路径创建父目录。
查看指定目录下内容
hadoop fs -ls [-h] [-R] [<path> ...] 
hdfs dfs -ls [-h] [-R] [<path> ...] 
  • path 指定目录路径
  • -h 人性化显示文件size
  • -R 递归查看指定目录及其子目录
上传文件到HDFS指定目录下
hadoop fs -put [-f] [-p] <localsrc> ... <dst>
hdfs dfs -put [-f] [-p] <localsrc> ... <dst>
  • -f 覆盖目标文件(已存在下)
  • -p 保留访问和修改时间,所有权和权限。
  • localsrc 本地文件系统(客户端所在机器)
  • dst 目标文件系统(HDFS)
hadoop fs -put words.txt /fq
hdfs dfs -put file:///etc/profile hdfs://node1:8020/fq
查看HDFS文件内容
hadoop fs -cat <src> ... 
hdfs dfs -cat <src> ...

读取指定文件全部内容,显示在标准输出控制台。

读取大文件可以使用管道符配合more:

hadoop fs -cat <src> | more
hdfs dfs -cat <src> | more
下载HDFS文件
hadoop fs -get [-f] [-p] <src> ... <localdst>
hdfs dfs -get [-f] [-p] <src> ... <localdst>

下载文件到本地文件系统指定目录

  • localdst必须是目录
  • -f 覆盖目标文件(已存在下)
  • -p 保留访问和修改时间,所有权和权限。
拷贝HDFS文件
hadoop fs -cp [-f] <src> ... <dst> 
hdfs dfs -cp [-f] <src> ... <dst>
  • -f 覆盖目标文件
追加数据到HDFS文件中
hadoop fs -appendToFile <localsrc> ... <dst>
hdfs dfs -appendToFile <localsrc> ... <dst>
  • 将所有给定本地文件的内容追加到给定dst文件。
  • dst如果文件不存在,将创建该文件。
  • 如果为-,则输入为从标准输入中读取。
HDFS数据移动操作
hadoop fs -mv <src> ... <dst>
hdfs dfs -mv <src> ... <dst>	
  • 移动文件到指定文件夹下
  • 可以使用该命令移动数据,重命名文件的名称
HDFS数据删除操作
hadoop fs -rm -r [-skipTrash] URI [URI ...]
hdfs dfs -rm -r [-skipTrash] URI [URI ...]
  • 删除指定路径的文件或文件夹
  • -skipTrash 跳过回收站,直接删除

回收站功能默认关闭,如果要开启需要在core-site.xml内配置:

<property>
<name>fs.trash.interval</name>
<value>1440</value>
<!--value 保留的区间 1440表示保留一天 -->
</property> 

<property>
<name>fs.trash.checkpoint.interval</name>
<value>120</value>
<!-- value 回收站检查周期 120表示两个小时检查一次(检查:超期的删除)-->
</property>

无需重启集群,在哪个机器配置的,在哪个机器执行命令就生效。回收站默认位置在:/user/用户名(hadoop)/.Trash

HDFS WEB浏览

使用WEB浏览操作文件系统,一般会遇到权限问题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是因为WEB浏览器中是以匿名用户(dr.who)登陆的,其只有只读权限,多数操作是做不了的。如果需要以特权用户在浏览器中进行操作,需要配置如下内容到core-site.xml并重启集群

  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>hadoop</value>
  </property>

如果给与高权限,会有很大的安全问题,造成数据泄露或丢失

HDFS超级用户

  • HDFS文件系统使用和Linux一样逻辑的权限控制体系

  • HDFS的超级用户:启动namenode的用户

  • 可以使用

    hadoop fs -chown 或 hdfs dfs -chown,修改所属
    
    hadoop fs -chmod 或 hdfs dfs -chmod,修改权限
    

HDFS客户端 - NFS

​ HDFS提供了基于NFS(Network File System)的插件,可以对外提供NFS网关,供其它系统挂载使用。NFS 网关支持 NFSv3,并允许将 HDFS 作为客户机本地文件系统的一部分挂载,现在支持:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置NFS
  • core-site.xml,新增配置项 以及 hdfs-site.xml,新增配置项
  • 开启portmap、nfs3两个新进程

在node1进行如下操作

  1. 在core-site.xml 内新增如下两项
  <!--项目: hadoop.proxyuser.hadoop.groups 值:*
  允许hadoop用户代理任何其它用户组-->
  <property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
  </property>

  <!--项目:hadoop.proxyuser.hadoop.hosts 值:*
  允许代理任意服务器的请求-->
  <property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>
  </property>
  1. 在hdfs-site.xml中新增如下项
  <property>
<!--nfs.suerpser:NFS操作HDFS系统,所使用的超级用户(hdfs的启动用户为超级用户)-->
    <name>nfs.superuser</name>
    <value>hadoop</value>
  </property>

  <property>
<!--nfs.dump.dir:NFS接收数据上传时使用的临时目录-->
    <name>nfs.dump.dir</name>
    <value>/tmp/.hdfs-nfs</value>
  </property>

  <property>
<!--nfs.exports.allowed.hosts:NFS允许连接的客户端IP和权限,rw表示读写,IP整体或部分可以以*代替-->
    <name>nfs.exports.allowed.hosts</name>
    <value>192.168.88.1 rw</value>
  </property>

课程设置的允许192.168.88.1以rw连接(这个IP是电脑虚拟网卡VMnet8的IP,连接虚拟机就走这个网卡)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

启动NFS功能
  1. 将配置好的core-site.xml和hdfs-site.xml分发到node2和node3

  2. 重启Hadoop HDFS集群(先stop-dfs.sh,后start-dfs.sh)

  3. 停止系统的NFS相关进程

    1. systemctl stop nfs; systemctl disable nfs
      

      关闭系统nfs并关闭其开机自启

    2. yum remove -y rpcbind
      

      卸载系统自带rpcbind

  4. 启动portmap(HDFS自带的rpcbind功能)(必须以root执行):

    hdfs --daemon start portmap
    
  5. 启动nfs(HDFS自带的nfs功能)(必须以hadoop用户执行):

    hdfs --daemon start nfs3
    
检查NFS是否正常

以下操作在node2或node3执行(因为node1卸载了rpcbind,缺少了必要的2个命令)

  • 执行:

    rpcinfo -p node1
    

    正常输出如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 有mountd和nfs出现执行:

    showmount -e node1
    

    可以看到 / 192.168.88.1

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在Windows挂载HDFS文件系统
  1. 开启Windows的NFS功能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此功能需要专业版,如果是家庭版Windows需要升级为专业版

  1. 在Windows命令提示符(CMD)内输入:

    net use X: \\192.168.88.101\!
    

    挂载为X盘

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 完成后即可在文件管理器中看到盘符为X的网络位置外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  3. 点击右键客户断开连接外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

HDFS的存储原理

HDFS分布式文件存储

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

block块

设定统一的管理单位,block块:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Block块,HDFS最小存储单位每个256MB(可以修改)

HDFS副本机制

解决Block块丢失问题

  • 通过多个副本(备份)解决
  • 每个Block块都有2个(可修改)备份
  • 每个副本都复制到其它服务器一份

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

fsck命令

HDFS文件系统的数据安全是依靠多个副本来确保的。设置默认文件上传到HDFS中拥有的副本数量可以在hdfs-site.xml中配置如下属性:

<property>    
    <name>dfs.replication</name>    
    <value>3</value>
</property>

这个属性默认是3,一般情况下,我们无需主动配置(除非需要设置非3的数值)如果需要自定义这个属性,请修改每一台服务器的hdfs-site.xml文件,并设置此属性。

除了配置文件外,我们还可以在上传文件的时候,临时决定被上传文件以多少个副本存储。

hadoop fs -D dfs.replication=2 -put test.txt /tmp/

如上命令,就可以在上传test.txt的时候,临时设置其副本数为2

对于已经存在HDFS的文件,修改dfs.replication属性不会生效,如果要修改已存在文件可以通过命令

hadoop fs -setrep [-R] 2 path

如上命令,指定path的内容将会被修改为2个副本存储。-R选项可选,使用-R表示对子目录也生效。

fsck命令检查文件的副本数

使用hdfs提供的fsck命令来检查文件的副本数:

hdfs fsck path [-files [-blocks [-locations]]]

fsck可以检查指定路径是否正常

  • files可以列出路径内的文件状态
  • files -blocks 输出文件块报告(有几个块,多少副本)
  • files -blocks -locations 输出每一个block的详情
block配置

对于块(block),hdfs默认设置为256MB一个,也就是1GB文件会被划分为4个block存储。

块大小可以通过参数:

<property>    
    <name>dfs.blocksize</name>
    <!--设置为256MB-->
    <value>268435456</value>    
    <description>设置HDFS块大小,单位是b</description>  </property>

NameNode元数据

edits文件

NameNode基于一批edits和一个fsimage文件的配合完成整个文件系统的管理和维护:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

edits文件,是一个流水账文件,记录了hdfs中的每一次操作,以及本次操作影响的文件其对应的block:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

存在多个edits文件确保不会有超大edits的存在保证检索性能

fsimage文件

将全部的edits文件,合并为最终结果,即可得到一个FSImage文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NameNode元数据管理维护

NameNode基于edits和FSImage的配合,完成整个文件系统文件的管理。

  1. 每次对HDFS的操作&

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fqlll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值