目录

 前期准备

一、JDK的安装

1、安装jdk

2、配置Java环境变量 

 3、加载环境变量

4、进行校验

二、hadoop的环境搭建

1、hadoop的下载安装 

2、配置文件设置

2.1. 配置 hadoop-env.sh

2.2. 配置 core-site.xml

2.3. 配置 hdfs-site.xml

2.4. 配置 yarn-site.xml

2.5. 配置 mapred-site.xml

 3、Hdfs格式化 

4、启动hdfs

5、访问HDFS系统

 6、启动yarn

7、访问Yarn平台页面

8、Hadoop的集群模式(伪分布式省略)

8.1.集群规划

8.2.设置免密登陆

8.3.修改hdfs-site.xml

8.4.修改workers

8.5.修改mapred-site.xml

8.6.修改yarn-site.xml

8.7.分发文件

8.8.停止服务删除目录

8.9.重启服务

三、msyql安装

1、卸载旧MySQL文件

2、Mysql下载安装

3、配置环境变量 

4、删除用户组

5、创建用户和组

6、创建文件夹

7、更改权限

8、安装依赖包

9、初始化

10、记住初始密码

11、将mysql加入到服务中

12、配置文件

(1)Mysql5.X版本配置

(2)Mysql8.X版本配置 

13、设置开机启动

14、并查看进程

15、创建软连接

16、登录 Mysql

17、修改密码

(1)Mysql5.X版本修改密码

(2)Mysql8.X版本修改密码

18、授权

(1)Mysql5.X版本授权

(2)Mysql8.X版本授权

四、HIve安装 

1、下载安装

2、配置环境变量

3、配置文件

4、拷贝jar包

5、初始化

6、启动hive

五、问题与说明:


 前期准备

查看网卡:

配置静态IP

vi /etc/sysconfig/network-scripts/ifcfg-ens32  ----  根据自己网卡设置。

设置主机名

hostnamectl --static set-hostname  主机名

例如:

hostnamectl --static set-hostname  hadoop001

配置IP与主机名映射

vi /etc/hosts

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

配置免密登录

传送门

一、JDK的安装

1、安装jdk

在/opt/model中上传jdk包并解压

tar -zxvf jdk-8u151-linux-x64.tar.gz

重命名,方便配置环境变量,避免更换jdk版本修改配置文件

2、配置Java环境变量 

系统级(全局)

/etc/profile,   /etc/bash.bashrc,   /etc/bashrc

对所有用户生效

用户级(个人)

~/.bash_profile,  ~/.bashrc,  ~/.profile

只对当前用户生效

/etc/profile

✅ 几乎所有 Linux/Unix 系统都有

Ubuntu、CentOS、macOS 等

/etc/bashrc

✅ CentOS/RHEL 系统使用

CentOS、RHEL、Fedora

/etc/bash.bashrc

✅ Ubuntu 使用

Ubuntu、Debian

~/.bash_profile

✅ 用户可创建

所有支持 Bash 的系统

~/.profile

✅ Ubuntu 默认生成

Ubuntu、Debian

~/.bashrc

✅ 用户级 shell 配置

所有支持 Bash 的系统

vi  /etc/profile

export JAVA_HOME=/opt/module/java  #此处是自己实际的Java安装路径

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

 3、加载环境变量

source /etc/profile

验证环境变量是否生效:

env | grep HOME

env | grep PATH

4、进行校验

二、hadoop的环境搭建

1、hadoop的下载安装 

1.1. 下载

https://archive.apache.org/dist/hadoop/common/hadoop-3.2.2/
​下载 hadoop-3.2.2.tar.gz  安装包

1.2 上传
使用xshell上传到指定安装路径

此处是安装路径是 /opt/module

1.3 解压重命名

tar -xzvf hadoop-3.2.2.tar.gz

mv hadoop-3.2.2 hadoop

1.4 配置环境变量

vi  /etc/profile

export JAVA_HOME=/opt/module/java

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/opt/module/hadoop

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

1.5 加载环境变量

source  /etc/profile

验证环境变量是否生效:

env | grep HOME

env | grep PATH

1.6检验安装

hadoop version

出现下图说明安装成功

2、配置文件设置

2.1. 配置 hadoop-env.sh

hadoop伪分布式配置

export HADOOP_OS_TYPE=${HADOOP_OS_TYPE:-$(uname -s)}
export JAVA_HOME=/opt/module/java

2.2. 配置 core-site.xml

<configuration>
    <!-- 指定HDFS中NameNode的地址 默认 9000端口-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop001:9000</value>
        <description>配置NameNode的URL</description>
    </property>

    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop/data</value>
    </property>

    配置hive内容(下面要安装hive,因此需要增加下面内容,否则不添加
    <!-- 配置允许哪些主机上的程序可以以root身份发起代理请求 -->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>

   <!-- 配置允许哪些组的用户可以以root身份发起代理请求 -->
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>

    <!-- 配置允许哪些具体用户可以以root身份发起代理请求-->
    <property>
        <name>hadoop.proxyuser.root.users</name>
        <value>*</value>
    </property>
</configuration>

2.3. 配置 hdfs-site.xml

<configuration>
    <!-- 数据的副本数量 如果是完全分布式的集群模式,则改为3 --> 
    <property> 
        <name>dfs.replication</name> 
        <value>1</value> 
    </property> 
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
      <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/module/hadoop/data/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/module/hadoop/data/datanode</value>
    </property>
    <!--设置权限为false-->
    <property>
        <name>dfs.permissions.enabled </name>
        <value>false</value>
    </property>


    <!-- hdfs的web管理页面的端口 -->
    <property>
        <name>dfs.http.address</name>
        <value>hadoop001:9870</value>
    </property>
    <!-- 设置secondname的端口,如果是完全分布式的集群模式,则改为hadoop003 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop001:6002</value>
    </property>
</configuration>

2.4. 配置 yarn-site.xml

<configuration>
    <!-- 指定MR走shuffle -->
    <!-- NodeManager 上运行的辅助服务(auxiliary services),用于支持 MapReduce 的 shuffle 阶段 -->
    <!-- 必须启用才能让 YARN 支持 MapReduce 的 shuffle 功能 -->
    <!-- 如果你使用的是 Spark 或其他框架,可能不需要这个配置 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    
    <!-- 指定ResourceManager的地址-->
    <!-- NodeManager 和 ApplicationMaster 会通过该主机名连接到 ResourceManager-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop001</value>
    </property>
    
    <!-- 环境变量的继承 -->
    <!-- 允许传递给容器的环境变量白名单 -->
    <!-- 设置哪些环境变量可以从 NodeManager 传递给启动的应用程序容器(Container) -->
    <!-- 默认情况下,YARN 容器不会继承所有的系统环境变量 -->
    <!-- 为了保证任务能正常运行,需要将必要的环境变量加入白名单 -->
    <!-- 常见如 JAVA_HOME、Hadoop 相关路径等,都是应用程序运行所必需的 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
    
    <!--yarn单个容器允许分配的最大最小内存 -->
    <!--如果应用请求的内存小于这个值,YARN 会自动将其提升为这个最小值 -->
    <!--示例:如果某个任务只申请 100 MB,但设置了最小为 512,则实际分配 512 MB -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <!--如果应用请求的内存超过这个值,YARN 会拒绝该请求 -->
    <!--这个值不能超过 NodeManager 的总内存容量-->
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>
    
    <!-- yarn容器允许管理的物理内存大小 -->
    <!-- 指定当前 NodeManager 节点可提供给容器使用的最大物理内存总量(单位:MB)-->
    <!-- 这个值决定了该节点最多能运行多少个容器,取决于每个容器的内存需求。-->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
    
    <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
    <!-- 是否启用对容器使用的物理内存 进行检查 -->
    <!-- 设为 true,YARN 会在容器超出其申请的物理内存时终止它 -->
    <!-- 防止某些任务占用过多内存导致整个节点崩溃。 -->
    <!-- 推荐生产环境中保持为 true。 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>true</value>
    </property>
    
    <!-- 是否开启虚拟内存检查 -->
    <!-- 若设为 true,YARN 会检查虚拟内存使用情况并可能杀掉超限任务 -->
    <!-- 有时虚拟内存使用较高是正常的(例如 JVM),所以部分场景下建议关闭此功能 设为Flase -->
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

2.5. 配置 mapred-site.xml

<configuration>
    <!-- mr程序默认运行方式。yarn集群模式 local本地模式-->

    <!-- 设置 MapReduce 应用程序的执行框架为 YARN 即 MR运行的资源调度模式--->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>

   <!-- 以下可以不用配置,作为了解内容

   当 YARN 启动 MapReduce (ApplicationMaster、MapTask、ReduceTask)进程提供一致的环境变量,确保找到 MapReduce 的依赖库和资源路径。-->
    <!-- MR App Master环境变量。用于告诉 ApplicationMaster 去哪里找 MapReduce 相关的 JAR 包或脚本-->
    <property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <!-- 为每个 MR 的 MapTask 设置环境变量。-->
    <property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <!-- 为每个 MR 的 ReduceTask 设置环境变量。-->
    <property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

 3、Hdfs格式化 

cd /opt/module/hadoop/

bin/hdfs  namenode  -format

下图表示初始化成功

4、启动hdfs

启动hdfs分布式文件系统

cd /opt/module//hadoop/sbin

>> start-dfs.sh

使用 jps 查看启动进程

5、访问HDFS系统

访问HDFS分布式文件系统的web页面,如:http://192.168.200.130:9870/

 6、启动yarn

启动Yarn进程。

cd /opt/module/hadoop/sbin

>> start-yarn.sh

使用 jps 查看启动进程

7、访问Yarn平台页面

访问hadoop分布式yarn页面,如:http://192.168.200.130:8088/

8、Hadoop的集群模式(伪分布式省略)

      如果是伪分布式模式,此过程可以省略。

8.1.集群规划

      模块

hadoop001

hadoop002

hadoop003

HDFS子进程

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN子进程

NodeManager

ResourceManager

NodeManager

NodeManager

8.2.设置免密登陆

     配置集群免密登录

传送门

8.3.修改hdfs-site.xml

      修改数据的副本数量
      secondname的主机设置(可选)

    <!-- 数据的副本数量 改为3 --> 
    <property> 
        <name>dfs.replication</name> 
        <value>3</value> 
    </property> 

    <!--可选  对于学习来说,可以不改。但实际生产过时会将其规划到  hadoop003 -->

    <!-- 设置secondname的端口,完全分布式的集群模式,改为hadoop003 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop003:6002</value>
    </property>

8.4.修改workers

      将原来的localhost改为节点主机名

hadoop001

hadoop002

hadoop003

8.5.修改mapred-site.xml

       配置历史服务器(可选)

<!-- 历史服务器端地址 -->

<property>

    <name>mapreduce.jobhistory.address</name>

    <value>hadoop001:10020</value>

</property>

<!-- 历史服务器web端地址 -->

<property>

    <name>mapreduce.jobhistory.webapp.address</name>

    <value>hadoop001:19888</value>

</property>

8.6.修改yarn-site.xml

     指定ResourceManager的地址:对于目前学习来说不改也可以,但在实际生产过程中 resourcemanager 和 namenode是在不同主机上,避免生产过程中资源不足导致内存溢出情况。

     指定ResourceManager的地址(可选)
     配置日志的聚集(可选)

<!-- 可选  指定ResourceManager的地址-->
<!-- NodeManager 和 ApplicationMaster 会通过该主机名连接到 ResourceManager-->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop002</value>
</property>

<!-- 开启日志聚集功能 -->

<property>

    <name>yarn.log-aggregation-enable</name>

    <value>true</value>

</property>

<!-- 设置日志聚集服务器地址 -->

<property>  

    <name>yarn.log.server.url</name>  

    <value>http://hadoop001:19888/jobhistory/logs</value>

</property>

<!-- 设置日志保留时间为7天 -->

<property>

    <name>yarn.log-aggregation.retain-seconds</name>

    <value>604800</value>

</property>

8.7.分发文件

注意:在分发文件前要做好三台机器的IP与主机名映射 /etc/hosts 

进行分发文件

scp -r /opt/module/hadoop root@hadoop002:/opt/module/hadoop

scp -r /opt/module/hadoop root@hadoop003:/opt/module/hadoop

scp -r /opt/module/java root@hadoop002:/opt/module/java

scp -r /opt/module/java root@hadoop003:/opt/module/java

scp -r /etc/profile root@hadoop002:/etc/profile

scp -r /etc/profile root@hadoop003:/etc/profile

让三台机器文件生效

ssh hadoop001;source /etcprofile;
ssh hadoop002;source /etcprofile;
ssh hadoop003;source /etcprofile;

ssh hadoop001;

8.8.停止服务删除目录

      停止服务

cd /opt/module/hadoop/sbin

>> stop-all.sh

      删除格式化后的目录重新格式化

rm -rf /opt/module/hadoop/data

rm -rf /opt/module/hadoop/logs/*

/opt/module/hadoop/bin/hdfs namenode -format

8.9.重启服务

在hadoop001 上启动HDFS

cd /opt/module/hadoop/sbin

>> start-dfs.sh

在hadoop002 上启动YARN

cd /opt/module/hadoop/sbin

>> start-yarn.sh

群起脚本:

touch /usr/bin/hdall.sh

chmod 777 /usr/bin/hdall.sh

vi /usr/bin/hdall.sh

#!/bin/bash
if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi
case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop001 "/opt/module/hadoop/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop002 "/opt/module/hadoop/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop001 "/opt/module/hadoop/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop001 "/opt/module/hadoop/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop002 "/opt/module/hadoop/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop001 "/opt/module/hadoop/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

群起:/usr/bin/hdall.sh start

群停:/usr/bin/hdall.sh stop

如果:ResourceManager的地址和secondname的地址都是hadoop001,则在hadoop001 上启动HDFS和YARN

cd /opt/module/hadoop/sbin

>> start-all.sh

三、msyql安装

1、卸载旧MySQL文件

若之前安装过其他的sql执行这个步骤。

执行命令 
    # yum remove mysql mysql-server mysql-lib mysql-server
•再查看当前安装mysql的情况看卸载情况:
    # rpm -qa|grep -i mysql
可以看到之前安装的包,然后执行删除命令,全部删除
    # rpm -ev MySQL-devel--5.1.52-1.el6.i686 --nodeps
•查找之前老版本MySQL的目录,并删除老版本的MySQL的文件和库
    # find / -name mysql
删除查找到的所有目录
#例如:rm -rf /run/lock/subsys/mysql    
#例如: rm -rf /etc/selinux/targeted/active/modules/100/mysql    # rm -rf /var/lib/mysql
•手动删除/etc/my.cnf
    # rm -rf /etc/my.cnf
•再次查询如果无,则删除干净
    # rpm -qa|grep -i mysql

删除 mariadb
 rpm -qa|grep mariadb 
 rpm -e --nodeps mariadb-libs
 rpm -e --nodeps mysql-libs-5.1.52-1.el6_0.1.x86_64

2、Mysql下载安装

1.1 下载

官网网址:MySQL :: Download MySQL Community Server

在这里下载的是如下版本的mysql
https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

1.2 上传

使用xshell上传到到linux服务器指定安装路径

此处是安装路径是 /usr/local

1.3 解压重命名

cd  /usr/local/

# 如果是xz结尾压缩包用  tar -xvJf,如  tar -xvJf  mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz

重命令

tar -xzvf  mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql

3、配置环境变量 

vim /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin

使环境生效
source /etc/profile

4、删除用户组

删除用户组
cat /etc/group|grep mysql

userdel mysql
groupdel mysql

5、创建用户和组

groupadd mysql
useradd -r -g mysql mysql

6、创建文件夹

mkdir /usr/local/mysql/data

7、更改权限

更改mysql目录下所有的目录及文件夹所属的用户组和用户,以及赋予可执行权限

chown -R mysql:mysql /usr/local/mysql/data/

chmod -R 755 /usr/local/mysql/data/
chown -R mysql:mysql /usr/local/mysql/
chmod -R 755 /usr/local/mysql/

8、安装依赖包

安装mysql的依赖包

yum install libaio 

或者

yum install -y mariadb-server 安装mariadb-server 5.X版本使用

9、初始化

执行初始化命令:

/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --initialize

#说明

–initialize 初始化(真正开始干活)
–user=mysql 以mysql用户的身份初始化数据库,产生文件都是mysql作为拥有者
–basedir=xxx mysql其安装目录,非常重要
–lower_case_table_names=1 不区分大小写,如果初始化不指定,必须重装才能解决,非常重要

10、记住初始密码

11、将mysql加入到服务中

复制
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

#注意:默认情况下,GBLIC版本的数据库要求安装到/usr/local/mysql目录,其mysql.server脚本中对应的目录也是/usr/local/mysql,这会导致mysql无法启动。所以可以更改其basedir以及datadir两个变量,我们后面在 my.cnf 中配置。

#赋予可执行权限
chmod +x /etc/init.d/mysql
 #添加服务    
chkconfig --add mysql
 #显示服务列表   
chkconfig --list mysql

12、配置文件

(1)Mysql5.X版本配置

         Mysql是5.x版本使用此配置

vi /etc/my.cnf

[mysqld]
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysqld.sock
#character config
character_set_server=utf8mb4
explicit_defaults_for_timestamp=true 

(2)Mysql8.X版本配置 

         Mysql是8.x版本使用此配置

8.0版

注意:使用配置前一定要创建好目录

mkdir /usr/local/mysql/tmp

mkdir /usr/local/mysql/log

touch /usr/local/mysql/log/mysqld_safe.err

chown -R mysql:mysql /usr/local/mysql/tmp

chown -R mysql:mysql /usr/local/mysql/log

chown -R mysql:mysql /usr/local/mysql/log/mysqld_safe.err

简单配置(推荐)

vi /etc/my.cnf

[mysql]
user=mysql
default-character-set=utf8
socket=/usr/local/mysql/tmp/mysql.sock

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/tmp/mysql.sock
user=mysql
log_timestamps=SYSTEM
collation-server = utf8_unicode_ci
character-set-server = utf8
default_authentication_plugin= mysql_native_password

[mysqld_safe]
log-error=/usr/local/mysql/log/mysqld_safe.err
pid-file=/usr/local/mysql/tmp/mysqld.pid

13、设置开机启动

设置开机启动:chkconfig mysql on

启动mysql :service mysql start

如果碰到下面问题可以进行参考

问题报错解决方案

启动报错:

Starting MySQL.2023-06-25T04:58:08.333370Z mysqld_safe error: log-error set to ‘/usr/local/mysql/log/mysqld_safe.err’, however file don’t exists. Create writable for user ‘mysql’.
ERROR! The server quit without updating PID file (/usr/local/mysql/pid/mysqld.pid).

解决方案
[root@mysql]# touch /usr/local/mysql/log/mysqld_safe.err
[root@mysql]# chown -R mysql:mysql /usr/local/mysql/log/mysqld_safe.err

启动报错:
my_print_defaults: [Warning] World-writable config file ‘/usr/local/mysql/my.cnf’ is ignored.
Starting MySQL.my_print_defaults: [Warning] World-writable config file ‘/usr/local/mysql/my.cnf’ is ignored.
my_print_defaults: [Warning] World-writable config file ‘/usr/local/mysql/my.cnf’ is ignored.
ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid).

解决方案

/etc/my.cnf 权限给的是 777,需要改成644,再次重新启动即可。

14、并查看进程

查看进程与状态:

ps -ef|grep mysql;

service mysql status; 

15、创建软连接

ln -s /usr/local/mysql/bin/mysql /usr/bin

16、登录 Mysql

mysql -uroot -p

    输入密码(初始化时候的密码)

注意:如果输入密码报错

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

解决方案

修改配置文件my.cnf 中 socket = /usr/local/mysql/tmp/mysql.sock,并重启mysql:service mysql restart;

17、修改密码

(1)Mysql5.X版本修改密码

         Mysql是5.x版本使用此方式修改密码

8.0以下修改密码

修改密码

use mysql;

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword');

flush privileges;

(2)Mysql8.X版本修改密码

         Mysql是8.x版本使用此方式修改密码

8.0以上修改密码

alter user "root"@"localhost" identified by "root";

use mysql;
UPDATE user SET authentication_string="" WHERE user="root";
FLUSH PRIVILEGES; 
update user set Host="%" where User="root";
flush privileges;
alter user "root"@"%" identified by "root";
flush privileges;

说明:

  • UPDATE user SET authentication_string="" WHERE user="root"; 更新user表,将用户名为root的用户的authentication_string字段设置为空字符串。实际上是在清空root用户的密码。
  • update user set Host="%" where User="root"; 更新user表,它将用户名为root的用户的Host字段设置为%。即root用户可以从任何主机进行连接。默认情况下,root用户可能只能从localhost进行连接。
  • alter user "root"@"%" identified by "root"; 更改用户的认证信息。它指定了用户名为root且来源主机为任意主机(%)的用户,并将其密码设置为root。这是在新版本的MySQL中设置或更改用户密码的推荐方式。

18、授权

(1)Mysql5.X版本授权

         Mysql是5.x版本使用此方式授权

授权

8.0以下授权:登录后执行下面命令
grant all privileges on *.* to 'root'@'%' identified by '密码123456' with grant option;
flush privileges;

说明:

  • all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
  • on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
  • to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”yangxin”@”192.168.0.%”,表示yangxin这个用户只能在192.168.0IP段登录
  • identified by:指定用户的登录密码

(2)Mysql8.X版本授权

         Mysql是8.x版本使用此方式授权

8.0以上授权

为了用 navicate工具 访问数据库,进行以下设置进行授权:

use mysql;

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

flush privileges;

说明:

  • ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';   #还原密码验证插件,将MySQL8的密码认证插件由caching_sha2_password更换成mysql_native_password

四、HIve安装 

1、下载安装

1.1下载

下载地址:http://archive.apache.org/dist/hive/

我们选择apache-hive-3.1.3-bin.tar.gz版本学习

1.2 上传

1.3 解压重命名

2、配置环境变量

vi /etc/profile 
export HIVE_HOME=/opt/lmodule/hive

export PATH=$PATH:$HIVE_HOME/bin

刷新配置
source /etc/profile 

3、配置文件

配置hive-env.sh  (位置:/opt/mudule/hive/conf)

# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/opt/module/hadoop

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/opt/module/hive/conf

#Folder containing extra libraries required for hive compilation/execution can be controlled:
export HIVE_AUX_JARS_PATH=/opt/module/hive/lib

配置hive-site.xml  (位置:/opt/mudule/hive/conf) (直连模式配置)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!--MySQL信息-->
    <!--数据库连接地址配置-->

  <property>
    <name>javax.jdo.option.ConnectionURL</name>

    注意:下面的&要变为“&加上amp;” 形式
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true</value>


  </property>
    <!--数据库驱动配置注意:mysql5.x与mysql8.x不同-->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
  </property>
    <!--Hive表数据存储在HDFS路径-->
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
    <!--hive的临时数据目录,指定的位置在hdfs上的目录可以不指定有默认目录-->
  <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
  </property>

   <!-- 直接连接模式使用下面配置,初学者推荐-->
    <!--指定HiveServer2所在的host,改为自己主机名-->
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>hadoop001</value>
  </property>
    <!--指定HiveServer2所在的端口hs2端口默认是10000-->
  <property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
  </property>
    <!--指定HDFS系统-->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop001:9000</value>
  </property>


    <!--不强制执行Metastore模式版本的一致性检查,默认值是true-->
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>

    <!-- 启用本地模式自动切换 -->
    <property>
      <name>hive.exec.mode.local.auto</name>
      <value>true</value>
      <description>Whether to automatically switch to local mode if the input file size is below threshold.</description>
    </property>
  
    <!-- 启用本地模式自动切换 -->
    <property>
      <name>hive.exec.mode.local.auto.inputbytes.max</name>
      <value>50000000</value>
      <description>Maximum input size (in bytes) for auto-local mode.</description>
    </property>
  
    <!-- 设置最大输入文件数量(5个) -->
    <property>
      <name>hive.exec.mode.local.auto.input.files.max</name>
      <value>5</value>
      <description>Maximum number of input files for auto-local mode.</description>
    </property>
</configuration>

说明:

   当执行一些复杂sql会报错,下面是问题和解决方案
   问题:
   Query ID = root_20230914161708_a293bd1f-62bb-4a28-a477-97f71fc745b4
   Total jobs = 3
   Launching Job 1 out of 3
   Number of reduce tasks determined at compile time: 1
   In order to change the average load for a reducer (in bytes):
     set hive.exec.reducers.bytes.per.reducer=<number>
   In order to limit the maximum number of reducers:
     set hive.exec.reducers.max=<number>
   In order to set a constant number of reducers:
     set mapreduce.job.reduces=<number>
   

   前面配置的一下几项是解决问题的配置;

    <!-- 启用本地模式自动切换 -->
    <property>
      <name>hive.exec.mode.local.auto</name>
      <value>true</value>
      <description>Whether to automatically switch to local mode if the input file size is below threshold.</description>
    </property>
  
    <!-- 设置输入数据量最大字节数(50MB) -->
    <property>
      <name>hive.exec.mode.local.auto.inputbytes.max</name>
      <value>50000000</value>
      <description>Maximum input size (in bytes) for auto-local mode.</description>
    </property>
  
    <!-- 设置最大输入文件数量(5个) -->
    <property>
      <name>hive.exec.mode.local.auto.input.files.max</name>
      <value>5</value>
      <description>Maximum number of input files for auto-local mode.</description>
    </property>

配置hive-log4j2.properties  (位置:/opt/mudule/hive/conf)

此步骤可以跳过,不配置也可以。

cd /opt/mudule/hive/conf

cp hive-log4j2.properties.template hive-log4j2.properties

vi hive-log4j2.properties

property.hive.log.dir = /opt/module/hive/logs

4、拷贝jar包

4.1 解压驱动(如果有jar包,直接上传此步省略)

      需要提前现在对应的驱动包,并解压

4.2 拷贝mysql驱动

   cp mysql-connector-java-8.0.30.jar /opt/module/hive/lib/ 

4.2 拷贝guava包

   #hadoop和hive里面的guava包版本可能不一致,那么用hadoop里面的覆盖掉hive里面的
   cp /opt/module/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /opt/module/hive/lib/

   #删除hive的旧依赖包:

   rm -rf /opt/module/hive/lib/guava-19.0.jar

4.3 删除 hive中的 log4j

     删除 Hive 的lib目录中包含log4j-slf4j-impl-2.17.1.jar

     rm -rf /opt/module/hive/lib/log4j-slf4j-impl-2.17.1.jar

5、初始化

5.1 启动msyql

     # 先查看mysql是否启动

      sudo systemctl status mysql

      #未启动则进行启动

      service mysql start

5.2 启动hadoop

      #进入hadoop安装目录启动hadoop

      cd /opt/module/hadoop/

      sbin/start-all.sh

5.3 初始化hive

      #进入hive安装目录

      cd /opt/module/hive

      #执行初始化命令,#初始化Hive
      bin/schematool -dbType mysql -initSchema

       初始化成功

6、启动hive

启动hive
# 启动HiveServer2(直连模式只需启动这一个服务,无需启动MetaStore)
hive --service hiveserver2 > $HIVE_HOME/hiveserver2.log 2>&1 &

验证测试:

jps | grep HiveServer2
netstat -nlp | grep 10000

测试连接:
# 方式1:直接进入beeline

#进入hive安装目录

cd /opt/module/hive

#使用命令验证hive是否安装成功

bin/hive

#进入hive shell,使用 show databases; 查看数据,说明安装成功!

# 方式2:手动连接
beeline
beeline> !connect jdbc:hive://hadoop001:10000
# 用户名输入 root,密码直接回车(留空)​

# 测试命令
show databases;
create table remote_test (id int, name string) row format delimited fields terminated by '\t';
insert into remote_test values (1, 'remote'), (2, 'mode');
select * from remote_test;

五、远程服务模式配置(初学者忽略)

与 上面 Hive安装 所有安装步骤相同, 不同的是配置文件。

1、服务端hive-site.xml配置

在服务端例如是 hadoop001 上。hive-site.xml配置如下:
 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!--MySQL信息-->
    <!--数据库连接地址配置-->

  <property>
    <name>javax.jdo.option.ConnectionURL</name>

    注意:下面的&要变为“&加上amp;” 形式
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true</value>


  </property>
    <!--数据库驱动配置注意:mysql5.x与mysql8.x不同-->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
  </property>
    <!--Hive表数据存储在HDFS路径-->
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
    <!--hive的临时数据目录,指定的位置在hdfs上的目录可以不指定有默认目录-->
  <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
  </property>

   <!-- 远程服务模式 开始-->

    <!-- MetaStore服务绑定地址和端口(客户端通过此地址连接) -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://h1:9083</value>
    </property>
    
    <!-- HiveServer2绑定地址和端口 -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>h1</value>
    </property>
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>

   <!-- 远程服务模式 结束-->

 
    <!--不强制执行Metastore模式版本的一致性检查,默认值是true-->
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>

    <!-- 启用本地模式自动切换 -->
    <property>
      <name>hive.exec.mode.local.auto</name>
      <value>true</value>
      <description>Whether to automatically switch to local mode if the input file size is below threshold.</description>
    </property>
  
    <!-- 启用本地模式自动切换 -->
    <property>
      <name>hive.exec.mode.local.auto.inputbytes.max</name>
      <value>50000000</value>
      <description>Maximum input size (in bytes) for auto-local mode.</description>
    </property>
  
    <!-- 设置最大输入文件数量(5个) -->
    <property>
      <name>hive.exec.mode.local.auto.input.files.max</name>
      <value>5</value>
      <description>Maximum number of input files for auto-local mode.</description>
    </property>
</configuration>

2、服务端启动

在服务端例如是 hadoop001 上。hive-site.xml配置如下

# 启动MetaStore服务(关键!远程模式必须启动)
hive --service metastore > $HIVE_HOME/metastore.log 2>&1 &

# 启动HiveServer2服务
hive --service hiveserver2 > $HIVE_HOME/hiveserver2.log 2>&1 &

# 验证进程
jps | grep -E "MetaStore|HiveServer2"
# 应看到 MetaStore 和 HiveServer2 两个进程

3、客户端hive-site.xml配置

        拷贝Hive的安装目录到客户端 hadoop002 节点上的同目录下,并配置环境变量。

在客户务端例如是 hadoop002 上。hive-site.xml配置如下:

<configuration>
    <!-- 客户端只需配置MetaStore服务地址,无需任何MySQL信息! -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop001:9083</value>
    </property>
    
    <!-- 可选:如果客户端也需要提交作业,配置HiveServer2地址 -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>hadoop001</value>
    </property>
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>
</configuration>

4、客户端测试

在客户务端例如是 hadoop002 上。hive-site.xml配置如下:

# 在hadoop002节点执行

# 方式1:直接进入beeline
hive

# 方式2:手动连接
beeline
beeline> !connect jdbc:hive://hadoop001:10000
# 用户名:root,密码:直接回车

# 测试命令
show databases;
create table remote_test (id int, name string) row format delimited fields terminated by '\t';
insert into remote_test values (1, 'remote'), (2, 'mode');
select * from remote_test;

六、问题与说明:

安装 apache-hive-3.1.3-bin.tar.gz 配套 hadoop-3.2.2.tar.gz 可能会卡顿。如果卡顿,将 hadoop-3.2.2.tar.gz 换为 hadoop-3.0.0 或 hadoop-3.2.1 测试一下。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐