当前位置: 首页 > 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;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...