黑马程序员-大数据入门到实战-HDFS分布式存储

简介: 黑马程序员-大数据入门到实战-HDFS分布式存储

1. 为什么需要分布式存储

① 数据量太大,单机存储能力有上限,需要靠数量来解决问题

② 数量的提升带来的是网络传输,磁盘读写、CPU、内存等各方面的综合提升,分布式组合在一起可以达到1+1>2的效果

2. 分布式的基础架构分析

① 去中心化模式:没有明确中心,大家协调工作

② 中心化模式:有明确的中心,基于中心节点分配工作(Hadoop)

3. HDFS的基础架构

  • NameNode:主角色,管理HDFS集群和DataNode角色
  • DataNode:从角色,负责数据的存储
  • SecondaryNameNode:辅助角色,协助NameNode整理元数据

4. HDFS集群环境部署

4.1 VMware虚拟机中部署

4.1.1 集群规划

Hadoop HDFS 的角色

  • NameNode
  • DataNode
  • SecondaryNameNode

节点服务

  • node1:NameNode、DataNode、SecondaryNameNode
  • node2:DataNode
  • node3:DataNode

4.1.2 上传解压

  1. 上传Hadoop安装包到node1节点中
  1. 解压安装包到/export/server/中
tar -zxvf hadoop-3.3.6.tar.gz -C /export/server/
  1. 构建软链接
cd /export/server
ln -s /export/server/hadoop-3.3.6 hadoop
  1. 进入hadoop安装包内
cd hadoop

4.1.3 Hadoop安装包目录结构

  • bin:存放Hadoop的各类程序
  • etc:存放Hadoop的配置文件
  • sbin:管理员程序
  • lib:存放Linux系统的动态链接库(.so文件)
  • libexec:存放配置Hadoop系统的脚本文件(.sh和.cmd)

4.1.4 修改配置文件

配置HDFS集群,我们主要涉及如下文件的修改

  1. 配置workers文件
cd etc/hadoop  #进入配置文件目录
vim workers # 编辑workers文件
# 填入如下内容
node1
node2
node3
  1. 配置hadoop-env.sh文件
# 填入如下内容
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
  1. 配置core-site.xml文件
# 在文件内部填入如下内容
<configuration>
  <property>
    <name>fs.defaultFS</name> # HDFS文件系统的网络通讯路径
    <value>hdfs://node1:8020</value> 
  </property>
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value> # io操作文件缓冲区大小
  </property>
</configuration>
  • hdfs://node1:8020为整个HDFS内部的通讯地址,应用协议为hdfs://(Hadoop内置协议)
  • 表明DataNode将和node1的8020端口通讯,node1是NameNode所在机器
  • 此配置固定了node1必须启动NameNode进程
  1. 配置hdfs-site.xml文件
# 在文件内部填入如下内容
<configuration>
  <property>
    <name>dfs.datanode.data.dir.perm</name>  # hdfs文件系统,默认创建的文件权限设置
    <value>700</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>    # NameNode元数据的存储位置
    <value>/data/nn</value>
  </property>
  <property>
    <name>dfs.namenode.hosts</name>     # NameNode允许哪几个节点的DataNode连接(即允许加入集群)
    <value>node1,node2,node3</value>
  </property>
  <property>
    <name>dfs.blocksize</name>     # hdfs默认块大小
    <value>268435456</value>
  </property>
  <property>
    <name>dfs.namenode.handler.count</name>    # namenode处理的并发线程数
    <value>100</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>   # 从节点DataNode的数据存储目录
    <value>/data/dn</value>
  </property>
</configuration>

4.1.5 准备数据目录

  1. 在node1节点:
mkdir -p /data/nn
mkdir /data/dn
  1. 在node2,node3节点:
mkdir -p /data/dn

4.1.6 分发Hadoop文件夹

  1. 分发
# 在node1执行如下命令
cd /export/server
scp -r hadoop-3.3.6 node2:`pwd`/
scp -r hadoop-3.3.6 node3:`pwd`/
  1. 在node2执行,为hadoop配置软链接
# 在node2执行如下命令
ln -s /export/server/hadoop-3.3.6 /export/server/hadoop
  1. 在node3执行,为hadoop配置软链接
# 在node3执行如下命令
ln -s /export/server/hadoop-3.3.6 /export/server/hadoop

4.1.7 配置环境变量

  1. vim /etc/profile
# 在/etc/profile文件底部追加如下内容
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. 在node2和node3配置同样的环境变量

4.1.8 格式化整个文件系统

  1. 格式化namenode
# 确保以hadoop用户执行
su - hadoop
# 格式化namenode
hadoop namenode -format
  1. 启动
# 一键启动hdfs集群
start-dfs.sh
# 一键关闭hdfs集群
stop-dfs.sh
# 如果遇到命令未找到的错误,表明环境变量未配置好,可以以绝对路径执行
/export/server/hadoop/sbin/start-dfs.sh
/export/server/hadoop/sbin/stop-dfs.sh

5. HDFS的Shell操作

5.1 进程启停管理

5.1.1 一键启停脚本

  1. 一键启动HDFS集群
$HADOOP_HOME/sbin/start-dfs.sh

执行原理:

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

执行原理:

  • 在执行此脚本的机器上,关闭SecondaryNameNode
  • 读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,关闭NameNode
  • 读取workers内容,确认DataNode所在机器,关闭全部NameNode

5.1.2 单进程启停

单独控制所在机器的进程的启停

  1. $HADOOP_HOME/sbin/hadoop-daemon.sh
hadoop-daemon.sh (start|status|stop) (namenode|secondarynamenode|datanode)
  1. $HADOOP_HOME/bin/hdfs
hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)

5.2 文件系统操作命令

  1. 创建文件夹
hadoop fs -mkdir [-p] <path>
hdfs dfs -mkdir [-p] <path>
  • -p:沿着路径创建父目录
  1. 查看指定目录下内容
hadoop fs -ls [-h] [-R] [<path> ....]
hdfs dfs -ls [-h] [-R] [<path> ....]
  • -h:人性化显示文件size
  • -R:递归查看指定目录及其子目录
  1. 上传文件到HDFS指定目录下
hadoop fs -put [-f] [-p] <localsrc> <dst>
hdfs dfs -put [-f] [-p] <localsrc> <dst>
  • -f:覆盖目标文件
  • -p:保留访问和修改时间,所有权和权限
  • localsrc:本地文件系统
  • dst:目标文件系统(HDFS)
  1. 查看HDFS文件内容
hadoop fs -cat <src> ....| more
hdfs dfs -cat <src> ....| more
  1. 下载HDFS文件
hadoop fs -get [-f] [-p] <src>....<localdst>
hdfs dfs -get [-f] [-p] <src>....<localdst>
  • -f:覆盖目标文件
  • -p:保留访问和修改时间
  1. 拷贝HDFS文件
hadoop fs -cp [-f] <src>....<dst>
hdfs dfs -cp [-f] <src>....<dst>
  • -f:覆盖目标文件
  1. 追加数据到HDFS文件中
hadoop fs -appendToFile <localsrc>....<dst>
hdfs dfs -appendToFile <localsrc>....<dst>
  1. HDFS数据移动操作
hadoop fs -mv <src>....<dst>
hdfs dfs -mv <src>....<dst>
  1. HDFS数据删除操作
hadoop fs -rm -f [-skipTrash] [URl..]
hdfs dfs -rm -f [-skipTrash] [URl..]
  • -skipTrash跳过回收站,直接删除

5.3 HDFS权限

5.4 HDFS 客户端

6. HDFS的存储原理

6.1 存储原理

6.2 fsck命令

6.2.1 HDFS副本块数量的配置

  • 在hdfs-site.xml中配置:
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
  • 或者
hadoop fs -D dfs.replication=2 -put test.txt /tmp/

6.2.2 fsck命令检查文件的副本数

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

6.2.3 block配置

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

6.3 NameNode元数据

6.4 HDFS数据的读写流程

6.4.1 数据写入流程

  1. 客户端向NameNode发起请求
  2. NameNode审核权限、剩余空间后,满足条件允许写入,并告知客户端写入的DataNode地址
  3. 客户端向指定的DataNode发送数据包
  4. 被写入数据的DataNode同时完成数据副本的复制工作,将其接收的数据分发给其它DataNode
  1. 如上图,DataNode1复制给DataNode2,然后基于DataNode2复制给Datanode3和DataNode4
  2. 写入完成客户端通知NameNode,NameNode做元数据记录工作

6.4.2 数据读取流程

  1. 客户端向NameNode申请读取某文件
  2. NameNode判断客户端权限等细节后,允许读取,并返回此文件的block列表
  3. 客户端拿到block列表后自行寻找DataNode读取即可
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
30天前
|
存储 分布式计算 安全
bigdata-07-Hdfs原理到实战
bigdata-07-Hdfs原理到实战
39 0
|
2月前
|
消息中间件 RocketMQ 微服务
RocketMQ 分布式事务消息实战指南
RocketMQ 分布式事务消息实战指南
274 1
|
4月前
|
SQL 分布式计算 数据可视化
滴滴出行大数据数仓实战
滴滴出行大数据数仓实战
119 0
滴滴出行大数据数仓实战
|
16天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
2月前
|
Java 数据库连接 API
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)
60 0
|
开发框架 Java 数据库连接
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)(下)
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)
37 0
|
数据库 微服务
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)(上)
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)
41 0
|
3天前
|
分布式计算 大数据 数据处理
[AIGC大数据基础] Spark 入门
[AIGC大数据基础] Spark 入门
|
4月前
|
分布式计算 大数据 Java
问我大数据怎么入门,我总结了亲身体验的学习路线推荐给她【推荐收藏】
问我大数据怎么入门,我总结了亲身体验的学习路线推荐给她【推荐收藏】
50 0
|
17天前
|
机器学习/深度学习 人工智能 安全
Azure Databricks实战:在云上轻松进行大数据分析与AI开发
【4月更文挑战第8天】Databricks在大数据分析和AI开发中表现出色,简化流程并提高效率。文中列举了三个应用场景:数据湖分析、实时流处理和AI机器学习,并阐述了Databricks的一体化平台、云原生弹性及企业级安全优势。博主认为,Databricks提升了研发效能,无缝集成Azure生态,并具有持续创新潜力,是应对大数据挑战和加速AI创新的理想工具。
41 0

热门文章

最新文章