源代码
文章平均质量分 76
陈奉刚11
大数据开发与问题定位
展开
-
spark 集群添加jar包 正解
前置1、先说一下spark-submit 提交命令 ,应该采用 如下路径的spark-submit,因为这样才会读取spark-default.conf>> /opt/cloudera/parcels/CDH/lib/spark/spark-submit2、如果无法找到正确的路径,采用配置方式如:spark-submit --class org.apache.spark.examples.SparkPi --master yarn --properties-fil原创 2021-06-23 20:44:11 · 2230 阅读 · 0 评论 -
jdk 源码分析(11)java ArrayBlockingQueue 缓存队列分析
队列没有什么,如图,分为头和尾,都是FIFO(先进先出),用数组和链表都能存储数据,数组当poll 数据后,需要整体移位(当然循环数组也是可以不移位的。),链表就方便很多。插入时在头部添加一个,删除是在尾部直接删除,原创 2017-08-03 22:29:33 · 456 阅读 · 0 评论 -
jdk 源码分析(12)java condition 条件锁
在分析ReentrantReadWriteLock 时知道多个线程在争论一个state,那么当时数据放在那里呢。都是放在syns里,这个类继承了AbstractQueuedSynchronizer,而里面的node(链表)就是存储数据的。所以其实所有的lock 是离不开的队列的。今天的condition 也是离不开队列,也离不开lock,所以其实现类就放在AbstractQueuedSynchro...原创 2017-08-03 23:11:35 · 455 阅读 · 0 评论 -
spark 源代码分析 (一)准备阶段: idea 导入spark 源代码
开启spark 源代码学习过程,spark源代码导入到idea中原创 2017-07-26 20:19:11 · 942 阅读 · 0 评论 -
jdk 源码分析(17)java Semaphore 源码解析及与lock对比
总结:应该可以说Semaphore 如果说是一种特殊的lock:(因为大家首先首先lock才这么说,应该是lock是一种特殊的Semaphore)1)lock 是独占,一人享用,而Semaphore是一个多人使用,lock是电影院的VIP单人间,而Semaphore是大厅。 2)lock和Semaphore都需要排队,都有两种排队方式:公平和非公平。3)lock和Semaphore都是改变state变量,只是lock争夺0变成1,而Semaphore是争一个非零的值,因此几率大很多。4)如果初始是原创 2017-08-05 12:38:51 · 486 阅读 · 0 评论 -
jdk 源码分析(1)java hashmap的结构
总而言之就是hashmap根据hash分为不同的多个链表,每个链表/树是hash相同的Node。原创 2017-08-01 23:01:50 · 552 阅读 · 0 评论 -
jdk 源码分析(2)java hashtable的结构及hashMap对比
首先hashtable 只有一种存储结构。线性链表,这和hashmap 不同,hashmap 当数据量大是采用二叉树,可以加快查询。原创 2017-08-01 23:33:38 · 361 阅读 · 0 评论 -
jdk 原地分析(3)java ConcurrentHashMap结构分析
1)存储结构:存储结构和hashmap相似,但是添加一个root级别的锁。链表:static class NodeK,V> implements Map.EntryK,V> { final int hash; final K key; volatile V val; volatile NodeK,V> next; Node(int hash原创 2017-08-01 23:50:22 · 402 阅读 · 0 评论 -
jdk 源码分析(4) java Set 结构
set 只是一些披马甲的乌龟原创 2017-08-02 00:02:14 · 383 阅读 · 0 评论 -
jdk 源码分析(8)java synchronized和锁lock对比
因为synchronized 是关键字,无法看到源代码,所以只能做一个简单的分析对比了,synchronized 能锁方法,也能锁代码块,其实也是一种重入锁(也就是自己的锁,自己可以进去),代码块或方法离开,自动释放锁。lock:lock能做synchronized能做的所有的事情,但是lock 能过在资源竞争地方,通过投票等方法让其他锁释放。而sync原创 2017-08-02 22:52:28 · 1649 阅读 · 0 评论 -
jdk 源码分析(6)java BitSet结构
如果有一个Set 里面存放了(整数)1,3,4,5,23,23,12,65这些数,如果直接存储需要8×32位 ;如果采用位图,只需要用两个long整型串联。原创 2017-08-02 21:39:23 · 325 阅读 · 0 评论 -
jdk 源码分析(7)java ReentrantLock结构
lock看上去很牛,其实真的很牛,如果你仔细研究代码发现,所以的lock都只是去争一个变量stateprivate volatile int state;如果你能将这个state从零变成1,你就可以获得资源,因为要判断是谁获得了这个state,所以需要保留这个线程的对象。因为要记录有哪些线程在争论lock,所以需要队列,既然有队列,就有队列的机制,公平机制(先到先得),非公平机制(可能存在饿死的线程,一直得不到)。这里的队列是用Node组成的链表,记录了head和tail。原创 2017-08-02 22:39:21 · 331 阅读 · 0 评论 -
jdk 源码分析(13)java ExecutorService 和Executors
线程池首先判断有多少可以运行,1)如果可以运行,直接加入到workers 集合中,并且里面启动包装类worker,worker,在执行完当前线程后会去线程池中寻找下一个线程,并且执行2)如果当前执行的线程大于设定的数目,就线程放入缓存队列queue 里面。这里的线程,会在上(1)中执行后调用。原创 2017-08-04 22:24:05 · 438 阅读 · 0 评论 -
jdk 源码分析(14)java ThreadLocal
优点:各自线程维护自己的变量,能在线程里任何位置设置值,读取值,不需要通过参数在方法或对象中显示传递。原创 2017-08-04 23:01:15 · 362 阅读 · 0 评论 -
zookeeper 系列(3) create 流程(1)
create 流程主要是zkcli 里的create命令为入口,分析客户端解析命令,发送命令,服务端接收命令,解析命令,到以leader接收的prequestProcesser的流程流程图片可能不太清楚,截图如下:解析流程发送包装发送流程服务器接收流程, 这部分在服务器启动过程有详细分析,可以参考流程。 初步处理流程。后面还有zab的流程。待续......原创 2018-04-05 13:57:02 · 1360 阅读 · 0 评论 -
zookeeper 系列(2) 启动流程
虽然天天在看源码,但很久没有写博客了,从这周开始写点系列,不写文章,就整些流程图吧原创 2018-04-05 11:52:25 · 291 阅读 · 0 评论 -
hbase 源代码解析(23)truncate 和truncate_preserve流程分析
命令作用:清空表数据,但是保留表结构,分析原因:今天定位一个奇怪的现象,当hbase建立4个region的表,然后用truncate命令时,出现1个region在线而有4个region offline,然后继续put数据,制定split到4个region时,使用truncate_preserve发现出现9个offline,7个failed,并且再put数据时出现表不存在,问题还在定位中。所以需原创 2017-10-24 22:56:39 · 7527 阅读 · 2 评论 -
hbase 源代码解析(22)部分流程图笔记
一些简单学习笔记原创 2017-10-22 20:04:57 · 1129 阅读 · 0 评论 -
spark 源代码分析 (二)spark启动过程
下载spark后,调用shell脚本启动:./bin/spark-shell --master local[2]接下来将分析这个一个过程。spark-shell会启动--class org.apache.spark.repl.Main,参数--name"Spark shell""$@" ,然后会调用spark-submitcygw原创 2017-08-15 20:36:34 · 864 阅读 · 0 评论 -
jdk 源码分析(19)java net包简单分析
net里的网络连接是阻塞的,如果服务器端使用,一般每获取一个请求后启动一个新的线程,然后由新的线程处理数据。不再服务器接收请求的那里直接处理。当然也可以像nio那样,将一个线程专门处理接收,然后启动一个线程池,专门接收数据,然后一个线程池处理数据,一个线程池会写数据。原创 2017-08-05 23:45:35 · 1088 阅读 · 0 评论 -
jdk 源码分析(18)java io包分析
总结:io分为读output和写input,同时通过解码可以分为字符流Reader和字节流InputStream。通过组装DataInput可以读取int,long和float和short等。通过ObjectInputStream序列化和反射可以直接读成对象readUTF等。原创 2017-08-05 16:22:23 · 711 阅读 · 0 评论 -
jdk 源码分析(5)java ConcurrentSkipListMap结构
跳表结构之下往上分层,比如需要找117,首先会判断最高层,先比较21,在比较37 ,再比较37左边的,因为左边结束了,所以只能往下走,一直找到目标为止:寻找规则,从最高层开始,先右,再下,直到最后。原创 2017-08-02 21:02:09 · 362 阅读 · 0 评论 -
jdk 源码分析(16)java CyclicBarrier 源码解析
CyclicBarrier 的实现很简单,1)定义两个变量parties 和count,2)每次线程将count减少1,如果减少完之后count!=0,进程竟然await 。如果count==0. signalAll所有线程,同时将count置为parties,开始新的一轮3)Generation是里面的一个标准,用于中断CyclicBarrier等。所以新的一轮是会重新new 一个Generation原创 2017-08-05 11:38:39 · 453 阅读 · 0 评论 -
jdk 源码分析(15)java CountDownLatch 源码解析
CountDownLatch 和lock的机制很相似,(参考lock:jdk 源码分析(7)java ReentrantLock结构)相同点:1)lock需要队列保存竞争的线程,CountDownLatch需要队列(链表)保持等待的线程线程,2)都需要park和unpark。不同点:1)lock (重入锁)是争论的谁能将state 变成1,而CountDownLatch 是大家一起齐心协力将state 变成0,2)lock 是改变不了state的线程park,而CountDownLatch 是需原创 2017-08-05 10:51:13 · 503 阅读 · 0 评论 -
jdk 源码分析(9)java ReentrantReadWriteLock分析
ReentrantReadWriteLock将分为两种情况,read/write,两种之间存在竞争关系,而且write里面竞争是你死我活,但是read则是共享社会。write 和前面的reentrantlock很类似,所以里面的规则也是一样。需要分为公平与不公平,也需要排队。原创 2017-08-02 23:49:38 · 357 阅读 · 0 评论 -
jdk 源码分析(10)java unsafe 分析
cas大意就是先去获取一次结果,如果结果和现在不同,就直接返回,因为有其他人修改了;否则会一直尝试去修改。直到成功。原创 2017-08-03 21:37:35 · 3214 阅读 · 0 评论 -
hbase 源代码分析 (9) hbase启动过程
hbase的启动过程。过程如下:1)运行start-hbase.sh2) 加载conf,加载需要lib,class文件,包括jdk里面的,hbase本身的。3)判断安装模式4)如果集群模式需要启动a)zookeeper,b)Masterc)RegionServiced)master-backup如果本地模式则只需要启动master就够了。在master里面会new一个zk,和启动一个regionService,但是这个master和regionSerivce是同一个JVM原创 2017-07-14 21:50:44 · 1644 阅读 · 0 评论 -
hbase 源代码分析 (8) delete 过程 详解
delete很直接,直接到第一步就发送了请求,相比put,get,scan,已经getRegionLocator等过程,这简直就是奇迹。所以我也很直接把所有都贴出来了。原创 2017-07-13 23:22:36 · 1349 阅读 · 2 评论 -
hbase 源代码分析 (7) put 过程 详解
1)首先根据获得一个客户端的BufferedMutator;2)当数据量到一定时,或者关闭table,或者手动提交时才开始提交。3)提前全会分布获取每个put记录的ServiceName,然后建立一个Map<ServiceName,List<ROW>>。分别并行将记录发往各个regionService4) regionService 获得信息之后,发给个region。数据put的只是放在内存memstore中,当达到阈值之后写入HFile。原创 2017-07-13 23:00:44 · 971 阅读 · 0 评论 -
hbase 源代码分析(6)get 过程 详解
GET过程,1)找到zk,拿到MATA里的RegionService地址。2)访问第一个RegionService,获得表的region的ServiceName。3)访问第二个RegionService,4) 查看menStore里有没有数据。5)否则去StoreFile 里找。这个存储在HDFS。所以需要加载HFile到内存中。原创 2017-07-13 00:40:48 · 1678 阅读 · 0 评论 -
roaringbitmap 源代码分析
roaringbitmap 是我写的第一个系列,因为刚好有个项目需要建立分布式位图。分布框架是深度使用hbase ,底层存储是用的roaringbitmap。所以就写了这几篇文章,主要是学习分享。后面开始了另外一个系列就是hbase。hbase采用代码走读方式分析了一下源代码。受益匪浅,有什么问题等可以直接留言。roaringbitmap 源码解析(1) bitmap add过程原创 2017-07-12 19:05:35 · 1883 阅读 · 0 评论 -
hbase 源代码分析(5)regionLocator 获取region过程 详解
client 首先去zk 里拿到MATA的ServiceName 发送第一次callable.call(),然后 在MATA RS里拿到table的region的ServiceName.然后发送第二次callable。call.获得region信息。原创 2017-07-12 21:15:56 · 3038 阅读 · 0 评论 -
roaringbitmap 源码(4)序列化和反序化以及分布式应用
迭代器和序列化和反序列化serialize:都很简单。 ArrayContainer@Overridepublic void serialize(DataOutput out) throws IOException { out.writeShort(Short.reverseBytes((short) this.cardinality)); // little endian for原创 2017-07-08 15:03:21 · 3308 阅读 · 0 评论 -
roaringbitmap 源代码解析(3)底层容器相互add过程
今天主要讲述roaringbitmap的add计算。先判断高位是否存在相同的,如果相同,再低位的容器相add。否则,直接跳过public static RoaringBitmap and(final RoaringBitmap x1, final RoaringBitmap x2) { final RoaringBitmap answer = new RoaringBitmap(); fin原创 2017-07-08 12:17:07 · 1401 阅读 · 0 评论 -
roaringbitmap 源码解析(2) 底层三种容器containner对比
首先对比一下,roaringbitMap里的三种container> /** * Simple bitset-like container. */bitmapcontainer 定义了1024个long型,每个long占用64位。这样可以表达1024×64 =short 长度 16位 比如:12, 将第0个long置为1L<<12位。一个long 最多表示63. 如果需要表示64就需要用[6原创 2017-07-07 23:26:44 · 1792 阅读 · 1 评论 -
roaringbitmap 源码解析 bitmap add过程
最近在做标签平台的分析引擎。底层涉及到位图的处理,所以涉及到roaringbitmap。roaringbitmap 主要使用add and or xor remove serialize deserialize 等操作。roaringbitmap 主要容器container,以及所有实现,所有操作其实就是这些容器之间的操作。1、 RoaringBitmap 将整数i原创 2017-07-06 21:17:27 · 4477 阅读 · 0 评论 -
hbase 源代码解析(4) 的createTable 的 region assign
上一章节就是留下上面这个流程。这里包括region的分配以及open。原创 2017-07-11 23:20:53 · 1258 阅读 · 0 评论 -
hbase 源代码解析(3) 的createTable 服务端解析第二部分
hbase 源代码 ,createTable过程原创 2017-07-11 00:07:32 · 1083 阅读 · 0 评论 -
hbase 源代码解析(2)HAdmin 的表创建过程
这个源代码将写一个系列。先走流程一样。过一遍,然后重点分析里面的功能。HConection 里的一个重要方法.getAdmin。获得HBaseAdmin。 *HBaseAdmin提供了建表、创建列簇、检查表是否存在、修改表结构和列簇结构、删除表等功能。*这章主要将HBaseAdmin的createTable客户端的代码。hbaseAdmin对象拿到connetion。保存conf,rpc等一些东原创 2017-07-10 22:41:07 · 1887 阅读 · 0 评论 -
hbase 原代码分析 (10) region 创建过程
1)region是由HMaster创建的。在创建表的时候。2)region创建首先是写HDFS文件。hdfs = root/data/namespace/qualifierName///这个方法里,首先创建目录,//然后新建一个临时文件./temp/.regioninfo//然后写入regionInfo 作为MATA的恢复资料//然后将.regionInfo移动到当前目录。3)会创建WAL4)region信息放在MATA里。5)region会分配给RegionService ,并给予他管理原创 2017-07-14 22:58:59 · 1146 阅读 · 1 评论