Hive和Spark生产集群搭建(spark on doris)

1.环境准备

1.1 版本选择

序号bigdata-001bigdata-002bigdata-003bigdata-004bigdata-005
MySQL-8.0.31mysql
DataxDataxDataxDataxDataxDatax
Spark-3.3.1SparkSparkSparkSparkSpark
Hive-3.1.3HiveHive

1.2 主要组件官网

hive官网: https://hive.apache.org/
hive安装包下载:http://archive.apache.org/dist/hive/
spark官网:https://spark.apache.org/
spark安装包下载:https://www.apache.org/dyn/closer.lua/spark/spark-3.3.1/

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

Hadoop环境安装详见本博客最全Hadoop实际生产集群高可用搭建

2.Hive安装部署

2.1 环境配置

  1. 解压apache-hive-3.1.3-bin.tar.gz到/data/module/目录下面
[hadoop@hadoop1 software]$ tar -zxvf /data/software/apache-hive-3.1.3-bin.tar.gz -C /data/module/
  1. 修改apache-hive-3.1.3-bin.tar.gz的名称为hive
[hadoop@hadoop1 software]$ mv /data/module/apache-hive-3.1.3-bin/ /data/module/hive-3.1.3
  1. 修改/etc/profile.d/my_env.sh,添加环境变量
[hadoop@hadoop1 software]$ sudo vim /etc/profile.d/my_env.sh
  1. 添加内容
#HIVE_HOME
export HIVE_HOME=/data/module/hive-3.1.3
export PATH=$PATH:$HIVE_HOME/bin
export PATH JAVA_HOME HADOOP_HOME HIVE_HOME

2.2 Hive元数据配置到MySQL

  1. 拷贝mysql的jdbc驱动(mysql-connector-java-5.1.48.jar)到hive的lib目录下
[hadoop@hadoop1 software]$ cp /data/software/mysql-connector-java-5.1.48.jar $HIVE_HOME/lib
  1. 配置Metastore到MySql
    在$HIVE_HOME/conf目录下新建hive-site.xml文件
[hadoop@hadoop1 software]$ vim $HIVE_HOME/conf/hive-site.xml

添加如下内容

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- jdbc连接的URL --><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://xxx:3306/metastore?useSSL=false&amp;createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>
</property><!-- jdbc连接的Driver--><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value>
</property><!-- jdbc连接的username--><property><name>javax.jdo.option.ConnectionUserName</name><value>xxx</value></property><!-- jdbc连接的password --><property><name>javax.jdo.option.ConnectionPassword</name><value>xxx</value>
</property><!-- Hive默认在HDFS的工作目录 --><property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value></property><!-- Hive元数据存储的验证 --><property><name>hive.metastore.schema.verification</name><value>false</value></property>
<!-- hive表元数据读取不到--><property><name>metastore.storage.schema.reader.impl</name><value>org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader</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>
<!-- 指定存储元数据要连接的地址 --><property><name>hive.metastore.uris</name><value>thrift://xxx:9083,thrift://xxx1:9083</value></property>
<!-- 指定hiveserver2连接的host --><property><name>hive.server2.thrift.bind.host</name><value>xxx</value></property><!-- 指定hiveserver2连接的端口号 --><property><name>hive.server2.thrift.port</name><value>10000</value></property><property>
<name>hive.server2.enable.doAs </name>
<value>false</value>
</property><!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property><name>spark.yarn.jars</name><value>hdfs://hadoopcluster/spark-jars/*</value>
</property><!--Hive执行引擎-->
<property><name>hive.execution.engine</name><value>spark</value>
</property>
<!--配置动态分配spark资源-->
<property><name>spark.dynamicAllocation.enabled</name><value>true</value>
</property>
<!--Hive和Spark连接超时时间-->
<property><name>hive.spark.client.connect.timeout</name><value>100000ms</value>
</property><property><name>hive.zookeeper.client.port</name><value>2181</value></property><property><name>hive.zookeeper.quorum</name><value>xxxxx</value></property><property><name>hive.server2.support.dynamic.service.discovery</name><value>true</value>
</property><property><name>hive.server2.zookeeper.namespace</name><value>hiveserver2_zk</value>
</property><!--
<property><name>hive.exec.post.hooks</name><value>org.apache.atlas.hive.hook.HiveHook</value>
</property>
-->
<!--hiveserver2启动等待时间-->
<property><name>hive.server2.sleep.interval.between.start.attempts</name><value>2s</value><description>Expects a time value with unit (d/day, h/hour, m/min, s/sec, ms/msec, us/usec, ns/nsec), which is msec if not specified.The time should be in between 0 msec (inclusive) and 9223372036854775807 msec (inclusive).Amount of time to sleep between HiveServer2 start attempts. Primarily meant for tests</description></property>
<!--不显示 info 信息-->
<property><name>hive.server2.logging.operation.enabled</name><value>false</value>
</property>
<!--<property><name>hive.tez.container.size</name><value>10240</value>
</property><property><name>hive.server2.enable.doAs</name><value>true</value>
</property>
-->
<property><name>hive_timeline_logging_enabled</name><value>true</value>
</property><!--添加钩子,采集数据到tez-ui -->
<!--
<property><name>hive.exec.failure.hooks</name><value>org.apache.hadoop.hive.ql.hooks.ATSHook</value></property>
<property><name>hive.exec.post.hooks</name><value>org.apache.hadoop.hive.ql.hooks.ATSHook</value></property><property><name>hive.exec.pre.hooks</name><value>org.apache.hadoop.hive.ql.hooks.ATSHook</value></property>
-->
<property><name>hive.reloadable.aux.jars.path</name><value>/data/module/hive-3.1.3/jars</value>
</property><!--配置hiveserver2密码验证 -->
<!--
<property><name>hive.security.authorization.enabled</name><value>true</value>
</property><property><name>hive.server2.authentication</name><value>CUSTOM</value>
</property>
-->
<!--这是hive超级用户 -->
<property><name>hive.users.in.admin.role</name><value>hadoop</value>
</property>
</configuration>

2.3 初始化元数据库

  1. 登陆MySQL
[hadoop@hadoop1 software]$ mysql -uroot -pxxx
  1. 新建Hive元数据库
mysql> create database metastore;
mysql> quit;
  1. 初始化Hive元数据库
[hadoop@hadoop1 software]$ schematool -initSchema -dbType mysql -verbose

4) 修改元数据库字符集
Hive元数据库的字符集默认为Latin1,由于其不支持中文字符,故若建表语句中包含中文注释,会出现乱码现象。如需解决乱码问题,须做以下修改。
修改Hive元数据库中存储注释的字段的字符集为utf-8
//字段注释

mysql> alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
//表注释
mysql> alter table TABLE_PARAMS modify column PARAM_VALUE mediumtext character set utf8;
//退出
quit;
  1. hadoop的配置文件core-site.xml和hdfs-site.xml复制到hive的conf中

2.4 启动metastore和hiveserver2

  1. 启动hiveserver2
[hadoop@hadoop1 hive]$ bin/hive --service hiveserver2
  1. 启动beeline客户端(需要多等待一会)
[hadoop@hadoop1 hive]$ bin/beeline -u jdbc:hive2://hadoop1:10000 -n hadoop
  1. 看到如下界面
Connecting to jdbc:hive2://hadoop1:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.2 by Apache Hive
0: jdbc:hive2://hadoop1:10000>

3.Spark安装

3.1 解压缩文件

将spark-3.3.1-bin-hadoop3.tgz文件上传到Linux并解压缩,放置在指定位置,路径中不要包含中文或空格

tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /data/module
cd /data/module 
mv spark-3.3.1-bin-hadoop3.2  spark-3.3.1

3.2 启动环境

1)进入解压缩后的路径,执行如下指令

bin/spark-shell
  1. 启动成功后,可以输入网址进行Web UI监控页面访问
    http://hadoop1:4040

3.3 Hive on Spark配置

3.3.1 配置SPARK_HOME环境变量

[hadoop@hadoop1 software]$ sudo vim /etc/profile.d/my_env.sh

添加如下内容

# SPARK_HOME
export SPARK_HOME=/data/module/spark-3.3.1
export PATH=$PATH:$SPARK_HOME/bin

source 使其生效

[hadoop@hadoop1 software]$ source /etc/profile.d/my_env.sh

3.3.2 创建spark配置文件并复制到hive中

[hadoop@hadoop1 software]$ vim /data/module/spark-3.3.1
/conf/spark-defaults.conf

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

spark.master                               yarn
spark.eventLog.enabled                   true
spark.eventLog.dir    hdfs://yourhadoopcluster/spark-history
spark.executor.cores    1
spark.executor.memory    4g
spark.executor.memoryOverhead    2g
spark.driver.memory    4g
spark.driver.memoryOverhead    2g
spark.dynamicAllocation.enabled  true
spark.shuffle.service.enabled  true
spark.dynamicAllocation.executorIdleTimeout  60s
spark.dynamicAllocation.initialExecutors    1
spark.dynamicAllocation.minExecutors  1
spark.dynamicAllocation.maxExecutors  12
spark.dynamicAllocation.schedulerBacklogTimeout 1s
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout 5s
spark.dynamicAllocation.cachedExecutorIdleTimeout 30s
spark.shuffle.useOldFetchProtocol    true
spark.history.fs.cleaner.enabled    true
spark.history.fs.cleaner.interval    1d
spark.history.fs.cleaner.maxAge    7d
spark.hadoop.orc.overwrite.output.file true
spark.executor.extraJavaOptions=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
spark.driver.extraJavaOptions=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8

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

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

3.3.4 向HDFS上传Spark纯净版jar包

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

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

① 上传并解压spark-3.3.1-bin-without-hadoop.tgz

[hadoop@hadoop1 software]$ tar -zxvf /data/software/spark-3.3.1-bin-without-hadoop.tgz

② 上传Spark纯净版jar包到HDFS

[hadoop@hadoop1 software]$ hadoop fs -mkdir /spark-jars[hadoop@hadoop1 software]$ hadoop fs -put spark-3.3.1-bin-without-hadoop/jars/* /spark-jarscp /data/module/spark-3.3.1/yarn/spark-3.3.1-yarn-shuffle.jar /data/module/hadoop-3.3.4/share/hadoop/yarn/lib/

6)将spark的jar包拷贝到yarn中

cp /data/module/spark-3.3.1/yarn/spark-3.3.1-yarn-shuffle.jar /data/module/hadoop-3.3.4/share/hadoop/yarn/lib/

3.3.5 修改hive-site.xml文件(以上已配置)

[hadoop@hadoop1 ~]$ vim /data/module/hive/conf/hive-site.xml
添加如下内容
<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property><name>spark.yarn.jars</name><value>hdfs://xxx:8020/spark-jars/*</value>
</property><!--Hive执行引擎-->
<property><name>hive.execution.engine</name><value>spark</value>
</property>

3.3.6 spark-sql操作doris

下载git代码库的spark代码:https://github.com/apache/doris-spark-connector
按照readme介绍打包自己的适配版连接器jar包
将jar包复制到spark的jars目录下,同时hdfs上的spark包目录也上传一份

cp /your_path/spark-doris-connector/target/spark-doris-connector-3.1_2.12-1.0.0-SNAPSHOT.jar  $SPARK_HOME/jars
hadoop fs -put /your_path/spark-doris-connector/target/spark-doris-connector-3.1_2.12-1.0.0-SNAPSHOT.jar /spark-jars

运行spark-sql 测试:

//测试
CREATE
TEMPORARY VIEW spark_doris1
USING doris
OPTIONS('table.identifier'='demo.t1','fenodes'='xxx:8030','user'='xxx','password'='xxx'
);
CREATE
TEMPORARY VIEW spark_doris2
USING doris
OPTIONS('table.identifier'='demo.t2','fenodes'='xxx:8030','user'='xxx','password'='xxx'
);INSERT INTO spark_doris1
select * from spark_doris2;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/582294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构学习 Leetcode322 零钱兑换

关键词&#xff1a;动态规划 完全背包 记忆化搜索 一个套路&#xff1a; 01背包&#xff1a;空间优化之后dp【target1】&#xff0c;遍历的时候要逆序遍历完全背包&#xff1a;空间优化之后dp【target1】&#xff0c;遍历的时候要正序遍历 题目&#xff1a; 方法一&#xff…

【Linux】Linux服务器ssh密钥登录

ssh密码登录 ssh root地址 #需要输入密码ssh密钥登录 Linux之间密钥登录 生成公私钥 #生成公钥私钥 ssh-keygen #默认目录&#xff0c;默认密码空ssh-copy-id #拷贝ID到目标服务器 ssh-copy-id -i id_rsa.pub root192.168.8.22 ssh-copy-id -i id_rsa.pub root192.168.8.33…

把这些软件测试经典面试题!全背下来,拿offer就像喝水一样!

1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行&#xff0c;即是通常说的软件的可移植性。兼容的类型&#xff0c;如果细分的话&#xff0c;有平台的兼容&#xff0c;网络兼容&am…

C语言实验1:C程序的运行环境和运行C程序的方法

一、算法原理 这是学C语言的入门&#xff0c;并不需要很高深的知识&#xff0c;一个hello world 或者一个简单的加法即可 二、实验要求 了解所用的计算机系统的基本操作方法&#xff0c;学会独立使用该系统。 了解在该系统上如何编辑、编译、连接和运行一个C程序。 通过运…

无法连接虚拟机设备 ide1:0,因为主机上没有相应的设备。您要每次在开启此虚拟机时都尝试连接此虚拟设备吗?

Vmware报错&#xff1a; 报错原因&#xff1a; ide1:0一般是虚拟机的光驱&#xff0c;配置选项是“使用物理驱动器”&#xff0c;而宿主机可能没有安装光驱&#xff0c;故无法从驱动器上寻找 .ISO 系统文件。 解决方法: 右键点击对应的虚拟机&#xff0c;再点击“设置”按钮。…

Flask 拦截器

登录实现后&#xff0c;有很多页面还没有进行设置登录要求&#xff0c;即使没有登录也可以到页面中来&#xff0c;当页面多了以后&#xff0c;每个页面都进行设置又非常繁琐&#xff0c;所以这里用到了 Flask 拦截器 相关资料源码来自编程浪子的Flask点餐小程序系统 web/inte…

案例195:基于微信小程序的购物商城系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Vue3-27-路由-路径参数的简单使用

什么是路径参数 在路由配置中&#xff0c;可以将【参数】放在【路由路径】中&#xff0c; 从而实现&#xff0c;同一个 路由&#xff0c;同一个组件&#xff0c;因路径参数不同&#xff0c;可以渲染出不同的内容。特点 &#xff1a; 1、当携带不同路径参数的路由相互跳转时&am…

【论文阅读】Realtime multi-person 2d pose estimation using part affinity fields

OpenPose&#xff1a;使用PAF的实时多人2D姿势估计。 code&#xff1a;GitHub - ZheC/Realtime_Multi-Person_Pose_Estimation: Code repo for realtime multi-person pose estimation in CVPR17 (Oral) paper&#xff1a;[1611.08050] Realtime Multi-Person 2D Pose Estima…

Bind for 0.0.0.0:2379 failed: port is already allocated

1、执行命令docker-compose -p docker-apisix up -d 报错 Error response from daemon: driver failed programming external connectivity on endpoint docker-apisix-etcd-1 (2a92a0cefff9194fcd1dad4bdeabf4201d9047ec2633eda455c6e46528668af4): Bind for 0.0.0.0:2379 fa…

NLP论文阅读记录 - 02 | 2022 自动文本摘要方法:综合回顾

文章目录 前言0、论文摘要一、Introduction1.1文本摘要的要求1.2主要研究贡献 二.ATS的分类2.1基于没有。输入文档的数量2.2 基于总结方法2.3 基于输出摘要性质&#xff1a;2.4 基于摘要语言2.4.1 基于摘要算法2.5 基于摘要内容2.6 基于摘要类型2.7 基于概括域2.8 基于加工水平…

Your password does not satisfy the current policy requirements

密码策略问题异常信息&#xff1a; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements1、查看 mysql 初始的密码策略&#xff0c; 输入语句 “ SHOW VARIABLES LIKE validate_password%; ” 进行查看 2.首先需要设置密码的验证强度等级&am…

如何查看官方文档(第410篇)

让自己更加值钱,考专业证,提升学历,提升专业技能。 一 让AI告诉你 如何查看官方文档(第410篇) 要查看MySQL官方文档的详细过程,可以按照以下步骤进行: 1. 打开MySQL官方文档的主页:https://dev.mysql.com/doc/refman/2. 在搜索框中输入您要查找的主题,并按Enter键。3.…

React Query 实战教程:在 React 中如何优雅的管理接口数据状态?

前言 如何通过Ajax或者Fetch优雅的请求后端接口&#xff0c;这是所有复杂前端项目都需要考虑处理的事情。在React项目中&#xff0c;有不少成熟的Hook能够让开发者管理整个请求过程中的数据和状态&#xff0c;例如 axios-hooks、use-http、react-query、swr甚至 ahook中提供的…

嵌入式开发——GD32F4的I2C查询

SCL SDA TXFRAME SMBA I2C0 PB6,PB8 PB7,PB9 PB4 PB5 I2C1 PB10,PF1,PH4 PF0,PH5,PB11,PC12,PB3 PF3,PH3,PB13 PF2,PH6,PB12 I2C2 PA8,PH7 PH8,PC9,PB4 PA10,PH10 PA9,PH9

删除数据后, redis 内存占用还是很高怎么办?

现象&#xff1a; reids 做了数据删除&#xff0c;数据量不大&#xff0c;使用 top 命令看&#xff0c;发现还是占用大量内存 原因&#xff1a; 1.redis 底层内存根据内存分配器分配&#xff0c;不会立刻释放 2.redis 释放的内存空间不是连续的&#xff0c;存在碎片 内存碎…

编译错误:C4056E type of input file ‘xxx‘ unknown

最近在Proteus上面进行仿真&#xff0c;将编译后的hex文件导入到电路图中&#xff0c;进行程序运行的时候&#xff0c;Proteus报了这么一个错误&#xff1a;Error: C4065E: type of input file Pian unknown 我上网一搜&#xff0c;好像与文件名称中存在空格有关&#xff0c;导…

百度飞桨文心生态成果最新披露:开发者达1070万 模型数超86万

12月28日&#xff0c;由深度学习技术及应用国家工程研究中心主办的WAVE SUMMIT深度学习开发者大会2023在北京召开。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰现场公布了飞桨文心五载十届最新生态成果&#xff0c;文心一言最新用户规模破1亿&#xff0c;截…

uniapp 新建组件

1. 新建文件夹 components 文件夹名称必须是 components &#xff0c;否则组件无法自动导入 2. 新建组件 3. 编辑组件 components/logo/logo.vue <template><img src"https://img.alicdn.com/imgextra/i1/O1CN01EI93PS1xWbnJ87dXX_!!6000000006451-2-tps-150-15…

BP神经网络详细原理,BP神经网络训练界面详解,基于BP神经网络的公司财务风险分类

目录 摘要 BP神经网络参数设置及各种函数选择 参数设置 训练函数 传递函数 学习函数 性能函数 显示函数 前向网络创建函数 BP神经网络训练窗口详解 训练窗口例样 训练窗口四部详解 基于BP神经网络的公司财务风险分类 完整代码下载链接:基于BP神经网络的公司财务风险分类(代码…