PySpark安装及WordCount实现(基于Ubuntu)

news2024/11/23 16:51:25

先盘点一下要安装哪些东西:

  1. VMware
  2. ubuntu 14.04(64位)
  3. Java环境(JDK 1.8)
  4. Hadoop 2.7.1
  5. Spark 2.4.0(Local模式)
  6. Pycharm

(一)Ubuntu 

VMware 和 ubuntu 14.04(64位)的安装见:在vmware上安装ubuntu 14.04(64位)_study_note_mark的博客-CSDN博客

安装Ubuntu完成后需要完成一些前期准备工作,包括:创建Hadoop用户、更新apt、安装ssh及配置ssh无密码登录,参考:Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0(2.7.1)/Ubuntu14.04(16.04)_厦大数据库实验室博客

总结:

  • 在Ubuntu里打开终端窗口的快捷键是 ctrl+alt+t 
  • sudo命令:sudo是ubuntu中一种权限管理机制,管理员可以授权给一些普通用户去执行一些需要root权限执行的操作。当使用sudo命令时,就需要输入您当前用户的密码
  • 在Ubuntu终端窗口中,复制粘贴的快捷键需要加上shift,即粘贴是ctrl+shift+v
  • 更改软件源:Ubuntu20.04更新软件源路径_ubuntu20.04软件和更新在哪_donnieliu的博客-CSDN博客​​​​​​

  • vim编辑器:
    • 正常模式:主要用来浏览文本内容。一开始打开vim都是正常模式。在任何模式下按下Esc键就可以返回正常模式
    • 插入编辑模式:用来向文本中添加内容。在正常模式下,输入i键即可进入插入编辑模式
    • 退出vim:如果有利用vim修改任何的文本,一定要记得保存。Esc键退回到正常模式中,然后输入:wq即可保存文本并退出vim
  • ssh登录:类似于远程登录。可以登录某台Linux主机,并在上面运行命令
  • 在Linux系统中,~ 代表的是用户的主文件夹,即 "/home/用户名" 这个目录,如你的用户名为 hadoop,则 ~ 就代表 "/home/hadoop/"

(二)Java(JDK 1.8)

参考Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0(2.7.1)/Ubuntu14.04(16.04)_厦大数据库实验室博客

总结:

  • 常见Linux命令:Linux系统常用命令_厦大数据库实验室博客
  • Linux管道命令:Linux Shell中的管道命令_厦大数据库实验室博客
  • vim编辑器用法:Linux系统中vim编辑器的安装和使用方法_厦大数据库实验室博客

(三)Hadoop 2.7.1

Hadoop安装、伪分布式配置、启动Yarn参考Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0(2.7.1)/Ubuntu14.04(16.04)_厦大数据库实验室博客

总结:

  • Hadoop默认模式为非分布式模式(本地模式),即单Java进程,无需进行其他配置即可运行
  • Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行,节点既作为NameNode也作为DataNode,同时读取的是HDFS中的文件
  • 运行Hadoop程序时,为了防止覆盖结果,程序指定的输出目录(如output)不能存在,否则会提示错误,因此运行前需要先删除输出目录(如hdfs dfs -rm -r output)
  • 三种shell命令方式:
    • hadoop fs:适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
    • hadoop dfs:只能适用于HDFS文件系统
    • hdfs dfs:只能适用于HDFS文件系统
  • 若要关闭Hadoop,运行stop-dfs.sh;下次启动Hadoop,无需进行NameNode初始化,只需运行start-dfs.sh(仅仅启动了MapReduce环境,没有启动YARN)
  • 通过hdfs命令可以访问HDFS的内容

http://localhost:50070/dfshealth.html#tab-overview

06df2537ed9642c5ad52365be3103180.png

YARN(Yet Another Resource Negotiator)是从MapReduce中分离出来的,负责资源管理与任务调度。YARN运行于MapReduce之上,提供了高可用性、高扩展性

启动YARN之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用YARN时,是 "mapred.LocalJobRunner" 在跑任务;启用YARN之后,是 "mapred.YARNRunner" 在跑任务。启动YARN有个好处是可以通过Web界面查看任务的运行情况:http://localhost:8088/cluster 

b17fca2df84c4eebaa8e0d9d9bd1f62c.png

启动/关闭YARN的脚本:

start-yarn.sh      # 启动YARN
mr-jobhistory-daemon.sh start historyserver  # 开启历史服务器,才能在Web中查看任务运行情况

stop-yarn.sh
mr-jobhistory-daemon.sh stop historyserver

如果需要安装Hadoop集群,参考Hadoop 2.7分布式集群环境搭建_厦大数据库实验室博客


(四)Spark 2.4.0(Local模式)

Apache Spark是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象。Spark最大的特点就是快,可比Hadoop MapReduce的处理速度快100倍 

Spark采用Local模式进行安装,也就是在单机上运行Spark。因此,在安装Hadoop时,需要按照伪分布式模式进行安装。在单台机器上按照“Hadoop(伪分布式)+Spark(Local模式)”这种方式进行Hadoop和Spark组合环境的搭建,可以较好满足入门级Spark学习的需求 

Index of /dist/spark/spark-2.4.0

a3f5927cf3b248d996a72d1c185b7d53.png

参考以下链接中 “安装Spark(Local模式)” 部分即可(这篇帖子是Spark 3.4.0,但原理相同):Spark安装和编程实践(Spark3.4.0)_厦大数据库实验室博客

cd /usr/local/spark
bin/spark-shell

Spark Shell界面如下,不过是以Scala为交互语言(Ctrl+c退出): 

089d9ab492d5489e95a481aee1c5ad71.png

进入Pyspark:

cd /usr/local/spark
./bin/pyspark

a1250359a1bd4952bee8fed2625136c1.png

总结:

  • bash和shell的区别:
    • shell:负责人机交互的一种抽象,接收用户输入交给内核,内核执行完后返回给用户。有多种实现,sh/bash/csh/ksh/ash,当前用户登录后操作系统会用哪种shell,是由配置文件中对应用户的配置来决定的,可由echo $SHELL查看
    • bash:shell的一种实现(/bin/bash)。用户远程连接后,操作系统会默认生成一个bash进程

9c2695f5ea0d427b925753a28a86266d.png


(五)PyCharm 

Download PyCharm: Python IDE for Professional Developers by JetBrains

5824aee2c55d4ef6b135947c38b1700d.png

安装参考:使用Pycharm开发Spark应用程序(以WordCount为例)_厦大数据库实验室博客 以及

第一章 python分布式爬虫打造搜索引擎环境搭建 第一节 CentOS7环境下pycharm的安装和使用_Demon丶冷漠的博客-CSDN博客

安装过程中我遇到一个报错如下: 

bff35e98966345c5a0a08e0a05aaac58.png

解决方法是新开一个terminal再执行命令,参考linux安装pycharm报错:Unable to detect graphics environment_pycharm unable to detect graphics environment_我有明珠一颗的博客-CSDN博客

编辑hosts文件时遇到以下两个问题,原因是权限不足: 

vim 修改文件出现错误 “ E45: ‘readonly’ option is set (add to override)“_大红烧肉的博客-CSDN博客

Linux使用vi编辑文件报错:E212: Can‘t open file for writing Press ENTER or type command to continue_/ect/hosts" e212: can't open file for writing_凝眸伏笔的博客-CSDN博客


(六)案例(以WordCount为例)

参考:使用Pycharm开发Spark应用程序(以WordCount为例)_厦大数据库实验室博客 

启动pycharm:

e8e4aa5b7875412080310fa2f537c8b4.png

创建文件夹(注意Base interpreter选择的是 /usr/bin/python3.5): 

13a28c4196f14a4c99b40216a7b124fe.png

上传word.txt文件(本地地址为/home/hadoop/Downloads/word.txt)至HDFS(创建一个文件夹aaa,上传至aaa文件夹下)

hadoop fs -ls   # 查看hdfs下的文件
hdfs dfs -mkdir /aaa   # 创建一个目录aaa
hdfs dfs -put /home/hadoop/Downloads/word.txt /aaa   # 上传word.txt文件至aaa文件夹下
hadoop fs -ls /aaa   # 检查是否上传成功

# 三种shell命令方式:
# hadoop fs:适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
# hadoop dfs:只能适用于HDFS文件系统
# hdfs dfs:只能适用于HDFS文件系统

打开HDFS:

b6a26266279e46ec95ef2ddda28a916d.png

关于HDFS的一些操作可以参考:如何上传文件到hdfs?_数据上传至hdfs://crash目录下_你看这人,真菜的博客-CSDN博客 

WordCount.py代码如下:

# -*- coding:utf8-*-
# 安装pyspark:在终端输入pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark

import os
os.environ['PYSPARK_PYTHON'] = '/usr/bin/python3.5'   # python解释器路径

import findspark
findspark.init()

from pyspark import SparkConf, SparkContext

conf = SparkConf().setAppName("WordCount").setMaster("local")
sc = SparkContext(conf=conf)
inputFile = "hdfs://localhost:9000/aaa/word.txt"   # 文件放在hdfs伪分布式文件系统上(必须开启hdfs文件系统)
textFile = sc.textFile(inputFile)
wordCount = textFile.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
wordCount.foreach(print)
  • flatMap:将文件按空格进行拍扁 
  • map:将拍扁后的一个个单词分别映射成 (word, 1) 的形式
  • reduceByKey:将map输出中key相同的值加起来
  • foreach:循环遍历打印输出结果

ae19d656434f47d8802bf25e39d7cfce.png

(1)右键运行。运行结果如下:

79e29195300e4cada1b244e57d0c9fb2.png

(2)也可以把代码提交到Spark运行。在终端运行:

cd /usr/local/spark/
./bin/spark-submit /home/hadoop/PycharmProjects/WordCount/WordCount.py

翻一下我们的输出信息可以找到结果: 

2a15b8f492b54226b8997f04d5038a3c.png

注:Spark & PySpark 的执行可以特别详细,很多INFO日志消息都会打印到屏幕。开发过程中,这非常恼人,因为可能丢失Python栈跟踪或者print的输出。为了减少Spark输出,可以设置$SPARK_HOME/conf 下的log4j

cd /usr/local/spark/conf
cp log4j.properties.template log4j.properties
vim log4j.properties

将 log4j.rootCategory=INFO, console 中的 INFO 改为 WARN 或者 ERROR,保存退出,如下图: 

2c4f198f1a5c4fbd900ab3c6e38398db.png

再运行,输出结果就一目了然了: 

52613af14e88400e977923684c4bc3f9.png

更多案例参考:

基于Python语言的Spark数据处理分析案例集锦(PySpark)_厦大数据库实验室博客

更多大数据相关博客:大数据_厦大数据库实验室博客 

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

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

相关文章

【bug记录】ios动画闪烁,@keyframe动画在100%的时候设置为opacity:0,最后一帧会变成opacity:1

背景 前段时间需要实现一个水波纹扩散效果,大概效果就两点:波纹逐渐扩散,半径逐渐增大;透明度逐渐降低(如下图)。本以为这就是一个简单的动画,很轻松就实现了。但是发布之后测试同学反馈&#…

Allegro如何设置Net Class在物理和间距规则中同步操作指导

Allegro如何设置Net Class在物理和间距规则中同步操作指导 在用Allegro设置规则的时候,设置net class是必要的操作,时常需要在物理和间距规则都设置好Class,如果物理和间距规则中都单独去设置的话比较费时间。如下图Net Class 下面介绍如何将物理和间距规则中的Class同步起来…

AgentBench:AI智能体的应用前景——消费端的应用

从应用前景上看,AI智能体既可以被用于消费端来提升用户的使用体验,也可以被用于生产端来作为重要的生产力工具。 1、消费端的应用 在消费端,AI智能体将凭借其强大的能力取代现有的聊天机器人,并应用到广泛的领域。聊天机器人目前已比较普及,比如苹果的Siri、亚马逊的A…

Java学习笔记39

Java笔记39 反射机制 静态/动态语言 动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言&#…

学习记录——FLatten Transformer

FLatten Transformer: Vision Transformer using Focused Linear Attention ICCV 2023 聚焦式线性注意力模块 关于Transformer 在Transformer模型应用于视觉领域的过程中,降低自注意力的计算复杂度是一个重要的研究方向。线性注意力通过两个独立的映射函数来近似S…

【图解】多层感知器(MLP)

图片是一个多层感知器(MLP)的示意图,它是一种常见的神经网络模型,用于从输入到输出进行非线性映射。图片中的网络结构如下:

python 打印沁园春 雪 居中对齐 文本对齐

以下是python 中使用 DebugInfo 模块居中对齐打印《沁园春・雪》的效果 引入模块 pip install DebugInfopython代码 # -*- coding:UTF-8 -*-# region 引入必要依赖 from DebugInfo.DebugInfo import * # endregion诗文 沁园春 雪 作者: 毛主席 北国风光,千里冰封…

12312321312

目录 层次分析法(AHP) 基本步骤 建立层次模型 构造判断矩阵 一致性检验 求得权重 填表得结果 一点补充 详细做法补充 特征向量含义思考 一些问题 优劣解距离法(TOPSIS) 基本思想 模型步骤 数据处理 指标正向化 标准化处理 计算得分 *结果处理 熵权法 模型思…

【【萌新的STM32学习-12】】

萌新的STM32学习-12 GPIO八种模式 1输入浮空 输入用,完全浮空,状态不定 2输入上拉 输入用,用内部上拉,默认是高电平 3输入下拉 输入用,用内部下拉,默认是低电平 4模拟功能 ADC DAC 5开漏输出 软件IIC的…

春秋云镜 CVE-2019-2725

春秋云镜 CVE-2019-2725 Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞 靶标介绍 Oracle Fusion Middleware&#xff08;子组件&#xff1a;Web Services&#xff09;的 Oracle WebLogic Server 组件中的漏洞。受影响的受支持版本为 10.3.6.0.0 和 12.1.3.0.0。…

5个最重要的开源电商 ERP 系统功能

作为开源电商 ERP 系统领域的专家&#xff0c;我想分享一下电商企业在选择 ERP 系统时需要考虑的关键功能。 功能一&#xff1a;库存管理 库存管理是任何一家电商企业都必须考虑的问题。好的库存管理系统可以帮助企业减少库存积压、避免库存短缺&#xff0c;并提高库存周转率…

如何使用HTML5新增的标签来优化SEO?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用HTML5新增的标签来优化SEO&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对…

SpringCloud学习笔记(一)_快速入门

SpringCloud简介 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调导致了样板模式, 使用Spr…

MyBaits_Plus

MyBatis_Plus 文章目录 MyBatis_Plus0. 必备知识1.快速入门1.1什么是MyBatis_Plus1.2快速使用 2.配置日志3.CURD的扩展3.1Insert3.2 update3.3自动填充3.4乐观锁3.5delete 4.select4.1基本查询4.2分页查询4.3条件构造器 5.代码自动生成器 0. 必备知识 使用第三方组件一般步骤 …

[已解决]system: No such file or directory #include <filesystem>

make编译&#xff0c;遇到&#xff1a;system: No such file or directory #include <filesystem> &#xff08;1&#xff09;升级gcc[参考][gcc升级参考1][gcc升级参考2]&#xff1a;gcc7.5 升级为 gcc11.1, 未解决问题&#xff1b; &#xff08;2&#xff09;修改头文…

TienChin 渠道管理-工程创建

因为本文章主要围绕着项目开发进行&#xff0c;所以前言不做开头&#xff0c;直接上内容。 添加字段 我们的渠道表&#xff0c;我看到若依脚手架当中有一个是否删除的标志字段&#xff0c;所以我这里也添加一下&#xff1a; ALTER TABLE tienchin_channelADD COLUMN del_flag c…

使用MySQL:5.6和owncloud镜像搭建个人网盘

拉取镜像 [rootkvm ~]# docker pull mysql:5.6[rootkvm ~]# docker pull owncloud启动mysql容器 [rootkvm ~]# docker run -d --name db1 -e MYSQL_ROOT_PASSWORDroot mysql:5.6 db832e4e4333a0e9a7c152a67272721fdbe5381054090c5eb24f90455390a852 [rootkvm ~]# docker ps …

2、Spring_DI

DI 1.概述 概述&#xff1a;Dependency Injection 依赖注入&#xff0c;给对象设置属性&#xff0c;曾经我们需要自己去创建 mapper 对象&#xff0c;才能调用&#xff0c;现在交给 spring 创建&#xff0c;并且使用 DI 注入&#xff0c;直接拿来用&#xff0c;程序员就可以更…

小说作者分享:如何利用爱校对使我的作品更出彩?

在创作小说的过程中&#xff0c;校对和修改是至关重要的步骤。许多作家已经开始利用“爱校对”这一工具&#xff0c;有效地提高他们作品的质量。本篇文章将通过实际案例&#xff0c;展示一些小说作者是如何成功地利用爱校对来精雕细琢他们的文字&#xff0c;并将作品提升到一个…

数据结构,二叉树,前中后序遍历

二叉树的种类 最优二叉树 最优二叉树画法 排序取最小两个值和&#xff0c;得到新值加入排序重复1&#xff0c;2 前序、中序和后序遍历是树形数据结构&#xff08;如二叉树&#xff09;中常用的遍历方式&#xff0c;用于按照特定顺序遍历树的节点。这些遍历方式在不同应用中有不…