自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sofency'Blog

进阶的攻城狮

  • 博客(210)
  • 收藏
  • 关注

原创 JVM垃圾回收算法与内存分析

聊到垃圾回收机制:就有必要说下为什么要进行垃圾回收,我们在项目中创建的对象都是在对空间分配内存的。如果程序运行的过程中,已经使用完毕的对象不会在接下来的程序中再使用,那么这块空间就肯定需要释放,不然就会发生内存溢出的异常。因此就需要垃圾回收。内存溢出和内存泄漏的区别内存溢出:需要4g内存,但是只支持3g内存,溢出内存泄漏:定义很多静态变量 垃圾是不会回收的。这个对象没有被引用,再次申请会出现...

2020-04-28 19:49:09 268

原创 JVM双亲委派机制,沙箱安全机制

双亲委派机制的原理如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器(Bootstrap ClassLoader)中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。具体流程:当AppClassLoader加载一个cla...

2020-04-26 23:35:09 345 1

原创 JAVA并发编程的底层实现原理

JAVA代码编译后会变成java字节码,字节码会被类加载器加载到JVM中,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。Volatile的应用volatile在多处理器中保证了共享变量的可见性,可见性的意思是当一个线程修改一个共享变量时,另一个线程能读到这个修改的值。如果volatile使用恰当,它比synchroized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。volatile是如何确保可见性使用volatil

2021-10-06 17:21:27 249 1

原创 Flink学习笔记-基础的概念

定义: Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行计算。为什么选择Flink:流数据更真实反应了我们的生活方式传统的数据架构都是基于有限数据集的低延迟,高吞吐,结果的正确性和良好的容错性主要特点:事件驱动,基于流的世界观(离线数据是有界流,实时数据是无界流)部署方式Standalone模式下载flinkfink-conf.yaml的配置文件阅读# JobManager runs.jobmanager.rpc.address: localho

2021-09-25 11:21:17 189

原创 Docker学习

docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟技术Docker三大概念 容器,镜像,仓库容器就是镜像创建的运行实例,仓库主要用来存储镜像,便于运维快速创建相同的部署环境容器之间都是隔离的Docker本身是一个容器运行载体或称之为管理引擎,我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎image镜像文件,只有通过这个镜像文件才能生成Docker容器,image文件可以看作是容器的模版,Docker根据image文件生成容器

2020-12-28 12:15:40 246

原创 大数据安全认证技术Kerberos

对于简单安装的上线的hadoop集群,我们可以认为有如下安全隐患可以人为的添加一个客户端节点,并以此假冒的客户端来获取集群数据,对于假冒的客户端节点,成功加入集群,就能够伪装成datanode 让得到namenode指派的任务和数据.创建hdfs账户,就可以得到hadoop文件系统的最高权限Kerberos主要用来做网络通讯中的身份认证,帮助我们高效,安全的识别访问者...

2020-10-16 13:19:58 731

原创 hadoop集群时间校准ntp服务

通过yum install ntp安装通过 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 设置集群在同一时区通过命令 ntpdate -u 0.cn.pool.ntp.org设置校准的服务器设置开启自启vim /etc/ntp.conf添加 server 0.cn.pool.ntp.org # centos给我们设置了几个时间校准的服务,但是国内对于外网的访问速度很慢chkconfig ntpd on # 设置开机自启启动ntp服务s.

2020-10-15 09:09:44 211

原创 MapReduce分布式计算框架

MapReduce是一个分布式运算程序的编程框架,是用户开发"基于Hadoop"的数据分析应用的核心框架核心功能:是将用户编写的业务逻辑代码和自带的默认组件整合成一个完整的分布式运算框架,并发运行在一个hadoop集群上.优点:1. 易于编程,它简单的实现一些接口,就可以完成一个分布式程序,可以分布到大量廉价的pc机器上运行.2. 良好的扩展性 当计算资源不能得到满足的时候,可以通过简单的增加机器来扩展它的计算能力3. 高容错性 其中的一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,

2020-10-14 16:16:43 737

原创 redis主从复制搭建教程

本文主要介绍伪集群的形式进行主从复制的搭建比较好的教程主从复制搭建前提电脑上提前下载好单机版的redis在同级目录下将redis.conf复制三份为redis6379.confredis6380.confredis6381.conf分别修改配置文件redis6379.conf , redis6380.conf , redis6381.conf 修改以下内容port 修改为指定的端口pid进程号存储位置修改为各自端口号 pidfile /var/run/redis_{port}.

2020-10-03 19:54:38 227 1

原创 redis缓存遇到的问题以及解决方案

使用redis时经常会遇到经典的三个问题,缓存穿透,缓存击穿和缓存雪崩的问题,那么我们应该如何理解以及如何应对这三个问题哪缓存击穿当我们访问的数据先经过缓存,缓存中没有该值或者缓存的值过期,那么该请求会将查询的请求转移到数据库上,这就是缓存击穿的问题.实际这样的情景还是很常见的,解决方案: 这种情形属于比较常见的,一般的解决方案就是重新查询数据再赋值给对应的key,仅此而已.缓存穿透但是如果上百万的请求请求的数据全是控制,那就意味着上百万的请求压力直接打到数据库层级上.这对数据库压力来说是致命的.

2020-10-03 16:59:33 231

原创 fastdfs的安装与使用

fastdfs是c语言开发的一个轻量级的分布式文件系统,而且解决了大容量的存储与负载均衡的问题安装所需要的软件下载链接fastdfs(tracker,storage)fastdfs-nginx-module(nginx的模块)nginx(提供http的服务)libfastdfscommon(依赖的包)百度网盘提取码 0fnv 安装前先安装好所需要的环境依赖yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl op

2020-10-02 19:29:41 245

原创 Zookeeper监控命令

zookeeper支持某些特定的四字命令与其交互,它们大多数是查询命令,用于获取zookeeper服务的当前状态以及相关的信息命令描述conf输出相关服务配置的详细信息,比如端口,zk数据以及日志配置路径,最大连接数,session超时时间,serverId等cons列出所有连接到这台服务器的客户端连接/会话的详细信息,包括"接收/发送"的包数量,session id 操作延迟,最后的操作执行等信息crst重置当前这台服务器所有连接/会话的统计信息dump列

2020-09-21 20:28:43 195

原创 zookeeper集群的leader选举

服务器启动时期的Leader选举在集群初始化阶段,当有一个服务器的server1启动时,其单独无法进行和完成leader选举,当第二台服务器server2启动时,此时两台机器可以相互通信,每台机器都试图找到leader, 于是进入leader选举过程每个server发出一个投票.由于初始情况,server1和server2都会将自己作为 leader服务器来进新货投票,每次投票会包含所推举的服务器的myid和zxid,使用(myid,zxid)来表示.此时server1的投票为(1,0),server

2020-09-20 23:12:09 132

原创 Zookeeper集群搭建以及zab协议

单机环境下,jdk zookeeper安装完毕,基于一台虚拟机,进行zookeeper的伪集群搭建,zookeeper集群中包含三个节点,节点对外提供服务端口号分别为2181,2182,2183基于zookeeper-3.4.10复制三份zookeeper安装好的服务器文件,目录名称分别为zookeeper2181,zookeeper2182,zookeeper2183cp -r zookeeper-3.4.10 zookeeper2181cp -r zookeeper-3.4.10 zookee

2020-09-20 22:17:58 288

原创 zookeeper分布式锁的设计思路与实现

分布式锁有多种实现方式,比如通过数据库,redis都可以实现,作为分布式协同工具zookeeper也有着标准的实现方式.设计思路:每个客户端往/Locks下创建临时有序节点/Locks/Lock_,创建成功之后/Locks下面会有每个客户端对应的节点,如/Locks/Lock_0000000001客户端取得/Locks下子节点,并进行排序,判断最前面的是否为自己,如果自己的锁节点在第一位,代表获取锁成功.如果自己的锁节点不在第一位,则监听自己前一位的锁节点,例如自己锁节点Lock_00000000

2020-09-20 19:45:57 100

原创 zookeeper事件监听机制

watcher的概念zookeeper提供了数据的发布订阅功能,多个订阅者可同时监听某一特定主题对象,当该主题对象的自身状态发生变化时(例如节点内容发生变化,节点下的子节点列表发生变化)会实时,主动通知订阅者;zookeeper采用watcher机制实现了发布/订阅功能.该机制在被订阅者对象发生变化的时候会异步的通知客户端,因此客户端不必在watcher注册后轮询阻塞,从而减轻客户端的压力.watcher的架构watcher实现由三部分组成zookeeper服务端zookeeper客户端..

2020-09-20 00:44:21 761

原创 Zookeeper知识总结

zookeeper是一个开源的分布式的,为分布式应用提供协调服务的apache项目;工作机制:zookeeper从设计模式来理解:是一个基于观察者模式设计的分布式服务管理框架,她负责存储和管理大家都关心的数据,然后接收观察者的注册,一旦这些数据的状态发生变化zookeeper就将负责通知已经在zookeeper上注册的哪些观察者做出相应的反应;zookeeper = 文件系统+消息通知机制zookeeper应用场景zookeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高

2020-09-19 20:51:31 342

原创 innodb表-官网学习

官网翻译:INNDODB最佳实践InnoDB不仅允许对同一个表并发读和写访问,它还缓存修改后的数据以简化磁盘I/O。性能优势不仅限于具有长时间运行的查询的巨型表。当从一个表中一次又一次地访问相同的行时,一种称为自适应哈希索引的特性会接管,从而使这些查找更加快速,就好像它们是从哈希表中出来的一样。innodb默认会根据主键创建主键索引,如果没有创建主键索引则会根据自增的行值建立索引;在使用join进行多表关联查询时,注意在连接列上使用外键;当你不想频繁提交,即在insert和update和delet

2020-09-19 01:43:02 217

原创 Spring Cloud Bus总线的配置

上篇文章我们介绍了当我们的配置中心服务端发生变化后客户端的配置如果要得到及时的通知需要加上@RefreshScope的注解并且 还要使用post请求,请求下客户端的监控进行刷新操作,在服务非常多的情况下,非常的麻烦curl -X POST "http://localhost:3355/actuator/refresh"什么是总线在微服务的架构中,通常会使用轻量级的消息代理来构建公用的消息主题,并让系统中所有的微服务实例都链接上,由于该主题中产生的消息会被所有的实例监听和消费所以称它为消息总线,在总线上

2020-08-31 13:48:15 273

原创 springcloud配置中心的设置

什么是springcloud的配置中心spring cloud config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同的微服务应用的所有环境提供了一个中心化的外部配置spring cloud config能干什么集中化的管理配置文件不同的环境不同配置,动态化的配置更新,运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息当配置发生变化时,服务不需要再重启即可感知到配置的比那花并应用最新的配置将配置信息以rest

2020-08-31 10:36:29 182

原创 springBoot配置类的使用技巧

我们可以在配置中心application.yml中配置自定义的参数选项.我们的需求是在程序运行的时候将集群的列表加载到代码中.在application.yml中配置zk. lists:[a,b,c]创建bean@Data@Component //这样只是将该组建注册进容器@ConfigurationProperties(prefix="cluster")public class Cluster{ private List<String> lists;}我们想在项目中

2020-08-27 10:36:34 388

原创 集群系列-环境准备-hadoop和jdk的安装

版本准备hadoop2.7.7,jdk1.8.0_144安装目录:/opt/module下环境变量准备添加变量的目录/etc/profile.d/env.d 可以自己创建该目录#JAVA_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_144export PATH=$PATH:$JAVA_HOME/bin#HADOOP_HOMEexport HADOOP_HOME=/opt/module/hadoop-2.7.7export PATH=$PATH:$

2020-08-27 08:46:38 127

原创 集群系列-环境准备-Linux克隆机器需要修改的配置

在/etc/udev/rules.d/70-persisitent-net.rules下修改物理ip地址修改ip地址 在/etc/sysconfig/network-scripts/ifcfg-enth0修改主机名称 在etc/sysconfig/network进行修改修改hosts集群内其它主机的ip映射

2020-08-27 08:00:21 172

原创 Eureka的介绍以及使用

Eureka在springcloud的技术体系中主要起到了服务注册和服务发现的功能;Eureka 采用了CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心,而系统中的其它微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接,这样系统的维护人员就可以通过Eureka server 来监控系统中各个微服务是否正常运行, 在服务注册与发现中,有一个注册中心,当服务器启动的时候,会把当前自己服务器的信息, 比如服务地址,通信地址,等以别名方式注册到注册中

2020-08-23 22:23:13 181

原创 springCloud和springBoot的版本选择与基础配置

springcloud版本和springboot的版本选择 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.4.RELEASE</version> <type&

2020-08-23 15:32:11 281

原创 sqoop的学习

sqoop是什么?主要用于在hadoop(hive)与传统的数据库间进行数据的传递,可以将一个关系型的数据库中的数据导进到hadoopd的hdfs中,也可以将hdfs的数据导进到关系型的数据库中.sqoop的原理将导入或导出命令翻译成mapreduce程序来实现,主要对inputformat和outputformat进行定制sqoop的安装sqoop的简单使用案例sqoop导入数据到hdfs全部导入bin/sqoop import --connect jdbc:mysql://localho

2020-08-20 20:20:10 84

原创 Flume的学习

FLume是一个高科用的高可靠的分布式的海量日志采集,聚合和传输的系统.flume最主要的作用就是实时读取服务器本地磁盘的数据,将数据写入到hdfs中.flume的主要架构Source 数据输入端的常见类型有 spooling directory exec ,syslog avro等put事物流程doput 将批数据先写入到缓冲区putlist中,doCommit 检查channel内存队列是否足够合并doRollback channel内存队列空间不足,回滚数据Channel自带两种Ch

2020-08-20 19:04:44 102 1

原创 Hive函数练习

NVL(value,default_value)如果value为null,则nvl函数返回default_value的值,否则返回value的值,如果两个参数都为null话返回nullcase when求不同部门男女各多少人数据悟空 A 男大海 A 男宋宋 B 男凤姐 A 女婷姐 B 女婷婷 B 女首先创建表create table emp( name string, id string, sex string) row format delimited fields .

2020-08-19 19:57:04 188

原创 Hive基础知识点总结-DML

hive的修改表操作alter table table_name rename to new_table_name添加列信息alter table dept_partition add columns(depedesc string);更新列信息alter table dept_partition change column deptdesc desc int;替换列alter table dept_partition replace columns(deptno string,dname s

2020-08-19 16:55:21 137

原创 HDFS学习笔记

hdfs是hadoop的分布式文件系统,它是一个高容错性的系统,适合部署在廉价的机器上,hdfs能够提供高吞吐量的数据访问,非常适合大规模数据集的应用.优点:高容错性数据自动保存为多个副本,它是通过增加副本的形式提高容错性的.某一副本丢失以后,它可以自动恢复(即重新再创建副本).适合处理大数据数据规模:能够处理数据规模达到GB,TB,甚至PB级别的数据文件规模:能够处理百万规模以上的文件数量,数量相当之大.可以构建在廉价机器上.缺点:不适合低延迟数据访问,比如毫秒级的存储数据无法

2020-08-16 12:28:45 236

原创 linux基本操作命令

1.查看当前路径 –pwd2.查看当前目录下有哪些文件 –ls3.创建目录 –mkdir4.创建文件 touch newfile5.复制命令 cp 原路径 现路径 可以使用 . 表示当前路径6.长格式显示文件的信息 ll7.查看文件的内容 less 文件名8.在文件中查找内容 / 内容9. 查找文件内容 grep 查找内容 文件10.将当前文件进行打包 tar ...

2020-08-13 20:13:09 80

原创 kafka基本操作

准备环境启动zookeeperbin/zkServer.sh start启动kafka前先将kafka注册到zookeeper上修改config/server.properties添加zookeeper.connect=localhost:2181当然也可以设置为zookeeper集群 结点用逗号分割开zookeeper.connect=10.2.21.22:2181,10.2.21.23:2181启动kafkabin/kafka-server-start.sh config/server.

2020-08-13 19:07:56 163

原创 kafka知识点总结

kafka的架构图见此链接kafka架构理解重要概念partition (分区的概念):消息发送时都被推送到一个topic上,而topic是由分区(partition)构成分区的原因:方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了;可以提高并发,因为可以以Partition为单位读写.副本(replication)同一个partition可能会有多个replication

2020-08-11 09:00:05 172

原创 unbantu安装Docker

首先查看unbantu的版本cat /etc/lsb-release 我的版本是18.04首先卸载掉之前可能安装过的dockersudo apt-get remove docker docker-engine docker-ce docker.io更新apt包apt-get update切换到root权限su rootapt-get install apt-transport-https ca-certificates curl software-properties-co..

2020-08-10 20:22:11 330

原创 ThreadLocal小结

整理自java多线程核心技术变量的共享public static 修饰的变量称为公共的变量,即应用产生的线程不仅可以访问到,而且可以修改(修改就涉及到了线程安全的问题).存储区域: 这类变量跟随类一样放在方法区,生命力顽强.基本上不会被垃圾回收掉.弊端: 对于共享的变量要处理好并发修改的线程安全问题.ThreadLocal实现了线程内部的共享变量,即线程内部的共享变量由ThreadLocal它来具体管理声明改变量时一般为static类型的ThreadLocal主要的作用就是给每个线程绑定自己的

2020-08-07 16:07:00 95

原创 责任链模式

责任链模式(Chain of Responsibility)是一种处理请求的模式,它让多个处理器都有机会处理该请求,直到其中某个处理成功为止。责任链模式把多个处理器串成链,然后让请求在链上传递:模拟场景:一批账单,数额低于1000的由manager处理,数额高于1000但是小于10000的由boss解决,数额高于10000的由leader解决.模拟请求类class Request{ private String name; private BigDecimal amount;

2020-08-07 15:40:39 104

原创 java的对象头信息以及锁升级的过程

主要有三个部分1.markword2.   指向类的指针3.  数组的长度markword 锁状态 25bit 4bit 1bit 2bit 23bit 2bit 是否偏向锁 锁标志位 无锁 对象的hashcode 分代年龄 0 01 偏向锁 线程ID Epoch 分代年龄 1 01 轻量级锁 指向栈中锁记录的指针 00 重量级锁 指向重量级锁的指针 10 GC 空 11锁升级的过程1.当对象被当做同步锁并

2020-08-05 13:56:12 432

原创 JVM运行时数据区

JVM虚拟机定义了若干程序运行期间会使用的运行时数据区,其中有一些会随着虚拟机的启动而启动,随着虚拟机的退出而销毁,另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程的开始和结束而创建和销毁。前面我们介绍过,运行时数据区中包含线程共有的方法区和堆空间,以及线程私有的本地方法栈,虚拟机栈以及程序计数器,下面我们一一介绍这些区域。程序计数器 又叫做PC寄存器线程私有的,生命周期和...

2020-08-04 10:10:48 88

原创 HashMap怎么和面试官讲清楚?

集合中我们经常使用的就是hashmap,我们知道它的底层实现是hash桶外加链表的方式来进行存储数据的,但是底层又是如何进行具体实现的,我们可能真的说不清除。现在我们从源码层次上进行讲解hashmap的原理;get方法的底层实现先看下源码我们传入key的参数,底层调用的是getNode的方式,其中最重要的就是对我们传入的key进行了hash算法的处理,那么hash算法又是如何实现的哪,继续源码刨析首先判断了key是否为空,空的话返回0;非空的话使用key的hashcode的高16位和低16位

2020-08-04 10:09:55 190

转载 unbantu修改时区时间

[Linux] 通过指令修改时区 tzselect## 修改时区tzselect 指令只是根据提示一步步选择正确时区,但不能真正修改时区,最后输入提示的指令,然后重启,才能永久修改。sofency@ubuntu:~$ tzselectPlease identify a location so that time zone rules can be set correctly.Please select a continent, ocean, "coord", or "TZ". 1) Africa

2020-07-31 11:49:34 309

空空如也

空空如也

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

TA关注的人

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