先填一下上次许诺的坑: (许诺的那篇文章链接如下)
如何用sql在1分钟从1T数据中精准定位查询?Hive离线数仓 Spark分析-CSDN博客文章浏览阅读1.2k次,点赞38次,收藏14次。在大数据-Hadoop体系中 ,spark批处理和hive离线数仓可以说是对立并行的两个大分支技术栈,,,建议主攻其一,另一个灵活使用就行。他们是2015出现在国内,2017年之后国外各大公司纷纷采用,国内2020采用的,目前属于很前沿,并且很主流,很顶层的技术。(注:19年国内云计算开始起势,大数据的发展与云计算和人工智能等密切相关,更离不开芯片,硬件存储技术等相关支撑,它们之间相辅相成
https://blog.csdn.net/qq_61414097/article/details/140999898
我的许诺有点多,请容我慢慢填坑 "后续的话我会出一期关于大数据所有主流组件搭载在一个集群实验环境的运维配置文档。"此坑暂时填补嘿嘿 这篇文章就是
先收藏,过几天我会对文章进行精修,
因为这是我两年前用的,实验集群配置 不过作为参考文档也可有个约数,自己有个对照配置,方便排查一些,组件不兼容的坑。
它其实是.txt文档,所以放在这里有点粗放了哈哈哈,抱歉
还要整理spark,所以这篇就先到这里吧 ,我先在已经在磕云计算了,再不整理下就忘光了hhh
1 安装VMware和CentOS7系统
CentOS7.9.io镜像下载
建议 阿里云下载cents镜像ios 链接如下
https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso
VMware安装
win7用 12
win10 用 15
win11用 16.2.4
别问为什么,问就是win和VMware不兼容导致虚拟机各种奇葩异常,重装集群了
这已经是我当年实验了20多次得出的结果,最佳兼容性搭配。
安装过程 未完待续。。****。
**1.安装了VMware和CentOS7系统
2.设置了网络,使用Xshell进行连接
网络问题:
3.协助大家远程解决问题的软件:teamViewer、向日葵
/home 2g
/boot 目录用来存放文件内核0.5g
/ 根目录15g
/ swap为交换临时数据目录,最好不要用安装时少分配空间1.5g**
/必须掌握的linux命令:
1.文件和目录操作
cd:切换目录
ls -al :列出所在目录的文件及文件夹
mkdir: 创建文件夹
cat :查看文件
mv:移动文件或者修改名字
tar -zxvf :解压文件,后面经常使用
vi或者vim :编辑文件,后面经常使用
初学者完成 Linux 系统分区及安装之后,需熟练掌握 Linux 系统管理必备命令,
命令包括:cd、ls、pwd、clear、chmod、chown、chattr、useradd、userdel、
groupadd、vi、vim、cat、more、less、mv、cp、rm、rmdir、touch、ifconfig、
ip addr、ping、route、echo、wc、expr、bc、ln、head、tail、who、hostname、
top、df、du、netstat、ss、kill、alias、man、tar、zip、unzip、jar、fdisk、
free、uptime、lsof、lsmod、lsattr、dd、date、crontab、ps、find、awk、
sed、grep、sort、uniq 等,
每个命令至少练习 30 遍,逐步掌握每个命令的用法及应用场景;
1.1安装系统后的准备工作inux系统初始环境设置
1)配置服务器的IP地址
查看机器的网卡名称。
ip address show。
(2)设置服务器的主机名称
设置主机名称
hostnamectl set-hostname master (主机名):修改以后永久生效
hostname master11 :临时修改主机名为master111
查看当前服务器的名称。
hostname
(3)绑定主机名与IP地址
查看ip
ip addr
192.168.20.134
修改hosts文件
vi /etc/hosts
在其中增加相应内容(下面的内容表示主机名master对应的IP地址为192.168.1.1):
192.168.20.134 master
(4)
临时关闭防火墙
关闭命令:
systemctl stop firewalld
查看防火墙的状态
systemctl status firewalld
我们此时永久关闭防火墙供后续使用,临时关闭后续容易无法连接外网
**[root@localhost ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
查看防火墙的状态
systemctl status firewalld
配置 selinux
root@localhost \~\]# getenforce
Enforcing
\[root@localhost \~\]# setenforce 0**
**2.备份原来的yum源
\[root@controller \~\]# mkdir /etc/yum.repos.d/repobak
\[root@controller \~\]# mv /etc/yum.repos.d/\*.repo /etc/yum.repos.d/repobak/**
**3.配置网络yum源
原来的yum源已备份在 /etc/yum.repos.d/repobak**
**(1)-----这里直接使用 阿里 的 镜像
新建文件 aliyun.repo
vi /etc/yum.repos.d/aliyun.repo
wget -O /etc/yum.repos.d/aliyun.repo https://mirrors.aliyun.com/repo/Centos-7.repo
生成缓存列表:
yum makecache**
**生成缓存列表:
yum makecache
清理缓存
yum clean all
yum repolist
检查是否配置成功命令**
**2.用户操作(了解)
只是用root登录操作,不涉及权限和目录所属者或者所属组的修改
useradd :添加用户
passwd :给用户设置密码
chown: 更改文件所属用户或者组
chmod:更改文件权限
su:切换用户
sudo:临时取得权限**
**3.系统命令(临时了解,后面还会用到)
clear:清除屏幕 ctl l(清屏)
hostname:显示或者主机名(临时生效)
hostnamectl set-hostname:设置主机名,重启后永久生效
(不可以是中文也不可以是数字一般是设为英文)
ip: 查看ip
systemctl:系统服务的开关,例如关闭防火墙**
**4.用户和组(了解,能答出来就可以)
用户分3种类型:
a,超级用户,UID是0
b,系统用户,UID是1-999
c,普通用户,UID从1000开始**
**组分2中类型:
a,系统组,GID是0-999
b,私有组,GID从1000开始
默认在创建用户的时候,会创建一个与用户名一样的组**
**5.文件类型和权限
文件分4种类型:
a,普通文件,标识符:-
b,目录文件,标识符:d
c,链接文件,硬链接标识符:- 、软链接标识符:l
d,设备文件,字符设备文件标识符:c、块设备文件标识符:b
文件权限分3种: 可读(r)、可写(w)、可执行(x)
文件权限表示方法:数字表示、字符赋值
0:--- 无任何权限
1:--x 可执行
2:-w- 可写
3:-wx 可写可执行
4:r-- 可读
5:r-x 可读可执行
6:rw- 可读可写
7:rwx 可读可写可执行
=====================================================================
1.系统没安装好、远程连接有问题
2.修改完配置文件profile以后,没有source**
## **2**
### **一、hadoop概述:
1.起源:Google的分布式文件系统**
**2.Hadoop生态圈
HDFS:分布式文件系统,具有高容错性,提供高吞吐率的数据访问,能够有效处理海量数据集。
YARN:通用资源管理系统,为上层应用提供统一资源管理调度。
MapReduce是面向大型数据处理的并行计算模型和方法,仅适合离线数据处理。
ZooKeeper:分布式数据管理和协调框架,保证分布式环境中数据的一致性,是Hadoop组件的一个监管系统。
HBase:基于HDFS的非关系型列式存储数据库,齐保存的数据可使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
Hive:数据仓库技术,用于查询和管理存储在分布式环境下的大数据集,通常用于离线分析。
Sqoop:主要用于传统关系型数据库和Hadoop之间传输数据。
Flume:日志收集系统,对日志数据进行过滤、格式转换等,能够将日志写往各种数据目标。
Kafka:分布式消息系统,它主要用于处理活跃的流式数据。
Spark:计算引擎(框架)。
Mahout:数据挖掘算法库,实现了一些可扩展的机器学习领域经典算法。
Storm:是一个分布式的、容错的实时处理系统。
Oozie: 工作流调度引擎,用于协调多个Hadoop作业的执行。
Azkaban:批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。
3.hadoop版本演变(了解)
1.x 仅包含HDFS和MapReduce
2.x 引入了Yarn作为资源管理
3.x 增加了新的编码、备份、负载均衡机制**
**4.hadoop运行模式
3种模式:
单机模式:无需修改配置文件,不需要启动HDFS和YARN
伪分布模式:需要修改配置文件,需要启动HDFS和YARN
完全分布式:分主从节点分别启动HDFS和YARN**
**5.hadoop的优点:扩容能力强、成本低、高效率、高可靠**
**脑海里一定要有图:HDFS架构图**
### **二、hadoop核心组件(了解)**
**1.HDFS
分布式文件系统,数据存储管理的基础,有NameNode和DataNode
NameNode:HDFS的管理者,负责处理客户端请求、管理DataNode
SeconderNameNode:用于合并元数据文件FSImage,不是NameNode的备份,会帮助恢复NameNode
DataNode:数据节点,负责存储数据、处理读写请求,定期向NameNode报告数据信息和心跳
FSImage:存储元数据
edits:日志文件,记录读写操作等
HDFS的优缺点(了解,根据HDFS的特点大胆猜测)
优点:高可靠、高容错、适合处理海量数据
缺点:不适合做实时分析、不适合处理小文件、不支持并发写入和文件随机修改**
**2.MapReduce
分布式计算模型,将任务分发给多节点并行处理,整合各节点结果后输出最终结果
MapReduce优缺点:
优点:高容错、易编程、易扩展、适合离线数据处理
缺点:不适合实时计算、流式计算、有向图计算
3.YARN
资源管理系统,负责资源分配和任务调度,采用的是Master/Slave(主/从)结构。
组件包括:
ResourceManager:资源管理器,负责整个系统的资源管理与分配。由两个组件构成:
(1)调度器(Scheduler):根据资源情况和预先定义的策略以及应用程序的资源需求,将系统中的资源分配给各个正在运行的应用程序。
(2)应用程序管理器(Applications Manager):负责管理整个系统中所有应用程序,监控 ApplicationMaster 运行状态并在其失败时重新启动它。**
**NodeManager:管理单个节点上的资源。向ResourceManager汇报节点资源使用情况和Container的运行状态。
负责接收 ResourceManager 的资源分配要求,分配具体的 Container 给应用的某个任务。
处理来自 ApplicationMaster 的Container启动或停止请求。**
**ApplicationMaster:应用程序的第一个进程,负责监控、管理应用程序所有任务的运行
将要处理的数据进行切分
为启动任务,向ResourceManager申请资源,指示任务所在的NodeManager启动Container。
监视任务的运行状态,重新启动失败的任务。当任务运行完毕,负责返还资源。**
**Container:
YARN 中动态创建的资源容器,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
-------------------------**
## **3、Linux系统环境设置**
**(1)配置服务器的IP地址
查看机器的网卡名称。
ip address show。
(2)设置服务器的主机名称
设置主机名称
hostnamectl set-hostname master :修改以后永久生效
hostname master1 :临时修改
查看当前服务器的名称。
hostname
(3)绑定主机名与IP地址
编辑本地名字解析文件hosts。
vi /etc/hosts
在其中增加相应内容(下面的内容表示主机名master对应的IP地址为192.168.xxx.xxx):
192.168.229.133 master
(4)查看SSH服务状态
CentOS 7默认安装SSH服务,查看SSH的状态。
systemctl status sshd
关闭防火墙
关闭命令:
systemctl stop firewalld
查看防火墙的状态
systemctl status firewalld
----
下载上传JDK
(5)卸载自带的OpenJDK
查找:rpm -qa \| grep java
卸载:rpm -e --nodeps 包名
rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
rpm -e --nodeps tzdata-java-2023c-1.el7.noarch**
**(6)安装JDK
安装包解压到/opt目录下
tar -zxvf \~/jdk-8u231-linux-x64.tar.gz -C /opt
查看目录确认
ll /opt
(7)设置JAVA环境变量
配置/etc/profile文件vi /etc/profile
在文件的最后增加如下两行:
export JAVA_HOME=/opt/jdk1.8.0_231
export PATH=$PATH:$JAVA_HOOME/bin
(8)设置JAVA环境变量
使设置生效:
source /etc/profile
检查JAVA是否可用。
echo $JAVA_HOME
java -version 或javac -version
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin:/usr/local/src/java/jdk1.8.0_141/bin
export CLASSPATH=/usr/local/src/java/jdk1.8.0_141/lib/**
**#export JAVA_HOME=/usr/local/java/jdk1.8.0_202
#export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
#export PATH=$PATH:$JAVA_HOME/bin
注意如果出现 export PATH=/usr/local/sbin:/usr/local..... 那再写#export JAVA_HOME=/....
#export PAT... 这种会报错 要么全部拆分 要么合写**
**如果你使用 yum 安装了 OpenJDK 1.8.0_412,并且通过 java -version 命令验证了安装,那么 OpenJDK 的环境变量将会自动配置。
在 CentOS 7 中,OpenJDK 的环境变量 JAVA_HOME 通常位于 /etc/profile.d/jdk.sh 文件中。这个文件会在系统启动时动加载,并设置 JAVA_HOME 和相关环境变量。
打开终端并以管理员身份登录。
查看 /etc/profile.d/jdk.sh 文件:
cat /etc/profile.d/jdk.sh
输出会显示配置的环境变量,其中应该包含 JAVA_HOME 的定义。
如果你的系统上没有 /etc/profile.d/jdk.sh 文件,那可能是因为你安装的 OpenJDK 版本较新,或者使用了其他方式进行安装。在这种情况下,你可以手动设置 JAVA_HOME 环境变量。
cd /usr/lib/jvm/ 我的是这个
ls$5
\[root@master \~\]# ls /usr/lib/jvm
java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
jre
jre-1.8.0
jre-1.8.0-openjdk
jre-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
jre-openjd
vi /etc/profile
在文件的末尾添加以下行:**
**export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
export PATH=$PATH:$JAVA_HOME/bin
这是我的
验证 Java -version
java
echo $JAVA_HOME**
**例如,可以编辑 /etc/profile 文件,并在其中添加以下行:
export JAVA_HOME=/usr/lib/jvm/java-x.x.x
export PATH=$PATH:$JAVA_HOME/binecho $JAVA_HOME
确保将 java-x.x.x 替换为你实际的 Java 安装路径。
保存并关闭文件。然后运行以下命令使环境变量生效:
source /etc/profile
-------------
安装hadoop
下载hadoop 并上传**
**(9)安装Hadoop软件
将安装包解压到/usr/local/src/目录下
tar -zxvf \~/hadoop-2.7.1.tar.gz -C /usr/local/src/
查看目录确认。
ll /usr/local/src/
(10)配置Hadoop环境变量
修改/etc/profile文件。
vi /etc/profile
在文件的最后增加两行:
export HADOOP_HOME=/usr/local/src/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(11)配置Hadoop环境变量
使设置生效:
source /etc/profile
检查设置是否生效:
hadoop
--------
单机版hadoop**
**(12)进入Hadoop目录
cd /usr/local/src/hadoop-2.7.1/
配置hadoop-env.sh文件
配置命令
vi etc/hadoop/hadoop-env.sh
在文件中查找export JAVA_HOME这行,改为如下所示内容。
export JAVA_HOME=/usr/local/src/jdk1.8.0_231
(13)创建输入数据存放目录
将输入数据存放在\~/input目录(root用户主目录下的input目录中)。
mkdir \~/input
(14)创建数据输入文件
创建数据文件data.txt,将要测试的数据内容输入到data.txt文件中。
vi \~/input/data.txt
输入如下内容,保存退出。
Hello World
Hello Hadoop
Hello Huasan
(15)测试MapReduce运行
运行WordCount官方案例,命令如下:
hadoop jar /usr/local/src/hadoop-2.7.1/share/hadoop/mapreduce /hadoop-mapreduce-examples-2.7.1.jar wordcount \~/input/data.txt \~/output
查看运行结果:
ll \~/output
处理的结果存放在part-r-00000文件中,查看该文件:
cat \~/output/part-r-00000
=====================================================**
## 4免密登录
**实验环境下Hadoop集群
3个节点:
master:
slaver1:
slaver2:
SSH无密码登录
SSH:安全网络协议,开源实现、商业实现。
连接的客户端:putty、SecureCRT、XShell
守护进程sshd,监听端口号:22
两个验证:主机验证:需要输入server的IP;用户验证:需要输入用户名密码
验证机制:密码验证机制、公钥认证机制
验证机制:基于口令的安全验证、基于秘钥的安全验证
非对称加密:
通过公钥、私钥进行加密、解密。不论是公钥加密或者私钥加密的数据,都能用对应的私钥或者公钥解密
公钥放服务器端、私钥放本机
SSH安全机制验证过程:
1.创建一个密钥对,id_rsa(私钥)、id_rsa.pub(公钥),公钥放到服务器(目标机)上
2.将公钥的内容追加到目标机的授权文件中**
**任务:
1.确保master主机,软件包全部上传到/opt/software下,jdk、hadoop已解压安装到了/usr/local/src下,且环境变量JAVA_HOME、HADOOP_HOME已配置(主机名、IP地址和主机名映射、防火墙关闭)java、hadoop命令都能识别
2.克隆master主机,克隆2台,名字分别为slaver1、slaver2
3.开启3台虚拟机、使用Xshell进行连接
4.更改slaver1主机名、ip地址和主机名的映射关系、更改slaver2主机名、3台主机ip地址和主机名的映射关系
使用ssh-keygen命令时,第一次回车、第二次输入y后,回车、第三第四次都回车,秘钥对就生成好了,3台主机都需要执行**
**配置免密登录(master到slaver1、slaver2;slaver1、slaver2到master)
1.前提:有3个节点,每个节点都安装了JDK、Hadoop单机版、主机名、主机名和IP映射都配置好、环境变量JAVA_HOME、HADOOP_HOME已配置(主机名、IP地址和主机名映射、防火墙关闭)java、hadoop命令都能识别
配置本主机免密登录步骤:
1.在本主机使用ssh-keygen -t rsa -P ''生成密钥对
.将id_rsa.pub的内容追加本机的授权文件authorized_key中
配置master到slaver1、slaver2免密登录:
1.在3个节点上都使用ssh-keygen -t rsa -P ''生成密钥对
2.将master的公钥id_rsa.pub的内容追加slaver1的授权文件authorized_key中**
**配置slaver1、slaver2到master免密登录
1.在3个节点上都使用ssh-keygen -t rsa -P ''生成密钥对
2.将slaver2的公钥id_rsa.pub的内容追加master的授权文件authorized_key中**
**ssh-keygen -t rsa -P ''
ssh-keygen -t rsa -P ''
ssh-keygen -t rsa -P ''
cd \~/.ssh/ = cd /root/.ssh/
ls
cat \~/.ssh/id_rsa.pub \>\> \~/.ssh/authorized_keys**
**#slave1
\[hadoop@slave1 \~\]$ cat \~/.ssh/id_rsa.pub \>\> \~/.ssh/authorized_keys
\[hadoop@slave1 .ssh\]$ ls \~/.ssh/
#slave2
\[hadoop@slave2 \~\]$ cat \~/.ssh/id_rsa.pub \>\> \~/.ssh/authorized_keys
\[hadoop@slave2 .ssh\]$ ls \~/.ssh/
chmod 600 \~/.ssh/authorized_keys
chmod 600 \~/.ssh/authorized_keys
chmod 600 \~/.ssh/authorized_keys**
**修改 SSH 配置文件"/etc/ssh/sshd_conchmod 600 \~/.ssh/authorized_keysfig"的下列内容
#master
\[hadoop@master .ssh\]$ su - root
\[root@master \~\]# vi /etc/ssh/sshd_config
PubkeyAuthentication yes
#slave1
\[hadoop@slave1 .ssh\]$ su - root
\[root@slave1 \~\]# vi /etc/ssh/sshd_config
PubkeyAuthentication yes
#slave2
\[hadoop@slave2 .ssh\]$ su - root
\[root@slave2 \~\]# vi /etc/ssh/sshd_config
PubkeyAuthentication yes
设置完后需要重启 SSH 服务,才能使配置生效。
systemctl restart sshd
systemctl restart sshd
systemctl restart sshd
master
scp \~/.ssh/id_rsa.pub master@slave1:\~/
scp \~/.ssh/id_rsa.pub hadoop@slave2:\~/
cat \~/id_rsa.pub \>\>\~/.ssh/authorized_keys
slave1
scp \~/.ssh/id_rsa.pub slave1@master:\~/
scp \~/.ssh/id_rsa.pub slave1@slave2:\~/
cat \~/id_rsa.pub \>\>\~/.sh/authorized_keys
slave2
scp \~/.ssh/id_rsa.pub slave2@slave1:\~/
scp \~/.ssh/id_rsa.pub slave2@master:\~/
cat \~/id_rsa.pub \>\>\~/.ssh/authorized_keys**
**rm -f \~/id_rsa.pub
rm -f \~/id_rsa.pub
rm -f \~/id_rsa.pub
看 查看 3个 节点 authorized_keys 文件
cat \~/.ssh/authorized_keys
####简单的方法:**
**su - root
\[root@master \~\]# vi /etc/ssh/sshd_config
PubkeyAuthentication yes
1.知道服务器密码的情况
#免密码登录被控的主机(ip是被控的,之后输入yes,还会让你输入被控的密码)
一定要修改hosts,三个均改,
若四台则四台每个都改且 每个/etc/hosts 中添加四个IP主机名**
**vim /etc/hosts
192.168.28.145 root
192.168.28.144 slave1
192.168.28.143 slave2
cd /root/.ssh/
ssh-keygen -t rsa**
**#上面的命令后三次回车**
**注意:cd /root/.ssh/ rm -rf known_hosts
在/root/.ssh/ 里面只是保留authorized_keys id_rsa id_rsa.pub两个文件其余删完否则会配失败**
**#然后把想要免密登录的服务器加进来
ssh-copy-id -i /root/.ssh/id_rsa.pub root@slave1
ssh-copy-id -i /root/.ssh/id_rsa.pub root@slave12**
**cd /root/.ssh/
2.不知道服务器密码的情况
#例子:pub能免密登录pri(就是pri是被控的主机)
ssh-keygen -t rsa(两台都操作)
#上面的命令后三次回车
#pub中
cd /root/.ssh/
#(复制id_rsa.pub里的
Pri中
cd /root/.ssh/
vim authorized_keys #这个文件是自己写的,内容是pub的id_rsa.pub里的
#在pub执行下面的
ssh-copy-id -i /root/.ssh/id_rsa.pub root@pri的ip
#输入yes就可以了
#如果不是22端口,就在后面加上 (-p 端口)
ssh-copy-id -i /root/.ssh/id_rsa.pub root@pri的ip -p 端口**
## 5.**hadoop集群运行**
**1.免密登录
2.Hadoop的配置文件:4个
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
/usr/loacal/src/hadoop-2.7.6/etc/hadoop**
**记住2个路径:
软件包位置:
/opt/software/
软件安装路径:
/usr/loacal/src/**
**3.配置文件:
xml有规则:
a,在\