自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 搜索ES内的数据

GET /charge_slice_computer/_search{ "sort": [ { "charge_start_time": { "order": "desc" } } ]}

2020-12-02 11:33:02 2

原创 配置文件获取方法

private val config = ConfigFactory.load() lazy val cassConfig = config.getConfig("mysql") lazy val mysqlUrl = cassConfig.getString("mysql.url") lazy val username = cassConfig.getString("mysql.username") lazy val password = cassConfig.getString("m.

2020-11-30 14:05:51 6

原创 统一列的字段类型为:StringType

bigDF.select(bigDF.columns.map(column => { bigDF.col(column).cast(StringType) }): _*).na.fill("")

2020-11-30 13:53:33 6

原创 Spark on Yarn详解

Spark on Yarn详解Spark 可以跑在很多集群上,比如跑在local上,跑在Standalone上,跑在Apache Mesos上,跑在Hadoop YARN上等等。不管你Spark跑在什么上面,它的代码都是一样的,区别只是–master的时候不一样。其中Spark on YARN是工作中或生产上用的非常多的一种运行模式。今天主要对Spark on Yarn 这种方式做讲解。yarn模式两种提交任务方式Spark可以和Yarn整合,将Application提交到Yarn上运行,Yarn有两

2020-11-03 21:18:01 23

原创 spark-streaming_实时写入hbase

当处理实时数据是聚合类的运算是,可以写入到mysql中,因为数据量不大,但如果是非聚合类的数据,mysql中存放不下,此时可以使用支持覆盖写入或事务的大型数据库,例如:hbase,ES,clickhousehbase在写入数据时如果行键相同的数据写进来就会覆盖原始数据,所以当我们在运算时将每条数据赋予唯一的行键(例如:订单号,或者设备号加时间戳),即使一批数据写入到一半时中断了,重新写入时会覆盖之前的值,保证了数据的幂等性在写入数据时,记偏移量,可以将偏移量和数据记在同一行不同的列族中(hbase支持行

2020-11-02 21:13:05 18

原创 redis介绍

RedisNosql技术1redis介绍1.1什么是NoSqlNoSql是为了解决高并发、高可扩展、高可用以及高写入而产生的数据库解决方案。NoSql就是Not Only sql。Nosql是非关系型数据库,它是关系型数据库的良好补充,而不能替代关系型数据库。1.2Nosql数据库分类(了解)键值(Key-Value)存储数据库相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB典型应用: 内容缓存,主要用于处理大量数据的高访问负载

2020-11-02 20:35:12 112

原创 sparkstreaming对接kafka

sparkstreaming注意要点sparkstreaming是一个微对比准实时的计算框架flink与sparkstreaming不同的是,sparkstreaming中的task执行完之后就会被释放掉,而flink不会,进去之后就不会释放,可以重复使用,spark的task是临时工,flink的是合同工sparkstreaming执行程序时构建完rdd需要开启开启任务并挂起任务才会开始执行程序和一直在后台挂起ssc.startssc.awaitTermination()sparkstream

2020-11-01 00:59:44 10

原创 Spark Streaming简介及原理

Spark Streaming简介及原理简介:SparkStreaming是一套框架。SparkStreaming是Spark核心API的一个扩展,可以实现高吞吐量的,具备容错机制的实时流数据处理。支持多种数据源获取数据:Spark Streaming接收Kafka、Flume、HDFS等各种来源的实时输入数据,进行处理后,处理结构保存在HDFS、DataBase等各种地方。Dashboards:图形监控界面,Spark Streaming可以输出到前端的监控页面上。*使用的最多的是kafk

2020-11-01 00:15:48 16

原创 kafka快速入门

Kafka快速⼊⻔1.Kafka的特点1.解耦:  允许你独⽴的扩展或修改两边的处理过程,只要确保它们遵守同样的接⼝约束。2.冗余:  消息队列把数据进⾏持久化直到它们已经被完全处理,通过这⼀⽅式规避了数据丢失⻛险。许多消息队列所采⽤的"插⼊-获取-删除"范式中,在把⼀个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从⽽确保你的数据被安全的保存直到你使⽤完毕。3.扩展性:  因为消息队列解耦了你的处理过程,所以增⼤消息⼊队和处理的频率是很容易的,只要另外增加处理过

2020-10-30 21:31:15 17

原创 Hive 的 TRANSFORM 自定义函数

Hive 的 TRANSFORM 关键字提供了在 SQL 中调用自写脚本的功能。适合实现 Hive 中没有的 功能 又不想写 UDF 的情况,脚本一般都是python写的。Json 数据: {"movie":"1193","rate":"5","timeStamp":"978300760","uid":"1"} 需求:把json的字段timeStamp转换为日期编号。 1、先加载 rating.json 文件到 hive 的一个原始表 rate_json create table rate_js

2020-10-28 23:29:25 4

转载 hive使用动态分区插入数据详解

往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。1.创建一个单一字段分区表hive> create table dpartition(id int ,name string ) partitioned by(ct string );2.往表里装载数据,并且动态建立分区,以city建立

2020-10-23 18:20:36 26

原创 大数据之spark_spark整合hive

spark整合hive1.安装MySQL并创建一个普通用户,并且授权set global validate_password_policy=0;set global validate_password_length=1; -- 这个两个设置以后 密码很简单不会报错CREATE USER 'hive'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON hivedb.* TO 'hive'@'%' IDENTIFIED BY '123456' W

2020-10-05 11:59:38 53

原创 大数据之spark_spark sql的自定义函数

用户自定义函数UDF:输入一行返回一行UDTF:输入一行返回多行,类似于flatmapUDAF:输入多行返回一行,类似于聚合函数用户自定义UDF函数UDF案例11.在sql语句中根据ip查询省市地址package com.doit.spark.day11import com.doit.spark.day11.Utils.ip2Longimport org.apache.spark.broadcast.Broadcastimport org.apache.spark.rdd.RDDim

2020-10-04 23:56:32 287

原创 大数据之spark_spark SQL案例

连续登录三天的用户案例:数据uid,dtguid01,2018-02-28guid01,2018-03-01guid01,2018-03-01guid01,2018-03-05guid01,2018-03-02guid01,2018-03-04guid01,2018-03-06guid01,2018-03-07guid02,2018-03-01guid02,2018-03-03guid02,2018-03-02guid02,2018-03-06SQL代码实现package c

2020-10-04 00:12:31 13

原创 大数据之spark_spark SQL的建表语句

1.通过RDD+case class创建DataFramepackage com.doit.spark.day10import org.apache.spark.rdd.RDDimport org.apache.spark.sql.{DataFrame, SparkSession}object CaseClassCreateDataFrame { def main(args: Array[String]): Unit = { //构建SparkSession val spar

2020-10-03 22:56:53 109

原创 大数据之spark_spark SQL的简介

Spark SQL概述Spark SQL定义Spark SQL是Spark用来处理结构化数据的一个模块什么是DataFrames与RDD类似,DataFrame也是一个分布式数据容器[抽象的]。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上 看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加

2020-09-29 00:03:12 17

原创 大数据之spark_spark的深入理解

Spark执行流程提交任务spark-submit --master spark://node-1.51doit.cn:7070 --executor-memory 1g --total-executor-cores 4 --class cn.51doit.spark.WordCount /root/wc.jar hdfs://node-1.51doit.cn:9000/wc hdfs://node-1.51doit.cn:9000/out0spark任务执行模式Client模式(默认)Dirv

2020-09-28 22:55:45 21

原创 大数据之spark_累加器

累加器用来统计数据条数,可以统计总条数,也可以统计指定条件筛选后的数据条数,例如:处理日志数据时,出现的脏数据条数,如果我们想返回所有的脏数据并返回有用的数据,那么我们需要触发两次Job才能做到,如果用了累加器则不用触发两次Job累加器它是先在每个Task中进行累加,返回Driver端时再整体累加所有Task中的累加器,累加器在每个Task上是独立的(class 修饰的),这样可以避免线程安全问题运用累加器时,实际上就是一个闭包,它定义在Driver端,通过Task发送到Executor端,运用在每个

2020-09-28 22:27:07 12

原创 大数据之spark_spark中的线程安全问题

Task多线程问题问题原因一个Executor是一个进程,一个进程中可以同时运行多个线程Task,如果多个Task使用了共享的成员变量,就会出现线程不安全的问题案例需求使用spark将日期字符串转换成long类型时间戳样例数据2019-11-06 15:59:502019-11-06 15:59:512019-11-06 15:59:522019-11-06 15:59:532019-11-06 15:59:542019-11-06 15:59:552019-11-06 15:59

2020-09-27 23:53:31 75

原创 大数据之spark_spark中的序列化问题详解

Task序列化问题问题现象本质原因1.封装数据的bean没有实现序列化(报错图1)封装数据的bean需要写入本地磁盘和在网络中传输,没有实现序列化出出错2.rdd的算子中传入的函数用到了外部引用类型(闭包),且没有实现序列化(报错图2)本质原因的Task是在Driver端生成的,函数也是在Driver端定义的,但是真正执行是需要将Task和Task中引用都序列化,如果有没法序列化的,就会出现Task没有序列化异常Task在底层有实现序列化接口的,所以Task可以被传输到Executor端,

2020-09-27 21:59:42 60

原创 大数据之spark_自定义排序

自定义排序使用rdd的sortBy或sortByKey方法进行排序,实现根据需求实现灵活的排序规则,在给定的数据中,有三个字段,分别是:姓名,年龄,颜值。先按照颜值的从高到低进行排序,如果颜值相等,再安装年龄的升序排序,如果不指定排序规则,直接对Bean排序:sortBy(x => x)会报错数据name,age,fvtaoge,30,99.99xingge,18,9999.99hangge,29,99.99错误示范class BoyBean (val name :String,var

2020-09-27 21:12:57 11

原创 大数据之spark_spark的广播变量及ip地址案例分析

广播变量广播变量通常是为了实现mapside join,可以将Driver端的数据广播到属于该application的Executor,然后通过Driver广播变量返回的引用,获取事先广播到Executor的数据广播变量是通过BT的方式广播的(TorrentBroadcast),多个Executor可以相互传递数据,可以提高效率在Driver端使用sc.broadcast这个方法进行广播,并且该方法是阻塞的(同步的)广播变量一但广播出去就不能改变,为了以后可以定期的改变要关联的数据,可以定义一个o

2020-09-25 21:50:09 349

原创 大数据之spark_spark中的特殊算子cache、persist、checkpoint

cache、persist将数据缓存到内存,第一次触发Action,才会将数据放入内存,以后在触发Action,可以复用前面内存中缓存的数据,可以提升技术效率cache和persist的使用场景:一个application多次触发Action,为了复用前面RDD的数据,避免反复读取HDFS(数据源)中的数据和重复计算,persist可以将数据缓存到内存或磁盘【executor所在的内存或磁盘】,第一次触发action才放入到内存或磁盘,以后会缓存的RDD进行操作可以复用缓存的数据。一个RDD多次触发A

2020-09-25 20:53:42 15

原创 大数据之spark_spark运行结构剖析

基本概念RDD 概念:分布式、弹性、可容错的抽象数据集 特点 1.有多个分区,分区数量决定任务并行数 从HDFS中读取 如果是从HDFS中读取数据,分区的数量由hdfs中数据的输入切片数量决定 sc.textFile可以指定rdd的分区数量(textFile会生成两个RDD,一个是HadoopRDD负责读取数据,读取到 的数据是k,v类型的,然后内部又调用了一个MapPartitionsRDD,将k的偏移量去掉,只保留v数据, saveAsTextFile中也

2020-09-24 23:14:32 5

原创 大数据之spark_流量统计案例

数据用户id,开始时间,结束时间,所用流量1,2020-02-18 14:20:30,2020-02-18 14:46:30,201,2020-02-18 14:47:20,2020-02-18 15:20:30,301,2020-02-18 15:37:23,2020-02-18 16:05:26,401,2020-02-18 16:06:27,2020-02-18 17:20:49,501,2020-02-18 17:21:50,2020-02-18 18:03:27,602,2020-0

2020-09-24 22:42:15 18

原创 大数据之spark_连续三天用户登录案例

数据guid01,2018-02-28guid01,2018-03-01guid01,2018-03-05guid01,2018-03-02guid01,2018-03-04guid01,2018-03-06guid01,2018-03-07guid02,2018-03-01guid02,2018-03-03guid02,2018-03-02guid02,2018-03-06要求求每个用户登录记录中连续三天以上有登录记录的用户,并显示出他每个阶段的开始登录时间和结束登录时间实现方

2020-09-24 22:08:12 19

原创 大数据之spark_每个学科最受欢迎的老师案例

数据http://bigdata.51doit.cn/laozhanghttp://bigdata.51doit.cn/laozhanghttp://bigdata.51doit.cn/laozhaohttp://bigdata.51doit.cn/laozhaohttp://bigdata.51doit.cn/laozhaohttp://bigdata.51doit.cn/laozhaohttp://bigdata.51doit.cn/laozhaohttp://bigdata.51doi

2020-09-23 00:07:31 22

原创 大数据之spark_spark的Action算子解析

所有的Action算子底层都是直接或间接调用了runJob方法触发Action的collect将数据收集到Driver端,并且收集的时候,是按分区编号的顺序进行收集的,所以sort排序后的数据展示出来才能看出是排好序的,collect有一个问题,就是当需要收集的数据太多时,超过内存空间就不会再收集了,因为collect收集过来的数据是存在内存当中的,不会溢写到磁盘,所以用这种方法展示数据,可能会导致数据丢失val rdd1 = sc.parallelize(List(1,2,3,4,5), 2)rd

2020-09-23 00:07:17 18

原创 大数据之spark_spark的案例分析

计算订单分类成交金额需求在给定的订单数据,根据订单的分类ID进行聚合,然后按照订单分类名称,统计出某一天商品各个分类的成交金额数据样例{“cid”: 1, “money”: 600.0, “longitude”:116.397128,“latitude”:39.916527,“oid”:“o123”, }“oid”:“o112”, “cid”: 3, “money”: 200.0, “longitude”:118.396128,“latitude”:35.916527}{“oid”:“o124”

2020-09-18 21:50:47 48

原创 大数据之spark_spark的Transformation算子解析

map算子功能所做映射val rdd1: RDD[Int] = sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2)flatMap算子先map在压平,spark中没有flatten方法val rdd2 = sc.parallelize(Array("a b c", "d e f", "h i j"))rdd2.flatMap(_.split(' ')).collectval rdd3 = sc.parallelize(List(List("

2020-09-17 22:57:12 22

原创 大数据之spark_spark的执行流程简介及初始Task数量的生成规则

spark的执行流程简介1.类加载,通过反射调用指定类的main方法2.创建SparkContext,跟Master通信,申请资源3.Master跟Worker进行通信启动Executor4.启动Eexcutor,并创建线程池5.Executor向Driver反向注册(前5步完成准备工作)6.创建原始的RDD.例如textFile()7.调用RDD中的Transformations算子8.调用RDD中的Action算子,Action中会调用sc.runJob方法9.构建DAG,根据shu

2020-09-17 21:38:24 29

原创 大数据之spark_spark之RDD的使用

什么是RDDRDD的全称为Resilient Distributed Dataset,是一个弹性、可复原的分布式数据集,是Spark中最基本的抽象,是一个不可变的、有多个分区的、可以并行计算的集合。RDD中并不装真正要计算的数据,而装的是描述信息,描述以后从哪里读取数据,调用了用什么方法,传入了什么函数,以及依赖关系等。RDD的特点有一些列连续的分区:分区编号从0开始,分区的数量决定了对应阶段Task的并行度有一个函数作用在每个输入切片上: 每一个分区都会生成一个Task,对该分区的数据进行计算

2020-09-17 21:38:14 7

原创 大数据之spark_spark的入门程序编写

Scala编写Spark的WorkCount创建一个Maven项目在pom.xml中添加依赖和插件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.

2020-09-16 21:58:15 23

原创 大数据之spark_spark简介

什么是SparkSpark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache的顶级项目,2014年5月发布spark1.0,2016年7月发布spark2.0,2020年6月18日发布spark3.0.0Spark的特点Speed:快速高效Hadoop的MapReduce作为第一代分布式大数据计算引擎,在设计之初,受当时计算机硬件条件所限(内存、磁盘、cpu等),为了能

2020-09-16 21:03:11 78

原创 大数据之scla_柯里化方法,范型,隐式

柯里化详解语法 : 函数有多个参数列表意义: 方便数据的演变, 后面的参数可以借助前面的参数推演 , foldLeft的实现有多个参数列表 的函数就是柯里化函数,所谓的参数列表就是使用小括号括起来的函数参数列表curry化最大的意义在于把多个参数的function等价转化成多个单参数function的级联,这样所有的函数就都统一了,方便做lambda演算。 在scala里,curry化对类型推演也有帮助,scala的类型推演是局部的,在同一个参数列表中后面的参数不能借助前面的参数类型进行推演,cur

2020-09-14 22:52:33 18

原创 大数据之scala_scala之Akka通信

什么是ACTORSAkka Actors遵循Actor模型(废话!)  我们这把Actor当作是一个人,这个人不会自己和其他的人直接说话,他们只通过mail来进行交流。  现在来探讨Actors的一些特性:一、消息传递假设有两个人:学生和聪明的老师。学生每天早上都会给老师发送邮件,而聪明的老师都会回复一句名言。这里需要解释:  1、学生发送邮件。一旦发送成功,邮件不能再修改。这天然就具备了不可变性;  2、老师会自己决定何时检查邮箱;  3、老师还会回复一封邮件(也是不可变的);  4、学

2020-09-13 22:48:52 35

原创 大数据之scala_scala对比java的Lambda表达式和流式编程

在scala中有非常方便的map,filter,reduce等对集合进行一系列操作的方法那么我们想在java中实现这些方法该怎么编写程序呢?首先我们想想到,要对java中的集合进行功能扩展,有两种方式:1.装饰者模式2.继承使用装饰者模式时,可以编写一个包装类,在包装类里写上我们想要实现的方法模型然后在方法的参数列表中要求传入一个接口,在接口中定义一个类似于函数的标准,具体要实现的功能,由测试类new匿名内部类的时候自己传入为了使我们可以传入任意类型的数据,所以我们在定义参数类型时,可以使用

2020-09-13 20:49:46 35

原创 大数据之scala_scala的练习案例

练习案例平均温度案例val d1 = Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 33.1))val d2 = Array(("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3))val d3 = Array(("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0)

2020-09-11 13:05:04 57

原创 大数据之scala_scala(高阶函数 偏函数 匹配模式)

高阶函数函数的参数是函数的函数或者方法函数的返回值是函数的函数或者方法函数的参数和返回值都是函数的函数或者方法使用高阶函数的一个原因是减少冗余的代码。比方说需要写几个方法以通过不同方式来提升员工工资,若不使用高阶函数,代码可能像这样:object SalaryRaiser { def smallPromotion(salaries: List[Double]): List[Double] = salaries.map(salary => salary * 1.1) d

2020-09-10 22:47:07 40

原创 大数据之scala_scala之面向对象

类和对象详解组成结构构造函数成员变量成员方法(函数)局部变量代码块构造器构造器的定义每个类都有一个主构造器,这个构造器和类定义"交织"在一起类名后面的内容就是主构造器,如果参数列表为空的话,()可以省略scala的类有且仅有一个主构造器,要想提供更加丰富的构造器,就需要使用辅助构造器,辅助构造器是可选的,它们叫做this注意:主构造器会执行类定义中的所有语句例子一class User { // 类默认有一个无参的主构造函数}val user = new User

2020-09-10 22:22:43 14

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除