sgg大数据-spark-01---一天十个---20210317/18

视频地址:https://www.bilibili.com/video/BV11A411L7CK?p=7

scala版本:https://www.scala-lang.org/download/all.html

需要去老师的文件中找到这个并配置下地址设置环境变量。

截图:

下载插件:https://blog.csdn.net/weixin_41122339/article/details/81141913

---01-06---

开始写代码了:

package com.atguigu.bigdata.spark.core.wc

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark01_WordCount {

    def main(args: Array[String]): Unit = {

        // Application
        // Spark框架
        // TODO 建立和Spark框架的连接
        // JDBC : Connection
        val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
        val sc = new SparkContext(sparConf)

        // TODO 执行业务操作

        // 1. 读取文件,获取一行一行的数据
        //    hello world
        val lines: RDD[String] = sc.textFile("datas")

        // 2. 将一行数据进行拆分,形成一个一个的单词(分词)
        //    扁平化:将整体拆分成个体的操作
        //   "hello world" => hello, world, hello, world
        val words: RDD[String] = lines.flatMap(_.split(" "))

        // 3. 将数据根据单词进行分组,便于统计
        //    (hello, hello, hello), (world, world)
        val wordGroup: RDD[(String, Iterable[String])] = words.groupBy(word=>word)

        // 4. 对分组后的数据进行转换
        //    (hello, hello, hello), (world, world)
        //    (hello, 3), (world, 2)
        val wordToCount = wordGroup.map {
            case ( word, list ) => {
                (word, list.size)
            }
        }

        // 5. 将转换结果采集到控制台打印出来
        val array: Array[(String, Int)] = wordToCount.collect()
        array.foreach(println)

        // TODO 关闭连接
        sc.stop()

    }
}

这个比较不好,无法有聚合的感觉的。

   val wordToCount = wordGroup.map {
            case ( word, list ) => {
                (word, list.size)
            }
        }

---07---

spark可以对多个文件进行聚合的。

我们再改善一下:我们事先把数量加上,根据数量完成聚合,就会好很多的。

---08---

看着spark很简单,和scala的集合是差不多的,但是实际上不是这样的。

spark提供了一个reduceByKey,会对value做reduce。

注意这个写法可以是什么?当=>的两端的x只出现一次的时候,那么就会有简写的方法。

---09---

可以看到里面有大量的日志的,我们看下需要自己优化下。

---10---

如何运行呢?我们先解压缩到spark-local的目录,现在这里实现本地的提交。

第一步:进入到bin目录:

我们写下spark的函数:

是去哪里读取的呢?

---11---

我们看下监控的页面:http://192.168.244.133:4040/jobs/

监控的界面:

我们用idea开发的话如何使用这个环境呢,就是我们不能一直用命令行吧?

---

这个jar包告诉我们上面哪个类所在的位置。

执行这个指令。

---12---

独立的集群模式安装,先不看。

---13-16---

yarn模式:

第一步:解压上传文件,机器192.168.244.133

第三步:修改hadoop的配置文件

修改yarn-site.xml

<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认
是 true -->
<property>
 <name>yarn.nodemanager.pmem-check-enabled</name>
 <value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认
是 true -->
<property>
 <name>yarn.nodemanager.vmem-check-enabled</name>
 <value>false</value>
</property>

第四步:启动hadoop集群,我的集群是伪分布式的,启动的详情:https://blog.csdn.net/qq_28764557/article/details/109913185

启动语句:

start-dfs.sh
start-yarn.sh

第三步:修改spark-env.sh

export JAVA_HOME=/usr/local/apps/jdk8
YARN_CONF_DIR=/usr/local/apps/hadoop/etc/hadoop

第五步:直接提交应用,注意变化这个master编程yarn了。

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

看下监控页面:

192.168.244.133:8088

第六步:修改历史服务器:

spark.eventLog.enabled true
spark.eventLog.dir hdfs://192.168.244.133:9008/directory

这个需要在hdfs创建的。

第七步:修改spark-env.sh

注意这个实际上应该是这个配置文件的。

再次修改:

export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://192.168.244.133:9008/directory
-Dspark.history.retainedApplications=30"

第八步:修该 spark-defaults.conf

spark.yarn.historyServer.address=192.168.244.133:18080
spark.history.ui.port=18080

第九步:启动

需要改下:http://192.168.244.133:18080/history/application_1615825025568_0008/jobs/

---17---

---18---

运行架构:

ApplicationMaster是做什么的:https://blog.csdn.net/qq_44594249/article/details/93972793

计算相关的组件是Executor和Driver

资源相关的组件是Master和worker

如何解耦就是ApplicationMaster

Master和worker 其中Master相当于我们的yarn的Resourcemanager worker相当于NodeManager

计算和资源解耦用Applicationmater

有向无环图。

---19-20-21---

saprk的三大数据结构:

小的分布式的计算功能:

我们计算:在driver端把逻辑封装好传给executor,这里是把数据也传进去了。

---22-23-24---

RDD就是数据和逻辑。

如何提高计算性能呢?

RDD,最小的计算单元:

RDD斯和最小的计算单元,要是有新的逻辑只要关联下就完毕了。

---25---

关于缓冲区:

这个就类似于批处理

---26---

我们自己改善一下:

我们再改进下:

三个字节转换为一个字符。

---27---

java的装饰着设计模式:https://blog.csdn.net/jason0539/article/details/22713711

我们回头看下这个RDD:

RDD的包装:

RDD执行:

之前的操作都是功能的扩展。

数据是原封不动得往下流转得RDD是不保存数据得。

---28---

我们深入理解下RDD是什么:

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据
处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行
计算的集合。

RDD是如何分解的呢?

分区的目的就是形成独立的task并行执行。

分区,读取完的数据放在指定分区中,互相不受影响。

---29---

数据是分布式文件系统的文件,没有网络io是最块的。

executor和文件在一个节点上。

RDD的五大分区属性:

1.分区列表,分区的数据是不互相关联的。

2.分区的计算函数,数据是不一样的,但是计算的逻辑是一样的。

3.RDD之间的依赖关系,互相之间包装和依赖。

4.分区器,数据是如何放在不同的分区的。

5.计算分区的首选的位置。

---30---

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值