spark-hive连接操作流程、踩坑及解决方法

文章目录

  • 1 简介
  • 2 版本匹配
  • 3 spark hive支持版本源码编译
    • 3.1 spark-src下载
    • 3.2 maven换源
    • 3.3 spark编译
  • 4 hive 安装与mysql-metastore配置
    • 4.1 mysql下载安装
      • 4.1.1 为mysql设置系统环境变量
      • 4.1.2 初次登陆更改root身份密码
      • 4.1.3 安装后直接更改密码
    • 4.2 hive初始化
      • 4.2.1 编写hive-site.xml文件
      • 4.2.2 编写hive-env.sh
      • 4.2.3 初始化hive-metastore
      • 4.2.4 复制jdbc-connector依赖包
    • 4.3 编写spark-env.sh
    • 4.4 完善配置
  • 5 hive-spark连接与编程

1 简介

本篇将会解决以下5个问题

  1. hadoop-hive-spark-scala-java-mysql版本匹配
  2. hive-spark源码编译
  3. hive 安装并配置mysql作为metastore外存数据库
  4. spark连接hive外部包导入
  5. spark读写hive表程序

2 版本匹配

点击相应链接跳转至相应archive仓库

hadoop-2.7.1
hive 1.2.2
spark 2.1.0
scala 2.11.8
mysql 5.7.23 - jdbc-connector-5.1.40

3 spark hive支持版本源码编译

完整版教程在这里

3.1 spark-src下载

spark源码在此下载

3.2 maven换源

由于使用spark内置maven编译,需要添加国内镜像进行换源处理,能够加快速度;寻找该文件夹

>${SPARK_HOME}/build/apache-maven-3.3.9/conf/settings.xml

在镜像mirrors标签下添加

  <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror>

换源到alimaven

3.3 spark编译

接下来,编辑/etc/profile文件,输出HADOOP_HOME系统环境变量,这个环境变量在build过程中需要系统能够访问

> vim /etc/profile
-----------
#HADOOP_HOME
export HADOOP_HOME=/Users/collinsliu/hadoop-2.7.1/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
------------
> source /etc/profile
> hadoop version

最后,在终端中输入

./dev/make-distribution.sh --tgz --name h27hive -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver -DskipTests

进行spark-hive build操作

4 hive 安装与mysql-metastore配置

hive安装需要进行以下5个步骤

  1. MySQL5.1.27 DMG版本下载并安装, jdbc-connector5.1.40下载
  2. hive编写hive-site.xml|hive-env.sh, jdbc-connector复制到hive/lib文件夹下
  3. mysql建立metastore表格,hive初始化并成功连接mysql-metastore
  4. spark编写spark-env.sh包含hadoop|hive|scala路径
  5. hive-site.xml|core-site.xml|hdfs-site.xml 复制到spark/conf文件夹下

具体步骤参见这里

注: 教程中使用hive-1.2.1,由于apache-hive官方访问源更新,因此我们使用hive-1.2.2仍旧能够兼容

4.1 mysql下载安装

在mac电脑上,我们需要选择mysql 5.7.23 DAG版本,然后直接以app形式进行安装即可

需要注意的是,此种方式下mysql会以服务的方式安装在电脑中,因此我们需要卸载掉之前可能安装着的mysql版本。

4.1.1 为mysql设置系统环境变量

如果mysql指令未被系统识别,我们需要手动添加系统环境变量

> vim /etc/profile
----------
#MYSQL_HOME
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
----------
> source /etc/profile

然后,我们便可以使用

> mysql -uroot -p

进行初次登陆

4.1.2 初次登陆更改root身份密码

在安装最后,系统会自动生成root管理员角色的密码

在这里插入图片描述

我们如果记录下来,安装后首次登陆后可以采用如下指令:

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

在登陆入mysql后更改密码

4.1.3 安装后直接更改密码

在安装后,如果我们没有记录系统生成的初始密码,可以采用如下方式

> mysqladmin -u root passwrod 新密码

暴力修改密码

4.2 hive初始化

4.2.1 编写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://localhost:3306/hive?createDatabaseIfNotExist=true</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>root</value>
</property><!-- jdbc 连接的 password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property><!-- Hive 元数据存储版本的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property><!--元数据存储授权--><property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property><property>
<name>hive.exec.scratchdir</name>
<value>hdfs://localhost:9000/hive/opt</value>
</property><!-- Hive 默认在 HDFS 的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property><!-- 指定 hiveserver2 连接的 host -->
<property>
<name>hive.server2.thrift.bind.host</name>4
<value>localhost</value>
</property><!-- 指定 hiveserver2 连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property><!-- 指定本地模式执行任务,提高性能 -->
<property>
<name>hive.exec.mode.local.auto</name>
<value>true</value>
</property>
</configuration>

4.2.2 编写hive-env.sh

# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/Users/collinsliu/hadoop-2.7.1/# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/Users/collinsliu/hive-1.2.2/conf

4.2.3 初始化hive-metastore

> cd ${hive_home}/bin
> ./schematool -dbType mysql -initSchema

4.2.4 复制jdbc-connector依赖包

jdbc-connector复制到 ${hive_home}/lib文件夹下

4.3 编写spark-env.sh

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home
export SCALA_HOME=/Users/collinsliu/scala-2.11.8
export HIVE_CONF_DIR=/Users/collinsliu/hive-1.2.2/conf
export HADOOP_CONF_DIR=/Users/collinsliu/hadoop-2.7.1/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/Users/collinsliu/hadoop-2.7.1/bin/hadoop classpath)
export CLASSPATH=$CLASSPATH:/Users/collinsliu/hive-1.2.2/lib
export SPARK_CLASSPATH=$SPARK_CLASSPATH:/Users/collinsliu/hive-1.2.2/lib/mysql-connector-java-5.1.40.jar

4.4 完善配置

hive-site.xml|core-site.xml|hdfs-site.xml 复制到${spark_home}/conf文件夹下

5 hive-spark连接与编程

相关项目以及pom文件配置可以参见我的这个代码仓库

配置项目时如果出现包导入错误,可以参见我的这篇文章

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

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

相关文章

pycharm pyspark连接虚拟机的hive表 读取数据

方法&#xff1a; hive配置hiveserver2和metastore url <!-- 指定hiveserver2连接的host --> <property><name>hive.server2.thrift.bind.host</name><value>hadoop111</value> </property><!-- 指定hiveserver2连接的端口号 -…

langchain + azure chatgpt组合配置并运行

首先默认你已经有了azure的账号。 最重要的是选择gpt-35-turbo-instruct模型、api_version&#xff1a;2023-05-15&#xff0c;就这两个参数谷歌我尝试了很久才成功。 我们打开https://portal.azure.com/#home&#xff0c;点击更多服务&#xff1a; 我们点击Azure OpenAI&#…

华为ensp中ospf多区域管理 原理及配置命令(详解)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; ————前言———— OSPF 多区域的主要作用是缩小链路状态数据库和路由表的规模&#xff0c;减少路由更新的频率&#xff0c;提高网络的可扩展性&#xff0c;实现路由过滤和路由汇总&#xff0…

A First Course in the Finite Element Method【Daryl L.】|PDF电子书

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

zdpcss_transparent_animation_login:使用纯HTML+CSS+JS开发支持设置主题和带动画的科技风登录界面

废话不多说&#xff0c;先上图&#xff0c;有图有真相&#xff1a; 在左下角有一排颜色&#xff0c;点击可以设置主题色&#xff1a; 比如&#xff0c;我这里点击了橙色&#xff0c;登录界面就变成了如下样子&#xff1a; 另外&#xff0c;在输入账号和密码的时候&#x…

使用 ChatGPT 创建在线课程:一步一步指南与提示模板

原文&#xff1a;Creating Online Courses with ChatGPT 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 谢谢 作为对你支持的感谢&#xff0c;随意定制本书中列出的任何提示&#xff0c;并将其作为你自己的重新销售。是的&#xff0c;对你免费。 它们都结构良好且用…

蓝桥杯—DS1302

目录 1.管脚 2.时序&官方提供的读写函数 3.如何使用读写函数 4.如何在数码管中显示在DS1302中读取出的数据&#xff1f; 1.管脚 2.时序&官方提供的读写函数 /* # DS1302代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行…

韩顺平Java | C23 反射Reflection

需求&#xff1a;通过外部文件配置&#xff0c;在不修改源码情况下控制程序&#xff08;符合设计模式ocp开闭原则&#xff1a;不修改源码的情况下扩容功能&#xff09; ※反射机制 反射机制允许程序在执行期间借助于ReflectioAPI取得任何类的内部信息&#xff08;如成员变量&…

跨境金融区块链服务平台

跨境金融服务是因企业及个人跨境经营、交易、投资、往来等活动而产生的资金使用、调拨、配置等需求&#xff0c;而提供的金融服务。近年来&#xff0c;随着我国经济的快速稳步增长和全球化经济一体化的不断深入发展&#xff0c;跨境金融业务增长迅速&#xff0c;监管也开始转化…

AcWing 731. 毕业旅行问题(每日一题)

原题链接&#xff1a;731. 毕业旅行问题 - AcWing题库 此题难度较大&#xff0c;是2019年字节跳动校招题&#xff0c;里面涉及位运算与状态压缩DP&#xff0c;不会的可以去学习&#xff0c;此题根据个人量力而行。 建议看一下y总的讲解&#xff1a;AcWing 731. 毕业旅行问题&…

初识MySQL(中篇)

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法&#xff0c;看完代码自己敲一遍&#xff0c;十分有用 目录 1.SQL语言 1.1 SQL语言组成部分 2.MySQL数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 3.创建数据表 3.1 创建数据表方法1 …

Mybitis根据Date查询,查询不到数据的一种情况

使用SimpleDateFormat创建Date对象时&#xff0c;调用SimpleDateFormat构造方法时格式要写为“yyyy-MM-dd”&#xff0c;如果写成“yyyy-mm-dd”会查询不到数据

2024-HW --->SSRF

这不是马上准备就要护网了嘛&#xff0c;如火如荼的报名ing&#xff01;&#xff01;&#xff01;那么小编就来查缺补漏一下以前的web漏洞&#xff0c;也顺便去收录一波poc&#xff01;&#xff01;&#xff01;&#xff01; 今天讲的主人公呢就是SSRF&#xff0c;以前学的时候…

windows server 配置DNS

配置DNS为本机IPV4地址 安装DNS服务器&#xff08;默认即可&#xff09;

【C++ STL排序容器】set 集合

文章目录 【 1. 基本原理 】【 2. set 的定义 】2.1 调用默认构造函数&#xff0c;创建空的 set 容器2.2 在创建 set 容器的同时&#xff0c;对其进行初始化2.3 拷贝构造的方式创建2.4 取已有 set 容器中的部分元素&#xff0c;来初始化新 set 容器2.5 修改排序规则的方式创建 …

Kotlin:for循环的几种示例

一、 打印 0 到 2 1.1 方式一&#xff1a;0 until 3 /*** 打印 0 到 2*/ fun print0To2M1(){for (inex in 0 until 3){// 不包含3print("$inex ")} }运行结果 1.2 方式二&#xff1a;inex in 0 …2 /*** 打印 0 到 2*/ fun print0To2M2(){for (inex in 0 ..2){//…

HarmonyOS NEXT应用开发之ForEach:循环渲染

ForEach接口基于数组类型数据来进行循环渲染&#xff0c;需要与容器组件配合使用&#xff0c;且接口返回的组件应当是允许包含在ForEach父容器组件中的子组件。例如&#xff0c;ListItem组件要求ForEach的父容器组件必须为 List组件 。 说明&#xff1a; 从API version 9开始&a…

环形链表的约瑟夫问题

著名的 Josephus 问题&#xff1a; 据说著名犹太历史学家Josephus&#xff08;弗拉维奥约瑟夫斯&#xff09;有过以下的故事&#xff1a;在罗马人占领乔塔帕特后&#xff0c;39 个犹太人与Josephus及他的朋友躲到一个洞中&#xff0c;39个犹太人决定宁愿死也不要被敌人抓到&…

【哈希表专题】(1. 两数之和 面试题 01.02. 判定是否互为字符重排 217. 存在重复元素 219. 存在重复元素 II 49. 字母异位词分组)

文章目录 哈希表1. 两数之和面试题 01.02. 判定是否互为字符重排217. 存在重复元素219. 存在重复元素 II49. 字母异位词分组 哈希表 哈希表是什么&#xff1a;存储数据的容器 作用&#xff1a;快速查找某个元素。O(1) 当我们需要频繁的查找某一个数的时候&#xff0c;可以使…

图像拼接——最小割准则提取拼接缝

一、最大流问题与Ford-Fulkerson算法介绍 二、最大流与最小割 显然,我们有对任意一个割,穿过该割的净流量上界就是该割的容量,即不可能超过割的容量。所以网络的最大流必然无法超过网络的最小割。最小割是指割的容量最小,最大流是指网络当中最大的净流量,简单的例子s是水龙…