1. 什么是大数据
2. 大数据的核心工作:
3. Hadoop是Apache软件基金会下的顶级开源项目,用以提供:
为一体的整体解决方案。是典型的分布式软件框架,可以部署在1台乃至成千上万台服务器节点上协同工作。Hadoop是开源的技术框架,提供分布式存储、计算、资源调度的解决方案。个人或企业可以借助Hadoop构建大规模服务器集群,完成海量数据的存储和计算。
4. Hadoop是一个整体,其内部还会细分为三个功能组件,分别是:
HDFS组件:HDFS是Hadoop内的分布式存储组件,可以构建分布式文件系统用于数据存储
MapReduce组件:NapReduce是Hadoop内分布式计算组件,提供编程接口供用户开发分布式计算程序
YARN组件:YARN是Hadoop内分布式资源调度组件。 可供用户整体调度大规模集群的资源使用。
1. 分布式系统常见的组织形式?大数据体系中,分布式的调度主要有2类架构模式:
2. 大数据框架,大多数的基础架构上,都是符合:中心化模式的(一主多从模式,简称主从模式(MasterAndSlaves))。
即:有一个中心节点(服务器)来统筹其它服务器的工作,统一指挥,统一调派,避免混乱。在现实生活中很常见:公司企业管理、组织管理、行政管理
3. Hadoop是哪种模式?
主从模式(中心化模式)的架构
1. HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一
2. HDFS中的架构角色有哪些?
3. HDFS的基础架构
第二章-04-[实操]VMware虚拟机部署HDFS集群_哔哩哔哩_bilibili
2. 修改4份配置文件,应用自定义设置:找到etc配置文件中的以下4个文件,对其进行修改。
四个文件配置完成。继续:分发到node2、node3,并设置环境变量
4. 创建数据目录,并修改文件权限归属hadoop账户。此时三台机器就配置完成了。还剩下至关重要的一步:授权hadoop用户。也就是将\data和\export文件的root用户变成hadoop用户。
前置准备工作全部完成,下一步开始去执行相关的命令并启动它。首先格式化整个文件系统。
集群部署常见问题解决:
1. 千辛万苦部署好了Hadoop的HDFS集群,如果中间出现误操作导致集群出现问题了怎么办?有没有什么方便的办法保存刚刚部署好的状态?
答:在虚拟机里面部署好hadoop之后,记得打(虚拟机)快照,当出现问题之后,可以恢复到快照即可。
打快照之前要将hdfs集群关闭【在hadoop权限下操作,不能在root权限下】—— 关闭整个服务器—— 退回root账户 —— init 0 关机(node1、node2、node3都关机) —— 打快照。
常见出错点:权限未正确设置、配置文件错误、未格式化。要细心,查日志看出错原因。
第二章-07-[可选]云服务器上部署hdfs集群_哔哩哔哩_bilibili
1. 云服务器如何保存服务器状态、或者说出错了怎么快速恢复状态呢?
1. Hadoop HDFS组件内置了HDFS集群的一键启停脚本。
2. 除了一键启停外,也可以单独控制进程的启停。
hadoop -daemon.sh(start|status|stop)(namenode|secondarynamenode|datanode);
hdfs --daemon(start|status|stop)(namenode|secondarynamenode|datanode)
1. HDFS作为分布式存储的文件系统,有其对数据的路径表达方式。
• HDFS同Linux系统一样,均是以/作为根目录的组织形式,例如:
Linux: /usr/local/hello.txt,如路径:file:///usr/local/hello.txt
HDFS: /usr/local/hello.txt,如路径:hdfs://node1:8020/usr/local/hello.txt
那么怎么区分命令操作的事Linux还是HDFS? 可以通过协议头file:// 或者hdfs://namenode:port(可以省略,需要提供LinuX路径的参数,会自动识别为file://,需要提供HDFS路径的也会自动识别)。
2. 关于HDFS文件系统的操作命令,Hadoop提供了2套命令体系:用法完全一致
• 老版本:hadoop fs [generic options]
• 新版本:hdfs dfs [generic options]
# 1. 创建文件夹
# hadoop fs -mkdir [-p] ...
# hdfs dfs -mkdir [-p] ...
hadoop fs -mkdir -p /itcast/bigdata #创建在hadoop文件系统里
hdfs dfs -ls / #查看hadoop文件系统根目录下的文件:有itcast文件夹
hdfs dfs -ls /itcast #查看hadoop文件系统根目录下的文件:有bigdata文件夹
# 2. 查看置顶目录下内容
# hdfs dfs -ls [-h] [-R] ...
# 3. 从本地Linux向HDFS上传文件,到HDFS指定目录下
# pdfs dfs -put [-f] [-p] ...
# -f:强制覆盖目标文件;-p:保留文件信息、访问和修改时间、所有权和权限; localscr:Linux本地的文件; dst:上传到HDFS的位置
vim test.txt #在Linux中新建一个文件
vim test2.txt
hadoop fs -put file:///home/hadoop/test.txt hdfs://node1:8020/ #上传到hdfs文件体统的根目录
hdfs dfs -put /home/hadoop/test2.txt /
# 4.查看HDFS文件内容
# hdfs dfs -cat ...
hadoop fs -cat /test.txt
# hdfs dfs -cat | more
# 读取大文件时,防止可以使用 管道符配合more 进行翻页查看。
hadoop fs -cat /test2.txt | more
# 5.从HDFS中向Linux中下载文件
# hdfs dfs -get [-f] [-p] ...
hdfs dfs -get /test.txt . #.代表Linux的当前目录,将test文件下载到Linux当前目录
hdfs dfs -get -f /test.txt .
# 6. 拷贝HDFS文件/改名
# hdfs dfs -cp [-f] ... #两个路径都是HDFS文件系统中的路径
# 是被复制的路径。是目标路径
hdfs dfs -cp /test.txt /home/
hdfs dfs -cp /test.txt /home/abc.txt
# 7. 追加数据到HDFS文件中:HDFS文件系统中文件的修改仅支持 删除文件 和 追加内容 两种,不能修改其中的内容。
vim append.txt #在Linux本地创建文件append.txt
hadoop fs -appendToFile append.txt /test.txt #将本地的文件追加到HDFS文件系统的test文件末尾
# 8. HDFS数据移动操作/重命名
hadoop fs -mv /test.txt /itheima/ #将test文件移动到itheima文件夹下
hadoop fs -mv /test2.txt /itheima/abc.txt. #完成移动文件的同时对文件进行改名
# 9. HDFS数据删除操作:删除文件-rm or文件夹-rm -r
# hadoop fs -rm -r [-skipTrash] URI [URI ...]
# -skipTrash 跳过回收站,直接删除;回收站默认是关闭的,如果要开启需要在core-site.xml内配置(在那个机器里配置,那个机器即时生效,不需要重启集群)
hadoop fs -rm -r /home
hadoop fs -rm /test.txt
命令官方指导文档
Hadoop文档
除了写命令,也可以在HDFS WEBUI网页端上进行操作(有些操作没有权限,但是可以授予权限,进行以下配置)。
mkdir | 创建文件夹 |
ls、cat | 列出内容、查看内容 |
cp、mv、rm |
复制、移动、删除 |
put、get | 上传、下载 |
appendToFile | 向文件追加内容 |
Permission denied:遇到这种体型,其实是因为在HDFS之上没有权限。在整个HDFS文件系统中,也是有文件的权限控制的,它的逻辑和Linux文件系统完全一致。既然有权限控制,那么就存在超级用户,HDFS与Linux之间的不同之处在于超级用户的不同,Linux的超级用户是root,HDFS文件系统的超级用户是(也就是课程的hadoop用户)。因此,如果在遇到这个问题,大概率是因为操作HDFS时没有以Hadoop用户执行,而是以root用户执行。
# 在HDFS中,可以使用和Linux一样的授权语句,即:chown和chmod
# 修改所属用户和组:
hadoop fs -chown [-R] root:root /xxx.txt
hdfs dfs -chown [-R] root:root /xxx.txt
hdfs dfs -chown root:supergroup /test.txt
# 修改权限
hadoop fs -chmod [-R] 777 /xxx.txt
hdfs dfs -chmod [-R] 777 /xxx.txt
hdfs dfs -chmod -R 777 /data
# -R:对子目录也会生效,将文件xxx.txt的权限改成777
# 课后练习
hadoop fs -mkdir -p /itcast/itheima
hadoop fs -put /etc/hosts /itcast/itheima/
hadoop fs -ls /itcast/itheima
hadoop fs -cat /itcast/itheima/hosts
vim append.txt #(要追加的内容:itheima)
hadoop fs -appendToFile append.txt /itcast/itheima/hosts
hadoop fs -cat /itcast/itheima/hosts
hadoop fs -get /itcast/itheima/hosts .
hadoop fs -mkdir /itcast/bigdata
hadoop fs -cp /itcast/itheima/hosts /itcast/bigdata/
hadoop fs -ls /itcast/bigdata
hadoop fs -cat /itcast/bigdata/hosts
hadoop fs -mv /itcast/itheima/hosts /itcast/itheima/myhost
hodoop fs -ls /itcast/itheima/
hadoop fs -rm -r /itcast
了解在JetBrains产品中(IntelliJ IDEA、PyCharm、DataGrip)安装使用Big Data Tools插件,去对HDFS的文件系统进行相关的操作。以DataGrip为例。
设置 -> Plugins(插件) -> Marketplace(市场)-> 搜索Big Data Tools,点击Install安装即可。完整配置过程见视频:windows
第二章-11-[实操]HDFS客户端-Big Data Tools插件_哔哩哔哩_bilibili
目标:使用NFS网关功能将HDFS文件系统挂载到我们windows本地系统中。
配置NFS:
1. core-site.xml,新增配置项;hdfs-site.xml,新增配置项;
2. 开启portmap、nfs3两个进程。
课程设置的允许192.168.88.1以rw链接(这个IP是电脑虚拟网卡VMnet8的IP,连接虚拟机就走这个网卡)
cd /export/server/hadoop/etc/hadoop/
vim core-site.xml
# 配置相应内容
vim hdfs-site.xml
配置好这些功能之后,启用NFS功能:
# 1.将配置好的core-site.xml和hdfs-site.xml分发到node2和node3
scp core-site.xml hdfs-site.xml node2:'pwd'/
scp core-site.xml hdfs-site.xml node3:'pwd'/
# 2.重启HadoopHDFS集群(先stop-dfs.sh,后start-afs.sh)
stop-dfs.sh
# 3.停止系统的NFS相关进程(hadoop没有权限,需要退回root用户)
# a.systemctl stop nfs;systemctl disable nfs关闭系统nfs并关闭其开机自启
# b.yum remove-y rpcbind卸载系统自带rpcbind
exit
systemctl stop nfs
systemctl disable nfs
yum remove-y rpcbind(我们需要用hdfs系统自带的portmap)
# 4.启动portmap(HDFS自带的rpcbind功能)(必须以root执行):
hdfs--daemon start portmap
# 5.启动nfs(HDFS自带的nfs功能)(必须以hadoop用户执行):
hdfs--daemon start nfs3
检查NFS是否正常:
1. 在node-2和node-3中执行:rpcinfo -p node1,正常输出有mountd和nfs出现。
2. 执行 showmount -e node1,可以看到 /192.168.88.1
在windows挂载HDFS文件系统
第二章-12-[可选]HDFS客户端-NFS挂载到Windows本地_哔哩哔哩_bilibili
目标:了解数据是如何在HDFS中进行存储的;了解数据在HDFS中是如何保证安全的
1. 设定统一的管理单位——block块:是HDFS最小存储单位,每个256MB(可以修改)。
2. 通过多个副本(备份)解决,每个副本都复制到其他服务器1份,安全性极大提高;
总结:数据存入HDFS是分布式存储,即每一个服务器节点,负责数据的一部分;数据在HDFS上是划分为一个个Block块进行存储;在HDFS上,数据Block块都可以有多个副本,副本也会分发到其他服务器上,提高数据安全性。
目标:了解如何配置HDFS数据块的副本数量;掌握fsck命令查看文件系统状态及验证文件的副本数量
方法1: 默认是3副本数
方法2: 除了配置文件外,我们还可以在上传文件的时候,临时决定被上传文件以多少个副本存储。只针对本次生效
方法3: 对于已经存在HDFS的文件,修改dis.replication屆性不会生效,如果要修政已存在文件可以通过命令
使用fsck命令去检查文件的副本数、blocks数、位置:
hadoop fs -D dfs.replication=2 -put test.txt /tmp/ #方法2
hadoop fs -setrep [-R] 2 path #方法3
# hdfs fsck path [-files [-blocks [-locations]]] #检查副本数
hdfs fsck /test.txt -files -blocks -locations
目标:掌握NameNode是如何管理Block块的
edits文件:是一个流水账文件,记录了hdfs中的每一次操作,以及本次操作影响的文件其对应的block
fsimage文件:將全部的edits文件,合并为最终结果,即可得到一个FSimage文件
NameNode基于edits和FSimage的配合,完成整个文件系统文件的管理(维护整个文件系统元数据)
1.每次对HDFS的操作,均被edits文件记录
2.edits达到大小上线后,开启新的edits记录
3. 定期进行edits的合并操作(元数据合并参数可以修改)
a. 如当前没有fsimage文件,将全部edits合并为第一个fsimase
b. 如当前己存在fsimage文件,将全部edits和己存在的fsimage进行合并,形成新的fsimage
⚠️:NameNode是写edits文件,合并操作是又SecondaryNameNode做的,合并完成再提供给NameNode文件使用。
1. NameNode不接收数据,不负责数据写入,只负责元数据记录和权限审批
2. 客户端直接向1台DataNode写数据。这个DataNode一般是离客户端最近(网络距离)的那个
3. 数据块副本的复制工作,由DataNode之间自行完成(构成一个PipLine,按顺序复制分发,如图1给2,2给3和4)