- 博客(117)
- 收藏
- 关注
原创 Spark知识点
Spark知识点1.Spark的使用场景Spark官网给出的说法:Spark是一个通用的快速分析引擎。Spark为我们常见的批处理、流处理、数据探索(数据挖掘)、机器学习等场景提供了很好的解决方案,任何有数据分析需求的人都可以使用。2.“三架马车”从 2003 年到 2006 年,Google 分别在 ODSI 与 SOSP 发表了 3 篇论文,引起了业界对于分布式系统的广泛讨论,这三篇论文分别是:SOSP2003:The Google File System; 分布式文件
2021-02-16 20:21:05
336
原创 常用的数据结构
常用的数据结构字符串 在了解什么是字符串之前我们先了解什么是字符。数字、字母、字、符号等等都是字符,如8、H、h、国、&等。将字符连接起来便成了字符串。存储方式顺序存储,字符串的顺序存储结构,是用一组地址连续的存储单元来存储串中的字符序列,一般是用定长数组来实现。有些语言会在串值后面加一个不计入串长度的结束标记符,比如 \0 来表示串值的终结。链式存储,字符串的链式存储结构,与线性表是相似的,但由于串结构的特殊性(结构中的每个元素数据都是一个字符),如果也简单地将每个链结点存储为一个字
2020-07-26 19:21:38
360
原创 Hive优化整理
Hive优化整理压缩格式 常见的压缩格式有Sequence File、RC、ORC、Parquet。生产环境中hive一般用orc,spark一般用parquet,snappy配合parquet性能最高。注意点1)orc格式的表不能通过load data导入数据2)Sequence 可分割,与hadoop文件兼容3)ORC快速存取,列压缩Hive函数内置函数1.NVL( value,default_value) ,给值为 NULL 的数据赋值2.CASE WHEN THEN ELSE
2020-07-24 10:01:40
368
原创 Java并发编程—AQS、final
Java并发编程—AQS、finalAQS AQS 是一个用于构建锁、同步器等线程协作工具类的框架,有了 AQS 以后,很多用于线程协作的工具类就都可以很方便的被写出来,有了 AQS 之后,可以让更上层的开发极大的减少工作量,避免重复造轮子,同时也避免了上层因处理不当而导致的线程安全问题,因为 AQS 把这些事情都做好了。总之,有了 AQS 之后,我们构建线程协作工具类就容易多了。 AQS 最核心的三大部分就是状态、队列和期望协作工具类去实现的获取/释放等重要方法。state状态在 AQS 中
2020-07-09 17:47:30
157
原创 Java并发编程—CAS、死锁
Java并发编程—CAS、死锁它的英文全称是 Compare-And-Swap,中文叫做“比较并交换”,它是一种思想、一种算法。在多线程的情况下,各个代码的执行顺序是不能确定的,所以为了保证并发安全,我们可以使用互斥锁。而 CAS 的特点是避免使用互斥锁,当多个线程同时使用 CAS 更新同一个变量时,只有其中一个线程能够操作成功,而其他线程都会更新失败。不过和同步互斥锁不同的是,更新失败的线程并不会被阻塞,而是被告知这次由于竞争而导致的操作失败,但还可以再次尝试。CAS 被广泛应用在并发编程领域中,以
2020-07-09 16:57:48
456
原创 Java并发编程—Java内存模型
Java并发编程—Java内存模型JVM内存模型和Java内存模型JVM 内存结构和 Java 虚拟机的运行时区域有关;Java 内存模型和 Java 的并发编程有关。Java 非常需要一个标准,来让 Java 开发者、编译器工程师和 JVM 工程师能够达成一致。达成一致后,我们就可以很清楚的知道什么样的代码最终可以达到什么样的运行效果,让多线程运行结果可以预期,这个标准就是 JMM,这就是需要 JMM 的原因。JMM JMM 是和多线程相关的一组规范,需要各个 JVM 的实现来遵守 JM
2020-07-09 11:44:13
130
原创 Java并发编程—线程协作
Java并发编程—线程协作Semaphore 信号量 信号量的一个最主要的作用就是,来控制那些需要限制并发访问量的资源。具体来讲,信号量会维护“许可证”的计数,而线程去访问共享资源前,必须先拿到许可证。线程可以从信号量中去“获取”一个许可证,一旦线程获取之后,信号量持有的许可证就转移过去了,所以信号量手中剩余的许可证要减一。使用流程首先初始化一个信号量,并且传入许可证的数量,这是它的带公平参数的构造函数:public Semaphore(int permits, boolean fair),传入两
2020-07-09 11:02:04
151
原创 Java并发编程—ThreadLocal、Future
Java并发编程—ThreadLocal、FutureThreadLocal使用场景场景1,ThreadLocal 用作保存每个线程独享的对象,为每个线程都创建一个副本,每个线程都只能修改自己所拥有的副本, 而不会影响其他线程的副本,这样就让原本在并发情况下,线程不安全的情况变成了线程安全的情况。这种场景通常用于保存线程不安全的工具类,典型的需要使用的类就是 SimpleDateFormat。场景2,ThreadLocal 用作每个线程内需要独立保存信息的场景,供其他方法更方便得获取该信息,每个线程
2020-07-09 09:17:16
531
原创 Java并发编程—原子类
Java并发编程—原子类原子类 在编程领域里,原子性意味着“一组操作要么全都操作成功,要么全都失败,不能只操作成功其中的一部分”。而 java.util.concurrent.atomic 下的类,就是具有原子性的类,可以原子性地执行添加、递增、递减等操作。比如之前多线程下的线程不安全的 i++ 问题,到了原子类这里,就可以用功能相同且线程安全的 getAndIncrement 方法来优雅地解决。 原子类的作用和锁有类似之处,是为了保证并发情况下线程安全。不过原子类相比于锁,有一定的优势:粒度
2020-07-08 16:29:23
206
原创 Java并发编程—阻塞队列
Java并发编程—阻塞队列并发队列 Java 提供的线程安全的队列(也称为并发队列)分为阻塞队列和非阻塞队列两大类。 阻塞队列的典型例子就是 BlockingQueue 接口的实现类,BlockingQueue 下面有 6 种最主要的实现,分别是 ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、SynchronousQueue、DelayQueue、PriorityBlockingQueue 和 LinkedTransferQueue 非阻塞并发
2020-07-08 14:28:37
398
1
原创 Java并发编程—并发容器
Java并发编程—并发容器HashMap是线程不安全的public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.ne
2020-07-07 11:44:46
127
原创 Java并发编程基础—锁
Java并发编程基础—锁锁的7大分类偏向锁/轻量级锁/重量级锁;特指 synchronized 锁的状态,通过在对象头中的 mark word 来表明锁的状态1)如果锁没有竞争,就不需要上锁了,打个标记即可,这就是偏向锁2)不存在实际竞争,或者竞争时间很短,用CAS就可以解决,这就是轻量级锁3)开销较大,会让申请却拿不到锁的进程陷入阻塞状态锁升级的路径:无锁→偏向锁→轻量级锁→重量级锁。可重入锁/非可重入锁;1)可重入锁指的是线程当前已经持有这把锁了,能在不释放这把锁的情况下,再次获
2020-07-06 09:07:49
251
原创 Java并发编程基础—线程池
Java并发编程基础—线程池如果每个任务都创建一个线程会带来哪些问题?第一点,反复创建线程系统开销比较大,每个线程创建和销毁都需要时间,如果任务比较简单,那么就有可能导致创建和销毁线程消耗的资源比线程执行任务本身消耗的资源还要大。第二点,过多的线程会占用过多的内存等资源,还会带来过多的上下文切换,同时还会导致系统不稳定。使用线程池的好处第一点,线程池可以解决线程生命周期的系统开销问题,同时还可以加快响应速度。因为线程池中的线程是可以复用的,我们只用少量的线程去执行大量的任务,这就大大减小了线程生命
2020-07-03 15:49:09
230
原创 Java并发编程基础—线程安全
Java并发编程基础—线程安全 《Java Concurrency In Practice》的作者 Brian Goetz 对线程安全是这样理解的,当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行问题,也不需要进行额外的同步,而调用这个对象的行为都可以获得正确的结果,那这个对象便是线程安全的。3种典型的线程安全问题1)运行结果错误;2)发布和初始化导致线程安全问题;3)活跃性问题。死锁,死锁是指两个线程之间相互等待对方资源,但同时又互不相让,都想自己先执行活锁,
2020-07-01 17:26:18
152
原创 Java并发编程—线程基础
Java并发编程—线程基础线程的实现方式1)实现Runnable接口2)继承Thread类3)线程池,默认采用 DefaultThreadFactory ,它会给线程池创建的线程设置一些默认值,最终是通过Thread类创建线程的4)实现Callable接口,Callable 和与之相关的 Future、FutureTask,它们可以把线程执行的结果作为返回值返回5)定时器Timer。。。。。。实现线程的本质Runnable实现线程需要调用start()方法,它的本质也是调用run()方法
2020-07-01 15:47:34
189
原创 JVM虚拟机—G1回收器
JVM虚拟机—G1回收器CMS有一个极端的场景(也是经常出现的场景)。 在发生 Minor GC 时,由于 Survivor 区已经放不下了,多出的对象只能提升(promotion)到老年代。但是此时老年代因为空间碎片的缘故,会发生 concurrent mode failure 的错误。这个时候,就需要降级为 Serail Old 垃圾回收器进行收集。这就是比 concurrent mode failure 更加严重的 promotion failed 问题。一次简单的 Major GC,竟然能演化
2020-06-29 10:40:26
195
原创 JVM虚拟机—垃圾回收
JVM虚拟机—垃圾回收标记根据 GC Roots 遍历所有的可达对象,这个过程,就叫作标记。清除清除阶段就是把未被标记的对象回收掉。但是这种简单的清除方式,有一个明显的弊端,那就是碎片问题。复制 提供一个对等的内存空间,将存活的对象复制过去,然后清除原内存空间。在程序设计中,一般遇到扩缩容或者碎片整理问题时,复制算法都是非常有效的。比如:HashMap 的扩容也是使用同样的思路,Redis 的 rehash 也是类似的。但是,它的弊端也非常明显。它浪费了几乎一半的内存空间来做这个事情,如果资源
2020-06-29 10:06:05
181
原创 JVM虚拟机—OOM
JVM虚拟机—OOMJVM 是如何判断哪些对象应该被回收?哪些应该被保持呢?JVM 的 GC 动作,是不受程序控制的,它会在满足条件的时候,自动触发。在发生 GC 的时候,一个对象,JVM 总能够找到引用它的祖先。找到最后,如果发现这个祖先已经名存实亡了,它们都会被清理掉。而能够躲过垃圾回收的那些祖先,比较特殊,它们的名字就叫作 GC Roots。从 GC Roots 向下追溯、搜索,会产生一个叫作 Reference Chain 的链条。当一个对象不能和任何一个 GC Root 产生关系时,就会被
2020-06-28 15:13:54
190
原创 JVM虚拟机—字节码
JVM虚拟机—字节码工具javapjavap 是 JDK 自带的反解析工具。它的作用是将 .class 字节码文件解析成可读的文件格式。javac中可以指定一些额外内容输出到字节码。javac -g:lines 强制生成 LineNumberTable。javac -g:vars 强制生成 LocalVariableTable。javac -g 生成所有的 debug 信息。jclasslibjclasslib 是一个图形化的工具,能够更加直观的查看字节码中的内容。它还分门别类
2020-06-28 14:35:41
144
原创 JVM虚拟机—类加载机制
JVM虚拟机—类加载机制类加载过程类的加载很复杂,主要有几个过程:加载、验证、准备、解析、初始化加载加载是将外部的.class文件加载到java的方法区内。验证验证是为了防止恶意代码,如果代码不符合规范,会抛出 java.lang.VerifyError异常。像低版本的JVM是无法加载高版本的类库的准备将为一些类变量分配内存,并将其初始化为默认值。此时,实例对象还没有分配内存。这些动作都是在方法区上的解析解析是将符号引用替换为直接引用的过程。这个阶段都做了哪些工作呢?大体
2020-06-28 09:16:08
228
原创 JVM虚拟机—内存管理
JVM虚拟机—内存管理JVM内存布局java的数据结构是非常丰富的,例如:静态成员变量动态成员变量区域变量短小紧凑的对象声明庞大复杂的内存申请这么多不同的数据结构,是在什么地方存储的,它们之间又是如何交互的呢? java的内存布局是一直在调整的。JDK8之后的版本移除了永久代,使用metadata来代替。这表示-XX:PermSIze等参数调优已经没有了意义。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6bYOUDqe-1593164861021)
2020-06-26 17:47:55
220
原创 JVM虚拟机—探究其所处位置
JVM虚拟机—探究其所处位置 JVM 全称 Java Virtual Machine,名为java虚拟机。它能识别.class文件,并解析其中的指令,转换为操作系统的指令,调用操作系统完成操作。你可以理解为JVM是一个翻译器,将java代码翻译成计算机能够识别的指令。 JVM虽然能够翻译.class文件,但是没有.class文件它什么也做不了。所以我们会给它提供一个基本的类库,也就是JVM标准加上一堆基础类库,这些组成了java运行时环境,就是我们常说的JRE。 从广义上讲JVM是一种规范。从狭
2020-06-26 16:42:54
230
原创 计算机网络协议—常用概念
计算机网络协议—常用概念ARPARP为IP地址到对应的硬件地址之间提供动态映射,其实就是找IP对应MAC地址(以太网地址/物理地址)如果两个PC机是直连那么直接解析IP对应的MAC地址,否则解析网关对应IP的MAC地址。什么?你不懂这些名词。那请看下边这篇文章https://blog.youkuaiyun.com/qq_39380737/article/details/81504651ICMPICMP被认为是IP的一个附属协议。它传递差错报文和一些需要注意的信息。下面情况不会产生ICMP1)ICMP差
2020-06-22 18:14:16
271
原创 计算机网络协议—分层
计算机网络协议—分层业内常见的两种分层:OSI七层模型、TCP/IP四层模型OSI七层模型:物、数、网、传、会、表、应TCP/IP四层模型:链、网、传、应下面对模型各层的介绍是一些概念,可以粗略的看一下。个人侧重的是四层模型。OSI七层模型物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。2)数据链路层
2020-06-21 17:08:46
528
原创 什么是机器学习?
什么是机器学习?现有的几种定义在没有明确设置的情况下,使计算机拥有学习能力的领域计算机程序从经验E种学习,解决某一任务T,进行某一性能度量P。通过P测定在T上的表现因经验E而提高目前机器学习主流分为:监督学习,无监督学习,强化学习。监督学习:监督学习可分为“回归”和“分类”问题。在回归问题中,我们会预测一个连续值。也就是说我们试图将输入变量和输出用一个连续函数对应起来;而在分类问题中,我们会预测一个离散值,我们试图将输入变量与离散的类别对应起来。每个数据点都会获得标注,如类别标签或与数
2020-05-10 21:38:38
191
原创 Hbase内部探险
文章目录Hbase内部探险前言mutation方法checkAndMutate方法批量操作BufferedMutator方法内部探险Hbase是怎么存储数据的预写日志MemstoreHFileKeyValue类增删改查的真面目Region的定位维护工具即调优维护工具管理均衡器规整器目录管理器Hbase的性能优化Master和RegionServer的JVM调优Full GCMemstore的专属J...
2020-01-04 16:51:37
795
原创 HbaseApi的高级特性
文章目录HbaseApi的高级特性过滤器1.过滤器的层次结构2.比较运算符3.比较器4.比较过滤器5.专用过滤器6.附加过滤器7.FilterList8.自定义过滤器计数器1.单计数器2.多计数器协处理器1.Coprocessor2.协处理器的加载3.Observer4.EndPointHTablePool和HConnectionHbaseApi的高级特性过滤器1.过滤器的层次结构在过滤器...
2019-12-24 16:41:38
280
原创 Hbase的API操作
Hbase的API操作HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBASE 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。Hbase中的角色HMaster1.监控 RegionServer2.处理 RegionServer 故障转移3.处理元数据的变更4.处理 region 的分配或转移5.在空闲时间进行数据的负载均衡6.通...
2019-12-24 11:37:05
409
原创 Sqoop
SqoopSqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。Sqoop 项目开始于 2009 年,最早是作为 Hadoop...
2019-12-22 19:47:08
169
原创 分布式消息队列Kafka
文章目录分布式消息队列Kafka架构组成架构好处Api命令行操作Java Api1.producer1)异步提交2)同步提交2.Consumer1)自动提交2)手动提交3)自定义存储offset3.自定义Interceptor运行机制生产者1.分区的原因2.分区原则3.数据的可靠性4.ISR机制5.ack应答机制6.数据的一致性保证(HW、LEO机制)7.exactly机制()8.server.p...
2019-12-10 21:11:39
421
原创 Flume
从源码剖析FlumeFlume 是 Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume 基于流式架构,灵活简单。架构特点Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。Flume可以采集文件,socket数据包、文件、文件夹、kafka等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hb...
2019-12-06 20:18:50
179
原创 Hive函数与调优
文章目录Hive函数与调优函数系统内置函数自定义函数1.UDF函数2.UDTF函数调优开启map阶段输出压缩开启reducer阶段的数据压缩文件存储格式测试存储和压缩企业级调优Fetch抓取本地模式表的优化1.小表、大表join2.大表join大表3.MapJoin(小表join大表)4.Group By5.Count(Distinct)去重统计6.笛卡尔积7.行列过滤8.动态分区调整合理设置Ma...
2019-11-30 20:45:26
414
原创 Cookie
会话技术1. 会话:一次会话中包含多次请求和响应。 * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 *断开:指的是客户端关闭了或者服务器端关闭了2. 功能:在一次会话范围内的多次请求中,共享数据3. 方式: 1. 客户端会话技术:Cookie 2. 服务器端会话技术:SessionCookie:1. 概念:客户端会话技术,将数据保存到客户端2....
2019-11-30 20:41:46
129
原创 Hive的CRUD
Hive的CRUDDDL 数据定义创建数据库1)创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db。 hive (default)> create database db_hive;2)避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法) hive (default)> cr...
2019-11-28 19:13:00
851
转载 大数据面试
原文链接:https://gitbook.cn/books/5d0337e1d9e03d26feeee58c/index.html转自:https://blog.youkuaiyun.com/qq_44868502/article/details/103202702 山岭巨人杨尚桑大数据面试看这一篇就够了!分享给大家一篇很好的面试题ConcurrentHashMap 是怎么实现的?答:...
2019-11-25 11:24:07
419
原创 Hive安装与客户端命令
Hive安装与客户端命令Hive 基本概念Hive:由 Facebook 开源用于解决海量结构化日志的数据统计。Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。本质是:将 HQL 转化成 MapReduce 程序Hive 安装1.Hive 官网地址 http://hive.apache.org/2.文档查看...
2019-11-24 19:42:33
1600
原创 Yarn
Yarn架构优点(1) 支持多种计算框架YARN是通用的资源管理和任务调度平台,只要实现了YARN的接口的计算框架都可以运行在YARN上(2) 资源利用率高多种计算框架可以共用一套集群资源,让资源充分利用起来,提高了利用率。(3) 运维成本低避免一个框架一个集群的模式,YARN降低了集群的运维成本。(4) 数据可共享共享集群模式可以让多种框架共享数据和硬件资源,减少数据移动...
2019-11-22 19:59:10
367
原创 Zookeeper
Zookeeper概述特点1)Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群。2)Leader负责进行投票的发起和决议,更新系统状态3)Follower用于接收客户请求并向客户端返回结果,在选举Leader过程中参与投票4)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。5)全局数据一致:每个server保存一份相同的数...
2019-11-21 19:39:05
139
原创 MapReduce原理
MapReduce原理MapTask运行机制及并行度inputFile通过split被逻辑切分为多个split文件,通过Record按行读取内容给map(用户自己实现的)进行处理,数据被map处理结束之后交给OutputCollector收集器,对其结果key进行分区(默认使用hash分区),然后写入buffer,每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满...
2019-11-18 20:13:07
284
原创 Netty
NettyJBoos提供的基于NIO的异步非阻塞框架线程模型单线程模型用一个线程通过多路复用实现所有的IO请求,可支持的并发量较弱线程池模型服务端采用一个线程专门处理客户端的连接请求,采用一个线程组负责IO操作Netty模型Netty抽象出两组线程池,BossGroup专门负责客户端的连接,WorkerGroup专门负责网络读写操作。NioEventLoop表示一个不断...
2019-11-17 20:08:14
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人