基于云服务器的数仓搭建-hive/spark安装

mysql本地安装

安装流程(内存占用200M,升至2.1G)

复制代码
# 将资料里mysql文件夹及里面所有内容上传到/opt/software/mysql目录下
mkdir /opt/software/mysql
cd /opt/software/mysql/
# 待上传文件
install_mysql.sh
mysql-community-client-8.0.31-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm
mysql-community-common-8.0.31-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.31-1.el7.x86_64.rpm
mysql-community-libs-8.0.31-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.31-1.el7.x86_64.rpm
mysql-community-server-8.0.31-1.el7.x86_64.rpm
mysql-connector-j-8.0.31.jar
# 阿里云服务器按照如下步骤执行
# 由于阿里云服务器安装的是Linux最小系统版,没有如下工具,所以需要安装
# 卸载MySQL依赖,虽然机器上没有装MySQL,但是这一步不可少
sudo yum remove mysql-libs
# 下载依赖并安装
sudo yum install libaio
sudo yum -y install autoconf
# 如果想检查下上述文件有无安装,执行
sudo yum list installed | grep libaio
sudo yum list installed | grep autoconf
# 切换到hadoop102的root用户
su root
# 执行/opt/software/mysql/目录下install_mysql.sh
vim install_mysql.sh
# 执行脚本
sh install_mysql.sh

mysql本地安装脚本

复制代码
install_mysql.sh
# 卸载MySQL
systemctl stop mysql mysqld 2>/dev/null
rpm -qa | grep -i 'mysql\|mariadb' | xargs -n1 rpm -e --nodeps 2>/dev/null
rm -rf /var/lib/mysql /var/log/mysqld.log /usr/lib64/mysql /etc/my.cnf /usr/my.cnf
set -e
# 安装并启动MySQL
yum install -y *.rpm >/dev/null 2>&1
systemctl start mysqld
#更改密码级别并重启MySQL
sed -i '/\[mysqld\]/avalidate_password.length=4\nvalidate_password.policy=0' /etc/my.cnf
systemctl restart mysqld
# 更改MySQL配置
tpass=$(cat /var/log/mysqld.log | grep "temporary password" | awk '{print $NF}')
cat << EOF | mysql -uroot -p"${tpass}" --connect-expired-password >/dev/null 2>&1
set password='000000';
update mysql.user set host='%' where user='root';
alter user 'root'@'%' identified with mysql_native_password by '000000';
flush privileges;
EOF

连接mysql

复制代码
# 通过MySQL可视化客户端连接数据库
# 创建数据库
# 设置数据库名称为gmall,编码为utf8mb4,排序规则为utf8mb4_general_ci
# 导入数据库结构脚本(gmall.sql)
经过上述安装后,可以通过临时密码6个0进入mysql
mysql -uroot -p000000
修改root密码,本地访问
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
其他主机也可访问,执行完后刷新,不刷新也能生效
ALTER USER 'root'@'%' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
查看都有哪些root用户,可能会存在localhost和%并存的情况,默认只有%
SELECT User, Host, authentication_string FROM mysql.user WHERE User = 'root';
修改为native连接方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'new_password';
退出
exit

hive安装

安装流程(内存占用400M,升至2.5G)

复制代码
把hive-3.1.3.tar.gz上传到linux的/opt/software目录下
解压hive-3.1.3.tar.gz到/opt/module/目录下面
tar -zxvf /opt/software/hive-3.1.3.tar.gz -C /opt/module/
修改hive-3.1.3-bin.tar.gz的名称为hive
mv /opt/module/apache-hive-3.1.3-bin/ /opt/module/hive
修改/etc/profile.d/my_env.sh,添加环境变量
sudo vim /etc/profile.d/my_env.sh
添加内容
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
source一下 /etc/profile.d/my_env.sh文件,使环境变量生效
source /etc/profile.d/my_env.sh
解决日志Jar包冲突,进入/opt/module/hive/lib目录
mv log4j-slf4j-impl-2.17.1.jar log4j-slf4j-impl-2.17.1.jar.bak
Hive元数据配置到MySQL(下个代码块)

Hive元数据配置到MySQL

复制代码
将MySQL的JDBC驱动拷贝到Hive的lib目录下
cp /opt/software/mysql/mysql-connector-j-8.0.31.jar /opt/module/hive/lib/
配置Metastore到MySQL
在$HIVE_HOME/conf目录下新建hive-site.xml文件
vim hive-site.xml
# 配置Hive保存元数据信息所需的 MySQL URL地址
# 配置Hive连接MySQL的驱动全类名
# 配置Hive连接MySQL的用户名
# 配置Hive连接MySQL的密码
启动Hive(下个代码块)

hive-site.xml

复制代码
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!--配置Hive保存元数据信息所需的 MySQL URL地址-->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop1:3306/metastore?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;allowPublicKeyRetrieval=true</value>
  </property>
  <!--配置Hive连接MySQL的驱动全类名-->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>
  <!--配置Hive连接MySQL的用户名 -->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <!--配置Hive连接MySQL的密码 -->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>password</value>
  </property>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>
  <property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
  </property>
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>hadoop1</value>
  </property>
  <property>
    <name>hive.metastore.event.db.notification.api.auth</name>
    <value>false</value>
  </property>
  <property>
    <name>hive.cli.print.header</name>
    <value>true</value>
  </property>
  <property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
  </property>
</configuration>

启动Hive

复制代码
# 初始化元数据库
# 登陆MySQL
mysql -uroot -p<pwd>
# 新建Hive元数据库
create database metastore;
# 初始化Hive元数据库(mysql外)
schematool -initSchema -dbType mysql -verbose
# 修改元数据库字符集
# Hive元数据库的字符集默认为Latin1,由于其不支持中文字符,所以建表语句中如果包含中文注释,会出现乱码现象
# 修改Hive元数据库中存储注释的字段的字符集为utf-8
use metastore;
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
# 表注释
alter table TABLE_PARAMS modify column PARAM_VALUE mediumtext character set utf8;
# 退出mysql
quit;
# 启动Hive客户端
hive
# 查看一下数据库
show databases;
# 退出或exit;
quit;

Hive环境的搭建(安装spark)

复制代码
# 上传并解压解压spark-3.3.1-bin-without-hadoop.tgz
tar -zxvf spark-3.3.1-bin-without-hadoop.tgz -C /opt/module/
mv /opt/module/spark-3.3.1-bin-without-hadoop /opt/module/spark
# 修改spark-env.sh配置文件
# 修改文件名
mv /opt/module/spark/conf/spark-env.sh.template /opt/module/spark/conf/spark-env.sh
# 编辑文件
vim /opt/module/spark/conf/spark-env.sh
# 增加如下内容
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
# 配置SPARK_HOME环境变量
vim /etc/profile.d/my_env.sh
# 添加如下内容
# SPARK_HOME
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin
# source 使其生效
source /etc/profile.d/my_env.sh
# 在hive中创建spark配置文件
vim /opt/module/hive/conf/spark-defaults.conf
# 添加如下内容(在执行任务时,会根据如下参数执行),少于512会报错
spark.master                               yarn
spark.eventLog.enabled                   true
spark.eventLog.dir                        hdfs://hadoop1:8020/spark-history
spark.executor.memory                    512m
spark.driver.memory                      512m
# 在HDFS创建如下路径,用于存储历史日志
hadoop fs -mkdir /spark-history
# 向HDFS上传Spark纯净版jar包
hadoop fs -mkdir /spark-jars
hadoop fs -put /opt/module/spark/jars/* /spark-jars
# 修改hive-site.xml文件
vim /opt/module/hive/conf/hive-site.xml
# 添加如下内容
<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hadoop1:8020/spark-jars/*</value>
</property>
  
<!--Hive执行引擎-->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

向HDFS上传Spark纯净版jar包说明

说明1:采用Spark纯净版jar包,不包含hadoop和hive相关依赖,能避免依赖冲突。

说明2:Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到。

运行

复制代码
Hive on Spark测试
启动hive客户端
hive
创建一张测试表
create table student(id int, name string);
通过insert测试效果
insert into table student values(1,'abc');
insert into table student values(2,'efg');
insert into table student values(3,'hjk');
insert into table student values(4,'lmn');
insert into table student values(5,'opq');
若结果如下,则说明配置成功

测试成功结果

result

遇到的问题

spark执行器和驱动器内存最少默认要512M,少于这个值会报错,修改/opt/module/hive/conf/spark-defaults.conf

其他节点访问主节点的datanode时,用主节点的内网地址访问的,修改配置通过主机名访问datanode,hdfs-site.xml

三个节点不知道为什么都登不上了,修改密码后,改成只允许ip间通信

复制代码
# 其他节点访问主节点的datanode时,用主节点的内网地址访问的,修改配置通过主机名访问datanode,hdfs-site.xml
     <!-- 客户端通过主机名连接 DataNode -->
    <property>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>

参考资料

海波老师-电商数仓

相关推荐
黑不溜秋的14 分钟前
Ubuntu24.04 配置远程桌面服务
linux·运维·服务器
小破程序员2 小时前
docker安装ngnix
服务器·nginx·docker
sakabu2 小时前
基于Linux C语言多线程服务器+Qt客户端+STM32客户端实现的无人超市项目
linux·服务器·c语言·stm32·单片机·qt·stm32项目
SecPulse3 小时前
流影---开源网络流量分析平台(四)(分析引擎部署)
运维·服务器·人工智能·网络安全·开源·流影
浩浩测试一下3 小时前
网络安全之超强Linux信息收集:渗透测试与应急响应的基石(命令超强集合工作手册)
linux·运维·服务器·安全·web安全·网络安全·系统安全
带鱼吃猫3 小时前
Linux系统:进程状态与僵尸、孤儿进程
linux·服务器
郝晨妤4 小时前
【鸿蒙5.0】向用户申请麦克风授权
linux·服务器·前端·华为·harmonyos·鸿蒙
amcomputer4 小时前
程序自动化填写网页表单数据
运维·服务器·自动化
宝哥大数据4 小时前
flink 基站与服务器长连接,每次连接和断开都会上报数据,统计过去一小时每个基站断开次数和时长
大数据·服务器·flink
头发尚存的猿小二4 小时前
Linux--文件
linux·运维·服务器