http://blog.selfup.cn/category/hbase
程序员的自我修养
Home ? 分类目录 ? Apache HBase

Hadoop集群搭建全过程

yurnom2014年11月05日
2条评论2,563次浏览

最近需要紧急搭建Hadoop集群,以前搭建都没留下文档和记录,导致这次忙的晕头转向。现在终于搞定了,决定将全部过程记录下来,方便下次使用。

软件环境

  • 操作系统:Centos 6.4
  • JDK:1.6.0_27
  • Hadoop:1.0.4
  • HBase:0.94.17
  • Zookeeper:3.4.5

前置步骤

范围:Hadoop集群所有机器

操作身份:root用户

创建Hadoop用户

adduser hadooppasswd hadoop
1
2
adduser hadoop
passwd hadoop


关闭SELINUX

vi /etc/sysconfig/selinux
1
vi /etc/sysconfig/selinux


修改:

SELINUX=disabled
1
SELINUX=disabled



HBase协处理器

yurnom2014年08月04日
0条评论2,746次浏览

简介

使用Scan的时候,可以配合各种Filter进行数据的筛选以减少返回的数据量,同样也可以通过选择特定的列族和列来减少返回的数据量。若是能将该特性进一步的优化则HBase会更强大,例如将客户端的代码分发到各个HRegionServer上执行,好比MapReduce一样的执行任务,执行完后返回的结果相信数据量会更小。HBase在0.92版本后引入了协处理器来实现该功能。

使用协处理器的好处是显而易见的,可以将运算放至Server端,减少通信开销的同时还能有效的提升性能。但同样的也会存在一些风险:由于协处理器目前还没有与主要的HBase进程隔离开来,若协处理器崩溃可能导致进程崩溃。

协处理器分类两类:Observer和Endpoint。可以分别对应成关系型数据库中的触发器和存储过程。

Observer

Observer类的协处理器在特定的事件发生时执行回调函数(也被称为钩子函数,hook),这些事件可以是用户产生的事件,也可以是服务器端产生的事件。

Observer分类以下三类:

  • RegionObserver:提供客户端的数据操纵事件钩子,与表的region紧密关联
  • MasterObserver:提供DDL类型的操作钩子,为集群级事件
  • WALObserver:提供WAL相关操作钩子


分类:Apache HBase
标签:HBase

HBase Filter – Decorating Filters

yurnom2014年07月22日
0条评论1,415次浏览

接着上一篇HBase Filter – Dedicated Filters继续进行HBase Filter的学习和了解。Decorating Filters,装饰性过滤器,其自身不产生任何作用,需要结合其它过滤器来产生效果。

数据准备和代码准备同HBase Filter – Comparision Filters

Decorating Filters(装饰性过滤器)

SkipFilter

SkipFilter,跳转过滤器,目前只能作用于ValueFilter。ValueFilter用于输出满足条件的行和对应的列(该行中也有1至N列满足),当加上SkipFilter后,若某行中有不满足ValueFilter的列存在,则整行都不会输出(即,只要某行中有一列不满足ValueFilter,则其它满足的列也不会输出)。

代码示例

@Testpublic void testValueFilter() throws IOException {Filter filter = new ValueFilter(CompareFilter.CompareOp.EQUAL,new SubstringComparator("100"));Filter f = new SkipFilter(filter);setFilterAndPrint(f);}
1
2
3
4
5
6
7
@Test
public void testValueFilter() throws IOException {
    Filter filter = new ValueFilter(CompareFilter.CompareOp.EQUAL,
        new SubstringComparator("100"));
    Filter f = new SkipFilter(filter);
    setFilterAndPrint(f);
}


输出结果为空,因为没有哪一行的所有列的值全部以100开头。


分类:Apache HBase
标签:HBase

HBase Filter - Dedicated Filters

yurnom2014年07月09日
0条评论1,421次浏览

接着上一篇HBase Filter – Comparision Filters继续进行HBase Filter的学习和了解。Dedicated Filters,专用过滤器,其实现的功能大部分可以通过对Comparision Filters进行一层包装来实现。

数据准备和代码准备同HBase Filter – Comparision Filters

Dedicated Filters(专用过滤器)

SingleColumnValueFilter

代码示例

@Test//获取cf1:col1的值没有100子串的数据public void testSingleColumnValueFilter() throws IOException {Filter filter = new SingleColumnValueFilter(Bytes.toBytes("cf1"),Bytes.toBytes("col1"),CompareFilter.CompareOp.NOT_EQUAL,new SubstringComparator("100"));setFilterAndPrint(filter);}
1
2
3
4
5
6
7
8
@Test
//获取cf1:col1的值没有100子串的数据
public void testSingleColumnValueFilter() throws IOException {
    Filter filter = new SingleColumnValueFilter(Bytes.toBytes("cf1"),
        Bytes.toBytes("col1"),CompareFilter.CompareOp.NOT_EQUAL,
        new SubstringComparator("100"));
    setFilterAndPrint(filter);
}



分类:Apache HBase
标签:HBase

HBase Filter - Comparision Filters

yurnom2014年07月07日
0条评论1,803次浏览

HBase的Get和Scan实例可以调用setFilter()来设置过滤器,HBase的过滤器种类繁多,以满足不同的过滤需求。Filter作用于各个RegionServer,通过使用过滤器可以高效的获取数据。HBaseFilter主要分为三大类,用户也可以通过继承FilterBase或实现Filter接口来自定义Filter。若需要多个Filter结合使用,可以通过FilterList来满足。

以下主要对各个Filter进行简单的了解。

数据准备

rowkeycf1:col1cf1:col2cf2:col1cf2:col2
10110086qwe11352288xxxxwer1
10210000sdf21820160xxxxert2
10310001cxv31531308xxxxmnb3
10412306jhg41387223xxxxkji4
10512580nju51580101xxxxnbv5


分类:Apache HBase
标签:HBase

HBase的一些基础概念

yurnom2014年06月30日
2条评论4,319次浏览

关于HBase MapReduce

正确进行参数传递

MapReduce中传递参数必须通过configuration.set..()一系列函数来设置。如果通过属性来传递参数,那么必然会报空指针的错误。如下为经典错误示例:

public class MRHandler {private static Integer a;private static int b;public static class MyMapper extends TableMapper {@Overrideprotected void map(ImmutableBytesWritable key, Result value, Context context)throws IOException, InterruptedException {System.out.println(a);System.out.println(b);...}}public static void main(String[] args) throws Exception {a = 10;b = 20;...}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MRHandler {
    private static Integer a;
    private static int b;
    public static class MyMapper extends TableMapper<Text, IntWritable> {
        @Override
        protected void map(ImmutableBytesWritable key, Result value, Context context)
            throws IOException, InterruptedException {
            System.out.println(a);
            System.out.println(b);
            ...
        }
    }
    public static void main(String[] args) throws Exception {
        a = 10;
        b = 20;
        ...
    }
}


运行的结果会是输出10和20吗?单机情况下确实如此,但是若在集群上跑,则会发现a为null,b=0。至于为什么,很简单:集群、分布式、JobTracker、TaskTracker

善用setup()和cleanup()

  • 对于需要传递的参数,最好在setup()中进行初始化,不要在map()中频繁的获取
  • setup()和cleanup()也可以进行输出,输出的内容同样会经过排序,并不会因为从setup()中输出而排在最前面,也不会因为从cleanup()输出而排在最后面


分类:Apache HBase
标签:HBase

HBase CRUD

yurnom2014年06月24日
0条评论1,200次浏览

连接HBase

private HTable table; @Before public void setUp() throws IOException { Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "192.168.0.100"); conf.set("hbase.zookeeper.property.clientPort", "2181"); conf.set("mapred.task.timeout", "0"); table = new HTable(conf, "pigstore"); }
1
2
3
4
5
6
7
8
9
10
    private HTable table;
    @Before
    public void setUp() throws IOException {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "192.168.0.100");
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("mapred.task.timeout", "0");
 
        table = new HTable(conf, "pigstore");
    }


Create

@Test public void testPut() throws IOException { //rowKey = 100 Put put = new Put(Bytes.toBytes("100")); //添加列cf:one, 值为10101 put.add(Bytes.toBytes("cf"),Bytes.toBytes("one"),Bytes.toBytes("10101")); //添加列cf:two,值为cdf put.add(Bytes.toBytes("cf"),Bytes.toBytes("two"),Bytes.toBytes("cdf")); table.put(put); }
1
2
3
4
5
6
7
8
9
10
    @Test
    public void testPut() throws IOException {
        //rowKey = 100
        Put put = new Put(Bytes.toBytes("100"));
        //添加列cf:one, 值为10101
        put.add(Bytes.toBytes("cf"),Bytes.toBytes("one"),Bytes.toBytes("10101"));
        //添加列cf:two,值为cdf
        put.add(Bytes.toBytes("cf"),Bytes.toBytes("two"),Bytes.toBytes("cdf"));
        table.put(put);
    }


进入HBase Shell,scan一下:

hbase(main):003:0> scan 'pigstore' 100 column=cf:one, timestamp=1402391810630, value=10101 100 column=cf:two, timestamp=1402391810630, value=cdf
1
2
3
hbase(main):003:0> scan 'pigstore'
        100                  column=cf:one, timestamp=1402391810630, value=10101
        100                  column=cf:two, timestamp=1402391810630, value=cdf


HBase写过程

  1. client向region server提交写请求
  2. region server找到目标region
  3. region检查数据是否与schema一致
  4. 如果客户端没有指定版本,则获取当前系统时间作为数据版本
  5. 将更新写入WAL log
  6. 将更新写入Memstore
  7. 判断Memstore的是否需要flush为Store文件


分类:Apache HBase
标签:HBase

HBase表结构设计

yurnom2014年06月23日
3条评论6,657次浏览

概念视图与物理视图

BigTable论文HBase官网上的示例

概念视图

Row KeyTime StampColumnFamily contentsColumnFamily anchor
"com.cnn.www"t1
anchor:cnnsi.com = "CNN"
"com.cnn.www"t2
anchor:my.look.ca = "CNN.com"
"com.cnn.www"t3contents:html = "..."
"com.cnn.www"t4contents:html = "..."
"com.cnn.www"t5contents:html = "..."

物理视图

ColumnFamily anchor

Row KeyTime StampColumn Family anchor
"com.cnn.www"t1anchor:cnnsi.com = "CNN"
"com.cnn.www"t2anchor:my.look.ca = "CNN.com"


分类:Apache HBase
标签:HBase
Hadoop集群搭建全过程-LMLPHP
  • 文章总数:79篇
  • 评论总数:318条
  • 分类总数:31个
  • 标签总数:44个
  • 运行时间:974天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • yurnom: 可能苹果最近又改变了返回值吧,最近没做测试了。 BadDeviceToken一般测试环境和正式环境弄错的情况 下会出现。
  • Anonymous: Hadoop集群搭建全过程-LMLPHP 博主,良心贴啊, 最近也在弄apns推送。 有个问题想请教你一下啊。 你博客中写的 Unregistered 错误,有准确的说明吗, 我看你博客中写的:...
  • 一波清泉: 回复邮箱: [email protected] 多谢
  • Anonymous: 17/02/09 01:15:02 WARN Utils: Service ‘SparkUI’ could not bind on port 4040. Attempting port...
  • pacificLee: Hadoop集群搭建全过程-LMLPHP
  • 小码: 为什么没有后面的呢,只有前10个
  • Anonymous: Hadoop集群搭建全过程-LMLPHP
  • Anonymous: Hadoop集群搭建全过程-LMLPHP 楼主是属于会聊天的。 我想问,sqoop发了几个版本了,应该没这些问题了吧。
  • Anonymous: Config.kafkaConfig.kafkaGroupI d 这个是指自己配置的group id 还是从 import org.apache.kafka.common.config .Config 这个类...
  • Anonymous: ZkUtils.getPartitionsForTopics (zkClient, Config.kafkaConfig.topic) 那个方法是在 spark-streaming_2.10 中 kafka...
  • Anonymous: ZkUtils.getPartitionsForTopics (zkClient, Config.kafkaConfig.topic) 你确定 kafka 里面有这个类 ? 个人在kafka 最新 稳定版...
  • Anonymous: Hadoop集群搭建全过程-LMLPHP
  • Anonymous: 很不错,试问有java版的吗?
  • Anonymous: 赞
  • Anonymous: 哈哈 看楼主的吐槽乐死了 where子句是可以写的 同样找不到资料 一点点试出来的 select id from xxxx where ${CONDITIONS} and 1=1 and 2=2 limit 4
  • EVIL: 我在运行完C4.5的代码后,显示 defined object DecisionTreeTest 是什么意思?这是有错误吗?运行结果在哪里看?
  • sf: 楼主的问题,我都遇到。。。没办法项目已经定型了,最后都硬着头 皮一个一个的改了源码
  • zz: 我去,楼主你真及时,我们今天上了新的HTTP2 push之后也发现速度曲线很奇怪,开始有200k/min,跟 另一台老的推送协议速度差不多,但是过了一会,立马降到只有几k /min,百思不得其解,我们还用了一个海外代理,在...
  • qi365: Hadoop集群搭建全过程-LMLPHP 很可恶,百度助纣为虐~
  • qi365: :? Hadoop集群搭建全过程-LMLPHP haha~ very good~
Hadoop集群搭建全过程-LMLPHP

ICP备案:京ICP备14031310号-1

Hadoop集群搭建全过程-LMLPHP

版权所有 © 2014-2015 程序员的自我修养 - SelfUp.cn
09-25 15:14