自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

原创 (5).hdfs数据读过程概述

(1)客户端将要读取的文件路径发送给namenode,namenode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件       (2)详细步骤解析      1.跟namenode通信查询元数据,找到文件块所在的datanode服务器      

2017-09-28 17:07:47 504

原创 (4). hdfs数据写过程概述

(1)客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后,客户端按顺序将文件逐个block传递给相应datanode,并由接收到block的datanode负责向其他datanode复制block的副本      (2)详细步骤解析    1.根namenode通信请求上传文件,namenode检查目标文件是否已存

2017-09-28 17:06:27 396

原创 (3).hdfs集群节点

Namenode1.Namenode工作职责:负责客户端请求的响应,元数据的管理(查询,修改)  2.元数据管理 : namenode对数据的管理采用了三种存储形式:内存元数据(NameSystem)  磁盘元数据镜像文件数据操作日志文件(可通过日志运算出元数据)  3.元数据存储机制:          A、内存中有一份完整的元数据(内存meta data)         

2017-08-26 22:20:35 461

原创 (2).hdfs的架构设计

hdfs被设计成Master/Slave结构:(1)HDFS集群分为两大角色:NameNode、DataNode    (2)NameNode负责管理整个文件系统的元数据    (3)DataNode 负责管理用户的文件数据块    (4)文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上    (5)每一个文件块可以有多个副本,并存放在

2017-08-26 22:18:32 259

原创 (1).hdfs特性及适用场景

hdfs是一个分布式文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件,并且是分布式的,由很多服务器联合起来实现其功能,集群中的服务器各自负责角色;  重要特征:  1.HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M   2.HDFS文件系统会给

2017-08-26 22:13:36 6813

原创 理解高并发(20).大白话阿姆达尔定律

技术来源于生活,技术又改变了生活。从生活中的例子说起要完成拖地和烧开水这么一个工作, 假设烧开水需要花费 2分钟, 拖地需要2分钟, 各占总时间的50%。 为了赶时间,我发动老婆一块帮忙, 因为烧开水的时间不为人所能控制,因此增派人手能做的工作只能是打扫卫生, 此时完成整项工作可提升的速度为:可提升效率倍数: 1/( 0.5 + 0.5/2) = 1.3 倍 , 总完成时长

2017-08-26 22:06:36 1188

原创 理解高并发(19).volatile原理及用法

功能volatile关键字有2大作用,保证被修饰的语句在执行和编译时不被优化下面的例子,如果不加volatile,执行器对stop的取值仅从本地工作内存中获取,这样的话会造成即使该值被其它线程修改无无从感知。专业点讲:禁止指令重排序保证线程能够获取到最新值如果增加volatile修饰,每次都从主存中获取,可以取到最新值.专业点讲:保证可见性

2017-08-26 22:04:04 313

原创 理解高并发(18).编写自己的threadlocal

李四 当前投票次数 :5张三 当前投票次数 :4李四 当前投票次数 :6张三 当前投票次数 :5李四 当前投票次数 :7张三 当前投票次数 :6李四 当前投票次数 :8张三 当前投票次数 :7李四 当前投票次数 :9张三 当前投票次数 :8李四 当前投票次数 :10张三 当前投票次数 :9李四 over张三 当前投票次数 :10张三 over

2017-08-26 22:02:27 255

原创 理解高并发(17).threadlocal原理及用法

概述threadlocal 是线程本地变量的意思, 它能够将主内存空间中的共享变量拷贝一份到本地工作内存空间, 使多个线程操作共享变量互不影响, 达到了线程安全的效果。场景特别适合于控制每个线程某个业务的执行次数,例如:做投票系统,限制每个线程的投票次数实现原理将变量保存到当前线程的ThreadLocalMap实例里面ThreadLocalMap可以理解

2017-08-26 22:01:18 720

原创 理解高并发(16).自己动手编写Future、Callable

实现带返回值的线程调用方式有很多, 这里主要是借助LockSupport工具来实现。MyFuture.java类:功能职责: 1、实现runnable接口,使其具体线程的特质2、 提供future的get方法,使调用者能够获取到返回值package com.test.thread.demo13;import java.util.concurrent.lock

2017-08-26 22:00:34 255

原创 理解高并发(15).Future、Callable实现原理及用法

概述jdk1.5推出的,使用它能带来2个方便:能够获得到线程执行后返回的结果线程异常有效捕获简单例子输出结果:result=hellopublic class ThreadLocalTest {@SuppressWarnings("unchecked")public static void main(String[] args) {Execu

2017-08-26 21:59:43 1382

原创 理解高并发(14).到齐后才能开干_cyclicBarrier

概念循环栅栏。工作线程必须等待其它线程都到达后才能够继续。 这就好比500米短跑比赛, 3跑道必须等到3人都到齐后才能开始赛跑。与CountDownLatch区别CountDownLatch 的使用场景更多的是侧重于主线程-从线程协调工作而CyclicBarrier侧重的是多个从线程之间的协调工作示例代码5个线程都到齐后才会开始工作。public c

2017-08-26 21:58:48 222

原创 ssh免密码登录的坑

用ssh-keygen命令生成公钥后,会在~/.ssh下面生成2个文件:   [root@localhost .ssh]# lltotal 32-rw------- 1 root root 1675 Aug 11 20:13 id_rsa-rw-r--r-- 1 root root  408 Aug 11 20:13 id_rsa.pubcat id_rsa.pub>>

2017-08-12 11:29:13 301

原创 理解高并发(13).完成后给我报告countDownLatch

概念 :固定多少个任务,每个线程执行完一次做一次减操作, 直至任务数为0,主线程才继续往下执行。常用方法://声明任务个数为20final CountDownLatch latch = new CountDownLatch(20);// 任务数减1latch.countDown();//阻塞,直到任务数为0才被唤醒继续执行latch.await();使用

2017-08-07 12:57:58 275

原创 理解高并发(12).限定并发个数_semaphore信号量

概念 :Semaphore 控制允许最大并发执行线程数, 当达到设置阀值后,阻塞,否则放行。对应的函数://构造最大允许6个并发的线程许可Semaphore semp = new Semaphore(6);//获得到许可, 可用许可数-1semp.acquire();//释放许可, 可用许可 + 1semp.release();原理:从待执行线程队列

2017-08-07 12:56:20 575 1

原创 理解高并发(11).线程通信之_join使用及原理

概述根据jdk官方API的定义:Thread.join方法是阻塞调用线程(也称阻塞主线程),待被调用线程(子线程)运行结束后主线程才会被唤醒。 通常用在main方法中。替代方案jdk1.7 CountDownLatchjoin底层实现原理wait、notify机制,可以深入的查看底层实现源码:/** 2 * Waits at most millis

2017-08-07 12:55:31 321

原创 理解高并发(10).线程通信之_线程中断技术

对于线程中断,需要注意的几点:interrupt() 让阻塞的线程中断处理try{Thread.sleep(3000L);}catch(InterruptedException e){/*************************运行interrupt()后会抛出InterruptedException 异常如果希望中断处理的话,需要做如下操作:1.

2017-08-07 12:53:36 330

原创 浅谈zk(8).zookeeper环境搭建_集群版

一、环境搭建1、分别创建三个server目录2、分别在3个目录中创建logs、data子目录,如下:3、分别在data目录下创建myid文件server1: myid, 内容为0server2:myid, 内容为1server3: myid,内容为 24、copy 一份单机版的zookeeper完整目录到server1、ser

2017-08-06 00:37:09 627

原创 浅谈zk(7). zookeeper环境搭建_单机版

一、下载安装包https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz二、相关配置1、解压:tar -zxfzookeeper-3.4.9.tar.gz 2、进入conf,编辑zoo.cfg这个里面主要配

2017-08-06 00:33:40 448

原创 浅谈zk(6).zookeeper内部存储结构

存储结构采用树形目录结构,把它想象为windows 资源管理器就可以了。 每个节点上面有元信息,如创建时间、数据信息、数据长度、修改时间等。 和windows资源管理器一样,树上的节点可以是文件也可以目录。特点每个目录或文件节点上面都有ACL通过ACL可以设定权限访问对每个目录或文件节点的操作具有原子性每次对节点进行操作,节点中的版本号将增加

2017-08-06 00:31:22 779

原创 浅谈zk(5).如何保证并发写的顺序性?

所有写请求都会被转发到leader节点,follower会通过单独的端向leader报告, 集群配置里面有专门指定,如下 zoo.cfg配置:clientPort=4180 #用来接受客户端读请求的监听端口#server.A=B:C:D:其 中A 是一个数字,表示这个是第几号服务器;     B 是这个服务器的 ip地址;     C 表示的是这个服务器与集群中的 Leader

2017-08-06 00:29:16 3024

原创 浅谈zk(4).leader如何选举?

如果leader挂了怎么办? 当然是重新选举一个新的leader呀, 选举流程如下:1)、所有当前server向所有节点广播消息,去竟选leader2)、收到回执3)、向小于或等于当前节点编号的节点发送广播4)、比较投票数, 如果获得的票数>n/2+1,则推举为leader5)、被推举的节点状态由looking->leader举例:集群有5台机器

2017-08-06 00:28:17 2701 5

原创 浅谈zk(3).领导者与追随者如何协作?

先吐槽几句: 很多资料把paxos写得太过复杂,搞得人云里来雾里去的。 说实话特别反感一些人装逼,明明简单的问题说的长篇大论。接下来再来分享paxos是如何选举的。先来梳理一下zk的几个角色:server-leader:负责写、改、删server-follower:职责a:负责心跳探测leader状态将写请求转发leader职责b: 接收客户端请求,返回查询

2017-08-04 21:46:24 522

原创 浅谈zk(2) zookeeper的特性

zookeeper作为构建复杂系统的基础,本身要求具备高效、可靠。具备以下特性:1、高效适用于大型的分布式系统. 如果写多的话性能不高,因为它要做所有节点之间的数据同步。2、可靠支持集群,大部分可用即服务可用3、顺序事务性控制好。 多个客户端并发修改数据,会按顺序去写。在master上维护着一个写队列,控制并发操作。4、简洁对外提供的api非常实用、简洁。仅

2017-08-04 21:45:19 1214

原创 浅谈zk(1) 为什么要使用zookeeper?

随着软件的发展,应用的部署结构也从单机模式发展到了分布式模式, 当同一个应用部署到多个节点时, 通常会遇到很多问题, 比较典型的有:1、配置文件变更维护成本大如log4j配置、jdbc配置、甚至是业务配置,哪怕细微的配置变化都需要同步到若干节点,成本可想而知2、集群内设备扩容或宕机无法快速感知如原集群有5台设备,突然间加了一台或宕机一台设备,这种场景如果单纯的靠码代码是很难完美解决

2017-08-04 21:44:29 2873 1

原创 理解高并发(9).线程通信之_wait、notify

消息通信的两种模型:消息传递wait/notify是采用该种机制实现的。 是借助于操作系统底层的消息通信机制。共享内存多线程中的数据同步的内存可见性是基于些模型。例如,A线程修改了变量值,该变量的值会先写回主内存,然后再由B线程从主内存读取过来。概念:wait: 当前线程释放锁的使用权,进入阻塞阶段notify: 随机唤醒一个阻塞的线程,

2017-08-01 12:31:45 279

原创 理解高并发(8).可重入锁RetreenLock用法

一、概述与区别jdk1.5新增RetreenLock机制并不是为了替代内置锁, 而是当内置锁不能满足锁的高级需求时jdk提供的一种可选锁方案具有与内置锁相同的内存语义内置锁是非公平锁,竟争上岗lock锁有更高级的功能,如结合条件上锁、构造公平锁(FIFO)synchronized使用更加简洁方便实现原理, 内置锁采用悲观锁机制,内部锁通过对象头中的指针monit

2017-08-01 12:30:53 8801 2

原创 理解高并发(7).编程过程中锁的优化技巧

分拆(段)锁把一个集合看分成若干partition, 每个partiton一把锁。ConcurrentHashMap就是分了16个区域,这16个区域之间是可以并发的。mysql innode的行级锁运用的就是该思想。尽量减小锁的控制范围范围越大,运行时间越长尽量减小锁的使用时间运行时间越长,其它线程等待的时间就越长分离

2017-08-01 12:28:46 400

原创 理解高并发(6).jvm对内置锁的优化

早期的synchronized性能低下, 因为监视器锁monitor是依赖于底层操作系统的mutx-lock实现,当多个线程在monitor中的wait队列中竟争上岗时会发生线程状态切换, 这种切换需要由操作系统的内核态转化为用户态,性能比较低下。jdk1.6对synchronized做了很多优化, 性能已经提升了很多。 具体优化策略,在对象头中引入了轻量级锁、偏向锁等标识。

2017-08-01 12:27:11 1002

原创 理解高并发(5).synchronized原理及用法

历史最优久的使用最方便的线程同步的关键字。必须点赞一、synchronized 特性同一时刻只有一个线程访问临界资源其它未获取到锁执行权的线程必须排队等待保证共享资源的原子性、可见性和有序性进入synchronized范围内自动加锁,synchronized作用域外锁自动消除,即使异常也会释放锁简单方便(不需要人工释放锁)jdk1.6后性能做了很大优化

2017-08-01 12:24:46 1567

原创 iterator、for遍历集合的优缺点

对于在内存中存储空间为连续的集合,如ArrayList、数组,可以采用以下三种方式进行遍历:1、iterator迭代器遍历方式, 适用于连续内存存储方式,比如数组、 ArrayList(其实 ArrayList底层实现也是数组形式)。 缺点是只能从头开始遍历, 优点是可以边遍历边删除。例如:Iterator iter = list.iterator();while(iter.h

2017-07-27 22:39:14 11270 3

原创 理解高并发(4).死锁监测方法

windows环境:查看当前活动java进程jstack 堆信息输出分析堆信息,发现死锁死锁的通用解决法则:按相同的顺序加锁。

2017-07-24 12:34:40 295

原创 理解高并发(3).多线程开发常见问题示例

多线程开发过程中,经常会出现的一些问题:非线程安全、死锁、饥饿锁。 示例代码如下:非线程安全package com.zuche.thread.demo1;public class TestClient {public static void main(String[] args) {final Account account = new Accoun

2017-07-24 12:32:40 391

原创 理解高并发(2).我对并发编程的理解

对于并发编程, 涉及的技术点非常多, 我们首先需要明确一些基本概念,只有概念清晰,才能做到在以后深入学习关键技术的过程中不致于感觉到吃力和迷惑。 其次,我们还需要明白在并发编程最需要关注的问题是什么? 带着关键问题去学习,才能够起到事办功倍、稳扎稳打的效果。下面是我所总结的一些很多人容易混淆的概念:1. 高并发、多线程高并发高并发是请求,指的是多个客户端同一时刻向服

2017-07-24 12:31:43 4759 1

原创 理解高并发(1).序言

高并发已不是个热词, 然而用好它并非易事,很多时候如果没有使用得当,极容易产生适得其反的效果。 本系列我将系统性的给大家分享高并发的技术要点。 其具体技术点包括以下:1. 我对并发编程的理解2. synchronized原理及用法3. 显式锁的用法4. 锁的优化技巧5. 线程通信之_wait/notify6. 线程通信之_semaphore信号量7. 线程通信之_cou

2017-07-24 12:29:58 290

原创 理解mysql_常用经典sql

1、允许mysql远程连接       同4     3、查看字符集设置        show variables like 'character%';     4、数据库赋权       grant all on *.* to 'root'@'%' identified by 'Reset123QWE';       flush privileges;

2017-07-22 17:30:17 203

原创 理解mysql_order by排序原理及优化

一、排序算法    a.  一次扫描性能高,减少了io随机请求的次数    b.  排序操作是在内存(sort_buffer)里面进行的, 先select结果再进行排序,如果结果值大于max_length_for_sort_data 阀值设置需要二次io读取     c.  关联查询会产生临时表再进行order by 二、优化思路    a.  尽量减少io的读取 max_

2017-07-22 17:29:19 2403

原创 理解mysql_简述mvcc

Mvcc其实并不是真正意义上实现的乐观锁。mysql只是用它来解决事务隔离级别中的不可重复读的问题。 当事务T1 开启后, 需要修改某行, 会先给该行加上排他锁, 并且生成一个版本。 此时,事务T2进入,读取的记录永远是事务T1提交前的一个版本。 避免了2次读的记录不一致的情况。

2017-07-22 17:28:23 314

原创 理解mysql_limit优化思路

Limit 是将所有记录查询出来进行范围限制输入。   会导致前面不需要的记录也进行io读取。 优化整体思路就是尽可能少操作io, 常用手段:     1、使用记录主键的方式进行优化          如: select * from p2p_20131230  where main_id > 1000000 order by main_id  limit 10;      2、使

2017-07-22 17:27:46 157

原创 理解mysql_锁的概念

对于锁需要重点掌握以下:   1.  锁分类   ● 表锁   ● 行锁   ● 对象锁(meta-table锁),在table cache层实现   ● 页锁   ● 排他锁(互斥锁、X锁)   ● 共享锁(S锁) 2.锁的使用注意事项   ● innodb引擎是行级锁,适用于高并发场景的后台系统   ● myisam引擎采用的是表级锁,适用于前端we

2017-07-22 17:26:44 333

空空如也

空空如也

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

TA关注的人

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