- 博客(52)
- 收藏
- 关注
原创 我眼中的大数据: 我们未来该往何处
工具的完善将大数据开发的难度降低到一个似乎人人可以上手的程度,以阿里、腾讯为代表的大厂提供了完善的数据平台工具,数据治理、数据开发都可以通过SQL解决,前辈们手撸Java的时代仿佛已经一去不复返了,但是,这也意味着,大数据从业者的平均上限被拉低了。可气的是,谷歌虽然发表了论文介绍了自己工作的牛逼之处,但是并没有开源自己的系统。可能暗藏的危机在繁华的那几年就隐隐可见,在那几年,陆续有几个文件下发,包括但不限于防止未成年人沉迷网络游戏、反垄断,因为众所周知的原因,经济开始下行,恍惚之间,“降本增效”成为热词。
2023-09-17 00:39:07
339
原创 Hive 中实现数据透视
假设我们现在有一张名为“Scores”的Hive表。NAME SCORE A 1 A 3 A 1 A 5 B 3 B 5 B 1 B 3 B 5 我们现在需要统计出A,B两个人获得分数为1,3,5的票数分别是多少,即最终的结果为下表。NAME 1 3 5 A 2 1 1 B 1 2 2 这其实就一个简单的透视表。为了出现这样的效果。由于
2021-06-10 19:00:26
1284
原创 机器学习-周志华-课后习题-模型选择与评估
文中提到,在机器学习的过程中,过拟合总是无法彻底避免的。其中,关于P与NP的论述,个人理解为:对于一个有效的算法,它一定要在多项式时间内运行完成。此时,算法可以恰当程度地学习到所需要的知识,也就是说既不会欠拟合,也不会过拟合,此时学习得到的模型是最优的。但是通常而言,机器学习问题是NP-Hard,甚至更难的问题,倘若多项式时间的算法可以解决NP-Hard问题。也就是说,我们创造性地证明了P=NPP=NPP=NP,这个计算机理论难题。然而,当前我们一般认为NP-Hard问题多项式时间内不可解。也就是说,过..
2021-05-06 17:56:57
610
原创 11. Spark 执行原理
一、先学会WordCount我们依然把WordCount当作我们的基本用例,虽然前文已经给了WordCount代码,但是我们想试着写一下。还记得之前MapReduce的WordCount代码吗?明明简单的WordCount结果由于僵化的两阶段编程,导致代码又臭又长,反观Spark,言简意赅,极具美感。第一次写,一定会懵,但是无所谓,我们先思考再动手。我们需要写一个Spark的代码,我们前文说过,Driver进程是Application执行起点,它会执行Application的main函数。所以我们知
2020-12-02 17:03:39
408
1
原创 10. Spark 架构
上图展示了Spark的架构的简单示意。我们不妨先这样认识Spark,它有几个重要的部分:Master Node:它是集群部署时候的概念,是整个集群的控制器,负责集群的正常运行,管理Worker Node。Worker Node:它是计算节点,会接收Master Node的命令,并进行状态汇报。Executors:每个Worker Node上都有一个Executor,它负责完成任务的执行,是一个线程池。Spark集群部署后,需要在主从节点启动Master进程和Worker进程。运行Master进.
2020-12-02 16:58:41
192
原创 9. Spark RDD
RDD的全称是Resilient Dirstributed DataSets,叫做弹性分布式数据集。首先,需要明确的一点,它是一个 抽象 数据集,言下之意是,它并不是一个包含数据本体的变量或者集合,而是一个仅保存数据描述的抽象集合,这个集合中存储了该数据的一些信息(数据位置、分区等)。其次,他是一个 分布式 的,也就是,这些数据可能存储在集群上的任何地方,并不是在本地。再者,他是 弹性 的,言下之意是,它既可以保存在内存中,也可能会因为内存空间不足而转而存储到磁盘上的。RDD解决的第一个问题就是数据
2020-11-16 20:08:28
192
原创 8. Spark的安装和配置
第1.1节 为什么需要Spark一、MapReduce计算模式的弊端首先,MapReduce的设计是为了用于高吞吐量的批数据处理作业的,本身的延迟就相对较高其次,数据是存储与HDFS中的,数据共享效率低。我们在前面WordCount的例子中可以看到,Job最后的结果必须要落盘。在MapRduce的Shuffle流程中,我们曾经介绍过,MapReduce的数据在Map端处理完成之后也都是存储在磁盘上的,没有很好的利用内存。当然,这一点其实是时代的限制,因为MapReduce模式在设计时,内存还是十分昂
2020-11-03 19:48:00
221
原创 7. WordCount
第5.1节 IDEA配置MapReduce编程环境现在Hadoop可以通过配置在Windows下编程。一、解压安装包、配置环境变量(Linux可跳过此步)从官网下载Hadoop二进制包,解压到你想安装的目录即可。由于Hadoop原生不支持Windows,所以需要一个win工具包,你可以从此处下载。将对应版本或者相近版本的 hadoop/bin 目录下的文件全部复制到刚刚解压的Hadoop文件的bin目录下即可。配置Window下的Hadoop路径。右键点击 我的电脑 ,打开 属性 , 打开 高级
2020-10-27 17:25:40
348
原创 6. MapReduce中作业(Job)、任务(task)的一生概览
本节内容完全来自深入理解大数据:大数据处理与编程实践 机械工业出版社没啥好说的,直接上内容一、作业首先, 用户程序客户端通过作业客户端接口程序JobClient提交一个用户程序。然后JobClient向JobTracker提交作业执行请求并获得一个Job ID。JobClient同时也会将用户程序作业和待处理的数据文件信息准备好并存储在HDFS中。JobClient正式向JobTracker提交和执行该作业。JobTracker接受并调度该作业,并进行作业的初始化准备工作, 根据待处理数
2020-10-27 17:17:06
2982
2
原创 5. MapReduce中Shuffle
shuffle翻译为中文就叫 ”洗牌“,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好。MapReduce中的Shuffle更像是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据。有些抽象,当前不理解也没关系,先了解一下shuffle的流程。本节内容参考了如下内容[1] MapReduce:详解Shuffle(copy sort merge)过程 https://blog.youkuaiyun.com/xiaolang85/article/details/8528892[2] Map
2020-10-23 11:40:01
327
原创 4. MapReduce基本原理
我们前面提了一嘴MapReduce。说它是一个采用了分治思想的分布式计算框架,本节我们就进一步细致讨论一下MapReduce。大数据背景下,数据量巨大,这点没有问题。数据巨大带来的问题就是计算耗时、传输耗时。计算耗时无法避免,因为那么大的数据就是需要进行计算的。我们只能想办法提升算力或者优化算法来提升计算的速度。传输耗时却可以避免,或者说优化。MapReduce中采用了计算向数据偏移的策略,尽量维持数据不动,在本地计算,这叫数据本地性。但是很多场合我们无法避免移动数据,但是我们也应该尽量选择靠近的节
2020-10-22 14:13:02
364
原创 3. HDFS原理深聊一下
HDFS 是一个分布式文件系统,我们在前面也稍微讨论了一下集中式文件系统的一些弊端,我们还是从之前的那张HDFS架构图出发。当我们开始关注线条所代表的数据流向后,其实上图就可以看作是一个HDFS数据读写的流程图了。在探讨具体的读写之前,我们先看看不同节点中存储的数据。第3.1节 再谈不同的节点应用程序所在的Client端先过滤掉,因为这个端只是承载了与用户的交互作用,其实就是一台接口机。用户在这台机器写代码、调用API与HDFS进行交互。我们前面说过,NameNode是集群的主控节点,管理HDF
2020-10-19 13:36:45
633
2
原创 2. Hadoop的安装(这你都没装好,我就服了)
为了方便后面使用Hadoop的shell命令,我先介绍Hadoop的安装。Hadoop有多种安装模式,这里介绍伪分布式的安装。我测试过Ubutun、Centos和WSL,都可以正常安装Hadoop的所有版本。所有一般不会出现版本对应的问题。Hadoop是基于Java语言进行编写的,在Hadoop程序执行过程中会调用起系统环境的java虚拟机(JVM),所以我们的系统中需要安装JDK。直接搜索JDK进入官网下载即可。考虑到目前的Hadoop基本上都是基于JDK1.8的,建议下载JDK1.8,高版本的Ja
2020-10-13 16:23:14
380
3
原创 1. Hadoop原理简述
第1.1节 Hadoop架构Hadoop系统由两部分组成,分别是分布式文件系统HDFS (Hadoop Distributed File System) 和分布式计算框架MapReduce。其中,分布式文件系统主要用于大规模数据的分布式存储,而MapReduce则构建在分布式文件系统之上,对存储在分布式文件系统中的数据进行分布式计算。下图简单展示了Hadoop系统的架构。从图中可以清晰的看出Hadoop系统由MapReduce和HDFS两个部分组成。虚实线代表了其中的数据流向,在后期HDFS和MapR
2020-10-13 16:18:29
3462
2
原创 常见的激活函数总结
1. Softmax函数另称归一化指数函数,它可以将包含任意实数的 kkk 维向量ZZZ 压缩到另一个 kkk 维实向量 σ(Z)\sigma(Z)σ(Z) 中,使得每一个元素的范围都在 (0,1)(0,1)(0,1) 之间,并且所有元素的和为 111。对于每个 jjj,满足:σ(Z)j=eZj∑i=1neZi\sigma(Z)_j = \frac{e^{Z_j}}{\sum_{i=1}^n e^{Z_i}}σ(Z)j=∑i=1neZieZjimport numpy as npimpo
2020-10-10 21:53:39
539
2
原创 Spark的任务调度流程
Client 提交应用,Master节点启动DriverDriver向Cluster Manager申请资源,并构建Application的运行环境,即启动SparkContextSparkContext向ClusterManager申请Executor资源,Worker会先实例化ExecutorRunner对象,在ExecutorRunner启动中会创建进程生成器ProcessBuilder,然后由该生成器创建CoarseGrainedExecutorBackend对象。Spark应..
2020-06-16 18:48:36
469
原创 Spark容错
容错、HA(高可用)与灾备参考自点这里容错(fault tolerance)指的是, 发生故障时,系统还能继续运行。 飞机有四个引擎,如果一个引擎坏了,剩下三个引擎,还能继续飞,这就是"容错"。同样的,汽车的一个轮子扎破了,剩下三个轮子,也还是勉强能行驶。 容错的目的是,发生故障时,系统的运行水平可能有所下降,但是依然可用,不会完全失败。高可用(high availability)指的是, 系统能够比正常时间更久地保持一定的运行水平。 汽车的备胎就是一个高可用的例子。如果没有备胎,轮胎坏了
2020-06-16 15:37:31
369
原创 Spark SQL的UDF
UDF(User Defined Function):spark SQL中用户自定义函数,用法和spark SQL中的内置函数类似;是saprk SQL中内置函数无法满足要求,用户根据业务需求自定义的函数。 因为目前Spark SQL本身支持的函数有限,一些常用的函数都没有,比如len, concat…etc 但是使用UDF来自己实现根据业务需要的功能是非常方便的。Spark SQL UDF其实是一个Scala函数,被catalyst封装成一个Expression结点,最后通过eval方法计根据当前Ro
2020-06-16 09:33:45
310
原创 HDFS存储报错:org.apache.hadoop.security.AccessControlException: Permission denied: user=............
我在本地利用WSL配置Hadoop环境,windows下用Spark往HDFS中写入数据,报了没有权限的错误。这个问题,网上答案有很多:(1)就是修改系统变量。在hdfs.xml文件中,修改dfs.permissions为false。这样HDFS就不会进行权限检查。(2)是在Linux中增加supergroup组用户,以本地(一般是idea)报错中的user=???的用户名,在linux中创建用户,并给予超级权限。这里贴一个连接上述两种方案的具体实现。但是这两种方案的弊端也很明显,对于.
2020-06-03 20:10:17
571
原创 Spark读取csv文件
通过SparkSession读取csv文件时,可以通过option方法来自动识别csv文件的标题,推断数据类型def main(args: Array[String]): Unit = { Logger.getLogger("org").setLevel(Level.WARN) val spark = SparkSession.builder().appName("Spark Sql 2.x 5") .master("local") .getOrCreate
2020-06-03 16:57:41
1709
原创 java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.util.ByteStringer
java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.util.ByteStringerjava.lang.NoClassDefFoundError: com/google/protobuf/LiteralByteString在与HBase数据库交互的时候,可能会出现上述两种错误。查询Maven依赖,会发现出现了Jar包冲突。解决办法:(试错)看到这个错误,我的第一反..
2020-05-26 22:02:00
2653
原创 数据结构中的逻辑结构和物理结构
逻辑结构和物理结构是数据结构中重要的两个概念。所谓逻辑结构,简单来说就是理解上的两个数据元素的关系,它很直观。学术点说就是数据对象中两个数据元素之间的相互关系,一般可以用一种偏序表示方法进行表示。可以简单的认为,我们学习数据结构就是学习数据元素的逻辑结构。逻辑结构可以划分为:集合:顺序结构:比如 线性表、链表、队列、栈非顺序结构: 树型结构: 比如 二叉树、堆 图型结构: 图...
2020-02-29 18:44:13
2552
原创 垃圾收集算法
java虚拟机在运行时,内存主要分为7个部分。包括程序计数器:记录正在执行的虚拟机指令码地址。java虚拟机栈:每个java方法执行创建的局部变量表、操作数栈、常量池引用等信息。本地方法栈:与java虚拟机栈相同,但是是为本地方法服务的。堆:所有的对象都要到堆中分配内存,是垃圾收集的主要区域。堆不需要连续内存,可以动态增加。方法区:用于存放已加载的类信息、常量、静态变量,即时编译后的代码...
2020-02-24 11:30:02
101
原创 Cookie和Session的区别,怎么防止Cookie欺骗
(1)Cookie只能保存ASCII码字符串,但是Session却可以保存各种类型的数据。(2)Cookie存储在本地,对阅读器可见。因此涉及到敏感信息的数据需要加密,在服务器端再解密。Session保存在服务器端,对客户端透明,不存在敏感信息泄露风险。(3)Cookie可以设置有效期,但是Session依赖名为SESSIONID的Cookie,过期时间默许为-1,只要关闭阅读器,该Sessi...
2020-02-20 20:03:08
768
原创 什么情况会发生死锁,死锁的处理方法
如两个进程分别等待对方占有的资源,于是两个进程都不能执行而处于等待状态,此线程称为死锁。进程的三态模型就绪态 ↔\leftrightarrow↔ 运行态 →\to→ 等待态 →\to→ 就绪态进程的五态模型创建进程 →\to→ 就绪态 ↔\leftrightarrow↔ 执行态 →\to→ 等待态 →\to→ 就绪态 (执行态 →\to→ 结束进程)进程的七态模型添加 挂起就绪态 和...
2020-02-20 17:14:04
1108
原创 线程局部变量,线程池参数
线程局部变量线程局部变量高效的为每个使用它的线程提供单独的线程局部变量副本,每个线程只能看到与自己联系的值,而不知道其他线程可能正在使用或者修改的值。Java编译器并不为线程局部变量提供特别的语言支持,而是使用一个ThreadLocal类来实现这些支持。因为线程局部变量是用类来实现的而不是java语言的一部分,所以想要使用线程局部变量需要先实例化ThreadLoacl的一个对象,ThreadL...
2020-02-20 15:35:30
486
原创 sleep和wait的区别,sleep会不会释放锁,notify和notifyAll的区别
sleep和waitwait是Object的方法,wait是Thread的静态方法。wait会释放锁,sleep不会。notify和notifyAll通过wait使得线程挂起等待某个条件满足,当其他线程得运行使得这个条件满足时,就可以调用notify或者notifyAll来唤醒这个进程。他们都属于Object的方法。只能在同步块或者同步方法中调用,否则会抛出illegalMonitorEx...
2020-02-20 11:06:49
1932
1
原创 volatile怎么保证可见性,synchronized和lock的区别,synchronized的底层实现
可见性是指:当多个线程访问同一个变量时,某个线程修改了该变量的值,其他线程可以立即看到修改后的变量。当一个共享变量被volatile修饰后,一旦该变量的值被修改,修改后的变量会被理机更新到主存中,当有其他线程需要该变量的值会到主存中读取。(存在层次)synchronized是JVM实现的,他是java的关键字。lock是java中的接口。(锁的释放)当出现异常的时候,synchronized会...
2020-02-20 10:35:17
522
原创 ==和equals的区别,如果重写了equals()不重写hashCode()会发生什么?
==是操作符,会返回一个boolean类型的值,用于计算两个操作数的值的关系。equals是Object的实例方法,用于比较两个对象的内容是否相同。hashcode()是Object的native方法,他会获取一个对象的hash值,返回一个整型值,用于表示该对象在哈希表中索引位置。“==”:为关系操作符对于8个基本类型:整型:byte,short,int,long 浮点数:float,...
2020-02-19 10:47:48
1139
原创 String不可变的好处?(String为什么要被声明为不可变?)
String对象的hash值经常被使用。例如作为HashMap的key,因为String类型是不可变的,所以其hash值也是不变的。因此只需要计算一次。String对象只要被创建过,就可以从String pool中取到该对象的引用。只有String是不可变的,才能从String pool中取得引用。String作为参数,String的不可变可以保证参数的不变性,保证参数安全。例如在网络连接中...
2020-02-18 20:17:01
791
原创 String、StringBuffer、StringBuilder的区别,怎么理解String不变性?
String是字符串常量,StringBuilder和StringBuffer是字符串变量。String是一个java类型,被声明为final,所以是不可继承的。并且,java8中String内部用char数组存储数据,java9之后用byte数组存储数据。该数组被声明为final,意味着该数组初始化之后,不能用该数组名引用其他数组。String类内部并不存在对该数组的操作方法,因此保证了Str...
2020-02-18 20:15:44
248
原创 大数据基础知识总结
1.什么是大数据 ?维基百科对于大数据给出了一个定性的描述:大数据是指无法使用传统和常用的软件技术和工具在一定时间内完成获取、管理和处理的数据集。从技术特点来看,大数据满足5V模型:大体量(Volume)、多样性(Variety)、时效性(Velocity)、准确性(Veracity)、大价值(Value)。2.大数据的类型以及计算特征。1.从数据结构特征角度:大数据可分为结构化数据(表...
2020-01-13 22:12:14
3277
原创 MapReduce求最大、最小以及均值
Part 1 最大值这里我们想做的是从文本数据中获取年份和温度的数据,并计算出每个年份的温度的最大值。与一般的java程序类似,要求最大值则需要作比较。思路简单,主要是如何设计Map和Reduce部分。一般想法:Map阶段做拆分,从初始数据得到得到数值;Reduce阶段做比较,最大值比较方案很多,这里列出一个:int max_value = Integer.MIN_VALUE;for (i...
2019-12-31 15:12:13
3552
原创 Spark启动报错ClassNotFound
spark启动时,报错如下:进入spark/conf/目录下,修改spark-env.sh文件:添加:export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)要到bin/hadoop那一层。...
2019-12-23 21:34:04
922
原创 LeetCode 1 两数之和
package array.java_leetcode;import java.util.HashMap;public class TwoSum { public int[] twoSum(int[] nums, int target) { HashMap<Integer,Integer> hashmap = new HashMap<>()...
2019-12-12 14:48:56
95
原创 MapReduce实现矩阵乘法
矩阵运算是程序运行过程中非常耗时的部分,因而也出现了许多针矩阵计算的优化方法,尤其是矩阵乘法,对于MitM_{it}Mit和NtkN_{tk}Ntk,其相乘的复杂度是O(i×k)O(i \times k)O(i×k)。熟悉矩阵运算的人都应知道,结果矩阵PPP中的任意元素pikp_{ik}pik和M、NM、NM、N中的第iii行、kkk列均有关。pik=(M×N)ik=∑jmijnjkp_...
2019-10-19 17:33:15
2033
2
原创 MapReduce简介
概要MapReduce是处理和生成大数据集合的编程模型和相关实现。用户可以通过使用特定的Map和Reduce函数来完成对键值对**<key, value>**的处理。Map函数主要是用于对处理键值对进行处理,生成中间键值对。Reduce函数主要用户依据中间键(intermediate key),来完成对中间值的归并(merge all intermediate values)。M...
2019-10-16 18:32:59
850
原创 理解WordCount
Apache Hadoop使用JAVA语言编程,对于使用java语言的程序员来说,这很友好。一般而言,一个hadoop程序主要分为两个部分:Map和Reduce。我们可以观察一下其执行流:Map →\to→ Combiner →\to→ Sort →\to→ Partitioner →\to→ Reduce下面我们以一个例子来阐述wordcount的执行流如何发生。假设一个输入文本如下:...
2019-10-12 21:59:56
2669
原创 JAVA的private关键字理解
java中关于变量定义前面可以有前缀加以修饰,具体包括:private, public, protected.private修饰的变量只能在其所属的类中被直接访问class A { private int a = 1; public int b = 2;}class B extends A { System.out.println(a); //私有变量,不可以访问 System.o...
2019-10-10 14:19:01
509
原创 Java 中的 println() 方法与 toString() 方法
每一个非基本类型的对象都有一个toString()方法,当编译器需要一个String,但是你却只有一个对象的时候,该方法就会被调用。也可以说,Class继承自Object,Object中有一个toString()方法。package Think.Seven;class WaterSource { private String s; WaterSource() { ...
2019-09-28 13:58:48
1885
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人