- 博客(111)
- 资源 (1)
- 收藏
- 关注
原创 3.动态规划
3.动态规划3.1记忆搜索算法对斐波那契数列进行改进,使用记忆功能来保存已经完成过的计算,当下次需要某个计算时,如果记忆列表中有计算结果,则直接使用。否则进行迭代。from collections import defaultdictfrom datetime import datetimetotal = defaultdict(int) # 存储已经计算好的值def fib_test(k): # 递归求解第k个数的值 assert k > 0, "k必须大于0"
2020-11-13 10:02:12
345
原创 2.回溯法
2回溯法回溯法是一个求解“全部解”问题的方法。回溯法是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。而满足回溯条件的某个状态的点称为“回溯点”。2.1八皇后问题第一 分别尝试所有的位置。第二 可以分别尝试所有的位置,前提条件是这个位置不能和已有的皇后冲突,只能放第二排。第三 可以分别尝试所有的位置,前提条件是这个位置不能和已有的皇后冲突,只能放第三排。结束条件:第八个皇
2020-11-13 09:53:29
299
原创 1.递归
1递归什么是递归?递归不是算法,函数内部调用函数本身。递归一定要终止,怎么写终止条件很重要。1.1斐波拉契数列斐波拉契数列又称为黄金分割数列,因为数学家列昂纳多 斐波那契以兔子繁殖为列子而引入,故又称为“兔子数列”。指的是这样一个数列:1、1、2、3、5、8、13、21、34、…后面的数都等于前面的数的和。1.2斐波那契数列的计算递归求解from collections import defaultdict=total = {}total = defaultdict(int)de
2020-11-13 09:49:05
296
原创 openstack官方API测试案例-查询全部安全组
openstack是一个提供了较为详细、实用的开源云管理系统。但是作为openstack二次开发的新手,特别是类似我这样刚刚踏入云计算行列的学生来说,使用openstack提供的api是一件困难的事情。那么在这篇博客中,我将详细地介绍一个使用openstack api的例子。博客将以查询所有的安全组为例。查询全部安全组1. 找到参考API安全组由neutron组件进行管理维护,那么首先找到对应的API使用方式。安全组API如上图如所示,查询所有安全组的api为/v2.0/security-
2020-08-17 15:17:20
813
1
原创 获取openstack token的三种方式
openstack所有组件的相关认证都由Keystone组件来进行管理。在对openstackAPI进行测试时需要在请求头部分指定参数:X-Auth-Token和Content-Type。第一个参数的值为token,第二个参数的值为响应类型。获取token的方式,我目前总结了如下三种。1.通过openstack命令获取加载环境变量。[root@controller ~]# source admin-openrc 获取token[root@controller ~]# openstack toke
2020-08-17 14:47:25
6564
原创 openstack 4j 无法复用OSClient
基于springboot使用openstack4j操作openstack平台时,无法实现一个账号只进行一次keystone认证,而是需要在每次操作之前都构造一个OSClient对象,甚至必须在方法上进行构造。这似乎与多线程操作OSClient出现的问题类似。目前没有找到对应的解决方案,如果有大神知道是怎么回事,请不吝赐教!多线程操作OSClient不能成功的原因分析如下博客说得比较清楚,感兴趣的朋友可以了解一下。博客地址本篇博客待更新!...
2020-08-17 14:17:52
382
原创 openstack4j开始使用的两个BUG
昨天使用IDEA建立了一个openstack4j的测试工程。第一次用这个框架,出现了三个问题。问题1 连接器问题一开始在pom文件中没加连接器,报错如下:Exception in thread "main" org.openstack4j.api.exceptions.ConnectorNotFoundException: No OpenStack4j connector found in classpath完善后的 pom.xml <properties> <
2020-08-11 17:16:35
1173
2
原创 openstack二次开发——入门心得
引言这段时间在跟着课题组在做openstack的二次开发的相关工作,从开始的一无所知到现在的略有所得是一个喜人的经历。首先,来说一下openstack二次开发的含义:在当前阶段,我们认为openstack的二次开发是将openstack各个组件的功能在用户交互层面做一次重新排版,简单点说就是模仿Horizon组件重新开发一套openstack的管理组件。默认的Horizon组件提供的功能有限,人机交互体验感有待提升。限于Horizon的种种不足,就使得我们有必要对其进行二次。我们选定的研究版本是Queen
2020-08-11 14:55:52
3634
原创 neutron-server 故障排错
前两天封装了一套自动化脚本来安装openstack(queens),意在免去手动繁琐,可是由于一个小错误,导致neutron-server服务无法启动。启动日志如下:● neutron-server.service - OpenStack Neutron Server Loaded: loaded (/usr/lib/systemd/system/neutron-server.service; enabled; vendor preset: disabled) Active: activati
2020-07-27 23:15:19
4942
2
原创 git远程仓库学习过程中的两个bug
今天对git进行复习,发现还是有很多没踩过的坑,如下图所示就出现了两个坑。从图中可以看出第一个坑是:Access deined: DeployKey does not support push code通过万能的百度查询到,gitee部署可写的公钥要在这个位置,而不是在公钥管理部分添加,于是,我重新部署了一下公钥,解决了bug1。在解决了bug1之后,进行提交发现报错: ! [rejected] master -> master (fetch first)error:
2020-07-26 13:54:21
180
原创 yum教程
本文对yum本地仓库的制作与本机yum源的使用做了相关实验。第一节与第二节是在实验过程中衍生出来的两个需求,即只下载不安装rpm包与下载已安装好的pm包及其依赖;第三节为本地仓库搭建的关键步骤;第四节是让操作系统使用本机yum源。
2020-07-06 09:23:44
693
原创 spark-33.spark机器学习_6_决策树
1.信息熵熵在信息论中代表随机变量“不确定度”的度量。一个离散型随机变量的熵H(X)定义为:直觉上,信息量等于传输该信息所用的代价,这个也是通信中考虑最多的问题。比如说:赌马比赛中,有4匹马{A,B,C,D},获胜概率分别为{1/2,1/4,1/8,1/8}。接下来,让我们将哪一匹马获胜视为一个随机变量X∈{A,B,C,D}。假定我们需要用尽可能少的二元问题来确定随机变量X的取值。例如:问题1:A获胜了吗?问题2:B获胜了吗?问题3:C获胜了吗?最后我们可以通过最多3个二元问题,来确定X的取
2020-06-29 16:38:27
289
原创 spark-32.spark机器学习_5_协同过滤算法
协同过滤算法主要用于推荐系统,推荐系统是信息过载所采用的措施,面对海量的数据信息,,从中快速推荐出符合用户特点的物品。一些人的“选择恐惧症”、没有明确需求的人。解决如何从大量信息中找到自己感兴趣的信息。解决如何让自己生产的信息脱颖而出,受到大众的喜爱。1.协同过滤要解决的问题根据用户已经评分物品,补充用户给物品评分表的空格的评分,供推荐系统使用。2.要解决的问题有了相似度的比较,那么比较多少个用户或者物品为好呢?一般会有基于固定大小的邻域以及基于阈值的邻域。具体的数值一般是通过对模型的评比分数进
2020-06-29 16:34:44
332
原创 spark-31.spark机器学习_4_K-Means聚类
聚类属于无监督学习,就是对大量未标注的数据集就,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。1.K-Means算法实现算法实现:未聚类的初始点集;随机选取两个点作为聚类中心;计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去;计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心;重复(3),计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去;重复(4),计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心。
2020-06-29 16:31:39
232
原创 spark-30.spark机器学习_3_频繁项集挖掘FPGrowth
1.FPGrowth 基本概念T*:代表一次购物项集:项的集合支持度:项出现的次数或者概率FPGrowth的目标是发现有那些项频繁在一起出现。2.挖掘过程1.构建FPTree2.根据数进行递归挖掘【子树没有分叉则停止】3.构建FPTree1.根据每一项出现的次数重新排列你的购物集。2.根据重新排列的购物集构造FPTree。【tree有一个空Root节点】4.挖掘步骤排列项集是根据出现次数从高往低排列,那么挖掘的时候是从低向高开始挖掘。先找到当前挖掘项的所有结点,然后顺次找到Ro
2020-06-29 16:28:30
394
原创 spark-29.spark机器学习_2_线性回归
线性回归是利用被称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或者多个被称为回归系数的模型参数的线性组合。1.一元线性回归找到一条直线能够最大程度上拟合二维空间中出现的点。2.多元线性回归如果自变量多余1个,那么就要求一个多元函数去拟合空间中的点。二元线性回归:n元线性回归:要求什么?要求使得所有点到这条线的误差最小。误差最小化:要求参数θ的最优解,使得所有点到这条线的误差最小。如果将y表示样本的真实值,h_θ (x)表示
2020-06-29 16:24:12
846
原创 spark-28.spark机器学习_1_引言
1.机器学习定义机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。通过算法使计算机能够模拟人类的判别能力。2.机器学习能干啥?模式识别、计算机视觉、数据挖掘、统计学习、语音识别、自然语言处理。传统学习:有监督、无监督学习,包括:回归、推荐、聚类、分类、挖掘。人工智能:深度学习、强化学习、迁移学习,包括:神经网络、卷积神经网络、AlphaGo。
2020-06-29 16:14:38
193
原创 spark-27.spark调优_5_Shuffle优化
spark.shuffle.file.bufferspark.shuffle.file.buffer默认值:32k参数说明:该参数用于设置shuffle write task的BufferedOutputStream的buffer缓冲大小。将数据写到磁盘文件之前,会先写入buffer缓冲中,待缓冲写满之后,才会溢写到磁盘。调优建议:如果作业可用的内存资源较为充足的话,可以适当增加这个参数的大小(比如64k),从而减少shuffle write过程中溢写磁盘文件的次数,也就可以减少磁盘IO次数,进
2020-06-29 15:50:59
146
原创 spark-26.spark调优_4_程序开发调优
避免创建重复的RDD需要对名为“hello.txt”的HDFS文件进行一次map操作,再进行一次reduce操作。也就是说,需要对一份数据执行两次算子操作。错误的做法:对于同一份数据执行多次算子操作时,创建多个RDD。这里执行了两次textFile方法,针对同一个HDFS文件,创建了两个RDD出来,然后分别对每个RDD都执行了一个算子操作。这种情况下,Spark需要从HDFS上两次加载hello.txt文件的内容,并创建两个单独的RDD;第二次加载HDFS文件以及创建RDD的性能开销,很明显是白白浪
2020-06-29 15:47:22
139
原创 spark-25.spark调优_3_spark资源配置
1.资源运行中的几种情况实践中跑的SparkJob,有的特别慢,查看CPU利用率很低,可以尝试减少每个executor占用的CPU core的数量,增加并行的executor数量,同时配合增加分片,整体上增加了CPU的利用率,加快数据处理速度。发现某个job很容易发生内存溢出,我们就增大分片数量,从而减少了每片数据的规模,同时还减少并行的executor数量,这样相同的内存资源分配给数量更少的executor,相当于增加了每个task的内存分配,这样运行速度可能慢了些,但是总比OOM强。数据量特别少
2020-06-29 15:41:12
264
原创 spark-24.spark调优_2_spark的数据倾斜
1.什么是数据倾斜数据倾斜指的是,并行处理的数据集中,某一部分(如Spark或Kafka的一个Partition)的数据显著多于其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈。数据倾斜在spark中将导致两个严重的后果:数据倾斜直接会导致一种情况:Out Of Memory。运行速度慢。一个经验性的结论是:一般情况下,OOM的原因都是数据倾斜。2.如何定位数据倾斜数据倾斜一般会发生在Shuffle过程中,很大程度上是你使用了可能会触发Shuffle操作的算子:distinct
2020-06-29 15:36:13
200
原创 spark-23.spark调优_1_监控与调优方向
1.spark的监控1.任务运行的监控spark web ui spark内置应用运行监控工具。2.基础资源的监控Ganglia 分析集群的使用状况和资源瓶颈。Nmon 主机CPU、网络、磁盘、内存。Jmeter 系统实时性能监控工具。3.代码的监控Jprofile Java程序性能监控工具【所有基于JVM的都能被监控】2.spark的调优方向调优要点:数据倾斜、资源参数、Shuffle参数、程序开发、JVM GC的优化。...
2020-06-29 15:25:12
181
原创 spark-22.spark内核解析_2_Spark的脚本
1.集群管理脚本start-all.sh调用 start-master.sh CLASS=”org.spark.deploy.master.Master” 执行main(),并传入一些参数。调用 start-slave.sh CLASS=”org.spark.deploy.worker.Worker” 执行main(),并传入一些参数。stop-all.sh 类似。2.任务提交脚本spark-submit.shspark-class.sh org.apache.spark.deploy.Spa
2020-06-29 15:21:53
228
原创 spark-21.spark内核解析_1_maven标签与Spark的通信机制
1.Maven标签<denpendencies> 声明并引入依赖。<dependencyManangement> 仅声明依赖,不自动引入,需要用的时候需要手动引入。<pluginManagement> 仅声明插件,不自动引入,需要用的时候要手动引入。<plugins> 声明并引入插件<profiles> 通过选择不同的profile 来动态更改POM文件,一般用于适应不同的编译和部署环境。 <exclusions>
2020-06-29 14:58:36
179
原创 spark-20.sparkGraphx_2_图的转换
1.Graph的创建1.根据边和顶点来创建。def apply[VD: ClassTag, ED: ClassTag]( vertices: RDD[(VertexId, VD)], edges: RDD[Edge[ED]], defaultVertexAttr: VD = null.asInstanceOf[VD], edgeStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY, vert
2020-06-28 22:25:18
566
原创 spark-19.sparkGraphx_1_sparkGraphx概述
以前处理的数据都是以记录为中心,图计算以图的方式来展示数据,更多的考虑的是顶点和边之间的关系。spark graphx中采用RDPG Resilient Distributed Property Graphx(弹性分布式属性图)来进行抽象。1.关键抽象:1.顶点:RDD[(VertexId,VD)]VertexId是Long类型,表示顶点的ID(主键),VD表示类型参数,可以是任意类型,类似于RDD[T],表示的是该顶点的属性。VertexRDD[VD]继承了RDD[(VertexId, VD)]
2020-06-28 20:47:43
334
原创 spark-18.sparkStreaming_3_DStream的转换操作与输出
转换操作1.无状态转换map(func)flatMap(func)fileter(func)repartition(numPartitionts)union(otherStream)count()reduce(func)count()join(otherStream,[numTasks])cogroup(otherStream,[numTasks])transform(func)countByValue(func)reduceB
2020-06-27 15:41:10
316
原创 spark-17.sparkStreaming_2_DStream的输入
1.文件数据源监控目录下新生成的文件,将文件内容读成一个RDD,这个文件最好是mv进来的。import org.apache.spark.streaming._val ssc = new StreamingContext(sc,Seconds(5))val lineDStream = ssc.textFileStream("hdfs://master:9000/data")val words = lineDStream.flatMap(_.split(" "))val word2count =
2020-06-27 15:31:39
166
原创 spark-16.sparkStreaming_1_概述与简单使用
1.sparkStreaming概述spark streaming用于处理流式计算问题。能够和spark的其它模块无缝集成。它是一个粗粒度的框架,即只能对一批数据指定处理方法,核心是采用微批次架构。和storm采用的以条处理的不同。sparkStreaming会运行接收器来不断接收输入的数据流,然后根据程序配置时间,将时间范围内的所有数据打成一个RDD,发送给spark Core 去处理。依次来打成数据流的计算。spark Streaming 有它自己的抽象,叫DStream(Discretize
2020-06-27 15:23:42
142
原创 spark-15.sparkSQL_6_数据仓库
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。特点:数据仓库的数据是面向主题的;数据仓库的数据是集成的;数据仓库的数据是不可更新的,能追加但不能更改;数据仓库的数据是随时间不断变化的;发展阶段:简单报表阶段:解决一些日常的工作中业务人员需要的报表,以及生成一些简单的能够帮助领导进
2020-06-26 18:24:45
579
原创 spark-14.sparkSQL_5_sparkSQL的输入、输出
1.输入高级模式:spark.read.json(path) jdbc csv parquet //默认格式,列存储格式,hive。 orc table text textFile低级模式:spark.read.format(“json”).load(path) 如果不指定format,默认是parquet格式。2.输出高级模式:dataFrame/dataSet. json(path) jdbc csv parquet
2020-06-26 18:22:05
227
原创 spark-13.sparkSQL_4_集成hive
1.使用内置的hive【当前hive 1.2.1】注意:如果发现master节点有metastore_db出现,删除,然后启动客户端配置hdfs路径。bin/spark-shell --master spark://master:7077 --conf spark.sql.warehouse.dir=hdfs://master:9000/spark_warehouse将spark的数据仓库的路径配置到HDFS上,配置只需要在第一次启动时配置。2.使用外置的hive1)直接将hive conf 目
2020-06-26 18:19:03
137
原创 spark-12.sparkSQL_3_sparkSQL自定义函数
UDF函数通过spark.udf.register(“name”,func)来进行注册。使用select func() … 来直接调用。如:val peopleDF = spark.read.json("examples/src/main/resources/people.json")peopleDF.createOrReplaceTempView("people")spark.udf.register("add",(x:String)=>"A:"+x)spark.sql("select a
2020-06-26 18:16:45
301
原创 spark-11.sparkSQL_2_sparkSQL执行模式
1.DSL模式通过调用方法来是实现。如:dataFrame.select("name").showdataFrame.filter($"age">25).show2.SQL模式通过执行SQL。1)先创建一张表:一个sparkContext可以多次创建sparkSession。//Session内可访问,一个sparkSession结束后,表自动删除。dataFrame.createOrReplaceTempView 使用表名,不需要任何前缀。//应用级别内可访问,一个spark
2020-06-26 17:46:23
257
原创 spark-10.sparkSQL_1_sparkSQL概述与数据转换
1.sparkSQL概述sparkSQL是spark的一个模块,可以和RDD进行混合编程、支持标准的数据源、可以集成和替代Hive、可以提供JDBC\ODBC服务器功能。sparkSQL里面有两个新的数据抽象:DataFrame和DataSet。DataFrame:SQL操作主要涉及到表的操作,表是数据和schema组成的,所以可以认为DataFrame就是一张表 = RDD+Schema。DataFrame的执行效率比RDD要高,主要表现在定制化的内存管理和优化的执行引擎。DataFrame是
2020-06-26 17:43:41
203
原创 spark-9.sparkcore_6_实例练习
现有一份CDN数据,该数据的格式为:IP命中率响应时间请求时间请求方法请求URL请求协议状态码响应大小referer用户代理一条样例数据如下:100.79.121.48 HIT 33 [15/Feb/2017:00:00:46 +0800] "GET http://cdn.v.abc.com.cn/videojs/video.js HTTP/1.1" 200 174055 "http://www.abc.com.cn/" "Mozilla/4.0+(compatibl
2020-06-26 15:34:35
462
原创 spark-8.sparkcore_5_spark的输入输出
spark的输入输出1.文本文件的输入、输出1.sc.textFile(path) 文本文件的输入。2.rdd.saveAsTextFile(path) 文本文件的输出。2.JSON文件的输入、输出实质上是文本文件的输入、输出,需要在程序中手动进行编码与解码。3.CSV\TSVCSV逗号分割,TSV tab分割,文本文件输入、输出。4.SequenceFile文件输入、输出val sdata = sc.sequenceFile[Int,String](“hdfs://master:9000
2020-06-26 15:16:40
400
原创 spark-7.sparkcore_4_RRD的行动操作与统计函数
1.RDD的行动操作Action1 .reducedef reduce(f: (T, T) => T): T 如果最后不是返回RDD,那么就是行动操作。通过func函数聚集RDD中的所有元素,这个功能必须是可交换且可并联的。如:val rdd = sc.makeRDD(1 to 10)scala> rdd.reduce(_+_)res4: Int = 552.collectdef collect(): Array[T] 将RDD的数据返回到driver层。在驱动程序中,
2020-06-26 13:34:24
315
原创 spark-6.sparkcore_3_RDD的转换操作
本文给出了spark常用的一些转换操作,基于源码,对部分API做了使用范例。1.mapdef map[U: ClassTag](f: T => U): RDD[U]一对一转换。返回一个新的RDD,该RDD由每一个输入元素经过f函数转换后组成。如产生1-100的数据,并让每个元素乘以2:val rdd = sc.makeRDD(1 to 100)rdd.map(_*2).collect 或 rdd.map(x => x*2).collect2.filterdef filter
2020-06-26 11:37:12
159
原创 spark-5.sparkcore_2_RDD的创建与类型
1).从集合中创建RDD。方法1def makeRDD[T: ClassTag]( seq: Seq[T], numSlices: Int = defaultParallelism): RDD[T]standalone模式下的并行度defaultParallelism:conf.getInt(“spark.default.parallelism”, math.max(totalCoreCount.get(), 2))方法2 def parallelize[T: ClassTag](seq: Se
2020-06-26 09:34:48
129
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人