自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM【性能监控与调优】

监控的依据● 运行日志● 异常堆栈● GC日志● 线程快照● 堆转储快照调优的大方向● 合理地编写代码● 充分并合理的使用硬件资源● 合理地进行JVM调优性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络I/O、垃圾收集等。

2023-01-25 08:40:46 1651 1

原创 JVM【类的加载过程(类的生命周期)详解】

类加载器是JVM执行类加载机制的前提。ClassLoader的作用:ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.Class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此,ClassLoader在整个装载阶段,只能影响到类的加载,而无法通过ClassLoader去改变类的链接和初始化行为。

2023-01-18 07:22:42 1424 1

原创 JVM【字节码与类的加载篇】

Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(operand)所构成。虚拟机中许多指令并不包含操作数,只有一个操作码比如:操作码(操作数)① Class文件的结构并不是一成不变的,随着Java虚拟机的不断发展,总是不可避免地会对Class文件结构做出一些调整,但是其基本结构和框架是非常稳定的② Class 文件格式采用一种类似于 C语言结构体的方式进行数据存储,这种结构中只有两种数据类型:无符号数和表。

2022-12-31 22:36:39 288

原创 JVM【垃圾回收相关概念和垃圾回收器】

强引用可以直接访问目标对象。强引用所指向的对象在任何时候都不会被系统回收,虚拟机宁愿抛出OOM异常,也不会回收强引用所指向对象。强引用可能导致内存泄漏。垃圾收集机制是Java的招牌能力,极大地提高了开发效率。这当然也是面试的热点。那么,Java常见的垃圾收集器有哪些?GC垃圾收集器是和JVM一脉相承的,它是和JVM进行搭配使用,在不同的使用场景对应的收集器也是有区别垃圾回收器发展史。

2022-12-24 11:39:19 599

原创 【JVM】GC(垃圾回收相关算法)

在提到什么是垃圾之前,我们先看下面一张图从上图我们可以很明确的知道,Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。

2022-12-20 15:11:24 90

原创 【JVM】StringTable

JDK1.6中,将这个字符串对象尝试放入串池。如果串池中有,则并不会放入。返回已有的串池中的对象的地址如果没有,会把此对象复制一份,放入串池,并返回串池中的对象地址JDK1.7起,将这个字符串对象尝试放入串池。如果串池中有,则并不会放入。返回已有的串池中的对象的地址如果没有,则会把对象的引用地址复制一份,放入串池,并返回串池中的引用地址。

2022-12-09 16:43:46 364

原创 【JVM】执行引擎

当Java虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容“翻译”为对应平台的本地机器指令执行。JIT(Just In Time Compiler)编译器:就是虚拟机将源代码直接编译成和本地机器平台相关的机器语言。一般来讲,JIT编译出来的机器码性能比解释器搞自JDK10起,HotSpot又加入了一个全新的及时编译器:Graal编译器编译效果短短几年时间就追评了C2编译器,未来可期。

2022-12-08 16:23:46 95

原创 【JVM】对象实例化内存布局与访问定位

美团:对象在JVM中是怎么存储的?对象头信息里面有哪些东西?蚂蚁金服:Java对象头有什么?虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载,解析和初始化。(即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader + 包名 + 类名为key进行查找对应的 .class文件,如果没有找到文件,则抛出ClassNotFoundException异常,如果找到

2022-12-07 10:22:55 323

原创 【JVM】方法区

这次所讲述的是运行时数据区的最后一个部分从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理下面就涉及了对象的访问定位Person:存放在元空间,也可以说方法区person:存放在Java栈的局部变量表中new Person():存放在Java堆中《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言,方法区

2022-12-06 17:23:51 82

原创 【JVM】堆

针对幸存者s0,s1区的总结:复制之后有交换,谁空谁是to关于垃圾回收:频繁在新生区收集,很少在老年代收集,几乎不再永久代和元空间进行收集新生代采用复制算法的目的:是为了减少内碎片从内存模型而不是垃圾收集的角度,对Eden区域继续进行划分,JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内。多线程同时分配内存时,使用TLAB可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称之为快速分配策略。

2022-12-01 15:24:15 85

原创 【JVM】运行时数据区概述(程序计数器、虚拟机栈、本地方法栈)

本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品。

2022-11-24 18:25:57 150

原创 JVM—类加载子系统

完整图如下如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?类加载器执行引擎在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。为什么要自定义类加载器?隔离加载类修改类加载的方式扩展加载源防止源码泄漏用户自定义类加载器实现步骤:开发人员可以通过继承抽象类ava.1ang.ClassLoader类的方式,实现自己的类加载器,以满足一些特殊的需求。

2022-11-19 12:37:29 186

原创 JVM和Java体系结构

作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM!想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。大部分Java开发人员,除会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。

2022-11-18 08:46:33 112

原创 kafka满五替换

生产环境中kafka集群机器满了五年(或者更久)之后,服务器到达了寿命需要替换。将用了超过五年的服务进行下线处理。

2022-09-02 10:19:47 748

原创 Linux三剑客

Liunx三剑客:grep:文本过滤工具,( 模式:pattern)工具sed:stream editor,流编辑器;文本编辑工具 awk: Linux Linux gawk的文本报告生成器(格式化文本),Linux上是gawk

2022-08-22 15:15:01 1206 1

原创 Python学习

1.概述Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间编写的。Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池”。用Python开发,许多功能不必从零编写,直接使用现成的即可。龟叔给Python的定位是”优雅“、”明确“、”简单“,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常复杂的程序。2.Python应用a.网站后台开发-Pyt

2022-06-23 21:33:11 9510 5

原创 Hadoop之MapReduce和Yarn内核源码解析

前言:此文章从客户端提交job任务,到对需要处理的数据block进行切片,产生对应的maptask任务,Yarn来管理任务的调度来执行maptask和reducetask进行了详细解读。一、hadoop的Job 提交流程源码流程图:1.从我们编写的mapreduce的代码中进入job提交源码支线一:进入connect();2.支线二:进入submitter.submitJobInternal(Job.this, cluster),向集群提交了job信息,这里是提交job任务的核心代码

2022-05-27 19:40:54 1065

原创 Hadoop源码解析

一、hadoop的Job 提交流程源码流程图:1.从我们编写的mapreduce的代码中进入job提交源码支线一:进入connect();2.支线二:进入submitter.submitJobInternal(Job.this, cluster)该方法(submitter.submitJobInternal(Job.this, cluster))往下翻:存入了切片信息的本地路径submitter.submitJobInternal(Job.this, cluster)方法继

2022-05-25 23:03:48 3586 2

原创 RPC学习

模拟 RPC 的客户端、服务端、通信协议三者如何工作代码编写1.创建协议public interface RPCProtocol { long versionID = 666; void mkdirs(String path);}2.服务端package cn.sc.rpc;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;import java.io.IOE

2022-05-19 08:48:16 812

原创 hadoop集群启动脚本和查看多台服务jps脚本

1.集群批量启动hadoop#!/bin/bashif [ $# -lt 1 ]then echo "No Args Input..." exit;ficase $1 in"start") echo "=============启动hadoop集群============" echo "-------------启动 hdfs-----------------" #尽量写绝对路径 ssh hadoop01 "/home/software/h

2022-05-04 12:45:03 399

原创 分发同步脚本编写

分发同步脚本目的:一般在部署集群的时候,可以同步分发到批量集群,节约时间按,也不容易出错1.编写脚本#!/bin/bashif [ $# -lt 1 ]then echo Not Enough Arguement! exit;fifor host in hadoop01 hadoop02 hadoop03do echo ============== $host ============= # $@表示所有参数 for file in $@ do #判断文件是否

2022-05-04 04:51:46 255

原创 Flume学习

简介:1.Flume原本是Cloudera公司开发的后来贡献给饿了Apache的一套分布式的、可靠的、针对日志数据进行收集、汇聚和传输的机制2.在大数据中,实际开发中有超过70%的数据来源于日志-日志是大数据的基石3.Flume针对日志提供了非常简单且灵活的流式传输机制4.版本a.Flume0.X:又称之为Flume-og。依赖于Zookeeper,结构配置相对复杂,现在市面上已经停用这个版本b.Flume1.X:又称之为Flume-og。不依赖于Zookeeper,结构配置相对简单,是市面上.

2022-05-02 18:18:05 1818

原创 kafka安装

kafka安装1.下载地址:kafka下载地址zookeeper下载地址(前文有安装教程)2.解压:tar -xvf kafka_2.11-0.11.0.0.tgz3.修改配置文件cd /home/software/kafka_2.11-0.11.0.0/configvim server.propertiesbroker.id=1log.dirs=/home/software/kafka_2.11-0.11.0.0/kafka-logzookeeper.connect=hadoop01

2022-05-01 10:48:37 1267

原创 Zookeeper安装

安装类型1.单机模式:在一台机器上安装框架,往往只能启动框架的部分功能2.伪分布式:也是在一台机器上安装,利用了多线程来模拟集群环境,能够启动框架的大部分功能,甚至全部功能3.完全分布式:在集群(多台服务器)进行安装框架,能够启动框架的全部功能伪分布式安装1.关闭防火墙:临时关闭防火墙:systemctl stop firewalled永久关闭防火墙:systemctl disable firewalld2.下载安装JDK(这里下载需要ORACLE账号,最好下载一个,以便后续需要)jdk下

2022-04-28 10:57:34 2367

原创 Spark本地模式和集群模式安装配置

1.下载地址:这里下载的是spark-2.0.1-bin-hadoop2.7.tgz ,别的版本可以自行选择https://archive.apache.org/dist/spark/spark-2.0.1/1.解压:tar -xvf spark-2.0.1-bin-hadoop2.7.tgz

2022-04-27 15:15:57 2884

原创 Scala学习

scala安装包下载scala的下载地址https://www.scala-lang.org/download/2.11.7.html环境配置百度上很多不再讲解idea上使用scala变量知识点1.scala的变量和常量常量:var(variable的缩写),变量赋值后可以修改的常量:val(value的缩写),常量一经赋值,不允许修改2.scala是以换行符为一条语句的结束标识,所以不需要加;3.如果要在一行中写多条语句,则需要用;隔开 比如:val v1 =“hello”;va

2022-04-26 15:43:20 823

原创 Hbase的API

java操作Hbase1.pom.xml引入相关jar包<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.4.2</version> </dependency> <dependency> &

2022-04-24 12:15:10 809

原创 hadoop伪分布式配置和安装

hadoop伪分布式配置和安装安装环境:Centos7.5,至少2核4G内存提前准备:Linux中要安装jdk1.8,Zookeeper-3.5.81.关闭防火墙:systemctl stop firewalldsystemctl disable firewalld2.修改主机名vim /etc/hostname删除原来的主机名,添加自己的主机名例如:hadoop013.需要将主机名和IP进行映射vim /etc/hosts添加当前的主机名IP 主机名,例如192.168.112

2022-04-24 03:06:56 1490

原创 Hbase安装使用和常用指令

Hbase安装1.硬件环境:需要三太虚拟机,Centos7.5以上版本,至少需要双核,至少4G内存+20G磁盘软件环境:JDK1.8+Zookeeper-3.5.7+Hadoop3.1.3(安装zookeeper和Hadoop之前文章有)2.去该路径下载Hbase-2.4.2-bin-bin.tar.gz:https://archive.apache.org/dist/hbase/2.4.2/上传至/home/software目录下解压:tar -xvf hbase-2.4.2-bin.tar.g

2022-04-24 01:30:31 2680

原创 Zookeeper和Hadoop分布式集群搭建

Zookeeper和Hadoop分布式集群搭建用三台虚拟机搭建如上集群Zookeeper下载地址:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gzHadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/环境配置:JDK1.8+Zookeeper3.5.8+hadoo

2022-04-22 18:53:12 1642

原创 Zookeeper学习

Zookeeper简介一、概述1.Zookeeper是Yahoo(雅虎)开发后来贡献给了Apache的一套用于分布式管理和协调的框架2.Zookeeper本身仿照Google的《The Chubby Lock》设计实现的3.Zookeeper提供了中心化服务:包括:统一的配置,统一的命名,提供分布式锁,以及提供组服务二、安装1.单机模式:在一台机器上安装框架,往往只能启动框架的部分功能2.伪分布式:也是在一台机器上安装框架,利用了多线程来模拟集群环境,能够启动框架大部分功能,甚至全部功能3.

2022-04-19 15:17:55 1547

原创 Shell脚本学习

概念Shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核。执行1.脚本以#!/bin/bash开头(用于指定解析器)例如: 编写一个文件叫helloworld#!/bin/bashecho "helloworld"脚本的执行方式:①bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)②输入脚本的的绝对路径或相对路径(必须具有可执行权限+x)//赋予权限chmod +x helloworld.sh变量1.系统变量,常用的有:$ HOME、$

2022-04-17 20:49:31 770

原创 Hive学习

简介一.概述1.Hive原本是由Facebook公司开发后来贡献给了Apache的一套用于进行数据仓库管理的机制2.Hive提供了SQL(HQL,Hive QL)语句来管理HDFS上的大量数据,底层会将SQL转化为MapReduce来交给Hadoop YARN来执行,因此,Hive的执行效率相对比较低,所以Hive适合于离线批处理场景二.Hive和数据库的比较1.查询语言:数据库提供了标准的SQL语句,符合三范式的设计;Hive提供了SQL语言,不完全符合SQL的规则2.数据存储的位置:数据库

2022-04-01 13:32:24 3748

原创 Yarn学习

一.概述1.YARN(Yet Another Resource Negotiator - 迄今另一个资源调度器) - 负责任务管理和资源调度2.YARN是Hadoop2.X开始出现的,也是Hadoop2.X中最重要的特性之一。也正是因为YARN的出现,导致Hadoop1.X和Hadoop2.X不兼容3.产生原因a.内部原因①在Hadoop1.X中,没有Yarn的说法,此时MapReduce分为主进程JobTracker和从进程TaskTracker。JobTracker只允许存在1个,容易出现单点

2022-03-26 07:47:23 525

原创 Hoodoop-MapReduce学习

一.概念1.MapReduce是Hadoop提供的一套进行分布式计算机制2.MapReduce是Doug Cutting根据Google的论文来仿照实现的3.MapReduce会将整个计算过程拆分为2个阶段:Map阶段和Reduce阶段。在Map阶段,用户需要考虑对数据进行规整和映射;在Reduce阶段,用户需要考虑对数据进行最后的规约二.特点1.优点a.易于编程:MapReduce提供了相对简单的编程模型。这就保证MapReduce相对易于学习。用户在使用的时候,只需要实现一些接口或者去继承一

2022-03-24 20:15:57 3275 1

原创 Hadoop-HDFS学习

Hadoop学习一.概述1.Hadoop是一套开源、可靠、可伸缩的分布式机制2.大数据生态系统中的基础框架,超过70%的技术或者产业是围绕Hadoop产生的3.Hadoop提供了简单的编程模型来对大量数据进行分布式处理4.Hadoop你能够一台服务器扩展到千台,每一台服务器能够提供计算和存储功能5.Hadoop本身提供了探测和处理异常的机制6.Hadoop的发行版本a.Apache Hadoop:最基础、最原始的版本。相对而言,不熟和维护比较复杂,但是适合于初学者,因为它没有将细节隐藏,更适

2022-03-12 15:37:43 386

原创 HBase学习

一.概述1.Hbase是基于Hadoop的,分布式、可扩展的、分关系型数据库2.如果需要大量数据进行随机且实时的读写,那么可以考虑使用HBase3.HBase能够管理非常大的表:billions of rows * millions of columns4.HBase是仿照Google的Big Table来进行实现的,因此,HBase和Bigtable原理几乎一致,只是实现语言不同,HBase用的java,BigTable用的C5.Hbase提供了2个大版本,并且2个版本都在同时更新。其中,Had

2022-03-06 02:14:07 802

原创 Kafka学习

一.Kafka介绍Kafak是一个分布式数据流平台,可以从如下几个层面来理解:1.我们可以向Kafka发布数据以及从Kafka订阅数据,即我们可以将kafka看做一个消息队列。所起到的作用:缓冲(消峰限流),实现生产与消费的解耦。2.Kafka可以存储数据,并提供容错机制,即数据丢失可以进行恢复3.当数据到达Kafka之后,可以马上的被消费处理,即Kafka的延迟很低综合,Kafka具备以上这三个明显的特点,根据Kafka的这些特点,Kafka的适用场景是:搭建实时流平台的中间件在实际工作中,

2022-03-05 06:21:58 1650

原创 Flink学习

一.定义Flink是一个分布式计算框架,可以处理海量数据,既可以离线批处理,也可以做实时流处理。主要是用于实时流处理。flink实时流处理的优势可以归纳为三点:①低延迟②高吞吐③支持精确一次从上图,可以看出flink可以接受多种数据源数据,比如socket,file,Kafka数据源等,然后通过flink处理计算。此外,flink也支持和主流的资源调度框架的整合,比如k8s,yarn,mesos,使得对整个集群的资源调度更为合理。最后flink可以将结果存到其他的应用系统中,比如hbase,m

2022-02-27 23:22:56 3017 1

原创 spark学习

一.定义Spark是一种分布式,快速的,通用 的,可靠的,免费的计算框架。二.Spark的生态系统模块三.Spark的使用模式:1.Local 本地单机模式:一般用于测试和练习2.Standalone Spark集群模式:Spark集群的资源管理由spark自己来负责3.On Yarn Spark集群模式:Spark集群的资源由Yarn来管理四 .Spark最核心的数据结构——RDD弹性分布式数据集RDD与普通集合的区别:1.RDD有分区机制,可以分布式,并行的处理同一个RDD数据集,从

2022-02-20 21:50:47 1515

空空如也

空空如也

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

TA关注的人

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