最新Hive 整合 Spark 全教程 (Hive on Spark)(4),2024年最新2024软件测试常见笔试题

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

(3)在配置了ResourceManager的节点启动YARN

[luanhao@Bigdata00 hadoop-3.1.3]$ sbin/start-yarn.sh

(4)Web端查看HDFS的Web页面:http://bigdata00:9870

在这里插入图片描述

(5)Web端查看SecondaryNameNode :http://bigdata00:9868/status.html (单机模式下面什么都没有)

在这里插入图片描述

(6)Web端查看ResourceManager :http://bigdata00:8088/cluster

在这里插入图片描述

LZO压缩配置

1)将编译好后的 hadoop-lzo-0.4.20.jar 放入 hadoop-3.1.3/share/hadoop/common/

[luanhao@Bigdata00 common]$ pwd
/opt/module/hadoop-3.1.3/share/hadoop/common
[luanhao@Bigdata00 common]$ ls
hadoop-lzo-0.4.20.jar

2)core-site.xml 增加配置支持 LZO 压缩

<configuration>
 <property>
 <name>io.compression.codecs</name>
 <value>
 org.apache.hadoop.io.compress.GzipCodec,
 org.apache.hadoop.io.compress.DefaultCodec,
 org.apache.hadoop.io.compress.BZip2Codec,
 org.apache.hadoop.io.compress.SnappyCodec,
 com.hadoop.compression.lzo.LzoCodec,
 com.hadoop.compression.lzo.LzopCodec
 </value>
 </property>
 <property>
 <name>io.compression.codec.lzo.class</name>
 <value>com.hadoop.compression.lzo.LzoCodec</value>
 </property>
</configuration>

Hadoop 3.x 端口号 总结

Hadoop 3.x后,应用的端口有所调整,如下:

分类应用Haddop 2.xHaddop 3.x
NNPortsNamenode80209820
NNPortsNN HTTP UI500709870
NNPortsNN HTTPS UI504709871
SNN portsSNN HTTP500919869
SNN portsSNN HTTP UI500909868
DN portsDN IPC500209867
DN portsDN500109866
DN portsDN HTTP UI500759864
DN portsNamenode504759865
YARN portsYARN UI80888088

MySQL准备

1)卸载自带的 Mysql-libs(如果之前安装过 mysql,要全都卸载掉)

[luanhao@Bigdata00 software]$ rpm -qa | grep -i -E mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps

2)安装 mysql 依赖

[luanhao@Bigdata00 software]$ sudo rpm -ivh 01_mysql-community-common-5.7.16-1.el7.x86_64.rpm
[luanhao@Bigdata00 software]$ sudo rpm -ivh 02_mysql-community-libs-5.7.16-1.el7.x86_64.rpm
[luanhao@Bigdata00 software]$ sudo rpm -ivh 03_mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm

3)安装 mysql-client

[luanhao@Bigdata00 software]$ sudo rpm -ivh 04_mysql-community-client-5.7.16-1.el7.x86_64.rpm

4)安装 mysql-server

[luanhao@Bigdata00 software]$ sudo rpm -ivh 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm

5)启动 mysql

[luanhao@Bigdata00 software]$ sudo systemctl start mysqld

6)查看 mysql 密码

[luanhao@Bigdata00 software]$ sudo cat /var/log/mysqld.log | grep password

配置只要是 root 用户+密码,在任何主机上都能登录 MySQL 数据库。

7)用刚刚查到的密码进入mysql(如果报错,给密码加单引号)

[luanhao@Bigdata00 software]$ mysql -uroot -p 'password' 

8)设置复杂密码(由于 mysql 密码策略,此密码必须足够复杂)

mysql> set password=password("Qs23=zs32"); 

9)更改 mysql 密码策略

mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0; 

10)设置简单好记的密码

mysql> set password=password("000000"); 

11)进入msyql

mysql> use mysql

12)查询 user

mysql> select user, host from user; 

13)修改 user 表,把 Host 表内容修改为%

mysql> update user set host="%" where user="root"; 

14)刷新

mysql> flush privileges; 

15)退出

mysql> quit;

Hive 准备

1)把 apache-hive-3.1.2-bin.tar.gz上传到 linux /opt/software 目录下

2)解压 apache-hive-3.1.2-bin.tar.gz /opt/module目录下面

[luanhao@Bigdata00 software]$ tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/

3)修改 apache-hive-3.1.2-bin.tar.gz 的名称为 hive

[luanhao@Bigdata00 software]$ mv /opt/module/apache-hive-3.1.2-bin/ /opt/module/hive

4)修改/etc/profile,添加环境变量

[luanhao@Bigdata00 software]$ sudo vim /etc/profile
添加内容
#HIVE\_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE\_HOME/bin

重启 Xshell 对话框或者 source 一下 /etc/profile 文件,使环境变量生效

[luanhao@Bigdata00 software]$ source /etc/profile

5)解决日志 Jar 包冲突,进入/opt/module/hive/lib 目录(有冲突再做)

[luanhao@Bigdata00 lib]$ mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak

Hive 元数据配置到 MySQL

拷贝驱动

将 MySQL 的 JDBC 驱动拷贝到 Hive 的 lib 目录下

[luanhao@Bigdata00 lib]$ cp /opt/software/mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/

配置 Metastore MySQL

在$HIVE_HOME/conf 目录下新建 hive-site.xml 文件

[luanhao@Bigdata00 conf]$ vim hive-site.xml

添加如下内容

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <property>
 	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://Bigdata00:3306/metastore?useSSL=false</value>
 </property>
 <property>
 	<name>javax.jdo.option.ConnectionDriverName</name>
 	<value>com.mysql.jdbc.Driver</value>
 </property>
 <property>
 	<name>javax.jdo.option.ConnectionUserName</name>
 	<value>root</value>
 </property>
 <property>
	 <name>javax.jdo.option.ConnectionPassword</name>
 	 <value>000000</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>Bigdata00</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

初始化元数据库

1)登陆MySQL

[luanhao@Bigdata00 conf]$ mysql -uroot -p000000

2)新建 Hive 元数据库

mysql> create database metastore;
mysql> quit;

3)初始化 Hive 元数据库

[luanhao@Bigdata00 conf]$ schematool -initSchema -dbType mysql -verbose

启动 hive 客户端

1)启动 Hive 客户端

[luanhao@Bigdata00 hive]$ bin/hive

2)查看一下数据库

hive (default)> show databases;
OK
database_name
default

Spark 准备

(1)Spark 官网下载 jar 包地址:

http://spark.apache.org/downloads.html

(2)上传并解压解压 spark-3.0.0-bin-hadoop3.2.tgz

[luanhao@Bigdata00 software]$ tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module/ 
[luanhao@Bigdata00 software]$ mv /opt/module/spark-3.0.0-bin-hadoop3.2 /opt/module/spark

(3)配置 SPARK_HOME 环境变量

[luanhao@Bigdata00 software]$ sudo vim /etc/profile
添加如下内容
# SPARK\_HOME
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK\_HOME/bin

source 使其生效

[luanhao@Bigdata00 software]$ source /etc/profile

(4)在hive 中创建 spark 配置文件

[luanhao@Bigdata00 software]$ vim /opt/module/hive/conf/spark-defaults.conf

添加如下内容(在执行任务时,会根据如下参数执行)

spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://Bigdata00:8020/spark-history
spark.executor.memory 1g 
spark.driver.memory 1g

在 HDFS 创建如下路径,用于存储历史日志

[luanhao@Bigdata00 software]$ hadoop fs -mkdir /spark-history

(5)向 HDFS 上传 Spark 纯净版 jar

说明 1:由于 Spark3.0.0 非纯净版默认支持的是 hive2.3.7 版本,直接使用会和安装的Hive3.1.2 出现兼容性问题。所以采用 Spark 纯净版 jar 包,不包含 hadoop 和 hive 相关依赖,避免冲突。

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

(6)上传并解压 spark-3.0.0-bin-without-hadoop.tgz

[luanhao@Bigdata00 software]$ tar -zxvf /opt/software/spark-3.0.0-bin-without-hadoop.tgz

(7)上传 Spark 纯净版 jar 包到 HDFS

[luanhao@Bigdata00 software]$ hadoop fs -mkdir /spark-jars
[luanhao@Bigdata00 software]$ hadoop fs -put spark-3.0.0-bin-without-hadoop/jars/* /spark-jars

Hive on Spark 配置

修改 hive-site.xml 文件

[luanhao@Bigdata00 ~]$ vim /opt/module/hive/conf/hive-site.xml

添加如下内容
<!--Spark 依赖位置(注意:端口号 8020 必须和 namenode 的端口号一致)-->
<property>
 	<name>spark.yarn.jars</name>
 	<value>hdfs://Bigdata00:8020/spark-jars/*</value>
</property>
 
<!--Hive 执行引擎-->
<property>
 	<name>hive.execution.engine</name>
 	<value>spark</value>
</property>
<!--Hive 和 Spark 连接超时时间-->
<property>
 	<name>hive.spark.client.connect.timeout</name>
 	<value>10000ms</value>
</property>

hadoop 3.1.3 默认 NameNode 端口是 9820 重新在hadoop 下的 core-site.xml 将 9820 修改成 8020 就可以了

core-site.xml

<!-- 指定NameNode的地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://Bigdata00:8020</value>
</property>

在这里插入图片描述

注意:hive.spark.client.connect.timeout 的默认值是 1000ms,如果执行 hive 的 insert 语句时,抛如下异常,可以调大该参数到 10000ms

FAILED: SemanticException Failed to get a spark session: 
org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark 
client for Spark session d9e0224c-3d14-4bf4-95bc-ee3ec56df48e

1)兼容性说明

注意:官网下载的 Hive3.1.2 和 Spark3.0.0 默认是不兼容的。因为 Hive3.1.2 支持的 Spark版本是 2.4.5,所以需要我们重新编译 Hive3.1.2 版本。

编译步骤:官网下载 Hive3.1.2 源码,修改 pom 文件中引用的 Spark 版本为 3.0.0,如果编译通过,直接打包获取 jar 包。如果报错,就根据提示,修改相关方法,直到不报错,打包获取 jar 包。

Hive on Spark仅使用特定版本的Spark进行测试,因此只能确保给定版本的Hive与特定版本的Spark一起使用。其他版本的Spark可能与给定版本的Hive一起使用,但这不能保证。下面是Hive版本列表及其相应的兼容Spark版本。

Hive VersionSpark Version
master2.3.0
3.0.x2.3.0
2.3.x2.0.0
2.2.x1.6.0
2.1.x1.6.0
2.0.x1.5.0
1.2.x1.3.1
1.1.x1.2.0

2)在 Hive 所在节点部署 Spark

如果之前已经部署了 Spark,则该步骤可以跳过,但要检查 SPARK_HOME 的环境变量配置是否正确。

Hive on Spark测试

(1)启动 hive 客户端

[luanhao@Bigdata00 hive]$ bin/hive

(2)创建一张测试表

hive (default)> create table huanhuan(id int, name string); 

建表之后查看表发现报错,此时排障,我们忘了将 hadoop-lzo-0.4.20.jar 放到 /opt/module/hadoop-3.1.3/share/hadoop/common/ 目录下,

hive (default)> show tables;
OK
tab_name
Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object

这时重新启动集群,并且启动hive 发现已经将huanhuan表展示出来了。

hive (default)> show tables;
OK
tab_name
huanhuan
Time taken: 3.253 seconds, Fetched: 1 row(s)

(3)通过 insert 测试效果

hive (default)> insert into huanhuan values(1,'haoge');

如果出现这个页面,说明成功

在这里插入图片描述

添加数据时最开始出现这个问题 。。。。

hive (default)> insert into huanhuan values(1,'haoge');
Query ID = luanhao_20210327142214_4ee343e7-52b1-4bfa-81a7-958a03175150
Total jobs = 1
Launching Job 1 out of 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>
Job failed with java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found
FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the root cause.

报错信息如下

Job failed with java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found

FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the root cause.

此时说明yarn 分配的内存太少了 ,我们把虚拟机的内存调整为 12g ( 前提是要将虚拟机的内存扩到12g ,才可以调整) 然后关闭集群,找到 yarn-site.xml 文件

修改如下内容:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ida40wAQ-1616838151812)(C:\Users\栾昊\AppData\Roaming\Typora\typora-user-images\image-20210327171941838.png)]

给Yarn容器最大内存分配 12288 , 运行管理物理内存分配 12288 ,重新启动集群

在这里插入图片描述

此时最大内存 12 G

之后重新编写spark-defaults.conf 文件 给堆内内存扩大到2G

spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://Bigdata00:8020/spark-history
spark.executor.memory 2g  # 堆内内存,扩大到2g
spark.driver.memory 1g    # 运行内存

堆内内存:

  • 执行内存 (Execution Memory) : 主要用于存放 Shuffle、Join、Sort、Aggregation 等计算过程中的临时数据;
  • 存储内存 (Storage Memory) : 主要用于存储 spark 的 cache 数据,例如RDD的缓存、unroll数据;

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

此时最大内存 12 G

之后重新编写spark-defaults.conf 文件 给堆内内存扩大到2G

spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://Bigdata00:8020/spark-history
spark.executor.memory 2g  # 堆内内存,扩大到2g
spark.driver.memory 1g    # 运行内存

堆内内存:

  • 执行内存 (Execution Memory) : 主要用于存放 Shuffle、Join、Sort、Aggregation 等计算过程中的临时数据;
  • 存储内存 (Storage Memory) : 主要用于存储 spark 的 cache 数据,例如RDD的缓存、unroll数据;

[外链图片转存中…(img-i7qZ3VcP-1715487241518)]
[外链图片转存中…(img-SV9kViXO-1715487241518)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值