Spark On Hive原理和配置

news2024/12/27 12:01:02

目录

一、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()

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

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

相关文章

常用应用安装教程---在centos7系统上安装JDK8

在centos7系统上安装JDK8 1&#xff1a;进入oracle官网下载jdk8的tar.gz包&#xff1a; 2&#xff1a;将下载好的包上传到每个服务器上&#xff1a; 3&#xff1a;查看是否上传成功&#xff1a; [rootkafka01 ~]# ls anaconda-ks.cfg jdk-8u333-linux-x64.tar.gz4&#xf…

Ps:简单快速的主背分离方法

将主体与背景分离开来&#xff0c;可大大提高后期调色修片的效率。本文介绍的方法&#xff0c;简单快速&#xff0c;实用性强。 ◆ ◆ ◆ 主背分离一般步骤及说明 1、复制背景图层两次&#xff0c;分别命名为&#xff1a;“主体”和“新背景”。隐藏原背景图层。 2、选取主体…

华为NAT配置实例(含dhcp、ospf配置)

一、网络拓朴如下&#xff1a; 二、要求&#xff1a;PC1 能访问到Server1 三、思路&#xff1a; R2配置DHCP&#xff0c;R2和R1配OSPF&#xff0c;R1出NAT 四、主要配置&#xff1a; R2的DHCP和OSPF&#xff1a; ip pool 1gateway-list 10.1.1.1 network 10.1.1.0 mask 25…

进程/线程/PCB

进程&#xff1a;正在运行中的程序&#xff08;进程是驻留在内存中的&#xff09; 是系统执行资源分配和调度的独立单位每一个进程都有属于自己的存储空间和系统资源注意&#xff1a;进程A 和 进程B 的内存独立不共享 使用jdk自带的工具&#xff0c;jconsole查看当前Java进程中…

【C++】STL容器——vector类的使用指南(含代码演示)(11)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一、vector类——基本介绍二、vector类…

日本IT Week秋季展丨美格智能以技术创新共建美好数字生活

10月25日至27日&#xff0c;日本国际IT消费电子展览会&#xff08;Japan IT Week 2023秋季展&#xff09;在日本千叶幕张国际展览中心举行。日本IT周是日本IT市场的标杆&#xff0c;涵盖软件开发、大数据管理、嵌入式系统、数据存储、信息安全、数据中心、云计算、物联网&#…

python自动化测试(四):ECShop后台:商品分类添加

前置条件&#xff1a; 本地部署&#xff1a;ECShop的版本是3.0.0、Google版本是 Google Chrome65.0.3325.162 (正式版本) &#xff08;32 位&#xff09; Google驱动的selenium版本是3.11.0 目录 前置代码 一、登录&#xff08;后台登录&#xff09; 二、进入商品分类页…

嵌入式系统设计师考试笔记之操作系统基础复习笔记二

目录 3、任务管理 &#xff08;1&#xff09;嵌入式操作系统的任务管理可以分为 &#xff08;2&#xff09;进程 &#xff08;3&#xff09;线程 &#xff08;4&#xff09;任务 &#xff08;5&#xff09;任务的创建与中止 &#xff08;6&#xff09;任务的状态任务有三…

Spring Boot 使用 Disruptor 做内部高性能消息队列

这里写自定义目录标题 一 、背景二 、Disruptor介绍三 、Disruptor 的核心概念3.1 Ring Buffer3.2 Sequence Disruptor3.3 Sequencer3.4 Sequence Barrier3.5 Wait Strategy3.6 Event3.7 EventProcessor3.8 EventHandler3.9 Producer 四、案例-demo五、总结 一 、背景 工作中遇…

rust入门

一&#xff0c;输入输出 println!("Hello, World"); 二&#xff0c;函数 1&#xff0c;main函数 fn main() {println!("Hello, World"); }2&#xff0c;普通函数 fn myPrint(){println!("{}", 1234); } fn main() {myPrint(); }3&#xff0…

AI新能量!FortiGate NGFW面向数据中心全面集成FortiGuard AI 安全服务

企业IT技术正在以惊人的速度发展&#xff0c;转型最大的领域之一是下一代防火墙&#xff08;NGFW&#xff09;市场。如今&#xff0c;混合云、多云、边缘等多种基础设施形态共存&#xff0c;已经成为大部分企业的常态&#xff0c;不断扩张的攻击面需要不同形态防火墙的安全防护…

一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel

前言 日常工作中经常与数据打交道的同学肯定会难以避免对Excel的一些数据操作如导入、导出等&#xff0c;但是当对一些大数据量操作Excel时经常会遇到一个常见的问题内存溢出。今天给大家推荐一个简单、高效、低内存避免OOM&#xff08;内存溢出&#xff09;的.NET操作Excel开…

PDF 文档处理:使用 Java 对比 PDF 找出内容差异

不论是在团队写作还是在个人工作中&#xff0c;PDF 文档往往会经过多次修订和更新。掌握 PDF 文档内容的变化对于管理文档有极大的帮助。通过对比 PDF 文档&#xff0c;用户可以快速找出文档增加、删除和修改的内容&#xff0c;更好地了解文档的演变过程&#xff0c;轻松地管理…

FL Studio21.2官方重磅更新及新功能一分钟介绍

好消息&#xff01;FL Studio21.2 在 10 月 26 日正式发布啦&#xff0c;它新增了 FL Cloud 在线采样库和 AI 音乐制作功能&#xff0c;还提供音乐分发到 Spotify、Apple Music 等主要音乐平台的服务。此外&#xff0c;还有新的音频分离功能、自定义波形颜色和新的合成器 Keple…

Go 开发IDE全览:GoLand VS VSCode全面解析

一、引言 在软件开发的世界里&#xff0c;开发环境的选择与配置是成功项目的基础之一。特别是在Go&#xff08;又名Golang&#xff09;这样一个逐渐获得主流认同、在微服务和云计算领域有着广泛应用的编程语言中&#xff0c;选择合适的开发工具就显得尤为重要。虽然Go语言自身…

在Eclipse中使用Junit

1、准备测试类 public class Calculator {private static int result;public void add(int n) {result result n;} public void substract(int n) {result result -1; //Bug:正确的应该是resultresult-n}public void multiply(int n) {// result result*n;方法未写好}publi…

Jenkins+Python自动化测试持续集成详细教程

Jenkins安装 Jenkins安装 ​ Jenkins是一个开源的软件项目&#xff0c;是基于java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。由于是基于java开发因此它也依赖java环境&…

多线程的学习01

什么是线程 线程是为了解决并发编程引入的机制&#xff0c;线程相比进程来说更轻量。 创建线程比创建进程——开销更小 销毁线程比销毁进程——开销更小 调度线程比调度进程——开销更小 进程包含线程&#xff0c;同一进程里的若干线程之间&#xff0c;共享着内存资源和文件描…

VPS是什么?详解亚马逊云科技Amazon Lightsail(VPS)虚拟专用服务器

2006年&#xff0c;南非开普敦&#xff0c;亚马逊推出了WBS&#xff0c;以网络服务的形式向企业提供基础的IT服务。亚马逊云科技的一小步&#xff0c;在无数技术更迭&#xff0c;天才设计师和程序员的努力与基础设施建设的完善之下成为了人类科技进展的一大步。 亚马逊云科技可…

层次式架构的设计理论与实践

层次式架构的设计理论与实践 层次式架构概述 层次式架构的定义和特性 定义 特性 层次式架构的一般组成(表现层、中间层、数据访问层和数据层) 表现层框架设计 设计模式 MVC MVP MVVM XML技术 UIP设计思想 表现层动态生成设计思想(基于XML界面管理技术) 中间层架构设计 业务…