hadoop大数据平台操作笔记
Hadoop介绍
Hadoop是一个开源的分布式系统框架,专为处理和分析大规模数据而设计。它由Apache基金会开发,并通过其高可靠性、高扩展性、高效性和高容错性等特性,在大数据领域发挥着重要作用。以下是对Hadoop的详细解释及其用途的概述:
Hadoop是什么
- 定义:Hadoop是一个开源的分布式计算平台,它通过将数据分布式存储在多台服务器上,并使用MapReduce等算法进行数据处理,从而实现高效的数据存储和处理。
- 核心组件:Hadoop主要由HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)和MapReduce组成。HDFS提供高容错性的分布式存储解决方案,而MapReduce则是一个用于大规模数据处理的并行计算框架。
- 生态系统:Hadoop的生态系统还包括YARN(Yet Another Resource Negotiator,另一种资源协调者)、Zookeeper等组件,以及Hive、HBase、Spark等多个工具,这些工具和组件共同构成了Hadoop强大的数据处理和分析能力。
Hadoop的用途
- 大数据存储:Hadoop通过其分布式文件系统HDFS,能够支持PB级的数据存储,并且提供高吞吐量的数据访问能力,非常适合存储大规模数据集。
- 数据处理与分析:Hadoop的MapReduce框架使得大规模数据处理变得简单高效。用户可以通过编写MapReduce程序来处理和分析存储在HDFS上的数据,从而挖掘出有价值的信息。
日志处理:Hadoop擅长处理和分析日志数据。企业可以利用Hadoop来收集、存储和分析大量的日志文件,以监控系统的运行状态、识别潜在的问题并进行优化。 - ETL(Extract, Transform, Load):Hadoop可以用于数据抽取、转换和加载的过程。企业可以将不同来源的数据抽取到Hadoop中,然后进行清洗、转换和加载到目标数据库或数据仓库中。
- 机器学习:Hadoop的生态系统中的Mahout等工具支持机器学习算法,使得企业可以在Hadoop平台上进行机器学习模型的训练和预测。
- 搜索引擎:Hadoop可以与Lucene等搜索引擎技术结合使用,构建高性能的搜索引擎系统,用于处理大规模的搜索请求和数据。
操作Hadoop
·Hadoop的服务是以集群的方式存在的。整个平台在项目中是由多个服务器共同组网构成,
Hadoop的安装有三种模式
- 单机版(Standalone Mode)
- 特点:
- Hadoop默认的安装模式。
- 所有的服务和数据处理都在同一台机器上进行,不与其他节点交互。
- 不使用Hadoop文件系统(HDFS),直接在本地操作系统的文件系统上读写数据。
- 不加载任何Hadoop的守护进程。
- 主要用于开发和调试MapReduce应用程序。
- 配置:
- 通常不需要修改配置文件,安装后即可使用。
- 主要配置可能涉及设置JAVA_HOME环境变量,以确保Hadoop能够找到Java运行环境。
- 特点:
- 伪分布式(Pseudo-Distributed Mode)
- 特点:
- 在一台机器上模拟分布式环境,所有Hadoop的守护进程(NameNode、DataNode、ResourceManager、NodeManager等)都运行在同一台机器上。
- 具备Hadoop的所有功能,如HDFS、YARN等。适用于学习、开发和小规模实验。
- 配置:
- 需要修改Hadoop的配置文件,如core-site.xml、hdfs-site.xml、mapred-site.xml(或mapred-default.xml的副本)、yarn-site.xml等。
- 配置文件中需要设置HDFS的NameNode和DataNode的地址、端口,以及YARN的ResourceManager和NodeManager的配置。
- 可能还需要配置SSH免密登录,以便Hadoop守护进程之间可以相互通信。
- 特点:
- 完全分布式模式(Fully-Distributed Mode)
- 特点:
- Hadoop集群由多台机器(节点)组成,各节点通过网络互联。
- 每个节点上运行不同的Hadoop守护进程,共同协作完成数据处理任务。
- 适用于生产环境,可以处理大规模数据。
- 配置:
- 配置过程相对复杂,需要设置每个节点的角色(如NameNode、DataNode、ResourceManager、NodeManager等)。
- 需要配置Hadoop的配置文件,包括core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml等。
- 配置文件中需要设置HDFS的NameNode和DataNode的地址、端口,以及YARN的ResourceManager和NodeManager的配置。
- 还需要配置slaves文件(或类似的文件),列出所有DataNode和NodeManager节点的地址。
- 配置SSH免密登录,以便各节点之间可以相互通信。
- 在主节点上启动Hadoop集群,然后验证各节点的服务状态。
- 特点:
Hadoop的文件夹结构和文件功能
- sbin:存放所有的Hadoop管理相关脚本文件的文件夹
- start -all.sh:开启所有服务
- start-dfs,sh:开启文件管理服务
- start-yarn.sh:开启资源管理服务
- etc/hadoop:存放所有配置文件的文件夹
- core-site.xml:核心站点的配置
- hdfs-site.xml:文件系统的配置
- yarn-site.xml:资源管理系统的配置
- mapred-site.xml:计算引擎的配置
伪分布式安装Hadoop的示例:
- 修改文件系统,让系统不仅可以本地访问,也可以用于局域网的访问:
- 修改core-site.xml文件的地址配置信息
将localhost本地的地址先改成局域网的ip地址:vim /home/hadoop-3.2.1/etc/hadoop/core-site.xml
- 重新格式化文件系统的内容
hdfs namenode -format
- 现在我们需要去同步hdfs文件系统中数据的版本
可以通过 /home/hadoop-3.2.1/etc/hadoop/hdfs-site.xml 文件,查看namenode和datanode两个服务的地址:
- 先查看 namenode 服务中的版本号:
cat /home/root/tmp/data/hadoop/dfs/name/current/VERSION```
- 修改 datanode 服务中的版本号:
vim /home/root/tmp/data/hadoop/dfs/data/current/VERSION
发现这里的clusterID和上面的不一样,修改成和上面的id相同的值即可。
- 启动完整的hadoop的服务,查看启动是否正常
/home/hadoop-3.2.1/sbin/start-all.sh
使用 jps 命令来查看启动的信息:显示的是hadoop服务的进程编号和名字
hadoop的基础服务
在hadoop的平台中,有三大基础服务:
– HDFS:hadoop里面的分布式文件管理系统
– YARN:资源管理系统
– MAPREDUCE:计算引擎
HDFS
–通过浏览器来查看hdfs的界面和内容:192.168.222.132:50070。
–在hdfs中创建的内容,在Linux中是看不见的,他们是两套不同的系统。
HDFS命令
命令 | 说明 |
---|---|
创建文件夹 | hadoop fs -mkdir -p 文件夹位置和名字 |
给文件夹赋予权限 | hadoop fs -chmod -R 要给的权限 文件或者文件夹的名字和位置 |
创建文件 | hadoop fs -touch(z) 文件位置和名字 |
删除文件或文件夹 | hadoop fs -rm -r 文件路径(不需要f,hdfs默认强制删除) |
将Linux系统中的文件上传到hdfs系统中 | hadoop fs -put linux的文件路径 hdfs的目标路径 |
将hdfs的文件下载到Linux中 | hadoop fs -get hdfs中文件路径 Linux目标路径 |
将Linux本地文件的内容,上传合并到hdfs已存在文件 | hadoop fs -appendToFile linux的文件位置 hdfs文件位置 |
查看hdfs文件的内容 | hadoop fs -cate hdfs文件路径 |
查看文件大小 | hadoop fs -du -s -h hdfs文件或文件夹路径 |
HDFS的三个服务
NameNode
名称节点,直接和客户端进行数据交互,验证数据交互的过程;保存所有数据的元数据信息。
什么是元数据:
对于数据内容的解释以及结构的定义。如果数据是一个表格,那么元数据就是表格的名字、位置、字段名、字段的数据类型等信息。
DataNode
数据节点,进行数据的保存和写入
SecondaryNameNode
辅助名称节点,扫描整个服务器节点的信息,将数据的信息内容复制到NameNode保存起来。
面试常问
hdfs写入数据的流程
rack:架子
- 客户端向NameNode发送写入数据的申请
- NameNode校验数据是否符合规则(是否重名,路径是否存在)
- NameNode同意申请
- 客户端向NameNode发送获得能够写入数据的DataNode节点的列表信息的请求
- NameNode发送DataNode节点列表
- 客户端根据Linux的管道技术,找到离自己最近的rack上的DataNode然后发送写入数据的申请
- DataNode发送同意的回应
- 客户端发送数据(DataNode收到数据同时复制两份分别发送到同一rack和不同rack的DataNode中进行备份)
- DataNode回复写入完成
HDFS读取数据的流程
- 客户端发送带有文件路径path的访问请求
- NameNode返回有这个文件的DataNode节点信息列表
- 客户端申请读取数据
- 返回同意读取
- 客户端申请要读取的数据的数据块信息
- DataNode返回相应数据
注:
HDFS的写入过程中,数据是默认保存3份的,这个存储的备份数量是可以自己定义的:
/home/hadoop-3.2.1/etc/hadoop/hdfs-site.xml
BLOCK SIZE:hdfs的数据块的大小,128M。定义的我们数据文件每次传输的最大值。
如果有一个文件是300M,这个文件会拆分成3个block,分别是128 128 44 M三个块,每次传输只写入其中一个block。
MAPREDUCE
MapReduce是hadoop平台的默认的计算引擎,除了mr还有spark、tez、flink … 等不同的计算引擎。
计算引擎在我们的工作过程中,是通过sql语句等完成自动的调用的。
步骤 | 说明 |
---|---|
input | 读取器数据 |
split | 拆分数据 |
map | 映射数据 |
shuffle | 计算数据 |
reduce | 汇总数据 |
finalized | 展示数据 |
YARN
yarn是Hadoop平台的资源管理系统,由两个基础服务组成:
- ResourceManager:
资源管理器,负责资源的申请和管理 - NodeManager:
节点管理器,负责资源的下放和回收
HIVE数据库的操作
hive只是一个写sql的窗口而已,元数据的存储是通过 derby 或者 mysql 进行存储的,表格的数据存储在hdfs中,数据的计算是用mapreduce来实现的。
hive的操作有三个基本的窗口:
- webUI:通过浏览器的组件去操作hive数据库,例如hue
- jdbc:通过各种客户端的软件来操作的,例如dbeaver
- CLI:命令行的操作方法,例如直接通过xshell的命令窗口来操作数据库
库的操作
在Hive中,有一个默认的数据库,叫做default。我们也可以自己去创建和删除数据库。
default库的位置是 /user/hive/warehouse 整个文件夹。
创建一个数据库
语法:create database dbName;
**注:**数据库在hdfs中以文件夹的方式存在。位置在 /user/hive/warehouse
查看有哪些数据库
show databases;
删除数据库
drop database dbName;
drop database abName cascade;
如果你的数据库已经创建了表格,不是空库了,就只能通过cascade选项强制删除
使用和切换数据库
use dbName;
显示数据库名字(可选)
set hive.cli.print.current.db=true;
这个参数的默认值是false,我们给它修改成true即可。
如果想要参数永久的有效,需要去修改hive数据库的配置文件:
vim /home/apache-hive-3.1.2-bin/conf/hive-site.xml
表格的操作
创建表格的基础语法:
create table 表名(
列名 数据类型
);
数据类型
- 简单类型
- 数字类型:整数 int bigint;小数 float,double(默认形式),decimal(总长度,精度)
- 字符串类型:定长字符串 char;不定长字符串 varcahr;无限制字符串 string
- 日历类型:年月日时分秒毫秒 date。注:在hive中一般不用date定义时间,通常用string保存,方便不同数据库交换数据
- 复杂类型
- 数组array
一个数组里只能存放相同类型的数据。array<数据类型> - 映射类型:map
存放键值对类型的数据,所有的key和所有的value类型必须是同种类型。map<key类型,value类型>
- 数组array
向表格中插入数据
- 只有简单数据
insert into tabname(cloumnname) values(value);
- 有复杂类型的插入
insert into 表名(列名) select 查询语句
insert into users select 1002,'bb','18898765432',
array('吃饭','睡觉','玩游戏'),
map('语文',88,'数学',72);
如果操作的数据整体的数据量是小于128M,那么可以使用Hive的本地模式去运行:(速度会快点)
set hive.exec.mode.local.auto=true;
表格的分隔符信息
默认的分隔符有三种,分别是:
字段的分隔符:^A,在数据库里面的编码内容是 \001,使用ctrl+v+a才能打印这个符号
元素之间的分隔符:^B,在数据库里面的编码内容是 \002,使用ctrl+v+b才能打印这个符号
键值对之间的分隔符:^C,在数据库里面的编码内容是 \003,使用ctrl+v+c才能打印这个符号
自己在创建表格的时候定义分隔符的信息:
create table 表名(
列名 数据类型
) row format delimited fields terminated by '字段分隔符'
collection items terminated by '元素分隔符'
map keys terminated by '键值对分隔符';
通过sql语句导入linux的文件内容到Hive数据库表格中:
load data local inpath 'linux文件的位置和名字' into table 表名;
通过load data去添加数据才是hive数仓的常见的方式,用 insert into 操作比较少用到。
外部表
通过create table创建的表格都叫做内部表,通过create external
table 创建的表格叫做外部表。
create external table 表名(
列名 数据类型
);
特点:
- 外部表是不能通过 truncate table 进行表格数据清空的
- 外部表如果使用 drop table 进行删除,只会删除在元数据库中的表格结构定义,不会删除在 hdfs 中的表格文件夹以及表格的数据
- 在数据的分层结构中,ODS层的表格,在hive数仓中,都会用外部表进行创建
保留的文件夹,可以通过建表来恢复表格:
create table test1(
userid int,
name string,
age int
)
location '/user/hive/warehouse/bigdata.db/ext_users';
create external table test2(
userid int,
name string,
age int
)
location '/user/hive/warehouse/bigdata.db/ext_users';
通过 location 指向文件夹的表格,是不会在hdfs中创建自己的表格文件夹的。
内部表和外部表是可以相互转换的:
内 --> 外:
alter table 内部表名字 set tblproperties ('EXTERNAL'='TRUE');
外 --> 内:
alter table 外部表名字 set tblproperties ('EXTERNAL'='FALSE');