- 浏览: 297752 次
- 性别:
- 来自: 合肥
最新评论
-
honey_fansy:
JAVA类加载器分析-比较热部署和"Hot Code Replace" -
xialia8:
有个疑问,WebAppContextClassLoader的p ...
细说Tomcat如何打破双亲委派(有源码和图) -
wwenyunkui:
下载后,进行安装就可以了。https://repos.fedo ...
一键安装Maven/Ant (使用Yum) -
regale:
java用的double,scala用的String,要精确, ...
Scala浮点运算精度问题 -
nomandia:
不错了,之前的方法太麻烦了
一键安装Maven/Ant (使用Yum)
文章列表
Drill用来查询Hbase,不需要预先定义Schema,十分方便.当时如果Hbase表过大会出现OOM(OUT OF MEMORY). 查询文档后,发现通过如下2个配置可以解决. 高亮的是系统的默认值.
SELECT * FROM sys.options WHERE type in ('SYSTEM','SESSION') and name in( 'planner.memory.max_query_memory_per_node', 'planner.width.max_per_node' ) order by name;
SET `planner.memory. ...
在Spark开发的时候,直接使用java.math.BigDecimal进行浮点相乘的时候,依然有精度缺失.但是如果是纯JAVA就没有,在Scala中调用JAVA的BigDecimal就有这样的问题.
偶然之间发现Scala也实现了scala.math.BigDecimal. 换用SCALA自身的BigDecimal就没这样的问题了.
不知道深层次的原因,在这抛砖引玉,如果有人知道的,请赐教.
下面是实验代码.
package com.cisco.test
import java.math.BigDecimal
object TestSyntax ...
必须使用高亮参数启动Spark-shell,否则当你遍历RDD时会出现如下的Exception
java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable
spark-shell --conf spark.serializer=org.apache.spark.serializer.KryoSerializer
以下代码,经过MaprDB实测通过
import org.apache.spark._
import org.apache.spark.rdd.NewHa ...
使用Drill查询如果字段名有"点"或者其他特殊字符怎么办, 百度, GOOGLE查询良久也没找到,在官方文档里面偶然之间查到了,也就是Drill的逃逸符[`].
下面是文档连接:https://drill.apache.org/docs/lexical-structure/
下面是示例.
select CONVERT_FROM(t.b.BUYER_ID, 'UTF8') AS BUYER_ID , CONVERT_FROM(t.b.`computed.UNIT_PRICE`, 'UTF8') AS UNIT_PRICE , CONVERT_FROM(t.b.`it ...
最近偶然的因素,突然觉得这个格式很神奇,找了很多文章细读了一遍,特整理如下.
第一篇文章里面讲的很通俗,易懂.但是对于之前没有背景的,细节地方不好理解,因为里面的实例比较简单和真实案例差别比较大.
深入分析Parquet列式存储格式
http://www.infoq.com/cn/articles/in-depth-analysis-of-parquet-column-storage-format
第二篇文章里面的示例比较丰富,交叉比较来学习效果比较好.但是怎么持久化就没有说明.
Dremel made simple with Parquet
https://b ...
查看ThreadPoolExecutor的源代码时,发现了2个意思十分接近的变量(maximumPoolSize, largestPoolSize) .十分好奇,google,百度也无法得到答案.只好查看源码,现将结果分享出来.
maximumPoolSize:是一个静态变量,在变量初始化的时候,有构造函数指定.
largestPoolSize: 是一个动态变量,是记录Poll曾经达到的最高值,也就是 largestPoolSize<= maximumPoolSize.
分析过程:
maximumPoolSize
从构造函数就可以看到,这个值在构造函 ...
但一个CF被Flush时,其他相关的CF也会被同时Flush. 如果CF分配不均衡会导致很多小的HFile.
Hbase的一条记录,只会由一个Region维护,即使有多个Column Family也不会跨越多个Region.
Hbase的Memstore flush到 Hfile的触发条件有如下几种
WAL大小达到阀值
内存使用达到阀值,但是阀值有2种:
一个是Region所在MemStore Size的和,而不是单个MemStore,这个达到后会阻塞数据的写入
另外一个是单个MemStore的大小
...
brew tap homebrew/versions
brew install protobuf250
brew link --force --overwrite protobuf250
protoc --version
下面内容主要摘抄于<<Hadoop实战>>,红色高亮部分是本人添加的白话注释.
Zookeeper 是一种高性能、可扩展的服务。 Zookeeper 的读写速度非常快,并且读的速度要比写的速度更快。另外,在进行读操作的时候, ZooKeeper 依然能够为旧的数据提供服务。这些都是由于 ZooKeepe 所提供的一致性保证,它具有如下特点:
【Zookeeper提供的一致性是弱一致性,首先数据的复制有如下规则:zookeeper确保对znode树的每一个修改都会被复制到集合体中超过半数的机器上。那么就有可能有节点的数据不是最新的而被客户端访问到。并且 ...
在上一篇文章里面分析WebappClassLoader.loadClass,了解了Tomcat是如何打破双亲委派的. 有兴趣的可以参考. 细说Tomcat如何打破双亲委派(有源码和图)
但是上面的分析偏重于流程,没有分析ClassLoader是如何加按照顺序寻址,然后加载对应的Class到二进制流中.
WebappClassLoader.loadClass在违背双亲委派规则,自己寻址class文件时,就会调用下面的函数,函数已经添加了注释. 此函数依旧没有分析是如何寻址文件的,寻址文件的代码在findResourceInternal()中,它同时包括了对Jar,class, ...
ThreadPoolExecutor添加线程是通过 execute(Runnable command),此方法代码行数不多,但是由于太精炼了,不大好读懂,理解完之后,特写下笔记加深印象.
一句话解释:
如果BlockingQueue没有大小限制,如果在执行的线程个数小于corePoolSize,则自动执行,否则当前线程存入BlockingQueue.
备注:如果BlockingQueue有限制,超出的线程要么拒绝,要么抢跑直接执行(需要当前线程个数没有超过maximumPoolSize).
下面是具体的代码,已经添加注释,如果有问题欢迎大家指出.
//Thr ...
Hadoop所有的跨节点的通信都是通过RPC来通信的, RPC通信是需要创建Stub,一个好的RPC需要通过良好的设计确保了对上层调用的透明性. 我们下面就通过Hadoop里面最常用的心跳(JobTrack和TaskTracker)来研究一下Hadoop的RPC机制.
心跳函数的调用在方法:TaskTracker.transmitHeartBeat();在此方法中会调用下面的代码段.这个方法实际就不一个本地调用,jobClient实际上就是一个动态代理生成的对象,这个对象已经包括了RPC的Stub.
//
// Xmit the heartbeat
//
...
在之前的Blog [http://flyfoxs.iteye.com/blog/2110463] 中讨论了, hadoop在文件切割时,可能会把一个行数据切割成无意义的2块. 如果不做特别处理,这会造成数据的失真及处理错误. 经人指点,发现这个BUG不存在.
Hadoop在分割文件后,后期读取中会通过一些规则来保证不会出现把一行数据分割成2行. 下面对这个后期处理机制(LineRecordReader)做一个分析:
1)数据分割是由JobClient完成,不是在hadoop集群完成.(并且这个是一个粗分,具体精确的还是依赖Mapper依赖如下规则)
2)数据的分割是由Jo ...
下面是hadoop发布版本, bin目录下面的hadoop命令的源码,hadoop命令支持好多种参数,一直记不住,想通过精度这部分代码,能记住部分参数.
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding cop ...
1. 对象的状态在构造函数之后都不能被修改,任何修改应该通过创建一个新对象来实现.
2. 所有的对象属性应该都设置为final
3. 对象创建要正确,例如:对象的应用不能在构造函数中被泄露出去
4. 对象要设置为final,确保不要继承的Class修改了immutability特性
上面这些规则不是100%的不能打破,比如String对象hash属性就不是一个final对象,但是Sting依旧是一个immutability 的对象.因为它有其它机制来保证,只要Sting的内容不变,hash值就不会变.
参考:http://javarevisited.blogspot.c ...