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

Hadoop大集群配置文档-粗略版-3万字长文 (包括hive,zookeeper,hbase,flume等中间件和mysql等)

先填一下上次许诺的坑: (许诺的那篇文章链接如下)

如何用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,在<configuration></configuration>标签中配置
        b,<property></property>标签中配置具体的name、value
        c,<name>参数名</name>,参数名不能随便写
        d,<value>参数值</value>
<property>
    <name>参数名</name>
    <value>参数值</value>
</property>
        
4.如何修改配置文件
    a,<name>参数名</name>参数名是固定的写法,不能瞎造,具体名字参看官网
    b,<value>参数值</value>标签中的值是我们可修改的,主要是主机名或者IP、端口号、整数值、hadoop运行产生的文件存放路径
    c,<!-- -->是xml中的注释内容

5.如何启动伪分布式?
    a,按照实验文档4完成相应的配置后,在master上执行格式化命令:hdfs namenode -format
    b,格式化完毕,分别启动nameNode、seconderyNamenode、dataNode、yarn,启动命令从start开始都要手动敲,不能出错
                    hadoop-daemon.sh start namenode
                    hadoop-daemon.sh start secondarynamenode
                    hadoop-daemon.sh start datanode
                    start-yarn.sh
                    hadoop-daemon.sh stop namenode
                    hadoop-daemon.sh stop secondarynamenode
                    hadoop-daemon.sh stop datanode
                    stop-yarn.sh
6.验证伪分布式
    在master上执行进程查询命令:jps
        出现一下进程就算成功:
                                [root@master hadoop]# jps
                                    2576 ResourceManager##
                                    2418 SecondaryNameNode##
                                    2245 DataNode##
                                    2103 NameNode##
                                    2711 NodeManager##
                                    3421 Jps
至此,master主机的伪分布式已完成

7.全分布式就是伪分布式的复制,但是需要修改2个配置文件
    a,在master上,找到hadoop安装路径下的etc下hadoop文件夹,配置masters和slavers
    b,将master的hadoop安装文件夹,远程拷贝到slaver1、slaver2上
        scp -r /usr/loacal/src/hadoop-2.7.6/ root@slaver1:/usr/loacal/src/hadoop-2.7.6/
        scp -r /usr/loacal/src/hadoop-2.7.6/ root@slaver2:/usr/loacal/src/hadoop-2.7.6/
    c,在master启动集群:start-all.sh,或者分别启动namenode、secondarynamenode、datanode、yarn

8.hadoop启动只有单节点
    原因有很多,一般情况:
        a,master节点上,主机名为localhost的原因
        b,复制过去的usr/loacal/src/hadoop/dfs/data下有一个VERSION,删除这个文件,或者清空data
        c,重新格式化
        d,检查主机名、主机名与IP的映射关系、防火墙是否关闭
9.查看集群状态
    a,HDFS集群状态:master:50070
    b,secondaryNamenode状态:master:50090
    c,map-reduce运行web界面:master:8088

10.分布式文件系统命令行
    和linux命令一致,不过是多了hdfs dfs的前缀
    上传linux文件到hdfs系统中:hdfs dfs -put
    在hdfs系统中创建文件夹: hdfs dfs -mkdir
    在hdfs系统中查看文件:hdfs dfs -cat

11.运行wordcount例子
        现在linux的root目录下创建data.txt文件,内容为实验文档要求的内容
        在hdfs上创建文件夹:hdfs dfs -mkdir /input
        上传root目录下创建data.txt文件到hdfs系统上,hdfs dfs -put /root/data.txt /input/
        运行wordcount例子,要求在hdfs系统上没有output文件夹,如果有就删掉:
            hadoop jar hadoop安装目录的example wordcount /input/data.txt /output

 

6.Hive组件安装配置

1.Hive是什么?
 

Hive是基于Hadoop的数据仓库工具,可以用来对HDFS中存储的数据进行查询和分析。Hive能够将HDFS上结构化的数据文件映射为数据库表,并提供SQL查询功能,将SQL语句转变成MapReduce任务来执行。

Hive对存储在HDFS中的数据进行分析和管理,它可以将结构化的数据文件映射为一张数据库表,通过SQL查询分析需要的内容,查询Hive使用的SQL语句简称Hive SQL(HQL)。

Hive通过简单的SQL语句实现快速调用MapReduce机制进行数据统计分析,因此不必专门开发MapReduce应用程序即可实现大数据分析。

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

2.Hive的优缺点
    优点:简单容易上手、可扩展性强、元数据管理、容错性强、延展性强、热扩容
    缺点:HQL表达能力有限、效率较低、调优困难、计算过程可控性差

3.hive组织架构

a,hive与hadoop的关系
Hive构建在Hadoop之上,HQL中对查询语句的解释、优化、生成查询计划是由Hive完成的。Hive读取的所有数据都是存储在Hadoop文件系统中。Hive查询计划被转化为MapReduce任务,在Hadoop中执行。

b,hive与数据库的关系
hive支持了绝大多数的语句(如DDL、DML)以及常见的聚合函数、连接查询、条件查询等操作。
具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析
Hive不适合用于联机(online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。


1.5    Hive的数据存储
1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。
    db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
    table:在hdfs中表现所属db目录下一个文件夹
    external table:外部表, 与table类似,不过其数据存放位置可以在任意指定路径
普通表: 删除表后, hdfs上的文件都删了
External外部表删除后, hdfs上的文件没有删除, 只是把文件删除了
    partition:在hdfs中表现为table目录下的子目录
    bucket:桶, 在hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中 

1.6 mysql安装
  

 # 关闭防火墙服务
    [root@master ~]# systemctl stop firewalld
    # 设置防火墙服务开机不启动
    [root@master ~]# systemctl disable firewalld 

    1.查看之前是否安装过mysql,3个节点都要执行
        #卸载自带环境
        # 查询已安装的 mariadb 软件包
        [root@master software]# rpm -qa |grep mariadb
            mariadb-libs-5.5.68-1.el7.x86_64
        # 卸载 mariadb 软件包
        [root@master software]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64    
        
        #查询并卸载系统老版本的Mysql
        [root@master ~]# rpm -qa |grep mysql
        如果有,就卸载掉
        rpm -e --nodeps 文件名
        
    2.安装libaio依赖环境。

        输入指令:rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm

    3.安装net-tools依赖环境。

        输入指令:rpm -ivh net-tools-2.0-0.25.20131004git.el7.x86_64.rpm
    
    4.安装mysql服务
        依次输入指令:

        rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm

        rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm

        rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm

        rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm --nodeps --force
        将以下配置信息添加到/etc/my.cnf文件symbolic-links=0配置信息的下方。
            default-storage-engine=innodb
            innodb_file_per_table
            collation-server=utf8_general_ci
            init-connect='SET NAMES utf8'
            character-set-server=utf8

    5.启动mysql服务
        输入命令:systemctl start mysqld
        查看mysql服务是否启动/查询 MySQL 数据库状态  service mysqld status
         mysqld 进程状态为 active (running),则表示 MySQL 数据库正常运行。
     如果 mysqld 进程状态为 failed,则表示 MySQL 数据库启动异常。此时需要排查 /etc/my.cnf 文件。

        [root@master software]# service mysqld status
                Redirecting to /bin/systemctl status mysqld.service
                ● mysqld.service - MySQL Server
                   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
                   Active: active (running) since 二 2022-10-25 15:26:49 CST; 15s ago
                     Docs: man:mysqld(8)
                           http://dev.mysql.com/doc/refman/en/using-systemd.html
                  Process: 40033 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
                  Process: 39975 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
    6.重置mysql密码
        查看mysql安装时随机生成的密码。

        输入指令:grep 'temporary password' /var/log/mysqld.log
            或者:cat /var/log/mysqld.log | grep 'temporary password'
        
        执行mysql_secure_installation命令初始化MySQL数据库
        
        [root@master ~]# mysql_secure_installation
        Securing the MySQL server deployment.
root@localhost: JYgT+Nl)C56=
        
        先输入查到的临时密码
        输入新密码:Password123$
        # 再次输入新密码 Password123$
# 输入 y
# 输入 y
# 输入 n
# 输入 y
# 输入 y
# 添加 root 用户从本地和远程访问 MySQL 数据库表单的授权。
[root@master ~]# mysql -uroot -p    
# 输入新设定的密码 Password123$
mysql> grant all privileges on *.* to root@'localhost'identified by 'Password123$';  # 添加 root 用户本地访问授权

mysql> grant all privileges on *.* to root@'%' identified by'Password123$'; # 添加 root 用户远程访问授权    

mysql> flush privileges;  # 刷新授权

mysql> select user,host from mysql.user where user='root'; # 查询 root 用户授权情况
mysql> exit; # 退出 MySQL 数据库

  #  DBPassword=Zabbix@2024
按照实验步骤设置对应的

    7.解压hive
        [root@master ~]# tar -zxvf /opt/software/apache-hive-2.0.0-bin.tar.gz -C /usr/local/src
        
        将解压后的apache-hive-2.0.0-bin文件夹更名为hive;
        [root@master ~]# mv /usr/local/src/apache-hive-2.0.0-bin usr/local/src/hive
    8.修改环境变量,并使其生效
    [root@master ~]# vim /etc/profile        # 在文件末尾追加以下配置内容
        # set hive environment
        export HIVE_HOME=/usr/local/src/hive
        export PATH=$PATH:$HIVE_HOME/bin
    
    [root@master ~]source /etc/profile  #使环境变量生效
    
    9.修改hive的配置文件
        将/usr/local/src/hive文件夹下hive-default.xml.template文件,更名为hive-site.xml。
        [root@master ~]$ cp /usr/local/src/hive/conf/hive-default.xml.template /usr/local/src/hive/conf/hive-site.xml
   
    通过 vi 编辑器修改 hive-site.xml 文件实现 Hive 连接 MySQL 数据库,并设定Hive 临时文件存储路径。


7  如何在vim下进行快速查找?
 

若要向下滚动屏幕,请使用 CTRL + Y ,向上滚动,请使用 CTRL + E
Linux中使用vim指令进行文档编辑时,有时想快速找到某一行号或某一个关键字,操作如下:
1、查找n(n是数字)行的方式,打开文档后连续按n、shift+g可以快速定位的n行。
2、查找关键字,打开文档按“/”,然后输入要查找的内容(会在终端的左下方显示输入内容),最后按回车键可以迅速找到指定内容。
使用:u可以进入上一步。
注意要esc在命令状态下。

1、临时显示行号
只须按ESC键退出编辑内容模式,输入“:” ,再输入“set number”或者“set nu”后按回车键,就可以显示行号。
行号显示只是暂时的。退出vim后再次打开vim就不显示行号了。
取消显示行号:输入“:set nonu”

2、永久显示行号
需要修改vim配置文件vimrc。
在默认情况下,用户宿主目录(~)中是没有此文件的,需要在当前用户的宿主目录中手工建立,即使用下面的命令:
vim ~/.vimrc ,在打开的vimrc文件中最后一行输入:set number 或者 set nu,然后保存退出。
再次用vim打开文件时,就会显示行号

1、vim中用大写的字母G命令跳到文件尾。G命令可以跳到相应的行,默认缺省状态是跳转到最后一行即文件尾。
2、vim中使用小写的字母gg(按两次)命令跳到文件头。gg命令可以跳到相应的行,默认缺省状态是跳转到第一行即文件头。
    [hadoop@master ~]$ vim /usr/local/src/hive/conf/hive-site.xml
    设置 MySQL 数据库连接
    配置 MySQL 数据库 root 的密码。(需要看hive.txt文件)
    验证元数据存储版本一致性。若默认 false,则不用修改。
    验证元数据存储版本一致性。若默认 false,则不用修改
    配置数据库驱动
    配置数据库用户名 javax.jdo.option.ConnectionUserName 为 root。
    将 以 下 位 置 的 ${system:java.io.tmpdir}/${system:user.name} 替 换 为
    “/usr/local/src/hive/tmp”目录及其子目录。 需要替换以下 4 .5 处配 置


    10.在Hive安装目录中创建临时文件夹tmp。
        [root@master ~]$ mkdir /usr/local/src/hive/tmp
至此,Hive 组件安装和配置完成

    11.初始化hive

    1)将MySQL数据库驱动文件/opt/software/mysql-connector-java-5.1.47.jar
        拷贝到Hive安装目录的/usr/local/src/hive/lib目录下。
        [root@master ~]# cp /opt/software/mysql-connector-java-5.1.47.jar /usr/local/src/hive/lib
    (2)删除/usr/local/src/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar
        文件,若未删除该文件会导致Hive元数据初始化失败。(我们的安装包中已经给大家删除过了)
        [root@master ~]$ rm -f /usr/local/src/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar


    (3)启动Hadoop相关进程。
        [root@master ~]$ start-all.sh
    12.使用schematool升级元数据,将Hive的元数据重新写入MySQL数据库中。
        [root@master ~]$ schematool -initSchema -dbType mysql
        Metastore connection URL:        jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false
        Metastore Connection Driver :    com.mysql.jdbc.Driver
        Metastore connection User:       root
        Starting metastore schema initialization to 2.0.0
        Initialization script hive-schema-2.0.0.mysql.sql
        Initialization script completed
        schemaTool completed
        以上命令结果显示schemaTool completed,则表示Hive元数据写入MySQL数据库成功。

    13.启动hive
    (1)在系统的任意目录下,执行hive命令即可启动Hive组件。
        [root@master ~]$ hive

        
    如果初始化失败,检查mysql数据库中有没有hive这样一个数据库,如果有,把他删掉,然后重新初始化

 


8. zookeeper组件的安装与配置

1.zookeeper是什么?
Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务
    A、zookeeper是为别的分布式程序服务的
    B、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)
    C、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……
    D、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:
        管理(存储,读取)用户程序提交的数据;
        并为用户程序提供数据节点监听服务;

2.zookeeper的特点
    (1)顺序一致性:从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到ZooKeeper中去。
    (2)原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
    (3)单一系统映像:无论客户端连到哪一个ZooKeeper服务器上,其看到的服务端数据模型都是一致的。
    (4)可靠性:一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。

3.zookeeper的角色和工作机制
在ZooKeeper中没有选择传统的Master/Slave概念,而是引入了leader、follower和observer三种角色。ZooKeeper集群中的所有机器通过一个leader选举过程来选定一台称为“leader”的机器,leader既可以为客户端提供写服务又能提供读服务。
除了leader外,follower和observer都只能提供读服务。follower和observer唯一的区别在于observer机器不参与leader的选举过程,也不参与写操作的“过半写成功”策略,

Leader是通过内部的选举机制临时产生的
以一个简单的例子来说明整个选举的过程.
假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的.假设这些服务器依序启动,来看看会发生什么.
1) 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态
2) 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.
3) 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.
4) 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.
5) 服务器5启动,同4一样,当小弟.

4.zookeeper集群搭建
在master节点上:
(1)ZooKeeper的安装包zookeeper-3.4.8.tar.gz已放置在Linux系统/opt/software目录下。
(2)解压安装包到指定目标,在Master节点执行如下命令。
[root@master software]# tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/src/
[root@master src]# mv zookeeper-3.4.5 zookeeper
(3)在 ZooKeeper 的安装目录下创建 data 和 logs 文件夹。
[root@master ~]# cd /usr/local/src/zookeeper
[root@master zookeeper]# mkdir data && mkdir logs
(4)将编号写入myid文件内
[root@master zookeeper]# echo 1 > data/myid
(5)修改配置文件
[root@master zookeeper]# cp conf/zoo_sample.cfg conf/zoo.cfg
[root@master zookeeper]# vi /usr/local/src/zookeeper/conf/zoo.cfg
修改内容:
dataDir=/usr/local/src/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
在zoo.cfg文件末尾加上:
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
(6)从master节点将zookeeper拷贝到slaver1、slaver2上
[root@master ~] # scp -r /usr/local/src/zookeeper root@slave1:/usr/local/src/
在slaver1上修改/usr/local/src/zookeeper/data/myid,将里面数字改成2
[root@slaver1 ~]vim /usr/local/src/zookeeper/data/myid
[root@master ~] # scp -r /usr/local/src/zookeeper root@slave2:/usr/local/src/
在slaver2上修改/usr/local/src/zookeeper/data/myid,将里面数字改成3
[root@slaver2 ~]vim /usr/local/src/zookeeper/data/myid
(7)master上修改环境变量
[root@master ~]vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
# ZooKeeper 可执行程序目录
export PATH=$PATH:$ZOOKEEPER_HOME/bin
(8)把master的/etc/profile拷贝到slaver1,slaver2上
scp /etc/profile root@slave1:/etc/profile
scp /etc/profile root@slave2:/etc/profile
分别在每个节点上,执行命令:source /etc/profile,让环境变量生效
(9)在每个节点上启动zookeeper
[root@master ~] zkServer.sh start
[root@slave1 ~] zkServer.sh start
[root@slave2 ~] zkServer.sh start
(10)查看zookeeper运行状态
在每个节点执行命令:
[root@master ~]$ zkServer.sh status
[root@slave1 ~]$ zkServer.sh status
[root@slave2 ~]$ zkServer.sh status


9. HBASE组件的安装与配置

1.什么是HBASE?
HBase是一个依赖zookeeper的高可靠的列式存储的非关系型数据库

2.HBase主要特性
    面向列设计:面向列表(簇)的存储和权限控制,列(簇)独立检索。
    支持多版本:每个单元中的数据可以有多个版本,默认情况下,版本号可自动分配,版本号就是单元格插入时的时间戳。
    稀疏性:为空的列不占用存储空间,表可以设计得非常稀疏。
    高可靠性:WAL机制保证了数据写入时不会因集群异常而导致写入数据丢失,Replication机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏。
    高性能:底层的据结构和Rowkey有序排列等架构上的独特设计,使得HBase具有非常高的写入性能。通过科学性地设计RowKey可让数据进行合理的Region切分,主键索引和缓存机制使得HBase在海量数据下具备高速的随机读取性能。
3.HBase(NoSQL)与RDBMS的区别
    1.数据类型:Hbase只有简单的数据类型,只保留字符串;传统数据库有丰富的数据类型。
    2.数据操作:Hbase只有简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系;传统数据库通常有各式各样的函数和连接操作。
    3.存储模式:Hbase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的,这样的好处是数据即是索引,访问查询涉及的列大量降低系统的I/O,并且每一列由一个线索来处理,可以实现查询的并发处理;传统数据库是基于表格结构和行存储,其没有建立索引将耗费大量的I/O并且建立索引和物化试图需要耗费大量的时间和资源。
    4.数据维护:Hbase的更新实际上是插入了新的数据;传统数据库只是替换和修改。
    5.可伸缩性:Hbase可以轻松的增加或减少硬件的数目,并且对错误的兼容性比较高;传统数据库需要增加中间层才能实现这样的功能。
    6.事务:Hbase只可以实现单行的事务性,意味着行与行之间、表与表之前不必满足事务性;传统数据库是可以实现跨行的事务性。

4.HBASE架构
HBase的架构是依托于Hadoop的HDFS作为最基本存储基础单元,在HBase的集群中由一个Master主节点管理多个RegionServer,而ZooKeeper进行协调操作。
(1)HMaster
HMaster用于启动任务管理多个HRegionServer,侦测各个HRegionServer之间的状态,当一个新的HRegionServer登录到HMaster时,HMaster会告诉它等待分配数据。而当某个HRegionServer死机时,HMaster会把它负责的所有HRegion标记为未分配,并恢复HRegionServer的故障。
(2)HRegionServer
HBase中的所有数据从底层来说一般都是保存在HDFS中的,用户通过一系列HRegionServer获取这些数据。HRegionServer主要负责响应用户I/O请求,向HDFS文件系统读写数据,是HBase中最核心的模块。
(3)ZooKeeper
Apache ZooKeeper起源于Hadoop的分布式协同服务,是负责协调集群中的分布式组件,经过多年的发展ZooKeeper已经成为了分布式大数据框架中容错性的标准框架,被多个分布式开源框架所应用。

5.一个图,了解列式存储和HBASE读写过程

6.HBASE安装与配置
    1.解压缩 HBase 安装包
[root@master ~]# tar -zxvf /opt/software/hbase-1.2.1-bin.tar.gz -C  /usr/local/src/
    2.重命名 HBase 安装文件夹、设置环境变量
[root@master ~]# cd /usr/local/src/ 
[rootp@master src]#mv hbase-1.2.1 hbase
    在所有节点添加环境变量
[root@master ~]# vim /etc/profile
# set hbase environment
export HBASE_HOME=/usr/local/src/hbase
export PATH=$HBASE_HOME/bin:$PATH
    在所有节点使环境变量生效
[rootmaster ~]# source /etc/profile
将master节点的/etc/profile文件远程拷贝到slaver1、slaver2上
scp -r /etc/profile root@slave1:/etc/profile
scp -r /etc/profile root@slave2:/etc/profile
    3.修改配置文件hbase-env.sh
    [root@master ~]# cd /usr/local/src/hbase/conf/      (找自己hadoop软件的安装路径)
    [root @master conf]# vim hbase-env.sh 
    #Java 安装位置
    export JAVA_HOME=/usr/local/src/jdk1.8.0_181        ( 找自己hadoop软件的jdk安装路径)
    #值为 true 使用 HBase 自带的 ZooKeeper,值为 false 使用在 Hadoop 上装的 ZooKeeper
    export HBASE_MANAGES_ZK=false 
    #HBase 类路径
    export HBASE_CLASSPATH=/usr/local/src/hadoop/etc/hadoop/  
                 (找自己hadoop软件的安装路径)

    4.修改配置文件hbase-site.xml
    按照实验文档上的添加即可
    vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
<description>The directory shared by region servers.</description>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
<description>使用 master 节点 60010 端口
</description>
</property>

<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
<description>Property from ZooKeeper's config zoo.cfg. The port at
which the clients will connect.使用 master 节点 2181 端口
</description>
</property>

<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
<description>ZooKeeper 超时时间
</description>
</property>

<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
<description>ZooKeeper 管理节点
</description>

<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/src/hbase/tmp</value>
<description>HBase 临时文件路径
</description>
</property>

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>使用分布式 HBase
</description>
</property>
</configuration>


    5.在 master  节点修改 regionservers  文件
    #删除 localhost,每一行写一个 slave 节点主机机器名
    [root @master conf]$ vim regionservers 
        slave1
        slave2
    
    6.在 master 节点创建 hbase.tmp.dir 目录
    [root @master usr]# mkdir /usr/local/src/hbase/tmp
    7.将 master 上的 hbase 安装文件同步到 slave1 slaver2
    [root @master ~]# scp -r /usr/local/src/hbase/ root@slave1:/usr/local/src/
    [root @master ~]# scp -r /usr/local/src/hbase/ root@slave2:/usr/local/src/
    8.启动hbase
        先在master上把hadoop启动起来,然后在每个节点上启动zookeeper
        最后在master上执行命令:start-hbase.sh启动hbase
        在浏览器输入master:60010看hbase的web监控界面
在 master 节点启动 Hadoop
    start-dfs.sh
    start-yarn.sh
[root@master ~]# jps
5220 ResourceManager
5687 Jps
4473 NameNode
4937 SecondaryNameNode
5338 NodeManager(因为每个人配的不一样所以后两个进程也可能没有,有前四个进程即启动成功)
4638 DataNode
[root@slave1 ~]# jps
4963 Jps
4745 NodeManager
4525 DataNode
[root@slave2 ~]# jps
4739 Jps
4309 DataNode
4510 NodeManager

在所有节点启动 ZooKeeper
master节点,slave1,2节点均出现 QuorumPeerMain进程即启动成功
zkServer.sh start

jps

在 master  节点启动 HBase
master节点出现HMaster进程,slave1,2节点均出现HRegionServer进程即启动成功

start-hbase.sh
jps

在master节点stop-hbase.sh

在所有节点    zkServer.sh stop
在master节点    
    stop-yarn.sh
    stop-dfs.sh

10. Flume 

tar zxvf /opt/software/apache-flume-1.7.0-bin.tar.gz -C /usr/local/
[root@master ~]# cd /usr/local/
[root@master local]# mv apache-flume-1.7.0-bin/ flume# 修改Flume安装路径文件夹

[root@master local]# chown -R root:root flume/#  修改文件夹flume/归属用户和归属组为root 用户和 root组
使用 root  用户设置 Flume 

[root@master local]# vim /etc/profile # 编辑系统环境变量配置文件


# set flume environment
export FLUME_HOME=/usr/local/src/flume # Flume 安装路径
export PATH=$PATH:$FLUME_HOME/bin  # 添加系统 PATH 环境变量
source /etc/profile
:修改 Flume  相应配置文件。
cd /usr/local/src/flume/conf

拷贝 flume-env.sh.template 文件并重命名为 flume-env.sh。
[hadoop@master ~]$cp flume-env.sh.template flume-env.sh

步骤三:修改并配置 flume-env.sh  文件。删除 JAVA_HOME 变量前的注释,修改为 JDK 的安装路径。

[hadoop@master ~]$ vi /usr/local/src/flume/conf/flume-env.sh
# 修改 JAVA_HOME 参数值为 jdk 安装路径
export JAVA_HOME=/usr/local/src/jdk1.8.0_152
使用 flume-ng version 命令验证安装是否成功,若能够正常查询 Flume 组件版本为
1.6.0,则表示安装成功。

若输入 : flume-ng version 报错

错误: 找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty
Flume 1.7.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: 511d868555dd4d16e6ce4fedc72c2d1454546707
Compiled by bessbd on Wed Oct 12 20:51:10 CEST 2016
From source with checksum 0d21b3ffdc55a07e1d08875872c00523
解决办法

[root@master bin]# cd /usr/local/flume//bin/
[root@master bin]# vim flume-ng

在75行
java.library.path后面 括号里添加
 
2>/dev/null | grep hadoop
在110行
java.library.path后面 括号里添加
 
2>/dev/null | grep hbase

[root@master bin]# flume-ng version
Flume 1.7.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: 511d868555dd4d16e6ce4fedc72c2d1454546707
Compiled by bessbd on Wed Oct 12 20:51:10 CEST 2016
From source with checksum 0d21b3ffdc55a07e1d08875872c00523
安装成功


    
    
   
注:该文档是我两年前参考了很多相关官方技术文档,当时一边配一边写的,按命令配完戈组件均可运行 当时配了3遍流程,按流程走完,直接立马运行。
    
    
    
    
    
    
    
    
    
    
    
    
    

 

相关文章:

Hadoop大集群配置文档-粗略版-3万字长文 (包括hive,zookeeper,hbase,flume等中间件和mysql等)

先填一下上次许诺的坑&#xff1a; &#xff08;许诺的那篇文章链接如下&#xff09; 如何用sql在1分钟从1T数据中精准定位查询&#xff1f;Hive离线数仓 Spark分析-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞38次&#xff0c;收藏14次。在大数据-Hadoop体系中 &#xff0c;…...

原生html+js播放flv直播视频流【vue等皆可用】

一、前言 最近着手了一个新需求&#xff1a;将某记录仪的实时视频在页面展现。 实现步骤&#xff1a; 通过WebRtc将直播视频转码为flv/rtsp格式流&#xff1b;通过Vlc或代码中的视频播放器播放视频。 常见播放flv直播视频流软件如&#xff1a;VLC、PotPlayer等&#xff0c;…...

初学java第一天:写一下熟悉的猜数字小游戏

初学java&#xff0c;不知道bug多不多&#xff0c;为了整理凌乱的思绪&#xff0c;写一个实践一下&#xff0c;跟C好像啊 简单来说&#xff0c;初学java确实有一点难度&#xff0c;但是大部分知识和思想和C语言和python相似&#xff0c;所以写起来还行&#xff0c;注意是对一些…...

【C++】如何判断类型

typeid的缺点 typeid对多态的情况不支持 #include <iostream>class Parent { public:Parent() {} private:int a 0; };class Child :public Parent { public :Child() {} private:int b 0; };int main() {Parent* obj1 new Child();Parent* pobj1 obj1;std::cout &…...

让一切发生皆有利于我,在人生的长河中,我们常常面临诸多的不确定性和变化

让一切发生皆有利于我,在人生的长河中,我们常常面临诸多的不确定性和变化。如何在这纷繁复杂的世界中保持内心的坚定,以积极的姿态应对生活的起伏,是我们一生都需要探索的课题。“一切发生皆有利于我”,这是一种心态;“让一切发生皆有利于我”,这是一种策略。这一深刻的…...

腾讯云AI代码助手:智能AI代码助手 ,新一代的高效代码开发辅助工具

前言 近些年是一个科技大爆发的时代&#xff0c;自从大模型发布以来越来越多的科技产品出现。例如去年的智能编码助手自出现以来&#xff0c;各大老牌大厂腾讯&#xff0c;百度 阿里也都紧随其后&#xff0c;智能编码助手的出现可以说大大的节省了我们写一些冗余代码的时间成本…...

C#:索引器 集合初始化器 事件访问器 枚举器 迭代器

1.索引器 就是有参属性 ,这个属性的get访问器接受 一个或多个参数 ,set访问器接受 两个或多个参数 <<via c#>>第10.2节 索引器可以被是被智能的数组 ,属性封装了类中的一个值,而索引器 封装了一组值,使用索引器时,语法和使用数组一样 <<c#从入门到精…...

css伪类选择器、盒子模型等

一、伪类选择器 1.1查找单个元素 根据元素的结构关系查找元素 查找第一个元素&#xff1a;标签名:first-child 查找最后一个元素&#xff1a;标签名&#xff1a;last-child 查找第n个元素&#xff1a;标签名&#xff1a;nth-child(n) 1.2查找多个元素 :nth-child(公式&#xf…...

opencv-python图像增强三:图像清晰度增强

文章目录 一、简介&#xff1a;二、图像清晰度增强方案&#xff1a;三、算法实现步骤3.1高反差保留实现3.2. usm锐化3.3 Overlay叠加 四&#xff1a;整体代码实现五&#xff1a;效果 一、简介&#xff1a; 你是否有过这样的烦恼&#xff0c;拍出来的照片总是不够清晰&#xff…...

第130天:内网安全-横向移动PTH哈希PTT 票据PTK密匙Kerberos密码喷射

环境搭建 这里这个环境继续上一篇文章搭建的环境 案例一&#xff1a;域横向移动-PTH-Mimikatz&NTLM 什么是pth&#xff1f; PTH Pass The Hash &#xff0c;通过密码散列值 ( 通常是 NTLM Hash) 来进行攻击。在域环境中&#xff0c;用户登录计算机时使用的域账号&…...

SB3045LFCT-ASEMI无人机专用SB3045LFCT

编辑&#xff1a;ll SB3045LFCT-ASEMI无人机专用SB3045LFCT 型号&#xff1a;SB3045LFCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;30A 最大循环峰值反向电压&#xff08;VRRM&…...

RPA财务机器人是什么,RPA的具体应用场景有哪些?| 实在RPA研究

数字化转型关键期&#xff0c;越来越多的人工智能及超自动化技术在企业财务工作中得以普及应用&#xff0c;以提升财务工作效率&#xff0c;促进财务部门实现 RPA财务机器人是什么&#xff1f; RPA&#xff0c;即机器人流程自动化&#xff08;Robotic Process Automation&#…...

滑动窗口 | Java | (hot100) 力扣 3

力扣 3.无重复字符的最长子串 暴力法&#xff1a;双层for循环&#xff0c;i-j的字符查重 滑动窗口&#xff1a;因为这题被分在这个类别里&#xff0c;那么已知要用滑动窗口&#xff0c;思路应该是什么。 反正我想不出来…… 看了别人的题解写出来的出错点&#xff1a;特别容易…...

【产品经理】竞品分析怎么理解?拆解一下

什么叫竞品&#xff1f;&#xff08;研究的对象&#xff09; 竞品看你怎么理解&#xff0c;有时候不一定是你的竞争对手&#xff0c;有可能是其他行业也做了这个功能&#xff0c;那你也可以学习&#xff0c;有类似的功能或者策略都可以学习&#xff0c;不过这个可能在管理学上…...

合规性导航:处理爬虫数据用于机器学习的最佳实践

在数据驱动的时代&#xff0c;机器学习已成为企业和研究者的重要工具。然而&#xff0c;使用爬虫技术抓取的数据进行机器学习时&#xff0c;合规性问题不容忽视。本文将详细探讨在使用爬虫抓取的数据进行机器学习时可能遇到的合规性问题&#xff0c;并提供相应的最佳实践。 一…...

spring中使用到的设计模式有哪些

Spring 框架是一个高度模块化和灵活的框架&#xff0c;广泛使用了各种设计模式来实现其核心功能和架构。这些设计模式帮助 Spring 提供了高可配置性、可扩展性和可维护性。以下是 Spring 框架中使用到的一些关键设计模式&#xff1a;...

splitcontainer控件设置固定大小

要设置SplitContainer控件以固定的大小&#xff0c;可以通过设置SplitContainer的FixedPanel属性来实现。您还需要设置IsSplitterFixed属性为true来锁定分割条的大小&#xff0c;并且通过设置SplitterWidth或SplitterLength属性来调整分割条的宽度或高度。 以下是一个示例代码…...

最近在写的支付模块

最近再写支付模块就到处借鉴 旨在回顾一下。 1.确认订单功能 使用场景是&#xff1a;用户在选择好购物车后&#xff0c;或者是直接选择商品后&#xff08;选择商品封装为购物车&#xff09; 这样做是根据尚硅谷来学习的 目前需要这些属性&#xff0c;原因是在确认订单页面后…...

解决域名加别名后再代理或者映射到fastadmin项目

如果遇到微应用不想再添加或者不方便添加单独的二级域名时&#xff0c;就需要用到代理或者映射来进入到我们的微应用项目中。 可以修改route.php路由文件的下面这个参数 __alias__ > [别名 > 模块/控制器] 如图 然后再修改config.php文件里面的view_replace_str参数…...

Armv9.5架构新增的关键扩展--精简版

Armv9.5架构扩展是对Armv9.4的扩展。它增加了强制性和可选的架构特性。有些特性必须一起实现。实现是符合Armv9.5规范,需要满足以下条件: 符合/兼容Armv9.4规范包含所有Armv9.5架构的强制性特性。符合Armv9.5规范的实现还可以包括: Armv9.5的可选特性以下是arm9.5架构中关键…...

STM32 GPIO 模块

B站视频地址&#xff1a;芯片内部GPIO模块细节 引脚 将 STM32 芯片&#xff0c;类比为【大脑】 而旁边的引脚&#xff0c;类比为【神经】 通过引脚&#xff0c;使得&#xff0c;STM32&#xff0c;可以和外部世界&#xff0c;进行交流 比如&#xff0c;当我们和别人说话时&am…...

网络剪枝——network-slimming 项目复现

目录 文章目录 目录网络剪枝——network-slimming 项目复现clone 存储库Baselinevgg训练结果 resnet训练结果 densenet训练结果 Sparsityvgg训练结果 resnet训练结果 densenet训练结果 Prunevgg命令结果 resnet命令结果 densenet命令结果 Fine-tunevgg训练结果 resnet训练结果 …...

Spring 懒加载的实际应用

引言 在 Spring 框架中&#xff0c;懒加载机制允许你在应用程序运行时延迟加载 Bean。这意味着 Bean 只会在第一次被请求时才实例化&#xff0c;而不是在应用程序启动时就立即创建。这种机制可以提高应用程序的启动速度&#xff0c;并节省内存资源。 Spring 的懒加载机制 懒…...

PyQT 串口改动每次点开时更新串口信息

class MainWindow(QWidget, Ui_Form):def __init__(self):super().__init__(parentNone)self.setupUi(self)self.comboBox.installEventFilter(self) # 加载事件过滤器self.comboBox.addItems(get_ports())def eventFilter(self, obj, event): # 定义事件过滤器if isinstance(o…...

三级_网络技术_19_路由器的配置及使用

1.在Cisco路由器上配置DHCP服务&#xff0c;使得客户端可以分配到的地址范围是222.28.71.2-222.28.71.200地址租用时间是2小时30分钟&#xff0c;不记录地址冲突日志默认路由是222.28.71.1&#xff0c;分配的dns服务器地址是222.28126.27和222.28.126.26。以下配置完全正确的是…...

【STM32 Blue Pill编程】-STM32CubeIDE开发环境搭建与点亮LED

开发环境搭建与点亮LED 文章目录 开发环境搭建与点亮LED1、STM32F103C8T6及STM32 Blue Pill 介绍2、下载并安装STM32CubeIDE3、编程并点亮LED3.1 在Stm32CubeIDE中编写第一个STM32程序3.1.1 创建项目3.1.2 设备配置3.1.2.1 系统时钟配置3.1.2.2 系统调试配置3.1.2.3 GPIO配置3.…...

【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)

三、基本操作 文章目录 三、基本操作1.图的遍历1.1 深度优先遍历DFS1.1.1 DFS算法1.1.2 DFS算法的性能分析1.1.3 深度优先的生成树和生成森林 1.2 广度优先遍历BFS1.2.1 BFS算法1.2.2 BFS算法性能分析1.2.3 广度优先的生成树和生成森林 1.3 图的遍历与图的连通性 1.图的遍历 图…...

29、号外!号外!ERA5再分析数据下载方式更新啦

文章目录 1. 前言2. 账号注册与协议签署2.1 账号注册2.2 签署CDS-Beta使用条款2.3 更新.cdsapi文件 3. 常见问题与解决方法&#xff08;持续更新中&#xff09;3.1 问题1&#xff1a;更新完.cdsapi文件之后&#xff0c;原有下载代码不可以使用3.2 问题2: RuntimeError: 403 Cli…...

智能识别,2024年SD卡数据恢复软件的智能进化

除了手机之外现在有不少的设备还是依靠SD卡来存储数据&#xff0c;比如相机、摄像头、无人机等。有的时候会因为一些意外的情况导致数据丢失&#xff0c;那是真的丢失了吗&#xff1f;大部分情况还是可以依靠sd卡数据恢复工具来找回这些“消失”的数据哦。 1.福昕数据恢复 链…...

浙大数据结构慕课课后题(04-树5 Root of AVL Tree)

题目要求&#xff1a; AVL 树是一种自平衡的二叉搜索树。在 AVL 树中&#xff0c;任何节点的两个子子树的高度最多相差一;如果在任何时候它们相差不止一&#xff0c;则进行重新平衡以恢复此属性。图 1-4 说明了旋转规则。 图1 图2 图3 图4 现在给定一系列插入&#xff0c;您应该…...