自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 大数据之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 298

原创 大数据之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 485

原创 大数据之spark_累加器

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

2020-09-28 22:27:07 407

原创 大数据之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 939

原创 大数据之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 898 2

原创 大数据之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 516

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

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

2020-09-25 21:50:09 2333

原创 大数据之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 537

原创 大数据之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 300

原创 大数据之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 517

原创 大数据之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 295

原创 大数据之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 392

原创 大数据之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 362

原创 大数据之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 4786

原创 大数据之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 401

原创 大数据之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 361

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

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

2020-09-17 21:38:14 249

原创 大数据之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 470

原创 大数据之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 4503

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

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

2020-09-14 22:52:33 550

原创 大数据之scala_scala之Akka通信

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

2020-09-13 22:48:52 435

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

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

2020-09-13 20:49:46 387

原创 大数据之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 857

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

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

2020-09-10 22:47:07 190

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

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

2020-09-10 22:22:43 151

原创 大数据之scala_scala之集合

集合scala中的集合分为两种 ,可变集合和不可变集合, 不可变集合可以安全的并发的访问!集合的类主要在一下两个包中1)可变集合包 scala.collection.mutable2) 不可变集合包 scala.collection.immutablescala默认使用的是不可变的集合 , 因此使用可变的集合需要导入可变集合的包scala的集合主要分成三大类(1)Seq 序列(2)Set 不重复集(3)Map 键值映射集注意: 所有的集合都继承自Iterator迭代器这个特质序列

2020-09-07 21:33:13 366

原创 大数据之scala_scala之函数和方法

函数scala中一种函数式编程语言 ,函数是scala中的头等公民,建议优先使用函数 , 函数实现的功能和方法一样 ,但是我们可以把函数理解成一种特殊的业务逻辑对象 ,所以函数可以作为参数和返回值… 函数也是用来处理数据的代码封装函数的定义方式一val | var 函数名称=(函数的参数列表) => 函数体 val add = (x: Int, y: Int) => { x + y}val parseStr = (str: String) => { str.toUp

2020-09-06 21:49:48 251

原创 大数据之scala_scala的介绍及基本语法

1.Scala概述什么是ScalaScala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。面向函数和面向对象的混合式编程1.2.Scala特点1.优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。2.速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以和JRuby,Groovy比起来速度会快

2020-09-06 21:17:46 730

原创 大数据之hive_hive的企业级调优

简单调优:1.测试数据可以本地模式运行2.select 字段时禁止使用* 还可以加上where 进行行列过滤3.select from a join b 时避免直接join,因为会产生笛卡尔积,建议加上on进行过滤,减少数据量4.使用group by name进行count(name)聚合,比count(distinct name)聚合效率更高5.count(1)>count(*)>count(字段)6.可以适当减少或增多mapreduce的个数,加快执行效率https:/

2020-09-04 22:28:05 226

原创 大数据之hive_hive的行装列和列转行

行转列1.相关函数说明collect_list(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行不去重汇总,产生array类型字段,将多行数据转成一行一列存储在数组中.collect_set(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段,将多行数据转成一行一列存储在数组中.2.数据准备name constellation blood_type孙悟空 白羊座 A娜娜 射手座 A宋宋 白羊座 B猪八戒 白羊座 A凤姐 射手座

2020-09-04 22:00:17 359

原创 大数据之hive_hive中集合类型的使用

集合数据类型数据类型 描述 语法示例STRUCT(结构体)对象 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。 struct()MAP 映射 MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段

2020-09-04 21:25:42 1321

原创 大数据之hive_hive中常用函数解析及自定义函数_jdbc的使用

常用函数nvl(sal,0) 如果字段sal的值为null就返回0concat(str1,str2,str3) 将三个字符串拼接起来concat_ws("-",str1,str2,str3) 将三个字符串用"-“符号拼接起来concat_ws(”-",arr1,arr2,arr3) 将数组内的元素用"-“符号拼接起来split(“abc bcd def”,” “) 将字符串用空格切割开,并放入数组中cast(“123”,int) 将字符串转换成int类型的数字date_sub

2020-09-04 20:16:36 276

原创 大数据之hive_hive的排序方式

全局排序 Order ByOrder By:全局排序,一个Reducer1.使用 ORDER BY 子句排序ASC(ascend): 升序(默认)DESC(descend): 降序2.ORDER BY 子句在SELECT语句的结尾3.案例实操(1)查询员工信息按工资升序排列hive (default)> select * from emp order by sal;(2)查询员工信息按工资降序排列hive (default)> select * from emp orde

2020-09-03 22:36:26 946

原创 大数据之hive_hive之分桶表

分桶表的概念对Hive(Inceptor)表分桶可以将表中记录按分桶键(字段)的哈希值分散进多个文件中,这些小文件称为桶。分区针对的是数据的存储路径;分桶针对的是数据文件。分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区,特别是之前所提到过的要确定合适的划分大小这个疑虑。分桶是将数据集分解成更容易管理的若干部分的另一个技术。把表分区和分桶有两个理由1,分桶,当两个表进行join连接时,第一个表中的一条数据去第二个表中找相同的值的时候,往往需要找完整张表,才能找出

2020-09-03 21:57:34 430

原创 大数据之hive_hive的窗口函数

窗口函数我们在对表的某个字段中的相同的值进行分组聚合时,我们还想对聚合之前的这些相同的值所对应的一些数据进行一些局部运算的操作,这时候就需要使用到窗口函数.1.相关函数说明OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化CURRENT ROW:当前行 current rown PRECEDING:往前n行数据 n precedingn FOLLOWING:往后n行数据 n followingUNBOUNDED:起点, unboundedU

2020-09-03 21:01:33 262

原创 大数据之hive_hive的对表的操作命令

创建表1.建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] --(COMMENT :注释)[COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 分区[CLUSTERED BY (col_name, col_name

2020-09-02 22:54:48 412

原创 大数据之hive_hive的基础查询语句

– 求MF的平均年龄selectgender,avg(age) as avg_agefromtb_user group by gender ;+---------+----------+| gender | avg_age |+---------+----------+| F | 32.0 || M | 27.0 |+---------+----------+–按性别分区,然后求出平均工资大于2000的selectgender,a

2020-09-01 19:16:50 625

原创 大数据之hive_hive对数据库的基础操作命令

Hive数据类型Hive数据类型 Java数据类型 长度 例子TINYINT byte 1byte有符号整数 20SMALINT short 2byte有符号整数 20INT int 4byte有符号整数 20BIGINT long 8byte有符号整数 20BOOLEAN boolean 布尔类型, true或者false TRUE FALSEFLOAT float 单精度浮点数 3.14159DOUBLE

2020-09-01 19:10:04 276

原创 大数据之hbase_Phoenix教程

1简介Apache Phoneix是运行在HBase之上的高性能关系型数据库,通过Phoneix可以像使用jdbc访问关系型数据库一样访问HBase。Phoneix操作的表以及数据存储在HBase上,phoneix只需要和HBase进行表关联。然后在用工具进行一些读写操作。可以把Phoneix只看成一种代替HBase语法的工具(put get scan 过滤器 ,delete)。可以使用java的jdbc来连接phoneix操作Hbase数据库。phoenix在查询hbase时,虽然做了一些优化,但是延迟

2020-09-01 16:16:09 1384

原创 大数据之hbase_hbase过滤器的使用

/** *过滤器的使用 */public class FilterDemo { public static void main(String[] args) throws IOException { Connection conn = HbaseUtils.getConnection(); Table tb_user2 = conn.getTable(TableName.valueOf("tb_user2")); //get 获取一行

2020-09-01 16:03:40 180

空空如也

空空如也

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

TA关注的人

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