当前位置: 首页 > article >正文

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文件的地址配置信息
    vim /home/hadoop-3.2.1/etc/hadoop/core-site.xml
    
    将localhost本地的地址先改成局域网的ip地址:
    在这里插入图片描述
    • 重新格式化文件系统的内容
    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:架子

  1. 客户端向NameNode发送写入数据的申请
  2. NameNode校验数据是否符合规则(是否重名,路径是否存在)
  3. NameNode同意申请
  4. 客户端向NameNode发送获得能够写入数据的DataNode节点的列表信息的请求
  5. NameNode发送DataNode节点列表
  6. 客户端根据Linux的管道技术,找到离自己最近的rack上的DataNode然后发送写入数据的申请
  7. DataNode发送同意的回应
  8. 客户端发送数据(DataNode收到数据同时复制两份分别发送到同一rack和不同rack的DataNode中进行备份)
  9. DataNode回复写入完成

HDFS读取数据的流程
在这里插入图片描述

  1. 客户端发送带有文件路径path的访问请求
  2. NameNode返回有这个文件的DataNode节点信息列表
  3. 客户端申请读取数据
  4. 返回同意读取
  5. 客户端申请要读取的数据的数据块信息
  6. 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平台的资源管理系统,由两个基础服务组成:

  1. ResourceManager:
    资源管理器,负责资源的申请和管理
  2. NodeManager:
    节点管理器,负责资源的下放和回收

在这里插入图片描述

HIVE数据库的操作

hive只是一个写sql的窗口而已,元数据的存储是通过 derby 或者 mysql 进行存储的,表格的数据存储在hdfs中,数据的计算是用mapreduce来实现的。

hive的操作有三个基本的窗口:

  1. webUI:通过浏览器的组件去操作hive数据库,例如hue
  2. jdbc:通过各种客户端的软件来操作的,例如dbeaver
  3. 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类型>

向表格中插入数据

  • 只有简单数据
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  表名(
列名  数据类型
);

特点:

  1. 外部表是不能通过 truncate table 进行表格数据清空的
  2. 外部表如果使用 drop table 进行删除,只会删除在元数据库中的表格结构定义,不会删除在 hdfs 中的表格文件夹以及表格的数据
  3. 在数据的分层结构中,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');

http://www.kler.cn/a/314253.html

相关文章:

  • kubernetes简单入门实战
  • Unity 性能优化方案
  • Database Advantages (数据库系统的优点)
  • 代码随想录第二十一天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
  • 【MySQL 保姆级教学】事务的隔离级别(详细)--下(13)
  • 卓胜微嵌入式面试题及参考答案(2万字长文)
  • 消息队列选型参考:Top5消息队列组件
  • Qt:智能指针QScopedPointer 的使用(以及如何写一个QScopedPointer )
  • [SDX35+WCN6856]SDX35 开启class/gpio子系统配置操作说明
  • 在Python中,类是用于定义对象的蓝图或模板,而对象则是根据类创建的具体实例
  • 【RPA私教课:UIPath】RPA 赋能科技企业,登录时验证码自动截取
  • SpringBoot 消息队列RabbitMQ 消息可靠性 数据持久化 与 LazyQueue
  • pytorch 同步机制
  • docker desktop windows stop
  • @EnableScheduling 和 @Scheduled 实现定时任务的任务延期问题
  • Linux:login shell和non-login shell以及其配置文件
  • MQ入门(4)
  • kubernetes基础命令
  • 论文阅读--Planning-oriented Autonomous Driving(一)
  • “华为杯”第十二届中国研究生数学建模竞赛-D题:面向节能的单/多列车优化决策问题研究(续)(附MATLAB代码实现)
  • IPsec-VPN中文解释
  • 数据结构:二叉树(一)
  • 【计算机网络】详解UDP套接字网络字节序IP地址端口号
  • 2025年最新大数据毕业设计选题-Hadoop综合项目
  • TCP客户端编码和解码处理:发送和接收指定编码消息
  • 深度学习——基础知识