当前位置: 首页 > news >正文

spark集群环境下,实现人口平均年龄计算

文章目录

    • 任务目标
    • 0. 版本信息
    • 1. 计算生成renkou.txt
    • 2. 文件上传至spark
    • 3. 上传文件时,可能出现的常见错误
    • 4. 编写spark文件
    • 5. 上传集群
    • 6. 集群环境下提交任务

任务目标

在虚拟机上部署spark集群,给定renkou.txt文件,输出平均年龄

renkou.txt:
在这里插入图片描述

集群运作spark
在这里插入图片描述

spark web界面显示结果
在这里插入图片描述

0. 版本信息

信息版本
Scala2.11.8
Java1.8
spark2.2.0

hadoop安装
尚硅谷Hadoop

spark
spark集群搭建

tip: 按照上述spark博客集群搭建时,node1是虚拟机的域名,记得换成自己虚拟机的域名。如果没有,填写真实ip地址即可

maven坐标

        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core --><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.11</artifactId><version>2.2.0</version></dependency>

1. 计算生成renkou.txt

因为数据量很庞大, 1000万行,因此采用Java多线程的方式生成数据

package com.xhf.java;import com.xhf.java.entity.Person;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;/*** 生成renkou.txt*/
public class RenkouGen {static Random random = new Random();static Object lock = new Object();public static void main(String[] args) throws Exception {// 创建文件File file = new File("E:\\B站视频创作\\Java计算人口平均_spark\\src\\main\\resources\\renkou.txt");// 判断file是否存在if (file.exists()) {file.delete();}else {file.createNewFile();}// 创建流管到BufferedWriter bw = new BufferedWriter(new FileWriter(file, false));// 创建线程池 1000万, 100万(每个线程)ExecutorService executorService = Executors.newFixedThreadPool(10);for (int i = 0; i < 10; i++) {// 生成数据executorService.execute(() -> {// 100万for (int j = 0; j < 1000000; j++) {Person person = new Person(j, random.nextInt(20) + 40);// 数据写入文件try {
//                        synchronized (lock) {// 加锁bw.write(person.toString());
//                            bw.newLine();
//                        }} catch (IOException e) {e.printStackTrace();}}});}// 关闭线程池executorService.shutdown();executorService.awaitTermination(10000L, TimeUnit.SECONDS);bw.close();}
}

tip:

  • 生成完的文件需要上传到hadoop文件系统中,这样便于spark程序部署时获取文件信息
  • 如果不上传至hadoop中,在集群环境下运行时,可以通过main的args参数指定路径,又或者将文件存放在resouce目录下,打jar包后,代码通过resource资源目录进行定位

2. 文件上传至spark

如果遇到问题,请往下看 3.上传文件时,可能出现的常见错误
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文件访问url: ‘hdfs://hadoop102:8020/spark/renkou.txt’

3. 上传文件时,可能出现的常见错误

在上传的过程中,可能会遇到各种报错,我这里整理好参考资料

  • 解决hadoop Permission denied: user=dr.who, access=WRITE, inode=“/“:kfk:supergroup:drwxr-xr-x问题
  • Name node is in safe mode

4. 编写spark文件

package com.xhf.sparkimport org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object RenkouCal2_Cluster {def main(args: Array[String]): Unit = {// 设置配置, master记得输入你要提交的主节点地址,而不是local. 如果是local, 我的版本下能够运行, 但任务无法在UI界面上显示val conf: SparkConf = new SparkConf().setAppName("renkou").setMaster("spark://hadoop102:7077")// 连接sparkval sparkContext = new SparkContext(conf)val filePath: String = "hdfs://hadoop102:8020/spark/renkou.txt";// 读取文件 List<String>val lines: RDD[String] = sparkContext.textFile(filePath)val begin: Long = System.currentTimeMillis()val value: RDD[Long] = lines.map(line => {// String : "1 27"line.split(" ")(1).toLong});// 计算 (把所有年龄累加 -> 除以个数 -> 平均年龄)val sum: Long = value.reduce((x, y) => x + y)println(sum / (1.0 * lines.count()))println(System.currentTimeMillis() - begin)// 终止sparksparkContext.stop()}
}

如果本地能够运行,通过maven打成jar包,上传运行
在这里插入图片描述

5. 上传集群

笔者采用xshell + xftp的方式进行jar包上传,上传至如下位置
在这里插入图片描述

6. 集群环境下提交任务

找到spark安装位置,进入bin目录
在这里插入图片描述
执行如下指令

./spark-submit \
--class com.xhf.spark.RenkouCal2 \
--master spark://hadoop102:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
/export/servers/spark_demo/java_spark-1.0-SNAPSHOT.jar
  • –class 指定运行jar包具体的启动类,笔者运行的时RenkouCal2这个类
  • –master 指定master节点的地址
  • /export/servers/spark_demo/java_spark-1.0-SNAPSHOT.jar 指定jar包路径,这个由自己决定
    其它参数见名知意,不在过多赘述

spark,启动!
在这里插入图片描述

相关文章:

spark集群环境下,实现人口平均年龄计算

文章目录 任务目标0. 版本信息1. 计算生成renkou.txt2. 文件上传至spark3. 上传文件时&#xff0c;可能出现的常见错误4. 编写spark文件5. 上传集群6. 集群环境下提交任务 任务目标 在虚拟机上部署spark集群&#xff0c;给定renkou.txt文件&#xff0c;输出平均年龄 renkou.t…...

[羊城杯 2020]black cat - 文件隐写+RCE(hash_hmac绕过)

[羊城杯 2020]black cat 1 解题流程1.1 第一步1.2 第二步1.3 第三步 1 解题流程 1.1 第一步 打开网站有首歌&#xff0c;按F12也是提示听歌&#xff0c;ctf-wscan扫描就flag.php下载歌&#xff0c;用010打开&#xff0c;发现有一段内容if(empty($_POST[Black-Cat-Sheriff]) |…...

智能文件管理助手,轻松实现按数量平均分类文件,高效整理新文件夹!

在我们的电脑或移动设备中&#xff0c;文件管理是我们日常工作和生活中不可或缺的一部分。有时候&#xff0c;我们可能需要将一个文件夹中的大量文件按照数量平均分配到多个新的文件夹中&#xff0c;以便更好地进行整理和管理。现在&#xff0c;我们为您提供了一款智能文件管理…...

安卓 Android 终端接入阿里云 IoT 物联网平台

在全球智能手机市场里&#xff0c;谷歌开发的安卓(Android)移动操作系统市场占有率已经高达90%。随着物联网智能硬件升级&#xff0c;安卓(Android)也逐渐成为智能摄像头&#xff0c;智能对讲门禁&#xff0c;人脸识别闸机&#xff0c;智能电视&#xff0c;智能广告屏等带屏 Io…...

2023自动化测试面试题(含答案)

1、你做了几年的测试、自动化测试&#xff0c;说一下 selenium 的原理是什么&#xff1f; 我做了五年的测试&#xff0c;1年的自动化测试&#xff1b; selenium 它是用 http 协议来连接 webdriver &#xff0c;客户端可以使用 Java 或者 Python 各种编程语言来实现&#xff1…...

使用 Apache Camel 和 Quarkus 的微服务(一)

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 ​Apache Camel 绝非Java企业技术栈领域的新手。它由James Strachan在2007年创建&#xff0c;旨在实现著名的 "EIP 书"&#xff08;由Gregor Hohpe和Bobby W…...

如何通过高级流量管理提高 Kubernetes 的弹性

原文作者&#xff1a;Jenn Gile - F5 NGINX 产品营销经理 原文链接&#xff1a;如何通过高级流量管理提高 Kubernetes 的弹性 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 编者按 —— 本文是以下系列博文中的一篇&#xff08;…...

解决Springboot集成RabbitMQ不自动生成队列的问题

1.RabbitMQ消息的消费端服务 RabbitMQ懒加载模式&#xff0c; 需要配置消费者监听才会创建 RabbitListener(queues "test.queue")另外一种方式(若Mq中无相应名称的队列,会自动创建Queue),改为如下 RabbitListener(queuesToDeclare { Queue(value "test.queu…...

【数据结构】Decreasing String—CF1886C

Decreasing String—CF1886C 代码我现在还不是很理解&#xff0c;群友说是单调栈。 C o d e Code Code #include <bits/stdc.h> #define int long long #define sz(a) ((int)a.size()) #define all(a) a.begin(), a.end() using namespace std; using PII pair<int…...

【广州华锐互动】钢厂铸锻部VR沉浸式实训系统

随着科技的不断进步&#xff0c;虚拟现实(VR)技术已成为当今最具潜力的技术之一。在钢铁行业中&#xff0c;VR虚拟仿真实训已经被广泛应用于培训和教育领域&#xff0c;特别是钢铁厂铸锻部&#xff0c;通过VR技术&#xff0c;可以大大提高培训效率&#xff0c;降低培训成本&…...

Python中执行SQL报错unsupported format character ‘Y‘ (0x59) at index 34

Python中执行SQL报错unsupported format character ‘Y’ (0x59) at index 34 from sqlalchemy import create_engine engine_ts create_engine(mysqlpymysql://root:MySQL123456127.0.0.1:3306/dbmysql?charsetutf8&use_unicode1) sql "select date_format(t.tr…...

云数据库(林子雨慕课课程)

文章目录 6.云数据库6.1 云数据库概述6.2 云数据库产品6.3 UMP系统6.3.1 UMP系统概述6.3.2 UMP系统架构6.3.3 UMP系统功能 6.4 Amazon云数据库6.4.1 Amazon和云计算的渊源6.4.2 Amazon AWS6.4.3 AWS平台上的云数据库6.5 微软云数据库SQL Azure 6.云数据库 6.1 云数据库概述 云…...

2023-10-10 python-从一组颜色中找到与指定颜色最接近的颜色-{K-D树}-记录

摘要: 2023-10-10 python-从一组颜色中找到与指定颜色最接近的颜色-{K-D树}-记录 相关文档: 如何在颜色表中找到与当前颜色最接近的颜色&#xff1f; - 糯米PHP https://zh.wikipedia.org/wiki/%E6%9C%80%E9%82%BB%E8%BF%91%E6%90%9C%E7%B4%A2 https://zh.wikipedia.org/wiki/…...

使用C++实现DNS欺骗攻击

文章为花钱购买转载&#xff0c;但我测试并未成功&#xff01;&#xff01;&#xff01; 使用C实现DNS欺骗攻击-CSDN博客 使用C实现DNS欺骗攻击 DNS劫持是一种常见的网络攻击方式&#xff0c;通过篡改DNS响应数据&#xff0c;使得用户访问的网站被重定向到攻击者指定的恶意站…...

C#WPF属性元素语法应用实例

本文介绍C#WPF属性元素语法应用实例 一、属性元素语法 对于对象元素的某些属性,无法使用特性语法(比如:Background="Blue"),因为无法在特性语法的引号和字符串限制内充分地表达提供属性值所必需的对象或信息。 对于这些情况,可以使用另一个语法,即属性元素语…...

el-select应用虚拟列表,避免过多数据导致浏览器卡死

el-select&#xff1a; element-ui组件中的select下拉选择组件&#xff0c;支持单选、多选等 虚拟列表&#xff1a; 虚拟列表是一种优化技术&#xff0c;用于处理大型列表。在传统的列表中&#xff0c;当用户滚动到底部时&#xff0c;列表会加载所有的数据&#xff0c;这可能导…...

ES6之函数的扩展

函数的扩展 文章目录 函数的扩展1&#xff1a;与解构赋值默认值结合使用2&#xff1a;参数默认值空对象2.1 案例一2.2 案例二2.3 案例三2.4 案例四 3&#xff1a;undefined null参数默认值的区别4&#xff1a;函数length5&#xff1a;作用域5.1 全局变量5.2&#xff1a;局部变量…...

【PPT制作】基础篇

文章目录 一、PPT制作必要的基础设置1.1 自动保存1.2 字体嵌入1.3 撤销步数1.4 图像大小和质量 二、必备快捷键三、设计四原则四、总结 ヾ(๑╹◡╹)&#xff89;" 没有坚持的努力&#xff0c;本质上并没有多大意义ヾ(๑╹◡╹)&#xff89;" 一、PPT制作必要的基础…...

尚硅谷CSS学习笔记

什么是css css&#xff08;层叠样式表&#xff09; 它是一种标记语言&#xff0c;用于给HTML结构设置样式。简单理解css可以美化html&#xff0c;实现结构与样式的分离。 <link rel"shortcut icon" href"favicon.ico" type"image/x-icon"&g…...

MYSQL的日志管理

MySQL中有几种类型的日志记录&#xff0c;分别用于记录不同的操作和事件。以下是MySQL中常见的日志类型 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...