1.什么是hadoop(分布式软件框架)
他提供了
- 分步式数据存储
- 分布式数据计算
- 分布式资源调度
为一体的整体解决方案
1.1 hadoop的用处
可以部署在1台乃至成千上万台服务器节点上协同工作。
个人或企业可以借助Hadoop构建大规模服务器集群,完成海量数据的存储和计算。
1.2 hadoop的功能
通常意义上,Hadoop是一个整体,其内部还会细分为三个功能组件,分别是:
- HDFS组件:HDFS是Hadoop内的分布式存储组件可以构建分布式文件存储系统用于海量数据存储
- MapReduce组件:MapReduce是Hadoop内分布式计算组件。提供编程接口供用户开发分布式计算程序,负责海量数据的计算工作
- YARN组件:YARN是Hadoop内分布式集群的资源调度组件。可供用户整体调度大规模集群的资源使用。
所以,我们会说Hadoop是一个集合了:存储、计算、资源调度为一体的大数据分布式框架。
1.3 Hadoop的竞品
- CDH
- HDP
- 星环
1.4 为什么需要分布式存储
- 数据量体量太大,单机存储能力有上限,需要靠数量来解决问题
- 存储在同一台服务器上空间不足,所以需要对于服务器进行扩展,多台服务共同存储超大文件
- 数量的提升带来的是网络传输、磁盘读写、CPU、内存等各方面的综合提升。 分布式组合在一起可以达到1+1>2的效果
- 存储原理就是将大文件进行分割,分割后,将数据存储在不同的服务器内部
- 注意: 分布式存储不一定是存不下,也有可能是在解决存的慢算的慢的问题
1.5 什么是集群,什么是分布式?(多台服务器参与运行)
集群: 多台服务器共同完成相同的业务,就是一个集群
分布式: 多台服务器共同完成不同的业务就是分布式
一般口语中说的分布式集群服务其实就是多台服务器组成的服务
1.6 hdooop版本
社区版: 开源免费
-
优点: 更新速度快,技术新
-
缺点: 兼容性差不稳定
商业版: CDH 将所有大数据相关组件都重写了一遍并进行了精细测试解决了兼容性问题和稳定性问题
-
优点: 兼容稳定性好
-
确定: 技术旧,收费
注意: 企业级开发中我们使用的大多是商业版hadoop, CDH版本Hadoop在6.2.4版本之前是不收费的
2. 分布式的基础建构分析
2.1 大数据体系中,分布式的调度主要有2类架构模式:
集群架构模式:
主从架构(中心化):
-
主角色 master: 发号施令,负责任务的接受和分配
-
从角色 slave:负责干活
主备架构:可以解决中心化存在的问题
-
主角色active : 正常工作
-
备角色standby : 观察主角色工作,并实时备份主角色数据,当主角色宕机后,立即上位
- 去中心化模式: 去中心化模式,没有明确的中心。众多服务器之间基于特定规则进行同步协调
- 中心化模式: 有明确的中心,基于中心节点分配工作
即:有一个中心节点(服务器)来统筹其它服务器的工作,统一指挥,统一调派,避免混乱。这种模式,也被称之为:一主多从模式,简称主从模式(Master And Slaves)
主从模式:主从模式(Master-Slaves)就是中心化模式,表示有一个主节点来作为管理者,管理协调下属一批从节点工作。
3.HDFS的基础架构
3.1 什么是HDFS
HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一
- 全称是:Hadoop Distributed File System(Hadoop分布式文件系统)
- 是Hadoop技术栈内提供的分布式数据存储解决方案
- 可以在多台服务器上构建存储集群,存储海量的数据
3.2 HDFS的基础架构
- NameNode:
- HDFS系统的主角色或主机点,是一个独立的进程
- 负责管理HDFS整个文件系统
- 负责管理DataNode
- SecondaryNameNode:
- NameNode的辅助角色或辅助节点,是一个独立进程
- 主要负责帮助NameNode完成管理工作(元数据整理工作(打杂))
- HDFS的元数据主要存储着文件大小 名称 副本数量等
- DataNode:
- HDFS系统的从角色或从节点,是一个独立进程
- 主要负责数据的存储,即存入数据和取出数据,(数据文件的读或写)
3.3 HDFS集群部署
一个典型的HDFS集群,就是由1个NameNode加若干(至少一个)DataNode组成
- 各个文件夹含义如下
- 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核心配置文件
3.4 部署Hadoop常见的一些出错原因。
- 这些原因可能导致不同的错误细节,大家可以自行检查是否符合,后面在详细讲解每一种错误的细节。
- 是否遗漏了前置准备章节的相关操作?
- 是否遗漏的将文件夹(Hadoop安装文件夹、/data数据文件夹)chown授权到hadoop用户这一操作
- 是否遗忘了格式化hadoop这一步(hadoop namenode -format)
- 是否是以root用户格式化的hadoop
- 是否以root启动过hadoop,后续以hadoop用户启动出错
- 是否确认workers文件内,配置了node1、node2、node3三个节点
- 是否在/etc/profile内配置了HADOOP_HOME环境变量,并将$HADOOP_HOME/bin和$HADOOP_HOME/sbin加入PATH变量
- 是否遗忘了软链接,但环境变量的配置的HADOOP_HOME确是:/export/server/hadoop
- 是否确认配置文件内容的准确(一个字符都不错),并确保三台机器的配置文件均OK
- 总结:细心、还是要细心
-
3.5 掌握HDFS文件系统的基础操作命令
- HDFS作为分布式存储的文件系统,有其对数据的路径表达方式。
- HDFS同Linux系统一样,均是以/作为根目录的组织形式:
- Linux: /usr/local/hello.txt
- HDFS: /usr/local/hello.txt
- 如何区分呢?
- Linux:file:///
- HDFS:hdfs://namenode:port/
- 如上路径:
- Linux:file:///usr/local/hello.txt
- HDFS:hdfs://node1:8020/usr/local/hello.txt
- 协议头file:/// 或 hdfs://node1:8020/可以省略
- 1.需要提供Linux路径的参数,会自动识别为file://
- 2.需要提供HDFS路径的参数,会自动识别为hdfs://
- 除非你明确需要写或不写会有BUG,否则一般不用写协议头
- Hadoop提供了2套命令体系
- hadoop命令(老版本用法),用法:hadoop fs [generic options]:
- hdfs命令(新版本用法),用法:hdfs dfs [generic options]
如何查询本地文件系统??
# 查询hdfs文件系统
hadoop fs -ls /aaa # 使用默认的文件管理系统
hadoop fs -ls hdfs://node1:8020/aaa # 使用完整版文件管理系统地址
# 查询本地文件系统
hadoop fs -ls file:///aaat>put指令: 从linux 服务器本地上传到hdfs文件系统中
# 格式: hdoop fs -put linux中的文件路径 hdfs中的文件路径
# 上传1.txt 到hdfs中
hadoop fs -put file:///home/hadoop/1.txt hdfs://node1:8020/itcast
# 如果文件已经存在,则添加-f
hadoop fs -put -f file:///home/hadoop/1.txt hdfs://node1:8020/itcast
# 简写形式 : 默认put的源文件在linux服务器上,同时linux系统可以使用相对路径 目标是hdfs文件系统
hadoop fs -put -f /home/hadoop/2.txt /itcastget命令: 从hdfs文件系统将文件下载到linux文件系统中
# 格式: hadoop fs -get hdfs中的文件路径 linux中的文件路径
# 下载1.txt 文件到hadoop家目录的aaa目录下
hadoop fs -get hdfs://node1:8020/itcast/1.txt file:///home/hadoop/aaa
# 如果文件已经存在则添加-f
hadoop fs -get -f hdfs://node1:8020/itcast/1.txt file:///home/hadoop/aaa
# 简写形式: 默认get的源文件在hdfs文件系统中, 目标路径在linux文件系统中,同时linux系统可以使用相对路径
hadoop fs -get -f /itcast/2.txt ./aaa移动mv和复制cp命令
# 格式: hadoop fs -mv 原文件路径 目标文件路径
# mv 只能在同一个文件系统中移动,hdfs
# hadoop fs -mv hdfs://node1:8020/itcast/1.txt file:///home/hadoop/aaa/bbb 报错
# 移动本地文件系统数据
hadoop fs -mv file:///home/hadoop/aaa/1.txt file:///home/hadoop/aaa/bbb
# 移动hdfs中文件
hadoop fs -mv hdfs://node1:8020/aaa hdfs://node1:8020/itcast# 格式: hadoop fs -cp 原文件路径 目标文件路径
# 3.3版本以后cp可以在不同文件系统间复制.
# cp和linux中的复制基本相同,唯一的不同是,我们复制目录时不需要加-r
hadoop fs -cp hdfs://node1:8020/itcast/aaa hdfs://node1:8020/bbb
# 在mv 和cp中只要我们是hdfs中的路径,可以不写hdfs://node1:8020 因为在服务启动前已经将其配置到core-site.xml中
hadoop fs -cp /itcast/aaa /ccc删除命令rm
# 格式: hadoop fs -rm 文件名称
# 格式: hadoop fs -rm -r 目录名称
hadoop fs -rm -r /ccc# 注意: 在hadoop中rm命令没有-f选项
3.6 shell命令
- 命令官方指导文档: 网站地址
常用命令:
- mkdir 创建文件夹
- ls、cat 列出内容、查看内容
- cp、mv、rmr 复制、移动、删除
- put、get 上传、下载
- appendToFile 向文件追加内容
补充命令:合并上传及合并下载
为什么用它
-
hdfs中如果小文件过多 会造成 元数据过大 namenode内存负担过大
-
hdfs中一般不存储小文件
appendToFile 合并上传
# appendToFile的作用就是将本地的小文件上传到hdfs中,合并为一个大文件
# 格式: hadoop fs -appendToFile 本地文件路径 hdfs文件路径
# 可以将数据追加到某个已有的文件末尾
hadoop fs -appendToFile 3.txt /tmp/aaa.txt
# 也可以同时和并上传多个小文件.
hadoop fs -appendToFile 1.txt 2.txt 3.txt /tmp/1.txt
getmerge合并下载
# getmerge的作用就是将hdfs中的小文件下载到本地,合并为一个大文件
# 格式: hadoop fs -getmerge hdfs路径 本地路径
hadoop fs -getmerge /tmp/small/* merge.txt
# 合并下载用的比合并上传少很多,因为在linux中一本合并与否不影响数据使用, 而hdfs中如果小文件数量过多,需要合并,否则内存占用极大.