大数据-Hadoop


前置知识

大数据三个阶段

  • 阶段 1:Hadoop 生态体系
  • 阶段 2:Spark 离线计算
  • 阶段 3:Flink 实时计算

大数据两个方向

  • 离线开发方向——Hadoop、Spark
  • 实时计算方向——Flink、Hbase

大数据核心工作

  • 分布式数据存储——HDFS、HBase、KuDu
  • 分布式数据计算——MapReduce、HiveSparkFlink
  • 分布式数据传输——KafKa、Pulsar、Flume、Sqoop

Hadoop 三大功能组件

  • 数据存储——HDFS
  • 数据计算——MapReduce
  • 资源调度——YARN

为什么需要分布式存储?

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

  • 数量的提升带来的是网络传输、磁盘读写、CPU、内存等各方面的综合提升。

  • 分布式组合在一起可以达到1+1>2的效果

分布式系统常见的组织形式?

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

  • 中心化模式:有明确的中心,基于中心节点分配工作

Hadoop是哪种模式?

  • 主从模式(中心化模式)的架构

HDFS的基础架构

HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一,全称是:Hadoop Distributed File System(Hadoop分布式文件系统),是Hadoop技术栈内提供的分布式数据存储解决方案,可以在多台服务器上构建存储集群,存储海量的数据。

HDFS集群角色

  • 主角色:NameNode

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

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

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

Hadoop安装包目录结构

  • bin,存放Hadoop的各类程序(命令)

  • etc,存放Hadoop的配置文件

  • include,C语言的一些头文件

  • lib,存放Linux系统的动态链接库(.so文件)

  • libexec,存放配置Hadoop系统的脚本文件(.sh和.cmd)

  • licenses-binary,存放许可证文件

  • sbin,管理员程序(super bin)

  • share,存放二进制源码(Java jar包)

配置HDFS集群,涉及的文件的修改

  • workers: 配置从节点(DataNode)有哪些

  • hadoop-env.sh: 配置Hadoop的相关环境变量

  • core-site.xml: Hadoop核心配置文件

  • hdfs-site.xml: HDFS核心配置文件

这些文件均存在与$HADOOP_HOME/etc/hadoop文件夹中。$HADOOP_HOME设置的环境变量,其指代Hadoop安装文件夹

配置workers文件

# 进入配置文件目录
cd etc/hadoop

# 编辑workers文件
vim workers

# 填入如下内容
node1
node2
node3

配置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
  • JAVA_HOME,指明JDK环境的位置在哪

  • HADOOP_HOME,指明Hadoop安装位置

  • HADOOP_CONF_DIR,指明Hadoop配置文件目录位置

  • HADOOP_LOG_DIR,指明Hadoop运行日志目录位置

通过记录这些环境变量, 来指明上述运行时的重要信息

配置core-site.xml文件

在文件内部填入如下内容
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1:8020</value>
  </property>

  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
  </property>
</configuration>
  • fs.defaultFS:HDFS文件系统的网络通讯路径

  • hdfs://node1:8020:协议为hdfs://,namenode为node1,namenode通讯端口为8020

  • io.file.buffer.size:io操作文件缓冲区大小

配置hdfs-site.xml文件

# 在文件内部填入如下内容
<configuration>
  <property>
    <name>dfs.datanode.data.dir.perm</name>
    <value>700</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/data/nn</value>
  </property>
  <property>
    <name>dfs.namenode.hosts</name>
    <value>node1,node2,node3</value>
  </property>
  <property>
    <name>dfs.blocksize</name>
    <value>268435456</value>
  </property>
  <property>
    <name>dfs.namenode.handler.count</name>
    <value>100</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/data/dn</value>
  </property>
</configuration>
  • dfs.datanode.data.dir.perm:hdfs文件系统,默认创建的文件权限设置。700,即:rwx——

  • dfs.namenode.name.dir:NameNode元数据的存储位置。/data/nn,在node1节点的/data/nn目录下

  • dfs.namenode.hosts:NameNode允许哪几个节点的DataNode连接(即允许加入集群)

  • dfs.blocksize:hdfs默认块大小。268435456(256MB)

  • dfs.namenode.handler.count:namenode处理的并发线程数。以100个并行度处理文件系统的管理任务

  • dfs.datanode.data.dir:从节点DataNode的数据存储目录。/data/dn,即数据存放在node1、node2、node3,三台机器的/data/dn内

HDFS的Shell操作

进程启停管理

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

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

执行原理:

  • 在执行此脚本的机器上,启动SecondaryNameNode

  • 读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,启动NameNode

  • 读取workers内容,确认DataNode所在机器,启动全部DataNode

#一键关闭HDFS集群
$HADOOP_HOME/sbin/stop-dfs.sh

执行原理:

  • 在执行此脚本的机器上,关闭SecondaryNameNode

  • 读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,关闭NameNode

  • 读取workers内容,确认DataNode所在机器,关闭全部NameNode

除了一键启停外,也可以单独控制进程的启停。

  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)

文件系统操作命令

关于HDFS文件系统的操作命令,Hadoop提供了2套命令体系

  • hadoop命令(老版本用法),用法:hadoop fs [generic options]

  • hdfs命令(新版本用法),用法:hdfs dfs [generic options]

两者在文件系统操作上,用法完全一致,用哪个都可以,某些特殊操作需要选择hadoop命令或hdfs命令

常用命令:

  • mkdir 创建文件夹

  • ls、cat 列出内容、查看内容

  • cp、mv、rmr 复制、移动、删除

  • put、get 上传、下载

  • appendToFile 向文件追加内容

1.创建文件夹

hadoop fs -mkdir [-p] <path> ...
hdfs dfs -mkdir [-p] <path> ...
# path 为待创建的目录
# -p选项的行为与Linux mkdir -p一致,它会沿着路径创建父目录。

2.查看指定目录下内容

hadoop fs -ls [-h] [-R] [<path> ...] 
hdfs dfs -ls [-h] [-R] [<path> ...] 	
# path 指定目录路径
# -h 人性化显示文件size
# -R 递归查看指定目录及其子目录

3.上传文件到HDFS指定目录下

hadoop fs -put [-f] [-p] <localsrc> ... <dst>
hdfs dfs -put [-f] [-p] <localsrc> ... <dst>
# -f 覆盖目标文件(已存在下)
# -p 保留访问和修改时间,所有权和权限。
# localsrc 本地文件系统(客户端所在机器)
# dst 目标文件系统(HDFS)

4.查看HDFS文件内容

hadoop fs -cat <src> ... 
hdfs dfs -cat <src> ...
#读取指定文件全部内容,显示在标准输出控制台。

#读取大文件可以使用管道符配合more
hadoop fs -cat <src> | more
hdfs dfs -cat <src> | more

5.下载HDFS文件

hadoop fs -get [-f] [-p] <src> ... <localdst>
hdfs dfs -get [-f] [-p] <src> ... <localdst>
#下载文件到本地文件系统指定目录,localdst必须是目录
#-f 覆盖目标文件(已存在下)
#-p 保留访问和修改时间,所有权和权限。

6.拷贝HDFS文件

hadoop fs -cp [-f] <src> ... <dst> 
hdfs dfs -cp [-f] <src> ... <dst>
# -f 覆盖目标文件(已存在下)

7.追加数据到HDFS文件中

hadoop fs -appendToFile <localsrc> ... <dst>
hdfs dfs -appendToFile <localsrc> ... <dst>
#将所有给定本地文件的内容追加到给定dst文件。 
#dst如果文件不存在,将创建该文件。 
#如果<localSrc>为-,则输入为从标准输入中读取。

8.HDFS数据移动操作

hadoop fs -mv <src> ... <dst>
hdfs dfs -mv <src> ... <dst>	
# 移动文件到指定文件夹下
# 可以使用该命令移动数据,重命名文件的名称

9.HDFS数据删除操作

hadoop fs -rm -r [-skipTrash] URI [URI ...]
hdfs dfs -rm -r [-skipTrash] URI [URI ...]	
# 删除指定路径的文件或文件夹
# -skipTrash 跳过回收站,直接删除

命令官方指导文档:Apache Hadoop 3.3.4 – Overview

❤️Sponsor

您的支持是我不断前进的动力,如果您感觉本文对您有所帮助的话,可以考虑打赏一下本文,用以维持本博客的运营费用,拒绝白嫖,从你我做起!🥰🥰🥰

支付宝 微信

文章作者: 简简
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 简简 !
评论
填上邮箱会收到评论回复提醒哦!!!
 上一篇
数据安全-指北(更新中) 数据安全-指北(更新中)
⓪数据安全定义《中华人民共和国数据安全法》中第三条,给出了数据安全的定义,是指通过采取必要措施,确保数据处于有效保护和合法利用的状态,以及具备保障持续安全状态的能力。要保证数据处理的全过程安全,数据处理,包括数据的收集、存储、使用、加工、传
2024-07-03
下一篇 
秋招总结 秋招总结
博客很久没更新了(不会等太久哈,后续会继续更新技术文章),很大一部分原因是因为小简即将毕业,每天忙于找工作和撰写毕业论文!目前工作也找得差不多了,是时候给大家分享哈我的秋招经历,仅供参考。 个人情况本人普本,985 硕,主要投递岗位为安全工
2023-12-01
  目录