Spark On Hive原理和配置

目录

一、Spark On Hive原理

        (1)为什么要让Spark On Hive?

二、MySQL安装配置(root用户)

        (1)安装MySQL

        (2)启动MySQL设置开机启动

        (3)修改MySQL密码

三、Hive安装配置

        (1)修改Hadoop的core-site.xml

        (2)创建hive-site.xml

        (3)修改配置文件hive-env.sh

        (4)上传mysql连接驱动

        (5)初始化元数据 (Hadoop集群启动后)      

        (6)创建logs目录,启动元数据服务

        (7)启动Hive shell

四、Spark On Hive配置

        (1)创建hive-site.xml(spark/conf目录)

        (2)放置MySQL驱动包

        (3)查看hive的hive-site.xml配置

        (4)启动hive的MetaStore服务

        (5)Spark On Hive测试

        (6)Pycharm-spark代码连接测试


一、Spark On Hive原理

        (1)为什么要让Spark On Hive?

        对于Spark来说,自身是一个执行引擎。但是Spark自己没有元数据管理功能,当我们执行: SELECT * FROM person WHERE age > 10的时候, Spark完全有能力将SQL变成RDD提交。

        但是问题是,Person的数据在哪? Person有哪些字段?字段啥类型? Spark完全不知道了。不知道这些东西,如何翻译RDD运行。在SparkSQL代码中可以写SQL那是因为,表是来自DataFrame注册的。 DataFrame中有数据,有字段,有类型,足够Spark用来翻译RDD用.。如果以不写代码的角度来看,SELECT * FROM person WHERE age > 10 spark无法翻译,因为没有元数据。

        解决方案:

        Spark提高执行引擎能力,Hive的MetaStore提供元数据管理功能。选择Hive的原因是使用Hive的用户数量多。

Hive与SparkOnHive流程示意图

二、MySQL安装配置(root用户)

        (1)安装MySQL

        命令:

        rpm  --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

        rpm -Uvh https://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm

        yum -y install mysql-community-server

        (2)启动MySQL设置开机启动

        命令:

        systemctl start mysqld

        systemctl enable mysqld

        (3)修改MySQL密码

        命令:

        查看密码:grep 'temporary password' /var/log/mysqld.log

        修改密码:

mysql -uroot -p  #登录MySQL,密码是刚刚查看的临时密码

set global validate_password_policy=LOW;   #密码安全级别低

set  global  validate_password_length=4;  #密码长度最低四位

ALTER USER 'root'@'localhost' IDENTIFIED BY '密码'; # 设置用户和密码
# 配置远程登陆用户以及密码
grant all privileges on *.* to root@"%" identified by 'root' with grant option;

flush privileges;

三、Hive安装配置

        (1)修改Hadoop的core-site.xml

        添加内容如下:

     <property>
            <name>hadoop.proxyuser.noregrets.hosts</name>
            <value>*</value>
    </property>
    <property>
            <name>hadoop.proxyuser.noregrets.groups</name>
            <value>*</value>
    </property>

        上传解压安装Hive压缩包并构建软连接
        命令:

        解压:tar -zvxf apache-hive-3.1.3-bin-tar-gz -C /export/servers

        构建软连接:ln -s /export/servers/apache-hive-3.1.3-bin/ /export/servers/hive

        (2)创建hive-site.xml

        命令:

        cd /export/servers/hive/conf

        vim hive-site.xml

        添加内容如下:

<configuration>

        <!-- 存储元数据mysql相关配置 -->

        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://pyspark01:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</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>root</value>

        </property>

        <!-- H2S运行绑定host -->

        <property>

                <name>hive.server2.thrift.bind.host</name>

                <value>pyspark01</value>

        </property>

        <!-- 远程模式部署metastore metastore地址 -->

        <property>

                <name>hive.metastore.uris</name>

                <value>thrift://pyspark01:9083</value>

        </property>

        <!-- 关闭元数据存储授权 -->

        <property>

                <name>hive.metastore.event.db.notification.api.auth</name>

                <value>false</value>

        </property>

</configuration>

        (3)修改配置文件hive-env.sh

        命令:

        cd /export/servers/hive/conf

        cp hive-env.sh.template hive-env.sh

        vim hive-env.sh(修改第48行内容)

        内容如下:

        export HADOOP_HOME=/export/servers/hadoop
        export HIVE_CONF_DIR=/export/servers/hive/conf
        export HIVE_AUX_JARS_PATH=/export/servers/hive/lib

        (4)上传mysql连接驱动

链接:https://pan.baidu.com/s/1MJ9QBsE3h1FAxuB3a4iyVw?pwd=1111 
提取码:1111 

        MySQL5使用5的连接版本,MySQL8使用8的连接版本。

        (5)初始化元数据 (Hadoop集群启动后)      

        命令:

        登录数据库:

        mysql -uroot -p

        CREATE DATABASE hive CHARSET UTF8;        #建表

        cd /export/server/hive/

        bin/schematool -initSchema -dbType mysql -verbos

        #初始化成功会在mysql中创建74张表

        (6)创建logs目录,启动元数据服务

        命令:

        创建文件夹:mkdir logs

        启动元数据服务:nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &

        (7)启动Hive shell

        命令:bin/hive(配置环境变量可直接使用hive)

四、Spark On Hive配置

        (1)创建hive-site.xml(spark/conf目录)

        添加内容如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--告知Spark创建表存到哪里-->
        <property>
                <name>hive.metastore.warehouse.dir</name>
                <value>/user/hive/warehouse</value>
        </property>
        <property>
                <name>hive.metastore.local</name>
                <value>false</value>
        </property>
<!--告知Spark Hive的MetaStore在哪-->
        <property>
                <name>hive.metastore.uris</name>
                <value>thrift://pyspark01:9083</value>
        </property>
</configuration>

        (2)放置MySQL驱动包

        (3)查看hive的hive-site.xml配置

        确保有如下配置:

        (4)启动hive的MetaStore服务

        命令:

        nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &

        (5)Spark On Hive测试

        ①创建表sparkonhive

        命令:

        在spark目录下:

        bin/spark         

        spark.sql('create table sparkonhive(id int)' )

        ②进入查看查看

        命令:

        hive目录:

        bin/hive(配置过环境变量可直接使用hive)

        (6)Pycharm-spark代码连接测试

        在Linux的sparkSQl终端或者hive终端创建学生表,然后使用spark代码查询。

        命令:

        create table student(id int, name string);

        insert into student values(1,'张三'),(2, '李四');

        使用spark代码查询

        在Spark代码中加上如下内容

# cording:utf8
import string
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
from pyspark.sql.types import IntegerType, StringType, StructType, ArrayType
if __name__ == '__main__':
    spark = SparkSession.builder.\
        appName('udf_define').\
        master('local[*]').\
        config('spark.sql.shuffle.partitions', 2).\
        config('spark.sql.warehouse.dir', 'hdfs://pyspark01:8020/user/hive/warehouse').\
        config('hive.metastore.uris', 'thrift://pyspark01:9083').\
        enableHiveSupport().\
        getOrCreate()
    sc = spark.sparkContext

    spark.sql('''
        SELECT * FROM student
    ''').show()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用 Rust 和 cURL 库制作一个有趣的爬虫

目录 一、介绍 二、准备工作 三、代码实现 四、解析 HTML 并提取特定元素示例 总结 本文将介绍如何使用 Rust 编程语言和 cURL 库制作一个有趣的网络爬虫。我们将通过实例代码来展示如何抓取网页内容、处理数据和解析 HTML 结构。同时&#xff0c;还将探讨爬虫技术的原理、…

YOLOv5 添加 OTA,并使用 coco、CrowdHuman数据集进行训练。

YOLO-OTA 第一步&#xff1a;拉取 YOLOv5 的代码第二步&#xff1a;添加 ComputeLossOTA 函数第二步&#xff1a;修改 train 和 val 中损失函数为 ComputeLossOTA 函数1、在 train.py 中 首先添加 ComputeLossOTA 库。2、在 train.py 修改初始化的损失函数3、在 train.py 修改一…

ChatGPT 与 Python Echarts 完成热力图实例

热力图是一种数据可视化方式&#xff0c;它通过颜色的变化来表示数据的差异和分布。以下是使用热力图的一些作用和好处&#xff1a; 数据可视化&#xff1a;热力图可以将复杂的数据集转化为更直观、更易理解的形式。这对于很多人来说&#xff0c;尤其是那些没有深入统计学或数…

YouTrack 中如何设置邮件通知

在 YouTrack 中&#xff0c;默认是不会邮件通知的。 你可以为你的账号设置邮件通知。 设置的方法为单击用户属性&#xff0c;然后在弹出的小窗口中选择属性选项。 设置邮件通知 在通知 Tab 页面中&#xff0c;选择发送邮件的方式&#xff0c;默认这个选项是不选择的。 用户…

IDEA 断点高阶

一、按钮介绍 1.1 补充 返回断点处&#xff1a; 设置debug配置&#xff1a; 二、增加/切换debugger视图 三、window快捷键 所在行处&#xff1a; CtrlF8断点属性编辑&#xff1a; CtrlShiftF8 四、一些常用的高级功能 4.1 查看对象内存-Attach memory agent 1.勾选Atta…

vscode下ssh免密登录linux服务器

vscode使用ssh免密登录linux 1、安装SSH插件2、生成密钥3、linux安装ssh服务4、linux下配置公钥5、vscode远程登录 注&#xff1a;测试环境为window10Ubuntu1804/Ubuntu2204 1、安装SSH插件 扩展->搜索SSH->点击install进行安装&#xff0c;如下图所示&#xff1a; 2、…

非小米笔记本小米妙享中心安装最新教程 3.2.0.464 兼容所有Windows系统

小米妙享中心 3.2.0.464 版本帮助 : 支持音频流转、屏幕镜像、屏幕拓展、键鼠拓展、无线耳机、小米互传 目录 小米妙享中心 3.2.0.464 版本帮助 : 1.常规教程使用安装包方式安装失败 或者 1.1安装失败可使用大佬的加载补丁方法解决 补充卸载残留 1.2 截图存档 2. 本教程…

原生JavaScript实现的SPA单页应用(hash路由)

什么叫做SPA单页应用 单页Web应用 &#xff08;single page web application&#xff0c;SPA&#xff09; &#xff0c;就是只有一张Web页面的应用&#xff0c;是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。 单页应用的说法是在JavaScript和AJA…

每日一练——返回链表的中间结点

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

Nginx 的配置文件(负载均衡,反向代理)

Nginx可以配置代理多台服务器&#xff0c;当一台服务器宕机之后&#xff0c;仍能保持系统可用。 cmd查找端口是否使用&#xff1a;netstat -ano Nginx出现403 forbidden #解决办法&#xff1a;修改web目录的读写权限&#xff0c;或者是把nginx的启动用户改成目录的所属用户&…

0基础学习PyFlink——用户自定义函数之UDF

大纲 标量函数入参并非表中一行&#xff08;Row&#xff09;入参是表中一行&#xff08;Row&#xff09;alias PyFlink中关于用户定义方法有&#xff1a; UDF&#xff1a;用户自定义函数。UDTF&#xff1a;用户自定义表值函数。UDAF&#xff1a;用户自定义聚合函数。UDTAF&…

Go学习第十章——文件操作,Json和测试

Go文件操作&#xff0c;Json和测试 1 文件1.1 基本介绍1.2 读取的基本操作1.3 写入的基本操作1.4 使用案例(三个) 2 Go语言的Json使用2.1 序列化案例2.2 反序列化案例 3 单元测试3.1 先看个需求3.2 快速入门3.3 入门总结 1 文件 1.1 基本介绍 文件在程序中是以流的形式来操作…

使用Jenkins触发gitlab的webhook

满足条件&#xff1a; 首先手动构建可以完成构建 例如&#xff1a; 打开项目点击配置 在“Build Triggers”栏勾选&#xff0c;Build when a change is pushed to GitLab. GitLab webhook &#xff1b;如下 复制URL链接&#xff0c;我的链接是&#xff1a;http://192.168.44…

HarmonyOS鸿蒙原生应用开发设计- 流转图标

HarmonyOS设计文档中&#xff0c;为大家提供了独特的流转图标&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的流转图标内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的图标侵权意外情况等&#xff0c;减…

【每日一题】切割后面积最大的蛋糕

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;排序 其他语言python3 写在最后 Tag 【排序】【数组】【2023-10-27】 题目来源 1465. 切割后面积最大的蛋糕 题目解读 切割后面积最大的蛋糕。 解题思路 方法一&#xff1a;排序 本题较为简单&#xff0c;找出最大…

Android加载SO包

一、前言 这几天用Android整合开源的RTMP推拉流都没成功&#xff0c;好几年没玩Android了碰到好多坑&#xff0c;在Android中为了效率难免需要调用C语言编写生成的SO文件&#xff0c;比如图片渲染加速&#xff0c;视频编解码等插件&#xff0c;今天我们就先聊一下在Android中如…

51单片机实验:数码管动态显示00-99

1、实验要求 利用STC89C52RC单片机开发板实现&#xff1a;使用2位数码管循环显示00-99&#xff0c;每次间隔1s&#xff0c;并且当计数到20时&#xff0c;则蜂鸣器鸣响1次。 2、实验分析 程序实现分析&#xff1a; 1、定义数码管位选引脚&#xff08;P2.4、P2.5、P2.6、…

ES6初步了解迭代器

迭代器是什么&#xff1f; 迭代器(iterator)是一种接口&#xff0c;为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 iterator 接口&#xff0c;就可以完成遍历操作 ES6创造了一种新的遍历方法for…of循环&#xff0c;iterator 接口主要供 for…of 使用 原生中具…

Android12之#pragma clang diagnostic ignored总结(一百六十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

pip 更换源

方案1 在C盘用户名录下新建pip文件夹&#xff0c;里面包含pip.ini文件 方案2 在C盘用户名目录的AppData的Roaming下新建pip文件夹&#xff0c;里面包含pip.ini文件。 内容为 [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple