[hadoop实战3]Hbase安装

一. 名词解释

Hbase:Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

Hive:是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。

Pig:Apache Pig是用来处理大规模数据的高级查询语言,配合Hadoop使用,可以在处理海量数据时达到事半功倍的效果,比使用Java,C++等语言编写大规模数据处理程序的难度要小N倍,实现同样的效果的代码量也小N倍。

以上几点是官方的解释,我想Hbase一定很好理解,就是一个分布式的数据库,而Hive是一种数据仓库基础构架,是说的很玄乎,其实Hive就是一个SQL解析引擎,因为Hbase本身并不提供sql解析功能,它的出现可以将普通的SQL解析成可以在hadoop分布式平台上运行的引擎。换做通俗的话就是,在Hbase中并不能直接输入我们熟悉的SQL语句,需要这个东西来翻译一下。但是Hive和Hbase整合是非常没用的,因为Hive是数据仓库,只提供查询和批量导入等功能,不能支持insert一条语句或者update一条语句。而Pig Latin是一种高级脚本,从名字就可以看粗来哪类的人在使用,个人觉得它的出现并没有多节省分布式程序开发效率,反而增加了学习的成本,在此不表。

二. Hbase的安装

假设我们已经完成前两部分的工作了,那现在就开始吧!!下载hbase-0.94.10.tar,在master主机上用UltralIso传入ubuntu,同样放在hadoop的home中,解压,重命名,修改权限:

sudo tar -zxvf hbase-0.94.10.tar

sudo chown -R hadoop:hadoop hbase

1.编辑hbase-env.sh:

export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"

export JAVA_HOME=/opt/jre1.7.0_25

export HBASE_MANAGES_ZK=true

export HBASE_HOME=/home/hadoop/hbase/hbase

export HADOOP_HOME=/home/hadoop/hadoop/hadoop

export HBASE_HEAPSIZE=3000
配置java目录,hadoop目录和hbase目录,HBASE_MANAGES_ZK指的是否需要zookeeper的支持,hadoop整个项目的取名都非常形象,像zookeeper字面意思是动物园管理员,它负责管理各个子节点的:配置维护、名字服务、分布式同步、组服务等。其实就是封装原语来达到容错、防死锁,同步等目的,这个地方写作true的意思是使用zookeeper来帮我们管理数据库一些事务。hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它,把HBASE_HEAPSIZE改为3000m。

2.编辑hbase-site.xml,

<configuration>

<property> 

<name>hbase.rootdir</name> 

<value>hdfs://master:9000/home/hadoop/hadoop/temp</value> 

</property> 

<property> 

<name>hbase.cluster.distributed</name> 

<value>true</value> 

</property> 

<property> 

<name>hbase.master</name> 

<value>hdfs://master:60000</value> 

</property> 

<property> 

<name>hbase.zookeeper.quorum</name> 

<value>slaver1,slaver2,slaver3</value>

</property> 

<property> 

<name>hbase.zookeeper.property.dataDir</name> 

<value>/data/work/zookeeper</value> 

</property>

</configuration>
其中:

hbase.rootdir设置hbase在hdfs上的目录,主机名为hdfs的namenode节点所在的主机

hbase.cluster.distributed设置为true,表明是完全分布式的hbase集群

hbase.master设置hbase的master主机名和端口

hbase.zookeeper.quorum设置zookeeper的主机

3.修改conf/regionservers

将所有的datanode添加到这个文件,类似与hadoop中slaves文件

3. 修改所有hadoop的目录下的conf/hdfs-site.xml,添加

<property> 

<name>dfs.datanode.max.xcievers</name> 

<value>4096</value> 

</property>
4.向所有slaver中复制hbase文件夹:
scp -r hbase hadoop@slaver1:/home/hadoop/hbase

如果出现:permission deny,

需要:

scp -r hbase root@slaver1:/home/hadoop/hbase

然后在每一台slaver上,sudo chown -R hadoop:hadoop hbase

三. Hbase验证

打开hbase

./start-hbase.sh

没有报java错误就可以,然后打开hadoop访问:

http://192.168.101.137:60010/master-status

勿需多试,这么简单的做完之后,我们就马上开始Hive!!

当然,如果你不放心,可以稍微的看一下hbase的基本结构,一句话描述就是列族内有键值对,键便是列,列可以插,列族也可以插。结构就是按行分多个hregion,hregion是一个以上列族组成,可以分布在不同的slaver上。然后再稍微看一下hbase的语法(盗链3个):

http://jiajun.iteye.com/blog/899632

http://blog.csdn.net/freelongren/article/details/7842495

http://blog.csdn.net/scutshuxue/article/details/6988348

四. Hive的仙境之旅

我表示Hive这个东西我确实花了很久,因为中间有点事情磨蹭,没来得及做。

sudo tar -zxvf hbase-0.94.10.tar

sudo chown -R hadoop:hadoop hive

修改

hive-env.sh.template为hive-env.sh

添加:

export HADOOP_HOME=/home/hadoop/hadoop/hadoop

然后居然就结束了!!!!!

放心吧,对于一般的开发项目,Hive是绝对不能应付得来的!

六. 安装zookeeper

我用的zookeeper版本是:zookeeper-3.4.5.tar.gz

sudo tar -zxvf zookeeper-3.4.5.tar.gz

sudo chown -R hadoop:hadoop zookeeper
在conf下复制zoo_sample.cfg为zoo.cfg。修改:

dataDir=/home/hadoop/zookeeper/temp

clientPort=3181

server.1=master:2888:3888

server.2=slaver1:2888:3888

server.3=slaver2:2888:3888

server.4=slaver3:2888:3888 

然后拷贝到每一台机器中:

scp -r zookeeper hadoop@slaver1:/home/hadoop/zookeeper

如果出现:permission deny

需要:

scp -r zookeeper root@slaver1:/home/hadoop/zookeeper

然后在每一台slaver上,

sudo chown -R hadoop:hadoop zookeeper

接下来在dataDir=/home/hadoop/zookeeper/temp 文件夹下新建myid文件。每一个填写要对应其server.x的数字,比如master主机是server.1,myid就要填写1 。

进入每一个bin目录分别 ./zkServer.sh start,zookeeper从这个版本开始之后就单点启动不报错了。会出现如下:

JMX enabled by default

Using config: /home/hadoop/zookeeper/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

当启动完所有节点的zookeeper,在任意机器上敲:./zkServer.sh status ,会出现如下:

JMX enabled by default

Using config: /home/hadoop/zookeeper/zookeeper/bin/../conf/zoo.cfg

Mode: follower

证明已经投完票确定各自角色了。

七. Java 直连接Hbase

用的是在win7/8环境下,使用ubuntu,Hbase内置zookeeper直连java。非常简单,首先修改本机windows的host文件,添加:

192.168.101.137 master

192.168.101.138 slaver1

192.168.101.139 slaver2

192.168.101.140 slaver3

然后使用修改所有节点的hbase hbase-site.xml文件

<configuration>

<property> 

<name>hbase.rootdir</name> 

<value>hdfs://192.168.101.137:9000/home/hadoop/hadoop/temp</value> 

</property> 

<property> 

<name>hbase.cluster.distributed</name> 

<value>true</value> 

</property> 

<property> 

<name>hbase.master</name> 

<value>hdfs://192.168.101.137:60000</value> 

</property> 

<property> 

<name>hbase.zookeeper.quorum</name> 

<value>192.168.101.138,192.168.101.139,192.168.101.140,192.168.101.137</value>

</property> 

<property> 

<name>hbase.zookeeper.property.dataDir</name> 

<value>hdfs://192.168.101.137:9000/home/hadoop/zookeeper/temp</value> 

</property>

<property>

<name>hbase.zookeeper.sission.timeout</name>

<value>60000</value>

</property>

<property>

<name>hbase.zookeeper.property.clientPort</name>

<value>2181</value>

</property>

<property>

<name>hbase.regionserver.lease.period</name>

<value>60000</value>

</property>

<property>

<name>hbase.rpc.timeout</name>

<value>60000</value>

</property>

</configuration>
新建JAVA项目,添加的包有:

有关Hadoop的hadoop-core-0.20.204.0.jar

有关Hbase的hbase-0.90.4.jar、hbase-0.90.4-tests.jar以及Hbase资源包中lib目录下的所有jar包

Configuration configuration = HBaseConfiguration.create();

configuration.set("hbase.zookeeper.property.clientPort", "2181");

configuration.set("hbase.rootdir","hdfs://192.168.101.137:9000/home/hadoop/hadoop/temp");

configuration.set("hbase.zookeeper.property.dataDir","hdfs://192.168.101.137:9000/home/hadoop/zookeeper/temp");

configuration.set("hbase.zookeeper.quorum","192.168.101.138,192.168.101.139,192.168.101.140");

configuration.set("hbase.master", "192.168.101.137:60000");

System.out.println("start create table ......");

HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration);

if (hBaseAdmin.tableExists("firstTable")) {

hBaseAdmin.disableTable("firstTable");

hBaseAdmin.deleteTable("firstTable");

System.out.println("firstTable" + " is exist,detele....");

}

HTableDescriptor tableDescriptor = new HTableDescriptor("firstTable");

tableDescriptor.addFamily(new HColumnDescriptor("column1"));

tableDescriptor.addFamily(new HColumnDescriptor("column2"));

tableDescriptor.addFamily(new HColumnDescriptor("column3"));

hBaseAdmin.createTable(tableDescriptor);

System.out.println("end create table ......");

hBaseAdmin.close();
成功之后查看是否已经建成表。
posted @ 2014-02-09 15:37  老刁  阅读(552)  评论(0编辑  收藏  举报