Windows单机安装配置mongodb+hadoop+spark+pyspark用于大数据分析

news2024/11/27 2:39:35

目录

  • 版本选择
  • 安装
  • 配置
    • Java环境配置
    • Hadoop配置
    • Spark配置
  • 安装pyspark
  • 使用Jupyter Notebook进行Spark+ MongoDB测试
  • 参考

版本选择

根据Spark Connector:org.mongodb.spark:mongo-spark-connector_2.13:10.3.0 的前提要求
在这里插入图片描述
这里选择使用最新的MongoDB 7.0.12社区版
https://www.mongodb.com/try/download/community

Spark使用最新的3.5.2
https://dlcdn.apache.org/spark/spark-3.5.2/spark-3.5.2-bin-hadoop3.tgz
官网下载比较慢,可以从阿里镜像源下载:
https://mirrors.aliyun.com/apache/spark/spark-3.5.2/?spm=a2c6h.25603864.0.0.52d721049dSJJZ
在这里插入图片描述

Java使用Java8最新更新
https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html

PySpark 一般会与 Hadoop 环境一起运行 , 如果在 Windows 中没有安装 Hadoop 运行环境 , 就会报错误 ;
Hadoop 发布版本在https://hadoop.apache.org/releases.html 页面可下载 ;
官网下载比较慢,可以从阿里镜像源下载:
https://mirrors.aliyun.com/apache/hadoop/common/hadoop-3.3.6/

winutils.exe是一个Windows平台上的实用工具,它是Apache Hadoop项目的一部分。Apache Hadoop是一个开源的分布式计算框架,用于处理大规模数据集的分布式存储和处理。winutils.exe主要用于在Windows环境下运行Hadoop相关的任务和操作。

winutils可以从如下github仓库下载:
https://github.com/cdarlint/winutils
在这里插入图片描述
由于winutils最新只支持hadoop-3.3.6,所以上面Hadoop下载的也是这个版本而不是最新版;

都下载后如下图
在这里插入图片描述

安装

mongodb和jdk直接按默认选项安装即可。

配置

Java环境配置

参考文章:Windows如何安装JDK
来自 https://blog.csdn.net/lcl17779740668/article/details/137992141?spm=1001.2014.3001.5502

Win+R键打开运行窗口,输入cmd,命令行串口输入java -version验证是否安装成功。

Hadoop配置

Hadoop下载后,解压即可,然后记录解压后的路径并配置环境变量
系统变量创建HADOOP_HOME变量值:hadoop安装的路径
系统变量中的Path添加:%HADOOP_HOME%\bin

将上面下载的winutils中的hadoop-3.3.6/bin文件夹下的所有文件复制到对应%HADOOP_HOME%\bin文件夹中并替换原有文件。

Win+R键打开运行窗口,输入cmd,命令行串口输入hadoop -version验证是否安装成功。

可能遇到的报错:“Error JAVA_HOME is incorrectly set.”
根因:JAVA_HOME的值有空格
解决方式一:修改系统环境变量C:\Program Files\Java\jdk-1.8为:C:\Progra~1\Java\jdk-1.8
解决方式二:直接更改hadoop对应etc\hadoop\hadoop-env.cmd 脚本中的 JAVA_HOME 为C:\Progra~1\Java\jdk-1.8
在这里插入图片描述
参考:DOS命令空格问题解决办法
来自 https://blog.csdn.net/youdaodao/article/details/89473558

Spark配置

Spark下载后,解压即可,然后记录解压后的路径并配置环境变量
新建系统变量》变量名:SPARK_HOME 变量值:spark安装的路径

系统变量path中新建两个变量值 %SPARK_HOME%\bin %SPARK_HOME%\sbin

Win+R键打开运行窗口,输入cmd,命令行串口输入spark-shell检查spark是否安装成功

安装pyspark

python环境使用的是python 3.8.10
pip install pyspark
在这里插入图片描述

使用Jupyter Notebook进行Spark+ MongoDB测试

from pyspark.sql import SparkSession

my_spark = SparkSession \
    .builder \
    .appName("myApp") \
    .config("spark.mongodb.read.connection.uri", "mongodb://localhost:27017/local.startup_log") \
    .config("spark.mongodb.write.connection.uri", "mongodb://localhost:27017/local.FSHeight") \
    .config("spark.jars.packages", "org.mongodb.spark:mongo-spark-connector_2.13:10.3.0") \
    .getOrCreate()
dataFrame = my_spark.read.format("mongodb").load()
dataFrame.printSchema()

从local.startup_log读取数据,printSchema输出正常。

dataFrame.show()
dataFrame.count()

以上两个方法均报错:

Py4JJavaError: An error occurred while calling o42.showString.
: java.lang.NoSuchMethodError: org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.resolveAndBind(Lscala/collection/immutable/Seq;Lorg/apache/spark/sql/catalyst/analysis/Analyzer;)Lorg/apache/spark/sql/catalyst/encoders/ExpressionEncoder;
	at com.mongodb.spark.sql.connector.schema.SchemaToExpressionEncoderFunction.apply(SchemaToExpressionEncoderFunction.java:97)
	at com.mongodb.spark.sql.connector.schema.RowToInternalRowFunction.<init>(RowToInternalRowFunction.java:41)
	at com.mongodb.spark.sql.connector.schema.BsonDocumentToRowConverter.<init>(BsonDocumentToRowConverter.java:100)
	at com.mongodb.spark.sql.connector.read.MongoBatch.<init>(MongoBatch.java:47)
	at com.mongodb.spark.sql.connector.read.MongoScan.toBatch(MongoScan.java:79)
	at org.apache.spark.sql.execution.datasources.v2.BatchScanExec.batch$lzycompute(BatchScanExec.scala:45)
	at org.apache.spark.sql.execution.datasources.v2.BatchScanExec.batch(BatchScanExec.scala:45)
	at org.apache.spark.sql.execution.datasources.v2.BatchScanExec.inputPartitions$lzycompute(BatchScanExec.scala:59)
	at org.apache.spark.sql.execution.datasources.v2.BatchScanExec.inputPartitions(BatchScanExec.scala:59)
	at org.apache.spark.sql.execution.datasources.v2.DataSourceV2ScanExecBase.supportsColumnar(DataSourceV2ScanExecBase.scala:179)
	at org.apache.spark.sql.execution.datasources.v2.DataSourceV2ScanExecBase.supportsColumnar$(DataSourceV2ScanExecBase.scala:175)
	at org.apache.spark.sql.execution.datasources.v2.BatchScanExec.supportsColumnar(BatchScanExec.scala:36)
	at org.apache.spark.sql.execution.datasources.v2.DataSourceV2Strategy.apply(DataSourceV2Strategy.scala:147)
	at org.apache.spark.sql.catalyst.planning.QueryPlanner.$anonfun$plan$1(QueryPlanner.scala:63)
	at scala.collection.Iterator$$anon$11.nextCur(Iterator.scala:486)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:492)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:491)

报错对应的是如下位置
在这里插入图片描述
从spark-3.5.2-bin-hadoop3\jars路径下找到了spark-sql_2.12-3.5.2.jar。
解压缩后发现并没有对应的org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.resolveAndBind
在这里插入图片描述
根因就在这里
在这里插入图片描述
因为下载的spark编译包中spark-3.5.2-bin-hadoop3\jars都是基于scala 2.12的,
将org.mongodb.spark:mongo-spark-connector_2.13:10.3.0换成org.mongodb.spark:mongo-spark-connector_2.12:10.3.0问题解决

from pyspark.sql import SparkSession

my_spark = SparkSession \
    .builder \
    .appName("myApp") \
    .config("spark.mongodb.read.connection.uri", "mongodb://localhost:27017/local.startup_log") \
    .config("spark.mongodb.write.connection.uri", "mongodb://localhost:27017/local.FSHeight") \
    .config("spark.jars.packages", "org.mongodb.spark:mongo-spark-connector_2.13:10.3.0") \
    .getOrCreate()
# 从上述spark.mongodb.read.connection.uri读取数据    
df = my_spark.read.format("mongodb").load()
# 将读取的数据写入上述spark.mongodb.write.connection.uri,mode可选overwrite or append
df.write.format("mongodb").mode("overwrite").save()
# 重新从数据库读取数据,并查看
dataFrame = my_spark.read\
                 .format("mongodb")\
                 .option("database", "local")\
                 .option("collection", "FSHeight")\
                 .load()
dataFrame.printSchema()
dataFrame.count()
dataFrame.show()

有一个类似案例,也是可能跟spark版本有关系
https://blog.csdn.net/qq_38345222/article/details/88750174

参考

https://www.cnblogs.com/lcl-cn/p/18182316
https://cloud.tencent.com/developer/article/2338486

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

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

相关文章

Qt-frameGeometry介绍使用(12)

描述 这个和上一篇讲的geometry很像&#xff0c;但是又有点不一样&#xff0c;而且还挺容易出问题的&#xff0c;所以这里要专门提一下&#xff0c;首先我们要明白Window frame窗口坐标是有点区别的&#xff0c;如图就像这样的&#xff0c;左上角是有两个需要注意的位置&#…

百元蓝牙耳机买哪一款的好?四款年度平价好用耳机推荐!

蓝牙耳机大家都再熟悉不过了&#xff0c;作为现代人最常用的智能配件之一&#xff0c;谁还没有用过蓝牙耳机呢&#xff0c;但是现在蓝牙耳机的牌子真的是遍地开花&#xff0c;让人眼花缭乱的&#xff0c;这让大众选择起来却更加麻烦了&#xff0c;每个牌子的蓝牙耳机都有各自的…

西门子触摸屏维修KTP400 6AV2123-2DB03-0AX0

西门子KTP400面板触摸屏维修&#xff1a;DP协议 PN协议两款。DP SIMATIC HMI&#xff0c;KTP400 Basic DP&#xff0c; 精简面板&#xff0c; 按键式/触摸式操作&#xff0c; 12" TFT 显示屏&#xff0c;65536 颜色&#xff0c; PROFIBUS 接口&#xff0c; 可用项目组态的…

TL431的稳压原理和用法,仿真验证

概述 TL431是三端可调节并联稳压器&#xff0c;可以通过两个外部电阻器将输出电压设置为介于VREF&#xff08;约为2.5V&#xff09;和36V之间的任意值。其输出阻抗典型值均为0.2欧姆&#xff0c;此类器件的有源输出电路具有非常明显的导通特性&#xff0c;因此非常适合用于替代…

基于vue框架的包装加工工业自动化管理系统05880(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;仓管员,维修员,产品信息,产品入库,产品出库,机器信息,机器维修 开题报告内容 基于Vue框架的包装加工工业自动化管理系统开题报告 一、引言 随着工业4.0时代的到来&#xff0c;包装加工行业正经历着前所未有的变革。传统的手工与半自动…

聊聊sessionStorag,以及什么情况下能够共享/复制sessionStroage

之前对sessionStorage的了解很表面&#xff0c;粗略的理解为在各标签页/窗口下独立&#xff0c;生命周期和标签页/窗口关联&#xff0c;标签页/窗口未关闭就存在&#xff08;除人为清除或者调用相关api删除&#xff09;。但是这种粗略的理解对于下面的场景似乎就有点不明确了。…

【SQL】直属部门

目录 题目 分析 代码 题目 表&#xff1a;Employee ------------------------ | Column Name | Type | ------------------------ | employee_id | int | | department_id | int | | primary_flag | varchar | ------------------------ 这张表的主键为 e…

【pyside6】添加应用图标

文章目录 什么是应用图标指定图标样式 什么是应用图标 这个图标就是应用图标&#xff1a; 默认图标是这样&#xff1a; 指定图标样式 app.setWindowIcon(QIcon("logo.png"))

深信服超融合平台Windows虚拟机磁盘在线扩容

深信服超融合版本&#xff1a; 该版本支持磁盘在线扩容&#xff0c;虚拟机无需重启&#xff0c;不影响业务。 本次扩容是为现有磁盘扩容&#xff0c;如果是新增磁盘也是一样的步骤&#xff0c;单独添加一块磁盘即可。 1、点击需要进行扩容的虚拟机名称 2、在控制台可以看到当…

Android经典实战之简化 Android 相机开发:CameraX 库的全面解析

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 CameraX 是 Android Jetpack 的一个组件库&#xff0c;旨在简化 Android 相机应用的开发。它提供了一系列易于使用的 API&#xff0c;支持从 An…

别怕!PMP考试难度全解析,助你一次过!

首先我得说&#xff0c;PMP考试&#xff0c;它难&#xff0c;也不是那么难。为啥这么说呢&#xff1f; 你看&#xff0c;PMP考试难&#xff0c;难在哪儿&#xff1f;就难在它那知识面太广了&#xff0c;就像个杂货铺&#xff0c;啥都得懂点儿。项目管理啊&#xff0c;得懂管理&…

【Hot100】LeetCode—543. 二叉树的直径

目录 1- 思路深搜——dfs 2- 实现⭐543. 二叉树的直径——题解思路 3- ACM 实现 原题连接&#xff1a;543. 二叉树的直径 1- 思路 深搜——dfs 递归三部曲 1- 递归参数和返回值 返回 public int depth(TreeNode root) 2- 终止条件 如果遇到 null&#xff0c;则返回 0 3- 递…

2024Go语言面试宝典Golang零基础实战项目面试八股力扣算法笔记等

2024最新Golang面试八股文&#xff0c;以及各种零基础全套实战项目&#xff0c;经典力扣算法题以及常见的面试题型&#xff0c;大厂面试题。go语言面试必备。包括GO基础类、GO并发编程、GO RUNTIME、微服务、容器技术、Redis、MySQL、Linux、缓存、网络和操作系统、消息队列、分…

USB3.2 摘录(六)

系列文章目录 USB3.2 摘录&#xff08;一&#xff09; USB3.2 摘录&#xff08;二&#xff09; USB3.2 摘录&#xff08;三&#xff09; USB3.2 摘录&#xff08;四&#xff09; USB3.2 摘录&#xff08;五&#xff09; USB3.2 摘录&#xff08;六&#xff09; 文章目录 系列文…

如何在VMwareWorkstation上安装的ESXi系统扩容存储

在做ESXi的相关实验的时候&#xff0c;需要扩容ESXi的存储&#xff0c;那么如何进行操作呢&#xff1f; 扩容VMwareWorkstation上虚拟机的存储 首先我们需要先扩容虚拟机上的存储&#xff08;可不关闭虚拟机&#xff09;按照图下所示&#xff0c;右键虚拟机&#xff0c;点击设…

PCL-基于RANSAC的平面拟合方法

基于RANSAC的平面拟合方法 一、简介二、实验代码三、实验结果 一、简介 随机采样一致性&#xff08;Random sample consensus&#xff0c;RANSAC&#xff09;&#xff1a;RANSAC是一种鲁棒的模型拟合方法&#xff0c;它可以处理存在大量噪声和异常值的数据。在进行平面拟合时&…

Qt QTableWidgetItem.setFlags()

查看 Qt 官方地址 Qt Namespace | Qt Core 5.15.14 得到如下说明 默认值是 63&#xff0c;即如下表达式的值&#xff08;位运算&#xff09;&#xff0c;表示可选择&#xff08;1&#xff09;、可编辑&#xff08;2&#xff09;、可拖拽&#xff08;4&#xff09;、可放入&…

Springboot查看版本和兼容的依賴

https://docs.spring.io/spring-boot/docs/2.7.18/reference/htmlsingle/#appendix-dependency-versions 如果需要查自己的版本&#xff0c;只需要修改2.7.18&#xff0c;因爲我的是2.7.18的版本。 然後如果你想查詢所兼容的其它依賴版本&#xff0c;可以打開頁面后直接search…

RK3588——网口实时传输视频

由于通过流媒体服务器传输画面延迟太高的问题&#xff0c;不知道是没有调试到合适的参数还是其他什么问题。诞生了这篇博客。 RK3588板端上接摄像头&#xff0c;采集画面&#xff0c;通过网口实时传输给上位机并显示。 第一代版本 RK3588代码 import cv2 import socket imp…

AI智能体:我用扣子给詹杜库做了一套超酷炫的手办

杀疯了&#xff01; 在巴黎奥运会今日的男篮决赛中&#xff0c;库里开启了杀神模式。 末节关键时刻投中 4 记三分&#xff0c;直接带走比赛&#xff0c;看得我都跪了。 库里在 2012 年未能入选梦之队&#xff0c;2016 年 NBA 季后赛夺冠后太过疲惫&#xff0c;2021 年东京奥…