期末1111111111


数科1991 庄泽华

1.集群环境配置

超级用户与普通用户的区别

[root@localhost ~]# 超级用户
[hadoop@localhost ~]$ 普通用户
#以下代码不区分超级用户和普通用户

免密使用root权限执行命令

# 修改/etc/sudoers的配置
[root@localhost ~]# vi /etc/sudoers
root    ALL=(ALL)       ALL
hadoop  ALL=(ALL)       NOPASSWD:ALL
# 在/etc/sudoers.d下新建文件hadoop
# 1. 切换到root 用户
# 2. 新建在/etc/sudoers.d下新建文件hadoop,并写入配置
[root@localhost ~]# echo "hadoop  ALL=(ALL)  NOPASSWD:ALL" > /etc/sudoers.d/hadoop

修改主机名

[root@localhost ~]# echo "hadoop01" > etc/hostname
[root@localhost ~]# reboot   重启
[root@localhost ~]# hostname  查看主机名称

关闭防火墙

# 使用root账户关闭防火墙
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld.service 
# 检查防火墙状态
[root@localhost ~]# systemctl status firewalld.service 

# 设置开机默认不开启防火墙
[root@localhost ~]# systemctl disable firewalld.service 
# 检查防火墙的开机启动情况
[root@localhost ~]# systemctl list-unit-files firewalld.service | grep firewalld

配置主机IP映射

[root@localhost ~]# vi /etc/hosts
192.168.168.101			hadoop01
192.168.168.102			hadoop02
192.168.168.103			hadoop03

2.搭建Hadoop集群

配置hadoop账户的免密

#各台主机生成rsa密钥:
[root@localhost ~]# ssh-keygen -t rsa
#各台主机拷贝公钥到hadoop01: 
[root@localhost ~]# ssh-copy-id hadoop01
#将hadoop01上的authorized_keys公钥文件发送给各hadoop02和hadoop03
[root@localhost ~]# scp ~/.ssh/authorized_keys hadoop02:~/.ssh
[root@localhost ~]# scp ~/.ssh/authorized_keys hadoop03:~/.ssh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58wwPSWD-1656424012339)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220531213129440.png)]

Hadoop概述

  1. Hadoop守护进程运行在集群里的机器之上
  2. Hadoop分布式文件系统(HDFS)的数据分布于运行datanode守护进程的节点上
  3. 计算框架(像MapReduce,Spark和Impala)向数据移动计算
  4. 为实现Hadoop的优点,必须在集群里的许多机器上部署Hadoop守护进程
    1. 许多组织维护多个集群,每个集群都有几百个或几千个节点
  5. Apache Hadoop是一个大型的复杂的系统

基本的Hadoop集群

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-su0Kgcgd-1656424012341)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220601142221673.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T42gX3Si-1656424012341)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220601142254578.png)]

不是所有守护进程都运行在每台机器上

  1. NameNode,ResourceManager,JobHistoryServer(“主”守护进程)
    • 每个集群只有一个,除非配置了高可用
  2. Secondary NameNode
    • 在没有配置高可用的环境下,每个集群只有一个
  3. DataNode,NodeManager
    • 集群里的每个数据节点一个
  4. 例外:对于小集群(少于10-20节点),多个主守护进程运行在同一台物理节点上也是可以接受的

配置系统环境

[root@localhost ~]# sudo vi /etc/profile
[root@localhost ~]# source /etc/profile  #立即生效配置
[root@localhost ~]# hadoop version  #查看hadoop版本

格式化Namenode

[root@localhost ~]# hadoop namenode -format

启动与关闭Hadoop集群

[root@localhost ~]# start-all.sh  启动
[root@localhost ~]# stop-all.sh   关闭
[root@localhost ~]# jps           查看进程

Name Node Web UI

hadoop01:50070

3.HDFS

看ppt

#在 HDFS 的根目录下创建文件夹/input
[root@localhost ~]# hdfs dfs -mkdir /input

#将 mr_score 文件夹里的内容都上传到 HDFS 的/input 目录下
[root@localhost ~]# hdfs dfs -put ./mr_score /input

#使用 hdfs shell 查看 HDFS 的/input/mr_score 下的文件列表
[root@localhost ~]# hdfs dfs -ls /input/mr_score

#使用 HDFS 客户端查看/input/mr_score/chinese.txt 文件的 内容
[root@localhost ~]# hdfs dfs -cat /input/mr_score/chinese.txt

#单独从 HDFS 上下载 chinese.txt 文件到本地文件系统
[root@localhost ~]# hdfs dfs -get /input/mr_score/chinese.txt ./

#合并下载/input/mr_score 下的所有文件,并以 scores.txt 命
[root@localhost ~]# hdfs dfs -getmerge /input/mr_score ./mr_score.txt

#使用 hdfs shell 删除/input/mr_score/chinese.txt 文件
[root@localhost ~]# hdfs dfs -rm /input/mr_score/chinese.txt

#将 HDFS 上的/input/mr_score 目前权限修改为 777
[root@localhost ~]# hdfs dfs -chmod 777 /input/mr_score

#删除 HDFS 上的/input/mr_score 文件夹
[root@localhost ~]# hdfs dfs -rm -r /input

#将本地文件系统上的 score.txt 文件剪切到 HDFS 上 hadoop
[root@localhost ~]# hdfs dfs -moveFromLocal score.txt /user/hadoop

#查看 scores.txt 文件的最后 2 行内容
[root@localhost ~]# hdfs dfs -cat /user/hadoop/scores.txt | tail 2

#往 score.txt 文件添加一行内容:zhangsan 59
[root@localhost ~]# echo "zhangsan 59" | hdfs dfs -appendToFile /user/hadoop/scores.txt

4.MapReduce

MapReduce介绍

  1. MapReduce是一种编程模型(计算框架)

流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0dCq4g6g-1656424012342)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220601195521230.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGfj4OgW-1656424012342)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220601195344999.png)]

在hadoop集群上运行java程序

[hadoop@hadoop02 ~]# hadoop jar ~/eclipse-workspace/jars/mr_demo.jar mr.demo.WordCount zen.txt out_zen

MapReduce相较于传统的并行计算框架有什么优势?

MapReduce
集群架构/容错性非共享式, 容错性好
硬件/价格/扩展性普通PC机, 便宜, 扩展性强
编程/学习难度what, 简单
适用场景批处理, 非实时, 数据密集型

5.Yarn

流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BOTy78Vp-1656424012343)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220605143547400.png)]

什么是YARN

一种管理Hadoop集群资源的分布式系统

为什么选YARN

  1. YARN允许在同一个Hadoop集群上运行多种不同类型的作业
  2. YARN允许不同的计算框架间动态共享集群的内存和CPU资源
  3. 增加集群的利用率

YARN上著名的计算框架

MapReduce Spark Hive可运行在Spark或MapReduce上

YARN守护进程

  1. ResourceManager:每个集群一个

    1. 初始化应用程序的启动
    2. 调度工作节点使用的资源
  2. JobHistoryServer:每个集群一个

    1. 存档MapReduce作业的完成情况和元数据
  3. NodeManager:每个工作节点一个

    1. 启动应用程序的进程

    2. 管理工作节点的资源

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sZdo5kix-1656424012343)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220605151348734.png)]

小结

集群的资源被YARN管理
YARN资源管理器调度资源并管理应用程序的生命周期
YARN的NodeManager启动容器
像MapReduce和Spark这样的计算框架使用YARN
开发者不需要处理集群资源管理,调度,容错,等等
YARN应用程序里的的每个任务都是由Application Master来管理的
Map Reduce作业有一个map阶段,一个shuffle和排序阶段,以及一个Reduce阶段
有许多可用的用户界面来查看YARN应用程序的详情
CM的YARN应用程序页面
资源管理器的Web UI
MapReduce作业历史服务器的Web UI
YARN应用程序日志默认被CM聚合,可从CM,HDFS客户端及命令行访问

6.zookeeper

简介

Zookeeper提供了分布式协调服务

Zookeeper数据模型类似树形文件系统

应用场景

  1. 集群管理
  2. 配置管理
  3. 统一命名服务
  4. 分布式锁

结构原理

高可用集群

​ 容错:过半数可用就行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsHU3lBV-1656424012344)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608205010139.png)]

zookeeper Shell

#查询路径下的znode
ls /

#创建节点  -s 顺序节点  -e 临时节点
create /bidata
create /sk1991/201941084028 "庄泽华"  #命名

#查看节点信息
get /sk1991/201941084028

#修改节点
set /sk1991/201941084028 "肥仔"

#删除节点
delete /sk1991/201941084028

7.HDFS-HA

#创建软链接
ln -s 文件路径 链接名称

8.HBase

什么是HBase

大型分布式数据库

区别与传统数据库

硬件成本 低,

容错性 高,

数据库 大,

排列方式 稀疏多维,

存储模式 面向列,

数据类型 Bytes,

查询速度 快

基本结构

表(table)

行(row)

​ 行键(rowkey)

列族 (column family)

列限定符(qualifier)

单元格(cell)

成员角色

主从(master/slave)模式

  1. HMaster
    1. 监控集群中所有RegionServer进程
    2. 集群中所有metadata信息改变的入口
  2. RegionServer
    1. 负责管理region
  3. Zookeeper
    1. 维护Hbase配置信息
    2. 监控RegionServer状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RadqJu47-1656424012344)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608162016258.png)]

Regions详解:

  1. 表按行键拆分成多个regions
  2. RegionServer管理regions,向client提供服务
  3. RegionServer通常运行在集群中的工作节点
  4. RegionServer通常服务多个Regions

HBase Web端口

hadoop01:16016

HBase Shell

#启动 hdsf
#启动三台 zkServer
zkServer.sh start

#启动 hbase
start-hbase.sh

#创建表
create 表名,列族1,列族2
create 'Student','StuInfo','Grades'

#插入数据
put 表名,rowkey,列族:列限定符,数据
put 'Student','0001','StuInfo:Age','18'

#全表扫描
Scan 表名
Scan 'Student'

#查数据
get 表名,rowkey,列族:列限定符
get 'Student','0003'
get 'Student','0001',"Grades:Computer"

#删除数据
#删除单元格   delete 表名,rowkey,列族:列限定符
delete 'Student','0001','Grades:Math'
#删除一行	 deleteall 表名,rowkey
deleteall 'Student','0002'
#删除表	  disable 表名    drop 表名
disable 'Student'
drop 'Student'

#修改数据
put 表名.rowkey,列族:列限定符,数据
put 'Student','0002','StuInfo:Age','20'

#设置列族保留版本数
alter 表名,{NAME=>列族,VERSIONS=>保留的版本数}
alter 'Student',{NAME=>'StuInfo',VERSIONS=>4}

#查询最近几个版本的数据
get 表名,rowkey,{COLUMN=>列族:列限定符,VERSIONS=>要查询的版本数}
get 'Student','0003',{COLUMN=>'StuInfo:Age',VERSIONS=>3}

#列出所有表
list

#批量执行命令
hbase shell 文本文件地址

#查询表中记录数
count 表名

#查询表是否存在
exist 表名

9.Hive

Hive介绍

用于解决海量结构化的日志数据统计问题

用于管理和查询结构化/ 非结构化数据的数据仓库

适用于大数据集的批处理统计分析作业

不能在大规模数据集上实现低延迟快速的查询

大数据分析为什么需要Hive

  1. Hive 的出现, 完美的解决了传统数据分析人员所面临的问题
    1. 理解mapreduce编程模型
    2. 自行开发代码实现业务逻辑
  2. 为超大数据集设计的计算/ 扩展能力
  3. 统一的元数据管理

Hive特点

  1. 简单易用 基于SQL表达式语法
  2. 可扩展 可以自由扩展集群规模
  3. 延展性 根据需求自定义函数
  4. 容错性 良好

Hive架构体系

  1. 用户接口
  2. Hiveserver2
  3. Driver
    1. 负责将HQL解析为MR任务,并提交给集群
  4. Metastore Server
    1. 提供元数据服务
  5. DataBase
    1. 存储元数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p0qEYbz8-1656424012345)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608182122861.png)]

Hive三种运行模式

  1. 内嵌模式
  2. 本地模式
  3. 远程模式

数据模型

  1. Managed Table(管理表)

    1. HDFS存储数据受Hive管理,在统一的路径下
    2. Hive对表的删除操作影响实际数据的删除
  2. External Table(外表)

    1. 数据不受Hive管理,元数据由Hive管理
    2. Hive对表的删除操作仅仅删除元数据,实际数据不受影
  3. 永久表

    1. 是指永久存储在HDFS之上的表,默认创建表为永久表
  4. 临时表

    1. 是指仅当前Session有效的表,数据临时存放在用户的临时目录下,当前session退出后即删除
  5. 分区(Partition)

    1. 基于用户指定的分区列的值对数据表进行分区
    2. 分区从物理上分目录划分不同列的数据,用于查询的剪枝,提升查询的效率
  6. 桶(Bucket)

    1. 桶作为一种更细粒度的数据组织方式,用于以进一步提高查询效率
    2. 对于抽样非常有效
    3. 有利于查询优化

Hive Shell

#启动Metastore Server
hive --service metastore &
#启动hive
hive

#创建表
create table sogou(
time string,
rank int)
row format delimited fields terminated by '\t';

#导入外部数据
load data local inpath '/opt/sogou1000' into table sogou;

#查询前两行数据
select * from sogou
limit 2;

#查询有多少条数据
select count(*) from sogou;

#查询搜索结构排名第1,但是点击次序排第2的数据有多少条
select count(*) from sogou
where rank==1 and num==2;

#统计每分钟的查询次数
select substr(time,0,12),count(*) from sogou
group by substr(time,0,12);

#查询url含百度的数据有多少条
select count(*) from sogou
where url regexp '.*baidu.*';

#查询最热门的10个查询词
select wold,count(*)
from sogou
group by wold
order by count(*) desc
limit 10;

Spark

Spark介绍

Spark用十分之一的计算资源,获得了比Hadoop快3倍的速度

Spark的设计遵循“一个软件栈满足不同应用场景”的理念

RDD: 是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型

spark架构图和部署方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VOPuPUOE-1656424012346)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608203638162.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dSjdrRUu-1656424012347)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608203946657.png)]

spark是否能取代hadoop

不能,因为 Spark 是基于内存进行数据处理的,所以不适合于数据量特别大、对实时性要求不高的场合。另外,Hadoop 可以使用廉价的通用服务器来搭建集群,而 Spark 对硬件要求比较高,特别是对内存和 CPU 有更高的要求。

Spark Shell

#本地读取文件
lines = sc.textFile("file:///user/word.txt")

#本地存储
lines.saveAsTextFile("file:///***")

#filter(func): 帅选过滤元素,返回新的数据集
newlines = lines.filter(lambda line:"a" in line)

#map(func): 处理每个元素,并返回新的数据集
newlines = lines.map(lambda line:line+10)
newlines = lines.map(lambda line:line.split(','))
newlines = lines.map(lambda line:line.replace(' ',''))
newlines = lines.map(lambda line:(line,1))

#groupByKey(): 应用于(K,V)键值对的数据集
newlines = lines.groupByKey()

#reduceByKey(func): 应用于(K,V)键值对的数据集
newlines = lines.reduceByKey(lambda a,b:a+b)

#count():  返回数据中元素的个数
#first():  返回数据中第一个元素
#take(n):  返回数据前n个数据
#collect(): 以数组形式返回所有元素
#foreach(func): 遍历每个元素

#sortByKey(False): 排序 False表示降序

#sortBy(lambda x:x[1],False)  指定按第二个值排序,降序

nes.filter(lambda line:“a” in line)

#map(func): 处理每个元素,并返回新的数据集
newlines = lines.map(lambda line:line+10)
newlines = lines.map(lambda line:line.split(‘,’))
newlines = lines.map(lambda line:line.replace(’ ‘,’'))
newlines = lines.map(lambda line:(line,1))

#groupByKey(): 应用于(K,V)键值对的数据集
newlines = lines.groupByKey()

#reduceByKey(func): 应用于(K,V)键值对的数据集
newlines = lines.reduceByKey(lambda a,b:a+b)

#count(): 返回数据中元素的个数
#first(): 返回数据中第一个元素
#take(n): 返回数据前n个数据
#collect(): 以数组形式返回所有元素
#foreach(func): 遍历每个元素

#sortByKey(False): 排序 False表示降序

#sortBy(lambda x:x[1],False) 指定按第二个值排序,降序
![在这里插入图片描述](https://img-blog.csdnimg.cn/4ae60fa6b1e840[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YlLhGA95-1656424107708)(https://imgblo在这里插入图片描述
g.csdnimg.cn/89df2fdc80f84f8dad65e12df31c1c6f.jpeg#pic_center)]


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值