介绍
在我的上一篇文章中,我介绍了如何在 Windows 上设置和使用 Hadoop。现在,本文将介绍在 Windows 操作系统上为 Apache Spark 配置本地开发环境。
Apache Spark 是最流行的群集计算技术,专为快速可靠的计算而设计。它提供隐式数据并行性和默认容错能力。它可轻松与 HIVE 和 HDFS 集成,并提供并行数据处理的无缝体验。你可以在https://spark.apache.org阅读更多关于火花。
默认情况下,Spark SQL 项目不会在 Windows 操作系统上运行,并要求我们首先执行一些基本设置;例如,在 Windows 操作系统上运行 Spark SQL 项目。这就是我们在本文中要讨论的所有问题,因为我没有发现它在互联网上或书籍中记录得很好。
本文还可用于在 Mac 或 Linux 上设置 Spark 开发环境。只需确保您从 Spark 的网站下载正确的操作系统版本。
您可以在此处引用 GitHub 中本文中使用的 Scala 项目:https://github.com/gopal-tiwari/LocalSparkSql。
期待什么
在本文的末尾,您应该能够在 Windows 操作系统上创建/运行Spark SQL项目和火花外壳。
我把这篇文章分为三部分。您可以遵循以下三种模式中的任何一种,具体取决于您的特定用例。
您可能还喜欢:
完整的Apache火花集合[教程和文章]。
激发本地开发设置模式
- 单个项目访问(单个项目单一连接)
- 每个项目都有自己的元存储和仓库。
- 一个项目创建的数据库和表将不能被其他项目访问。
- 一次只能运行或执行一个 Spark SQL 项目。
- 多项目访问(多项目单一连接)
设置时间:20 分钟
功能:扩展- 每个项目将共享一个公共元存储和仓库。
- 由一个项目创建的表将可由其他项目或火花壳访问。
- 它将提供一个伪群集,就像感觉一样。
- 一次只能运行或执行一个 Spark SQL 项目。
- 完整群集式访问(多项目多连接)
设置时间:40 分钟
功能:完整- 此配置有点繁琐,但一次性设置将使您能够为元存储打开多个连接
设置时间:15 分钟
功能:有限
火花错误解决方案
他们中的许多人可能尝试过在 Windows 上运行火花,在运行项目时可能面临以下错误:
16/04/02 19:59:31 WARN NativeCodeLoader: Unable to load native-hadoop library for
your platform... using builtin-java classes where applicable
16/04/02 19:59:31 ERROR Shell: Failed to locate the winutils binary in the hadoop
binary path java.io.IOException: Could not locate executable null\bin\winutils.exe
in the Hadoop binaries.
这是因为您的系统没有适用于 Windows 操作系统的本机 Hadoop 二进制文件。
你可以按照我上一篇文章构建一个,或者从https://github.com/cdarlint/winutils下载一个。
以下错误还与 Windows 操作系统的本机 Hadoop 二进制文件有关。
16/04/03 19:59:10 ERROR util.Shell: Failed to locate the winutils binary in the
hadoop binary path java.io.IOException: Could not locate executable
C:\hadoop\bin\winutils.exe in the Hadoop binaries.
解决方案是相同的。我们需要 HADOOP_HOME
使用本机 Windows 二进制文件进行设置。
所以,只要跟着这篇文章,在本教程的结尾,你应该能够摆脱所有这些错误。
下载所需文件
- 下载并安装JDK根据您的操作系统和CPU架构从https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html。
- 安装Scala版本取决于您https://www.scala-lang.org/download/all.html使用的Spark版本。
- 下载并安装7-zip从https://www.7-zip.org/download.html。
- 下载并提取Apache火花使用7zip从http://spark.apache.org/downloads.html。
- 从https://github.com/cdarlint/winutils下载 zip 或克隆 Hadoop Windows 二进制文件。
- 如果未安装 IDE,请安装一个 IDE。Intellij IDEA 是首选,您可以从https://www.jetbrains.com/idea/download/#section=windows获取社区版本
microsoft.com/en-us/download/details.aspx?id=5555″rel=”nofollow”目标=”_blank”\https://www.microsoft.com/en-us/下载/详细信息.aspx?id=5555。
对于 32 位 (x86) OS,您只需安装 a.,对于 64 位 (x64),请安装 a. 和 b。
在本教程中,我们假设 Spark 和 Hadoop 二进制文件在C:#驱动器中解压缩。但是,您可以在系统中的任何位置解压缩它们。
设置和安装
Jdk
在继续之前,让我们确保 Java 设置正确完成,并且使用 Java 的安装目录更新环境变量。
要确认 Java 已安装在您的计算机上,只需打开 cmd 并键入 java –version
。您应该能够看到系统上安装的 Java 版本。
如果您收到错误消息,如”‘java’未被识别为内部或外部命令、可操作程序或批处理文件”,请按照以下步骤操作。否则,请跳过它。
- 执行下载的 JRE 和 JDK 设置,并在默认设置下完成安装。
- 现在,打开系统环境变量对话
- 对于 Windows 7,右键单击“我的计算机”并选择“属性>高级“。
- 对于 Windows 8,转到“控制面板”>系统 > 高级系统设置。
- 对于 Windows 10,转到“控制面板”>系统和安全 > 系统 > 高级系统设置。
- 单击”环境变量”按钮。
- 单击“系统变量”部分中的“新建…”按钮。然后,
JAVA_HOME
键入变量名称字段,并在变量值字段中提供 JDK 安装路径。 - 如果路径包含空格,请使用缩短的路径名称 – 例如,C:\Progra_1_Java_jdk1.8.0_74
- 适用于 64 位系统上的 Windows 用户
- Progra_1 = “程序文件”
- Progra_2 = “程序文件(x86)”
java –version
,您应该能够看到刚刚安装的 Java 版本。如果命令提示听起来与上图类似,您就好去。否则,您需要检查您的设置版本是否与操作系统体系结构 (x86、 x64) 匹配。环境变量路径也可能不正确。
Scala
- 您可能需要安装 Scala,具体取决于您的 Spark 版本。
- 在本文中,我们将使用 Spark 2.4.4 和 Scala 2.12.10。
- 只需执行下载的scala-2.12.10.msi,然后按照安装说明操作
命令提示应如下所示:
IntelliJ IDEA 设置
- 您可以使用Scala插件设置Eclipse,或者只是安装IntelliJ IDEA。
- 您可以选择从首次设置屏幕或设置 > 插件 > 搜索和安装 Scala 中安装 Scala 插件。
- 如果您在安装插件期间有 VPN 代理问题,您可以选择脱机插件安装。
- 确保文件> 设置 > 插件窗口显示已安装 Scala 插件,如下图所示:
哈多普家庭设置
- 使用 7 zip(即 winutils master.zip)打开下载的 GitHub 存储库https://github.com/cdarlint/winutils。
- 在里面,你会发现文件,有2.7.7。现在,将其提取到C:*驱动。
- 您的C:_hadoop-2.7.7_bin目录应如下所示:
- 提取完成后,我们需要添加新
HADOOP_HOME
的系统环境变量
jpg” 数据-新=”假”数据大小=”26042″数据大小格式化”26.0 kB”数据类型=”temp”数据 url=”/存储/临时/12944315 -8.jpg”src=”http://www.cheeli.com.cn/wp-内容/上传/2020/02/12944315-8.jpg”样式=”宽度:661px;显示:块;垂直对齐:顶部;边距:5px自动;文本对齐:中心;”/>
火花主页设置
- 使用 7-zip(即 spark-2.4.4-bin-hadoop2.7.gz)打开下载的 Spark gz 文件。
- 在里面,你会发现焦油文件火花-2.4.4-bin-hadoop2.7。双击它,并将火花-2.4.4 bin-hadoop2.7目录提取到C:*驱动器。
- 您的C:*spark-2.4.4bin-hadoop2.7目录应如下所示:
- 提取完成后,我们需要将 Spark bin 目录添加到系统环境”路径”变量中。
- 编辑路径变量并添加”C:\spark-2.4.4-bin-hadoop2.7_bin”,如下图所示:
注意:如果您没有管理员添加环境变量的访问权限,不要担心,因为您可以在 IDE 中单独为每个项目设置它
单个项目访问
现在,让我们创建一个名为”LocalSparkSql”的斯卡拉-Maven项目。或者,您也可以从 GitHub 克隆它:https://github.com/gopal-tiwari/LocalSparkSql。
项目结构如下所示:
本地火花测试.scala
xxxxxxxxx
5px;”>
包装组织.已连接。火花
导入组织.阿帕奇.火花。sql.[数据帧保存模式火花会话]
对象本地火花测试|
def主(args数组+字符串单元= |
9961px;”>
瓦尔火花会话+火花会话。生成器()
.启用Hive支持()
.主("本地")
.应用程序名称("演示")
.获取或创建()
火花。sql("SHOW 数据库")显示
sql(“创建数据库如果不是无火花” )
火花。sql("创建表如果不是活动 ssademo.table1 (id INT, 名称 STRING)) )
火花。sql("SHOW 数据库")显示
进口火花。隐式。_
valdf:数据帧=Seq(
(1"一")
9961px;”>
(3"三")
).到DF("id","名称")
df.写。模式(保存模式。追加)。格式("蜂巢")。保存表("sparkdemo.table1")
//线程.睡眠(60 × 1000)
火花。sql("选择 + 从火花示范.表1 ")显示(假)
println(火花)
表1″计数)
}
}
pom.xml
684px;”>
xxxxxxxxx
<项目xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<模型版本>4.0.0</模型版本>
<组 Id>org.connected.spark</组 Id>
<工件 Id>本地火花 Sql</工件 Id>
<版本>1.0.0-SNAPSHOT</版本>
1px;”& lt;依赖项>
<依赖项>
<组 Id>org.apache.spark</组 Id>
<工件 Id>火花-core_2.12</工件 Id>
<版本>2.4.4</版本>
</依赖项>
1px;”& lt;依赖项>
<组 Id>org.apache.spark</组 Id>
<工件 Id>火花-sql_2.12</工件 Id>
<版本>2.4.4</版本>
</依赖项>
<依赖项>
1px;”[ <组 Id>org.apache.spark</组 Id>
<工件 Id>火花-hive_2.12</工件 Id>
<版本>2.4.4</版本>
</依赖项>
</依赖项>
</项目>
错误 1
Exception in thread "main" org.apache.spark.sql.AnalysisException:
java.lang.RuntimeException: java.io.IOException: (null) entry in command string:
null chmod 0733 C:\tmp\hive;
如果您看到上述错误,则表示未 HADOOP_HOME
正确设置。
如果由于管理员访问问题而无法设置系统环境变量,则可以在此处将其设置,否则将执行以下几个步骤,您可以跳到下一个指令。
- 转到 Intellij 屏幕和编辑配置的右上角
- 从左侧面板展开应用程序可以添加和选择本地火花Hive测试。
- 现在,在环境变量文本框中添加“HADOOP_HOME_C:_hadoop-2.7.7″。
- 单击“应用“并关闭对话框。
现在,让我们尝试再次运行主对象
错误 2
Exception in thread "main" org
spark.sql.分析异常:
java.lang.运行时异常:java.lang.运行时异常:根暂存目录:
HDFS 上的 /tmp/hive 应可写。当前权限为:———;
要解决此错误,我们需要打开 Hive 默认临时目录的权限。
在这里,我们需要打开您的 Hadoop 主页,然后进入/bin目录并执行以下命令:
winutils.exe chmod 777 /tmp/hive
授予的权限应为”drwxrwrwx”,您可以使用以下命令检查权限状态
winutils.exe ls \tmp\hive
错误 3
如果计算机没有 Microsoft Visual C++ 2010 可再发行包,则可能会收到以下错误。
The code execution cannot proceed because MSVCR100.dll was not found.
Reinstalling the program may fix this problem.
你可以从本文的“下载“部分下载并安装C++2010年可再发行包,因为我已经提供了直接下载链接。
现在,让我们再次执行该项目,您应该能够创建一个数据库和表没有任何问题。
输出:
4 kB”数据类型=”temp”数据 url=”/存储/临时/12944553-18.jpg”src=”http://www.cheeli.com.cn/wp-内容/上传/2020/02/12944553-18.jpg”样式=”宽度:195px;显示:块;垂直对齐:顶部;边距:5px自动;文本对齐:中心;”/>
现在,您可能已经注意到,在项目的根文件夹下创建了两个新目录,metastore_db和火花仓库。
这些目录是什么???
metastore_db:
Spark SQL 使用 Hive 元存储来管理用户创建的数据库和表的元数据信息。可以假定它是一个小型关系数据库,用于存储有关实际数据库目录路径、表结构、分区列、文件位置等的信息。
默认情况下,Spark 附带嵌入式 Derby Db 支持来管理元数据。有关德比的更多信息,请参阅此https://db.apache.org/derby/。
火花仓库:
仓库目录是写入表数据的位置。默认情况下,Spark 将目录创建为火花仓库。
你可以在这里获得更多的信息https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-hive-metastore.html。
现在,如果我们创建另一个新项目,使用与本地SparkSql项目相同的代码,我们可以注意到,我们无法访问由我们以前的项目创建的数据库“sparkdemo”。此行为背后的原因是,对于每个项目,metastore_db和火花仓库将再次创建,并且它们特定于该项目,因为它们是在项目的根目录下创建的。
但是,我们可以连接到其他项目元存储和仓库,但更好的方法是创建一个通用的独立metastore_db和火花仓库目录,并通过添加很少的额外配置在多个项目之间共享相同的SparkSession,这就是我们在下一节中要讨论的
在本演示中,我们将使用目录位置,如下所示:
对于metastore_db C:\tmp_hive_metastore_db
对于仓库 C:\tmp_hive_火花仓库
配置火花项目
为了让 Spark 引用我们新的公共目录,我们需要在创建 Spark 会话对象期间添加以下配置:
spark.sql.warehouse.dir = C:/tmp/hive/火花仓库
javax.jdo.option.连接URL = jdbc:derby:;daabaseName_C:/tmp/hive/metastore_db;create=true
代码应如下所示:
瓦尔火花会话+火花会话
1px;”> .启用Hive支持()
.主("本地")
.应用程序名称("演示")
.配置("火花.sql.warehouse.dir","C:/tmp/hive/火花仓库")
.配置("javax.jdo.option.连接URL","jdbc:derby:;daabaseName_C:/tmp/hive/metastore_db;create=true)
.获取或创建()
您需要在每个项目中使用上述配置,以便项目访问由其他应用程序创建的数据库和表。
配置火花外壳
现在,为了检查上述配置的有效性,我们可以启动一个火花壳,并尝试访问”火花”数据库和“表1”4.4 bin-hadoop2.7_conf.
spark.driver.extraJavaOptions -Dderby.system.home=C:/tmp/hive
spark.sql.warehouse.dir C:/tmp/hive/spark-warehouse
spark-shell
C:\spark-2.4.4-bin-hadoop2.7_bin目录运行。现在,让我们尝试通过运行 SHOW DATABASES
和选择 shell 中的表 1 中的所有数据来列出所有数据库。
上述结果验证了我们的共享元存储配置是否正确,因为我们能够访问由上述代码创建的表。
现在,如果您保持火花壳打开并尝试在同一时间运行您的scala项目,你会得到以下错误。
Unable to open a test connection to the given database. JDBC url = jdbc:derby:;databaseName=C:/tmp/hive/metastore_db;create=true, username = APP. Terminating connection pool (set lazyInit to true if you expect to start your database after your app). Original Exception: ------
java.sql.SQLException: Failed to start database 'C:/tmp/hive/metastore_db' with class loader org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@4262fdeb, see the next exception for details.
这是因为我们使用 Spark 的嵌入式derbyDb,并且一个应用程序(即火花壳)已直接连接到共享metastore_db数据库并获取了锁,因此无法启动另一个实例。如果我们可以使用网络服务而不是直接连接到数据库连接到 Derby,这种情况本来是可以避免的。但是,我们没有运行 derby 服务器实例,因此在这种情况下无法执行此操作。
但是,我们可以在单独的关系数据库中创建 Hive 元存储,并让 Spark 连接到该数据库以启用多连接设置。我们将在下一节中讨论它。
完全群集式访问
要在此模式下配置本地元存储,我们需要下载并安装下面列出的几个额外组件,以及本文”下载”部分中指定的其他组件
下载
- 下载并安装 MySql 社区版:https://dev.mysql.com/downloads/windows/installer/8.0.html。
- 如果您没有 SQL GUI 编辑器,请安装海蒂Sql:https://www.heidisql.com/download.php
- 下载 MySql 连接器 jar,具体取决于https://dev.mysql.com/downloads/connector/j/的 MySql 服务器版本。请确保选择独立于平台的操作系统以继续操作。
- 下载或打开 Hive 元存储DDL:https://raw.githubusercontent.com/apache/hive/master/metastore/scripts/upgrade/mysql/hive-schema-2.3.0.mysql.sql
- 从以下位置下载 Hive 事务架构DDL:https://raw.githubusercontent.com/apache/hive/master/metastore/scripts/upgrade/mysql/hive-txn-schema-2.3.0.mysql.sql
安装
Mysql:
- 运行下载的mysql 安装程序-社区-8.0.*.*..msi.
- 选择设置类型作为自定义。
- 请至少选择要安装的以下功能:
- 在下一页中,单击“执行“以让安装程序从系统中下载并安装任何缺少的组件。
- 单击“下一步“并执行以开始安装。
- 安装后,将显示配置页;让我们选择独立的MySQL服务器。
- 选择“开发计算机“作为配置类型,并将其他设置保留为默认值。
- 为了简化此演示,我们将根密码设置为”root”。
- 将其他设置保留为默认值并完成安装。
海蒂SQL
- 现在,执行下载的HeidiSQL___Setup
CREATE DATABASE metastore_db;
USE metastore_db;
- 删除或注释掉行号 835,作为“-SOURCE 配置单元-txn-schema-2.3.0.mysql.sql;”
- metastore_db上执行整个 DDL。
在metastore_db上成功执行两个 SQL 文件后,您都将配置项目以访问此元存储。因此,让我们使用以下步骤配置火花外壳和Scala/Java项目:
配置火花外壳
在启动火花壳之前,我们需要将其配置为使用通用的 MySQL 元存储和仓库。请按照以下步骤配置 shell:
- 转到 Spark 配置目录C:\spark-2.4.4-bin-hadoop2.7_conf。
- 请确保删除文件“火花默认.conf”或注释掉之前添加的spark.driver.extraJavaOptions和spark.sql.warehouse.dir的行。
- 现在,创建一个名称为hive-site.xml的新文件。然后,在 conf 目录下添加以下内容。
hive-site.xml
选项。连接驱动程序名称_lt;/name>
<value>com.mysql.cj.jdbc.Driver</value>
<描述>JDBC元存储的驱动程序类名称</描述>
</属性>
<属性>
<name>javax.jdo.option.连接用户名称\lt;/name>
<value>root</value>
</属性>
<属性>
<name>javax.jdo.option.连接密码\lt;/name>
<value>root</value>
</属性>
<属性>
<name>hive.metastore.warehouse.dir</name>
<value>C:/tmp/hive/火花仓库</value>
<描述>仓库默认数据库的位置</描述>
</属性>
[lt;/配置>”数据朗=”应用程序/xml”}
xxxxxxxxx
<配置>
1px;”* <名称>javax.jdo.option.连接 URL</名称>
<值>jdbc:mysql://本地主机:3306/metastore_db?ceatedatabaseIfNotexist_true</值>
<描述>JDBC 连接字符串的 JDBC 元存储</描述>
</属性>
<财产>
jdo.option.连接驱动程序名称</名称>
<值>com.mysql.cj.jdbc.驱动程序</值>
<描述>JDBC 元存储的驱动程序类名称</描述>
</属性>
<财产>
<名称>javax
选项。连接用户名称</名称>
<值>根</值>
</属性>
<财产>
<名称>javax.jdo.option.连接密码</名称>
<值>根</值>
1px;”& lt;属性>
<名称>hive.metastore.warehouse.dir</名称>
<值>C:/tmp/hive/火花仓库</值>
<描述>仓库默认数据库的位置</描述>
</属性>
</配置>
18.jar 到C:_spark-2.4.4-bin-hadoop2.7_jars_目录。你可以从C:[程序文件 (x86)[MySQL_连接器 J 8.0]获取它,或者使用下载部分已下载的文件。链接: https://dev.mysql.com/downloads/connector/j/.
xxxxxxxxx
5px;”>
火花.sql("创造数据库如果不是"无可争性")
火花.sql(
是""
创建表,如果不存在火花.表2
(
id INT,
名称 STRING
1px;”> )
分区(
日期 STRING
)
存储为镶木地板
""")
导入 org.apache.spark.sql.[数据帧,保存模式]
进口火花
_
spark.conf.set("hive.exec.dynamic.partition.mode","非严格")
=Seq(
"一""2020-01-01",
"二","2020-01-03",
"三""2020-01-11")
.toDF("id""名称","日期")
9961px;”>
df2.write.模式("覆盖".插入("sparkdemo.table2")
spark.sql("显示")显示
spark.sql("选择 = 从火花示范.table2"显示。
spark.sql("SHOWSSS s sparkdemo.table2"显示)
输出:从 SQL 命令输出
现在,我们需要验证是否可以打开到 Hive 元存储的多个连接。然后,我们可以检查是否可以在本地 Windows 系统中同时运行多个 Spark 项目。让我们尝试从单独的项目访问元存储,而不关闭下一节中当前的火花壳5px;背景色:透明;”• 配置火花项目
现在,让我们 LocalMySQLMetastoreTest
在我们的”LocalSparkSql”项目中创建一个新的Scala对象。
在此对象中,我们将尝试在 spark-shell 中插入一些记录到sparkdemo.table2中,我们刚刚使用火花壳创建了该表2。
现在,我们需要提供一些与 MySQL 服务器地址和凭据相关的额外配置,以便SparkSession实例可以使用它将其连接到我们新的 MySQL 元存储。
下面给出了一个配置示例以及完整代码:
样品
xxxxxxxxx
生成器()
.启用Hive支持
.主("本地"
...
.配置("javax.jdo.option.连接URL""jdbc:mysql://lt;MySQL SERVER>:<PORT>/metastore_db")
.配置("javax.jdo.option.连接驱动程序名称""<数据库驱动程序类名称\gt;")
.配置("javax.jdo.option.连接用户名称""<用户名称>")
.配置("javax"
选项。连接密码“,”<PASSWORD>gt;”)
...
.获取或创建()
由于我们将使用 MySQL JDBC 进行连接,我们需要在pom.xml中添加 MySQL JDBC 驱动程序作为依赖项,如下所示:
xxxxxxxxx
1px;”*…
<依赖项>
<组 Id>mysql</组 Id>
<工件 Id>mysql 连接器-java</工件 Id>
<版本>8.0.18</版本>
</依赖项>
.
</依赖项>
完整代码
本地MySQLMetastoreTest.scala
xxxxxxxxx
阿帕奇.火花。sql.[数据帧,保存模式,火花会话]
对象局部MySQLMetastoreTest |
def主(args数组+字符串单元= |
瓦尔火花会话+火花会话。生成器()
.启用Hive支持()
主(“本地”)
.应用程序名称("演示")
.配置("火花.sql.warehouse.dir""C:\tmp_hive_spark-仓库")
.配置("javax.jdo.option.连接URL""jdbc:mysql://本地主机:3306/metastore_db")
.配置("javax.jdo.option.连接驱动程序名称""com.mysql.cj.jdbc.Driver"
.配置("javax.jdo.option.连接用户名称" "根")
.配置("javax.jdo.option.连接密码""根")
配置(”hive.exec.dynamic.partition.mode”,”非严格”)
.获取或创建()
进口火花。隐式。_
火花。sql("创建数据库如果不是无火花" )
火花。sql(
是""
创建表,如果不存在火花.表2
1px;”• ID INT,
名称 STRING
)
分区(
日期 STRING
)
存储为镶木地板
""")
1px;”[ ( 4,” 四” ,” “2020-01-13″),
(5"五""2020-01-13")
(6"六""2020-01-15")
).到DF("id""名称""日期")
df2.写。模式(保存模式。覆盖。插入入("sparkdemo.表 2")
火花。sql("选择 + 从火花示范.表2 ")显示
火花。sql("显示斯台斯斯火花
显示
}
}
pom.xml
xxxxxxxxxx
0″ 编码=”UTF-8″?>
<项目xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:架构定位="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<模型版本>4.0.0</模型版本>
<组 Id>org.connected.spark</组 Id>
1px;”* <版本>1.0.0-SNAPSHOT</版本>
<依赖项>
<依赖项>
<组 Id>org.apache.spark</组 Id>
<工件 Id>火花-core_2.12</工件 Id>
4.4</版本>
</依赖项>
<依赖项>
<组 Id>org.apache.spark</组 Id>
<工件 Id>火花-sql_2.12</工件 Id>
<版本>2.4.4</版本>
1px;”& lt;依赖项>
<组 Id>org.apache.spark</组 Id>
<工件 Id>火花-hive_2.12</工件 Id>
<版本>2.4.4</版本>
</依赖项>
<依赖项>
1px;”[ <工件 Id>mysql 连接器-java</工件 Id>
<版本>8.0.18</版本>
</依赖项>
</依赖项>
</项目>
现在,让我们运行我们的LocalMySQLMetastoreTest对象。输出应如下所示:
4 kB”数据类型=”temp”数据 url=”/存储/临时/12944695-23.jpg”src=”http://www.cheeli.com.cn/wp-内容/上传/2020/02/12944695-23.jpg”样式=”宽度:722px;显示:块;垂直对齐:顶部;边距:5px自动;文本对齐:中心;”/>
注意:在某些情况下,您可能无法看到其他火花壳/项目新添加的分区或数据,因为这是 Hive/Spark 元存储管理的预期行为。可以考虑执行”已删除”或 spark.catalog.refresh.refresh 表(”dbname.tablename”)以反映新数据。
使用相同的数据再运行项目一次后,当我尝试 spark.sql("SELECT * FROM sparkdemo.table2").show
在旧的 spark 外壳中运行时,我得到了以下异常:
java.io.FileNotFoundException: File
file:/C:/tmp/hive/spark-warehouse/sparkdemo.db/table2/date=2020-01-13/part-000
00-666cc8ed-b44b-4025-9606-e5d9e660c8db.c000 does not exist
这背后的原因很简单;我们从 shell 外部添加/修改了几个额外的行/分区,因此我们的 spark-shell 的元存储目录不知道这些更改。
运行以下代码将执行元数据的强制更新,并最终解决此问题
xxxxxxxxx
5px;”>
火花。目录。刷新表("sparkdemo.table2")
现在,在 spark.sql("SELECT * FROM sparkdemo.table2").show
shell 中执行会提供以下更新结果:
结束注释
我希望这个关于设置本地 Spark 开发环境的扩展演示能让您全面、深入地了解与本地设置相关的配置。我试图尽可能多地涵盖失败情况,但如果您有任何其他问题、问题或建议,您可以在下面的评论中分享它们。
感谢您的阅读!!