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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文介绍了在本地安装和配置MySQL、Hive及Spark的过程。主要内容包括:- **MySQL本地安装**:详细描述了内存占用情况及安装步骤,涉及安装脚本的编写与执行,以及连接MySQL的方法。- **Hive安装**:涵盖了从上传压缩包到配置环境变量的全过程,并解释了如何将Hive元数据存储配置到MySQL中。- **Hive与Spark集成**:说明了如何安装Spark并将其与Hive集成,确保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包,不包含hadoophive相关依赖,能避免依赖冲突。

说明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>


参考资料

海波老师-电商数仓

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
1月前
|
SQL 分布式计算 IDE
如何在IDE中通过Spark操作Hive
通过以上方法和代码示例,你可以在IDE中成功通过Spark操作Hive,实现大规模数据处理和分析。确保理解每一步的实现细节,应用到实际项目中时能有效地处理各种复杂的数据场景。
101 28
|
1月前
|
SQL 分布式计算 资源调度
Dataphin功能Tips系列(48)-如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
|
1月前
|
消息中间件 分布式计算 资源调度
基于云服务器的数仓搭建-集群安装
本文介绍了大数据集群的安装与配置,涵盖Hadoop、Zookeeper、Kafka和Flume等组件。主要内容包括: 1. **数据模拟** 2. **Hadoop安装部署**:详细描述了HDFS和YARN的配置,包括NameNode、ResourceManager的内存分配及集群启动脚本。 3. **Zookeeper安装**:解压、配置`zoo.cfg`文件,并创建myid文件 4. **Kafka安装**:设置Kafka环境变量、配置`server.properties` 5. **Flume安装**:配置Flume采集日志到Kafka,编写启动脚本进行测试。
107 1
|
1月前
|
Java Linux 网络安全
基于云服务器的数仓搭建-服务器配置
本文介绍了购置并配置三台云服务器的详细步骤。使用FinalShell连接服务器,并安装了必要的工具如epel-release、net-tools和vim。关闭防火墙后,在/opt目录下创建module和software文件夹,卸载默认JDK并修改主机名。添加环境变量路径/home/alpfree/bin,编写集群分发脚本xsync实现文件同步,配置无密登录,安装并分发JDK。参考资料来自海波老师的电商数仓课程。
69 1
|
6月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
152 0
|
11月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
260 1
|
11月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
376 0
|
11月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
410 0
|
11月前
|
SQL 存储 分布式计算
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
1407 0
|
9月前
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。