一. 名词解释
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.tarsudo 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_25export HBASE_MANAGES_ZK=trueexport HBASE_HOME=/home/hadoop/hbase/hbaseexport HADOOP_HOME=/home/hadoop/hadoop/hadoopexport HBASE_HEAPSIZE=3000
2.编辑hbase-site.xml,
hbase.rootdir hdfs://master:9000/home/hadoop/hadoop/temp hbase.cluster.distributed true hbase.master hdfs://master:60000 hbase.zookeeper.quorum slaver1,slaver2,slaver3 hbase.zookeeper.property.dataDir /data/work/zookeeper
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,添加
dfs.datanode.max.xcievers 4096
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个):
四. 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.gzsudo chown -R hadoop:hadoop zookeeper
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文件
hbase.rootdir hdfs://192.168.101.137:9000/home/hadoop/hadoop/temp hbase.cluster.distributed true hbase.master hdfs://192.168.101.137:60000 hbase.zookeeper.quorum 192.168.101.138,192.168.101.139,192.168.101.140,192.168.101.137 hbase.zookeeper.property.dataDir hdfs://192.168.101.137:9000/home/hadoop/zookeeper/temp hbase.zookeeper.sission.timeout 60000 hbase.zookeeper.property.clientPort 2181 hbase.regionserver.lease.period 60000 hbase.rpc.timeout 60000
有关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();