- 浏览: 47361 次
- 性别:
- 来自: 武汉
文章列表
1、列簇的设计
列簇尽量少,最好不超过3个。因为每个列簇是存在一个独立的HFile里的,flush和compaction操作都是针对一个Region进行的,当一个列簇的数据很多需要flush的时候,其它列簇即使数据很少也需要flush,这样就产生的大量不必要的io操作。
在多列簇的情况下,注意各列簇数据的数量级要一致。如果两个列簇的数量级相差太大,会使数量级少的列簇的数据扫描效率低下。
将经常查询和不经常查询的数据放到不同的列簇。
因为列簇和列的名字会存在HBase的每个Cell中,所以他们的名字应该尽可能的短。比如,用f:q代替mycolumnfamily:mycolumnqualifie ...
最近在开发mapreduce程序,输入有hdfs、hbase形式,输出有hdfs、mysql等形式。碰到了如何添加第三方依赖jar的问题,在网上查了很多资料,记录下来,免得再走弯路。
下面所有方法基于hadoop-1.0.1版本实现,其它版本可能略有不同。
总结了一下,总共有五种方法:
1、制作一个超级jar包,包含你的classes和所有依赖的第三方classes
2、和方法1差不多,只不过不是把依赖的第三方classes直接放入jar中,而是把第三方依赖的jar放在待提交jar包的lib目录下。
3、将jar包放在hadoop集群的各自node上,修改hadoop-env.sh中HADO ...
你真的了解java.lang.String吗?
一直觉得自己的Java基础技术还算可以,自从看了一些大牛的博客后,发现自己对Java的理解还只是皮毛。之前看过JVM的一些知识以及java.lang.String的源码,以为自己对它很了解,但真的是这样吗?在这 ...
近期一直在研究基于hadoop-2.2和hbase-0.96的安装配置,并结合官方文档简单的编写了一些mapreduce的例子。为了更深入了解hadoop-2.2的实现,决定研究一下如何对hadoop进行远程调试。下面介绍利用eclipse远程调试工具进行hadoop的调试:
在Shell脚本中运行命令:export YARN_CLIENT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8788"
运行mapreduce job:yarn jar hbase-demo-0.0.1 ...
HBase安装笔记
经过几天的研究,终于把最新版的hbase和hadoop安装起来了,中间遇到了各种各样的问题啊,记录下来以免其它人走弯路。有时间的时候,再把遇到的各种问题总结一下。
1. 从官网下载Hbase(0.96.0)和Hadoop(2.2.0), 因为服务器是64bit的,所以只能下载hadoop2.2.0的源码,自己编译。
1.1 如果要编译本地库,需要安装一下软件:
yum -y install lzo-devel zlib-devel gcc autoconf automake libtool cmake openssl-devel
1.2 安装M ...
我们先来看看PowerMock的依赖:
可以看出来,它有两个重要的依赖:javassist和objenesis。
javassist是一个修改java字节码的工具包,objenesis是一个绕过构造方法来实例化一个对象的工具包。由此看来,PowerMock的本质是通过修改字节码来实现对静态和final等方法的mock的。
@RunWith(PowerMockRunner.class)
public class TestClassUnderTest {
@Test
public void testCallArgumentInstance() {
...
单元测试是对应用中的某一个模块的功能进行验证。在单元测试中,我们常遇到的问题是依赖的模块尚未开发完成或者被测试模块需要和一些不容易构造、比较复杂的对象进行交互。另外,由于不能肯定其它模块的正确性,我们也无法确定测试中发现的问题是由哪个模块引起的。所谓的mock,就是指,如果我们写的代码依赖于某些对象,而这些对象又很难手动创建,那么就使用一个虚拟的对象来完成单元测试。在java界现在比较流行的mock工具有:
jMock: http://jmock.org/
EasyMock: http://easymock.org/
Mockito: http://code.google.com/p/mocki ...
大家一看到这两个类就能想到HashMap不是线程安全的,ConcurrentHashMap是线程安全的。除了这些,还知道什么呢?
先看一下简单的类图:
从类图中可以看出来在存储结构中ConcurrentHashMap比HashMap多出了一个类Segment,而Segment是一个可重入锁。
ConcurrentHashMap是使用了锁分段技术技术来保证线程安全的。
锁分段技术:首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。
属性说明:
我们会发现HashMap和Segment里的属性值基本是一样的,因为S ...
如何写出高质量的代码,这应该是每个程序员都在追求的,也是作为一个程序员的成就所在。什么样的代码才算得上是高质量的代码呢?答案很简单:高可读性、高稳定性、高扩展性。如果能写出这样的代码,那你就是一个优秀的程序员了。如何才能写出高质量的代码呢?接下来我将分享一些自己总结的经验。
首先我把写代码分为两个阶段:初级阶段和高级阶段。初级阶段:有良好的编码风格、没有魔鬼数字、不存在大量重复代码等,代码易读结构良好,但是代码整体不是很优雅,缺乏完整的面向对象思想。高级阶段:代码符合java的基本设计原则,充满面向对象的思想,具有高扩展性。很多程序员都处在初级阶段或者略高,JDK、JUnit、S ...
今天从Github上下载了Felix的源码,对Felix的启动部分进行了一个大概的阅读,记下部分阅读笔记,以待日后继续...
阅读主要工程:
org.apach.felix.main
org.apach.felix.framework
1. org.apache.felix.main.Main主流程:
a. 加载系统属性
b. 设定JVM的ShutdownHook相关线程,在JVM停止的时候调用Framework的stop方法
c. 获取FrameworkFactory的一个实例,然后通过它创建一个FrameWork的实例Felix.
d. 调用Framework的init方法,初始化 ...