优秀是一种习惯
知识点01:回顾
-
Zookeeper中的数据是如何存储的?
- 结构:树形结构,第一级节点为/节点
- 特点
- 节点包含了文件和目录共同特性:既可以存储内容也可以拥有子节点
- 每个节点存储的内容不允许超过1M
- 只能使用绝对路径访问
-
如何连接Zookeeper的服务端?如何实现Zookeeper中节点的增删改查?
- 客户端:bin/zkCli.sh
- 功能:负责衔接用户与服务端,将用户的指令提交给服务端,将服务端返回的结果提供给用户
- 连接:-server node1:2181,node2:2181,node:2181
- 命令
- 列举:ls path
- 创建:create path data
- 删除:rmr path
- 修改:set path data
- 查询:get path
- 客户端:bin/zkCli.sh
-
ZK中有哪几种节点类型以及各自有什么特点?
- create path data:永久节点
- create -s path data:永久有序节点
- 允许执行同名的创建的命名,自动进行编号
- create -e path data:临时节点
- 节点临时存在,如果客户端断开连接,临时节点会自动删除
- create -e -s path data:临时有序节点
-
什么是监听机制,如何设置监听?
- 概念:实现对某个节点的变化做动态的监听
- 设置
- watch
- ls
- get
-
两个Master如何利用ZK实现Active Master选举以及切换?
- 选举:两个Master同时创建同一个临时节点,成功的就是Active
- 切换:StandBy监听临时节点,如果Active故障,临时节点会自动删除,Standby就会接收到通知
-
如何决定哪个ZK节点是Leader节点的?
- 先比较zxid:数据id
- 保证数据的完整性
- 再比较myid:身份id、权重id
- 谁大就选谁,如果超过半数当前最大的就是leader
- 先比较zxid:数据id
-
什么是HDFS?HDFS是如何实现分布式存储的?
- 定义:分布式文件系统
- 本质:从逻辑上将多台机器的Linux文件系统进行了合并,对外提供分布式存储服务
- 架构:主从
- 主:NameNode:管理节点
- 管理从节点
- 管理元数据
- 接客
- 从:DataNode:存储节点
- 利用自己机器的硬盘来实现数据存储:读写自己所在机器的Linux系统的
- 主:NameNode:管理节点
-
什么是MapReduce?
- 功能:用于构建 分布式程序
- 定义:分布式编程模型:制定了分布式编程的规则:就是一套API
-
什么是YARN?
- 功能:用于运行分布式程序
- 定义:分布式任务调度和资源管理平台,资源容器
- 本质:将多台机器的CPU和内存从逻辑上合并为一个整体
- 架构:主从
- 主:ResourceManager:管理节点
- 管理NM
- 从:NodeManager:计算节点
- 主:ResourceManager:管理节点
-
什么时候需要自己编译软件?
- 情况1:官方提供的编译的环境与自己的实际环境不一致
- 情况2:官方编译的功能有缺失
知识点02:目标
- 搭建Hadoop分布式集群
- 集群设计:部署模式、节点规划
- 集群部署:下载解压、修改配置、分发、启动测试
- 实现即可【掌握】
- 把握实现过程中核心知识点:验证理论点【配置】
- 怎么分析和解决问题
- HDFS的设计及使用
- 【重点掌握】:设计思想、基本命令的使用
- 功能以及应用场景
- 架构和角色功能
- 读写流程
- 使用:启动、客户端、命令
- 基准测试
知识点03:Hadoop集群部署:部署模式
-
目标:掌握Hadoop集群的三种部署模式的区别及应用场景
- Hadoop集群的部署一共有几种模式以及每种模式的应用场景是什么?
-
路径
- step1:本地模式
- step2:伪分布式
- step3:完全分布式
-
实施
- 本地模式
- 应用:一般用于做代码测试的
- 特点:只有MapReduce,将代码放在一个独立的JVM进程中运行,测试代码的逻辑
- 伪分布式
- 应用:一般用于学习环境的测试
- 特点:只有1台机器的分布式
- 完全分布式
- 应用:实际工作的分布式环境环境
- 特点:多台机器构成的分布式
- 本地模式
-
小结
- Hadoop集群的部署一共有几种模式以及每种模式的应用场景是什么?
- 三种
- 本地模式:测试代码逻辑
- 伪分布式:只有1台机器的分布式
- 完全分布式:多台机器构成的分布式
知识点04:Hadoop集群部署:节点规划
-
目标:了解Hadoop集群部署中的节点规划的设计
- 三台机器,每台机器有哪些进程服务?
-
路径
- step1:HDFS规划
- step2:YARN规划
-
实施
-
HDFS规划
进程/节点 node1 node2 node3 NameNode * DataNode * * * SecondaryNameNode * -
YARN规划
More Actions进程/节点 node1 node2 node3 ResourceManager * NodeManager * * *
-
-
小结
- 实际工作中根据实际的机器资源合理规划即可
知识点05:Hadoop集群部署:实现部署
-
目标:实现Hadoop分布式集群的部署
-
路径
- step1:解压安装
- step2:修改配置
- step3:节点分发
- step4:格式化HDFS
-
实施
-
解压安装
-
先在一台机器进行安装配置,然后分发
-
将编译好的Hadoop的安装包上传到第一台机器的/export/software目录下
-
解压安装:将Hadoop的安装包解压到/export/server
cd /export/software rz tar -zxvf hadoop-2.7.5.tar.gz -C /export/server/
-
-
- 切换到Hadoop的家目录
```shell
cd /export/server/hadoop-2.7.5/
```
- bin:客户端的命令脚本
- sbin:服务端管理的命令脚本,如果没有sbin,这些管理脚本也会放在bin目录中
- etc:配置文件目录
- lib:依赖库,Hadoop的依赖库不在这个目录中
- share:Hadoop实际的依赖包的存放位置
- logs:服务端运行的日志
-
修改配置
-
注意:如果主机名跟你的不一样,你要自己修改配置,写自己的主机名
-
第一台机器创建我们配置时需要用到的目录
mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/tempDatas mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/nn/edits mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/snn/name mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits
-
修改配置文件:配置文件都在Hadoop的etc/hadoop目录下
-
切换过去
cd /export/server/hadoop-2.7.5/etc/hadoop/
-
查看配置文件
-
-
- **修改第一类:环境变量配置文件:xxx-env.sh**
- hadoop-env.sh:Hadoop环境变量
- mapred-env.sh:配置MapReduce的环境变量
- yarn-env.sh:配置YARN的环境变量
-
修改第二类:属性配置文件:xxx-site.xml
- 功能:所有的xxx-site.xml的文件都是用户自定义配置的配置文件 - Hadoop有所有属性的默认配置文件:xxx-default.xml ``` core-default.xml hdfs-default.xml mapred-default.xml yarn-default.xml ``` - Hadoop启动配置的顺序 - 先加载所有的*-default.xml文件,加载所有默认配置 - Hadoop自带的jar包中 - 再加载所有的*-site.xml文件,用用户自定义的配置替代默认配置 ``` core-site.xml hdfs-site.xml mapred-site.xml yarnp-site.xml ```
-
core-site.xml:Hadoop全局属性配置文件,IO配置、权限的配置
```xml <property> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/export/server/hadoop-2.7.5/hadoopDatas/tempDatas</value> </property> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <property> <name>fs.trash.interval</name> <value>10080</value> </property> ```
-
fs.defaultFS:指定了HDFS入口的地址,用于读写请求,代表了NameNode的机器的地址
- 8020:读写内部请求端口,RPC协议
- hadoop.tmp.dir:Hadoop的临时数据存储目录
- fs.trash.interval:回收站的自动清理时间,如果为0,表示不开启回收站-
hdfs-site.xml:修改HDFS配置
```xml <property> <name>dfs.namenode.secondary.http-address</name> <value>node1:50090</value> </property> <property> <name>dfs.namenode.http-address</name> <value>node1:50070</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas</value> </property> <property> <name>dfs.namenode.edits.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/nn/edits</value> </property> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/snn/name</value> </property> <property> <name>dfs.namenode.checkpoint.edits.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> <property> <name>dfs.blocksize</name> <value>134217728</value> </property> ```
-
dfs.namenode.secondary.http-address:SecondaryNameNode进程的地址和HTTP协议端口
-
dfs.namenode.http-address:NameNode进程开放的HTTP协议端口
-
-
50070:NameNode开放的HTTP协议端口,用于网页访问
-
mapred-site.xml:修改MapReduce的配置的
-
先重命名配置文件
cd /export/server/hadoop-2.7.5/etc/hadoop mv mapred-site.xml.template mapred-site.xml
-
-
-
修改mapred-site.xml
```xml <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.job.ubertask.enable</name> <value>true</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>node2:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node2:19888</value> </property> ``` - mapreduce.framework.name:将MapReduce程序运行在YARN上
-
yarn-site.xml:修改YARN的配置
```xml <property> <name>yarn.resourcemanager.hostname</name> <value>node3</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.1</value> </property> ``` - yarn.resourcemanager.hostname:指定ResourceManager所在的机器 - yarn.nodemanager.aux-services:YARN上运行的程序的类型
-
修改第三类:从节点配置文件
-
slaves:决定了DataNode和NodeManager启动在哪台机器
node1 node2 node3
-
-
-
节点分发
cd /export/server/ scp -r hadoop-2.7.5 node2:$PWD scp -r hadoop-2.7.5 node3:$PWD
-
配置三台机器的环境变量
vim /etc/profile #添加以下内容 #HADOOP_HOME export HADOOP_HOME=/export/server/hadoop-2.7.5 export PATH=:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source /etc/profile
-
-
格式化HDFS
-
格式化HDFS:只有集群刚搭建好以后的第一次启动才需要做
-
只能在NameNode所在的机器进行操作,我们的Namenode在第一台机器
-
在第一台机器执行格式化的命令
hdfs namenode -format
- 格式化成功:没有报错,并且状态为0
-
-
小结
- 按步骤一步步实现,注意细节
知识点06:Hadoop集群部署:启动测试
- 目标:实现Hadoop集群的启动及HDFS和YARN的测试
- 路径
- step1:启动Hadoop集群
- step2:HDFS测试
- step3:MapReduce和YARN测试
- 实施
-
启动Hadoop集群
-
启动NameNode:第一台机器
hadoop-daemon.sh start namenode
-
启动DataNode:三台
hadoop-daemon.sh start datanode
-
访问HDFS的网页界面
- node1:50070
-
-
-
启动ResourceManager:第三台
yarn-daemon.sh start resourcemanager
-
启动NodeManager:三台
yarn-daemon.sh start nodemanager
-
YARN的Web监控:node3:8088
- ResourceManager启动
- 8032:内部任务提交端口,RPC协议
- 8088:网页服务端口,HTTP协议
- ResourceManager启动
-
HDFS测试
-
测试需求:实现WordCount词频统计,统计文件中每个单词出现的次数
-
先上传文件到Linux的某一台机器上
-
将这个文件上传到HDFS,实现分布式存储
-
创建一个HDFS目录
hdfs dfs -mkdir -p /wordcount/input
-
上传:将Linux文件传到HDFS中
hdfs dfs -put /export/data/wc.txt /wordcount/input/
-
-
-
MapReduce和YARN测试
-
MapReduce程序:Hadoop中自带了这个示例程序
/export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar
-
YARN运行环境
yarn jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount /wordcount/input/wc.txt /wordcount/output1
-
-
小结
- 按照步骤实现启动和测试即可
知识点07:HDFS:功能及应用场景
- 目标:掌握HDFS的功能与应用场景
- HDFS的功能是什么?
- 什么场景下可以使用HDFS来实现存储?
- 路径
- step1:HDFS的功能
- step2:HDFS的应用场景
- 实施
- HDFS的功能
- 功能:实现分布式文件存储,提供分布式文件读写
- 过程
- 分:将一个大的文件拆分为多个小的部分【Block:块】,将块存储在不同的节点上
- 合:读取时将所有块进行合并,返回给用户
- HDFS存储的是块
- 用户操作的是文件
- |
- 元数据:记录文件和块的映射关系
- HDFS的应用场景
- 以后在工作中,不同的存储需求要用不同的框架来实现
- 适合的场景
- 大数据量的文件
- 离线的场景,延迟性要求不高的场景:读写速度要求不高场景
- 一次写入,多次读取
- 不适合的场景
- 一条数据一条数据存储
- 读写速度要求较高场景:分布式磁盘
- 频繁修改的场景
- HDFS的功能
- 小结
- HDFS的功能是什么?
- 实现分布式文件存储,提供分布式数据文件的读写
- 什么场景下可以使用HDFS来实现存储?
- 大数据量文件存储
- 读写速度要求不高
- 一次写入,多次读取
- HDFS的功能是什么?
知识点08:HDFS:分块及副本机制
- 目标:掌握HDFS汇总的分块机制及副本机制
- HDFS如何实现分布式存储的?
- HDFS如何保证数据存储安全?
- 路径
- step1:分块机制
- step2:副本机制
- step3:验证测试
- 实施
-
分块机制
-
功能:用于实现分布式,将大文件拆分为多个小的块,就是HDFS中分的机制
-
规则:按照文件大小划分,由属性决定
<property> <name>dfs.blocksize</name> <value>134217728</value> </property>
- 默认每128M划分一个块,如果大小不足128,按实际大小存储
-
-
副本机制
-
功能:为了保证数据块的安全,HDFS会为每个块构建副本,存储多份
-
规则:将每个块复制多份,尽量存储在不同的机器上,由配置决定
<property> <name>dfs.replication</name> <value>3</value> </property>
- 默认每个块存储了3份
- 默认每个块存储了3份
-
-
验证
-
HDFS中数据在Linux中的存储位置
<property> <name>dfs.datanode.data.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas</value> </property>
-
分块机制
-
-
- 副本机制
- 只有三台机器,这三个块,每台机器都有一份
-
小结
- HDFS如何实现分布式存储的?
- 分块机制:每128M划分一个块
- HDFS如何保证数据存储安全?
- 副本机制:默认每个块存储3份
- HDFS如何实现分布式存储的?
知识点09:HDFS:主从架构
-
目标:掌握HDFS的主从架构设计
- HDFS的架构及每个角色的功能是什么?
-
路径
- step1:主从架构
- step2:NameNode功能
- step3:DataNode功能
-
实施
- 主从架构
-
Client的功能
- 介于用户与服务端之间的
- 用户操作客户端向服务端提交请求
- 供用户开发命令或者代码,将命令提交给服务端执行
- 将服务端运行的结果返回给用户
-
NameNode功能
-
管理节点:同一时间只能有1个工作状态的
-
负责管理所有DataNode的状态:死活
- 心跳机制:所有的DataNode定期向NameNode发送心跳信号,如果NameNode长时间没有接收到心跳,就认为DN故障
-
负责管理所有数据的安全:检查数据是否有丢失
- 汇报块机制:所有的DataNode会定期向NameNode汇报当前自己机器上所存储的数据块的情况
- NameNode将每个DN的汇报信息与元数据进行比较,判断是否有数据丢失
-
负责管理元数据
-
NameNode管理的元数据在内存中,所有元数据的更新都在内存中进行操作
-
如果元数据只在内存中,内存是不可靠的存储,如果元数据丢失怎么办?
-
元数据肯定在磁盘中存储了一份:元数据存储在哪?
<property> <name>dfs.namenode.name.dir</name> <value>file:///export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas</value> </property>
-
元数据本地文件:fsimage
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpm1Fl3h-1619170664673)(Day06_20210423_分布式文件系统HDFS.assets/image-20210423145149641.png)]
-
-
过程:每次NameNode启动会从fsimage文件中加载所有元数据到内存中,所有元数据更新都只更新内存元数据
-
为什么要加载到内存中?
- 当用户对HDFS进行读写时,可以快速的访问元数据,加快性能
-
-
负责接收客户端读写请求
-
所有的HDFS客户端要想实现读写请求,必须指定NameNode的地址:8020
-
由属性决定
fs.defaultFS = hdfs://node1:8020
-
-
-
DataNode功能
- 存储节点
- 负责接收NameNode的管理
- 负责接收客户端的对块的读写请求
-
小结
-
HDFS的架构及每个角色的功能是什么?
- 架构:分布式主从架构
- NameNode:主节点,管理节点
- 负责管理所有DN:心跳机制
- 负责管理所有数据安全:汇报块机制
- 负责管理元数据:内存 + 文件
- 负责接客
- DataNode:从节点,存储节点
- 负责接收NameNode的管理
- 负责接收客户端对块的请求
-
知识点10:HDFS:数据写入流程
-
目标:了解HDFS数据写入的过程
-
路径
- 文件写入流程
-
实施
-
文件写入流程
-
step1:客户端会请求NameNode写入HDFS,NameNode会验证请求是否合法,返回结果
- NameNode验证写入的文件是否存在、有没有权限写入等等
- 如果不合法,直接拒绝请求
-
step2:NameNode返回对应的结果,构建这个文件的元数据:并没有跟块关联
-
step3:客户端提交第一个块的写入请求给NameNode
-
step4:NameNode根据每个DN的健康状态以及负载情况返回三台DataNode 地址
-
blk1-0:node1
-
blk1-1:node2
-
blk1-2:node3
-
机架感知的分配规则
- 客户端所在的机架放一份
- 另外两份在另外一个机架中
-
-
-
step5:客户端得到要写入数据块的三台DN地址,客户端会连接第一台【离它最近的那台】,提交写入
- 由机架感知决定谁最近
-
step6:三台DN构建一个数据传输的管道
-
step7:客户端将这个块拆分成多个packet【64k】,挨个发送个最近的这台DN1
-
step8:逐级返回写入成功的ack确认码,表示这个包写入完成
-
step9:不断发送下一个包,直到整个块写入完成,返回给NameNode,关联元数据
-
step10:重复3提交下一个块写入
-
小结
- 记住大体流程即可
知识点11:HDFS:数据读取流程
-
目标:了解HDFS数据读取的过程
-
路径
- 文件读取流程
-
实施
- 文件读取流程
- step1:客户端提交读取请求给NameNode
- step2:NameNode会验证这个请求是否合法,如果合法,会查询元数据
- step3:NameNode会返回所有块的所有地址
- blk1:node1,node2,node3
- blk2:node4,node5,node6
- blk3:node7,node8,node9
- step4:客户端拿到列表,会根据机架感知从每个块的列表中,选择离自己最近的节点去请求读取
- blk1:node1
- blk2:node5
- blk3:node9
- step5:客户端会将所有块进行合并返回给用户
-
小结
- 记住大体流程即可
知识点12:HDFS:启动方式
-
目标:了解Hadoop集群的启动方式
- 如何启动Hadoop的集群?
-
路径
- step1:方式一:单进程启动
- step2:方式二:分类启动
- step3:方式三:启动所有
-
实施
-
单进程启动
-
每条命令只启动一个进程,一般用于特殊场景下
-
启动HDFS
hadoop-daemon.sh start namenode hadoop-daemon.sh start datanode
-
启动YARN
yarn-daemon.sh start resourcemanager yarn-daemon.sh start nodemanager
-
-
分类启动
-
一条命令可以启动一类进程,工作中最常用的方式
-
启动HDFS:只能在NameNode所在的机器执行
start-dfs.sh stop-dfs.sh
-
启动YARN:只能在ResourceManager所在的机器运行
start-yarn.sh stop-yarn.sh
-
-
启动所有
start-all.sh
- 这种方式我们不用
-
-
小结
- 如何启动Hadoop的集群?
- 单个进程启动
- hadoop-daemon.sh
- yarn-daemon.sh
- 分类启动
- start-dfs.sh
- start-yarn.sh
- 启动所有
- 单个进程启动
- 如何启动Hadoop的集群?
知识点13:HDFS:文件管理命令
-
目标:掌握常用的HDFS文件管理命令
- HDFS如何通过客户端实现数据的增删改查?
-
路径
- step1:客户端
- step2:文件管理命令
-
实施
-
客户端
- 所有能对HDFS进行读写的命令或者程序都作为HDFS的客户端
-
HDFS中提供了一个自带的命令客户端
bin/hdfs
hdfs Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND where COMMAND is one of: dfs run a filesystem command on the file systems supported in Hadoop. classpath prints the classpath namenode -format format the DFS filesystem secondarynamenode run the DFS secondary namenode namenode run the DFS namenode journalnode run the DFS journalnode zkfc run the ZK Failover Controller daemon datanode run a DFS datanode dfsadmin run a DFS admin client haadmin run a DFS HA admin client fsck run a DFS filesystem checking utility balancer run a cluster balancing utility jmxget get JMX exported values from NameNode or DataNode. mover run a utility to move block replicas across storage types oiv apply the offline fsimage viewer to an fsimage oiv_legacy apply the offline fsimage viewer to an legacy fsimage oev apply the offline edits viewer to an edits file fetchdt fetch a delegation token from the NameNode getconf get config values from configuration groups get the groups which users belong to snapshotDiff diff two snapshots of a directory or diff the current directory contents with a snapshot lsSnapshottableDir list all snapshottable dirs owned by the current user Use -help to see options portmap run a portmap service nfs3 run an NFS version 3 gateway cacheadmin configure the HDFS cache crypto configure HDFS encryption zones storagepolicies list/get/set block storage policies version print the version Most commands print help when invoked w/o parameters.
-
文件管理命令
- 格式
-
hdfs dfs 命令 参数
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
[-expunge]
[-find <path> ... <expression> ...]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-d] [-h] [-R] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
[-setfattr {-n name [-v value] | -x name} <path>]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touchz <path> ...]
[-truncate [-w] <length> <path> ...]
[-usage [cmd ...]]
- 列举:-ls
hdfs dfs -ls /
- 上传:-put
hdfs dfs -put Linux文件地址 HDFS路径地址
hdfs dfs -put /export/data/wordcount.txt /wordcount/input/
- 下载:-get
hdfs dfs -get HDFS路径地址 Linux文件地址
- 删除:-rm
hdfs dfs -rm [-r|-R] [-skipTrash]
- [-r|-R]:递归,用于删除目录
- [-skipTrash]:跳过回收站直接删除
- 创建目录:-mkdir
hdfs dfs -mkdir [-p] 目录路径
- 查看:-cat/-tail
hdfs dfs -cat /wordcount/input/wordcount.txt
- 其他
-cp
-mv
-
相对路径
- HDFS中的相对路径指定的是当前Linux用户在HDFS中的家目录 - 如果当前用户为root,HDFS的相对路径指定的是/user/root
-
小结
- HDFS如何通过客户端实现数据的增删改查?
- 客户端:bin/hdfs
- 格式:hdfs dfs 命令 参数
- 命令
- 上传:-put
- 下载:-get
- 创建目录:-mkdir
- 删除:-rm
- 列举:-ls
- 查看:-cat
- HDFS如何通过客户端实现数据的增删改查?
知识点14:HDFS:集群管理命令
- 目标:掌握HDFS基本集群管理命令
- 路径
- step1:集群管理客户端
- step2:集群管理命令
- 实施
-
集群管理客户端
- hdfs:客户端脚本文件
-
Usage: hdfs dfsadmin
Note: Administrative commands can only be run as the HDFS superuser.
[-report [-live] [-dead] [-decommissioning]]
[-safemode <enter | leave | get | wait>]
[-saveNamespace]
[-rollEdits]
[-restoreFailedStorage true|false|check]
[-refreshNodes]
[-setQuota <quota> <dirname>...<dirname>]
[-clrQuota <dirname>...<dirname>]
[-setSpaceQuota <quota> [-storageType <storagetype>] <dirname>...<dirname>]
[-clrSpaceQuota [-storageType <storagetype>] <dirname>...<dirname>]
[-finalizeUpgrade]
[-rollingUpgrade [<query|prepare|finalize>]]
[-refreshServiceAcl]
[-refreshUserToGroupsMappings]
[-refreshSuperUserGroupsConfiguration]
[-refreshCallQueue]
[-refresh <host:ipc_port> <key> [arg1..argn]
[-reconfig <datanode|...> <host:ipc_port> <start|status>]
[-printTopology]
[-refreshNamenodes datanode_host:ipc_port]
[-deleteBlockPool datanode_host:ipc_port blockpoolId [force]]
[-setBalancerBandwidth <bandwidth in bytes per second>]
[-fetchImage <local directory>]
[-allowSnapshot <snapshotDir>]
[-disallowSnapshot <snapshotDir>]
[-shutdownDatanode <datanode_host:ipc_port> [upgrade]]
[-getDatanodeInfo <datanode_host:ipc_port>]
[-metasave filename]
[-triggerBlockReport [-incremental] <datanode_host:ipc_port>]
[-help [cmd]]
Generic options supported are
-conf <configuration file> specify an application configuration file
-D <property=value> use value for given property
-fs <local|namenode:port> specify a namenode
-jt <local|resourcemanager:port> specify a ResourceManager
-files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster
-libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.
-archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines.
The general command line syntax is
bin/hadoop command [genericOptions] [commandOptions]
-
集群管理命令
-
集群状态
hdfs dfsadmin -report
-
安全模式
hdfs dfsadmin [-safemode <enter | leave | get | wait>]
-
当NameNode发现块的丢失比例超过0.01%,就会自动进入安全模式,用于恢复对应的数据
-
安全模式下,HDFS集群不对外提供读写
-
如果HDFS长久的停留在安全模式,可以手动强制退出安全模式
-
-
hdfs dfsadmin -safemode leave
-
小结
- 集群管理的客户端命令?
- hdfs dfsadmin
- 查看集群状态?
- -report
- 管理安全模式?
- -safemode leave:离开安全模式
- 集群管理的客户端命令?
知识点15:HDFS:基准测试
-
目标:了解HDFS基准测试的使用
-
路径
- step1:写入基准
- step2:读取基准
-
实施
-
写入基准
cd /export/server/hadoop-2.7.5/ yarn jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -write -nrFiles 10 -size 10MB
-
-
读取基准
yarn jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -read -nrFiles 10 -size 10MB
-
删除测试文件
hdfs dfs -rm -r -skipTrash /benchmarks
-
小结
- 了解即可
安装Hadoop容易出现的问题,以及解决方案
-
格式化失败
-
现象:格式化过程中报错,或者格式化状态不为0
-
解决:找到报错的地方,分析报错的原因:看不懂发老师
-
原因:配置文件写错了
-
解决
-
1-找到错误
-
2-解决错误
-
3-重新格式化
-
删除所有存储数据存储的目录
rm -rf hadoopDatas/
-
重新创建所有目录
mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/tempDatas mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/nn/edits mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/snn/name mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits
-
重新格式化
hdfs namenode -format
-
-
-
-
进程启动失败
-
现象:明明启动了进程,但是JPS中没有,或者刚刚还有,突然自己没有
-
问题:一般在于配置文件
-
解决
-
1-找到报错的日志:logs
-
哪一台机器的哪个进程有问题,就看那台机器的那个进程的日志文件
进程类型-用户名-进程名称-机器名称.log hadoop-root-datanode-node1.log yarn-root-resourcemanager-node3.log
-
看日志
tail -100f yarn-root-resourcemanager-node3.log
-
找到Exception
-
-
2-分析问题,解决问题
-
-
-
网页访问不了
- namenode:node1:50070
- ResourceManager:node3:8088
- 原因
- 第一:进程没有启动成功
- 第二:被拦截了
- LInux防火墙没关
- 安全软件
- 浏览器问题:谷歌、火狐
- 第三:地址写错了
- 英文冒号写成中文
- 主机名不能识别:Windows 的映射