以下安装一定要注意版本问题:安装顺序hadoop,zookeeper,hbase
Hadoop版本:0.20.2
hbase版本:0.20.6tar.gz,在hadoop1上部署master和slave,在其余的节点上部署slave,这样就形成了一个hbase集群。
zookeeper版本:3.4.5.tar.gz,在hadoop2、hadoop3、hadoop4上部署zookeeper。
主机名 IP地址 用途
hadoop1 222.126.190.47 master、regionserver
hadoop2 222.126.190.46 regionserver、zookeeper
hadoop3 192.168.3.67 regionserver、zookeeper
hadoop4 192.168.3.64 regionserver、zookeeper
将目录解压到/usr下面
tar -zxvf /home/hbase-0.20.6.tar.gz -C /usr
接下来在hbase/conf/hbase-env.sh文件添加以下配置:
下面第四行注意这个值为false时,表示启动的是独立的zookeeper。而配置成true则是hbase自带的zookeeper。
export JAVA_HOME=/usr/java/jdk1.7.0_09
export HBASE_HOME=/usr/hbase-0.20.6
export PATH=$PATH:/usr/hbase-0.20.6/bin
export HBASE_MANAGES_ZK=false
export HADOOP_HOME=/usr/hadoop2
修改hbase-site.xml文件
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
<description>The directory shared by region servers.</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value> //zookeeper集群的端口号 在配置文件zoo.cfg中
</property>
<property>
<name>hbase.master</name>
<value>192.168.8.12:60000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.8.14,192.168.8.16,192.168.8.18</value> //zookeeper集群所涉及到的IP
</property>
hbase.cluster.distributed设置为true,表明是完全分布式的hbase集群
修改regionservers文件,添加以下内容:
hadoop1
hadoop2
hadoop3
hadoop4
修改hbase-default.xml文件(这个不改也行)
注意只修改hbase.rootdir这项,文件位置:/root/hbase/src/main/resources目录下
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop1:9000/hbase</value>
</property>
最后再复制到每个节点上面:
scp -r ./hbase-0.20.6 root@192.168.3.65/usr/
最后启动hbase,在主节点有以下Hmater,Hregionserver就算成功
Zookeeper安装
复制zoo_sample.cfg,并且重命名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
接下来再zoo.cfg中添加以下配置:
server.1=hadoop2:2888:3888
server.2=hadoop3:2888:3888
server.3=hadoop4:2888:3888
dataDir=/usr/zookeeper-3.4.5/zookeeperdir 新建zookeeperdir,里面存放的是logs日志,如果没有此文件夹将报错,并且在该zookeeperdir 文件夹下面新建myid文件,编辑myid文件,并在对应的IP的机器上输入对应的编号。如在hadoop2上,myid的内容就是1,在hadoop3上,myid的内容就是2,每台机器上面要一个一个改
zookeeper目录同步到hadoop3、hadoop4机器上
zookeeper/bin/zkServer.sh start
zookeeper/bin/zkServer.sh status
(4)启动客户端测试
启动命令:
bin/zkCli.sh -server 127.0.0.1:2181
显示根目录下、文件:
ls /
创建文件,并设置初始内容:
create /shenjian hello
获取文件内容:
get /shenjian
修改文件内容:
set /shenjian world
删除文件:
delete /shenjian
退出客户端:
quit
整个过程的屏幕截图如下:
启动顺序
1.hadoop
2.zookeeper
3.hbase
4.第二个HMaster
停止顺序
1.第二个HMaster, kill-9删除
2.hbase
3.zookeeper
4.hadoop
注意 一定要按顺序停止,
如果先停zookeeper再停hbase的话,基本停不下来(自己测试结果
Hive安装
tar -zxvf /home/hive-0.8.1.tar.gz -C /usr 先将安装包解压到/usr下面
如果没有hive-site.xml等配置文件,将hive-default.xml.template 复制重命名为hive-site.xml 以及hive-default.xml
修改hive-site.xml
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property> 加载mysql驱动,将derby数据库切换成mysql,
</property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.8.12:3306/hivecym?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property> createDatabaseIfNotExist=true代表自动在mysql数据库中创建hivecym数据库
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
以上这两段配置对应的用户名和密码是mysql中登录的
将hive-envt.sh.template 复制并重命名为hive-env.sh
修改hive-env.sh,添加如下几行
HADOOP_HOME=/data/hadoop-0.20.2
export HIVE_CONF_DIR=/usr/hive-0.8.1/conf
export HIVE_AUX_JARS_PATH=/usr/hive-0.8.1/lib
Hive支持两种数据添加方式:
- 导入hdfs上面数据文件到hive表中
LOAD DATA INPATH "/test/aa.txt" INTO TABLE test;
- 查询另一个表中的数据添加到本表中
INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;
注意:
1.在java中通过jdbc访问hive,需先把以下jar包添加到项目中,并且添加到各个节点hadoop/lib下面,包括master节点
- 运行前需要启动hive的Thrift Server
hive --service hiveserver
否则报错Could not establish connection to localhost:10000/default: java.net.ConnectException: Connection refused
3.建表时设置的分隔符就是你导入数据时文件的格式
例如:
创建表
create table pokes (no string,name string) row format delimited fields terminated by ',' stored as textfile ;
这里声明的是以’,’为分隔符,假如hdfs上有/test/aa.txt
此时aa.txt的内容应该为
123243,小文
345555,小五
Hbase与hive整合
1.在hive-site.xml中加入以下配置
<property>
<name>hive.aux.jars.path</name>
<value>file:///usr/hive-0.8.1/lib/hive-hbase-handler-0.8.1.jar,file:///usr/hive-0.8.1/lib/hbase-0.20.6.jar,file:///usr/hive-0.8.1/lib/zookeeper-3.4.5.jar
</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.8.14,192.168.8.16,192.168.8.18,192.168.8.20,192.168.8.22,192.168.8.24,192.168.8.26,192.168.8.28,192.168.8.30</value>
<description></description>
</property>
<property>
<name>hbase.master</name>
<value>192.168.8.12:60000</value>
</property>
- 把hive-hbase-handler-0.8.1.jar加入到各个节点的hadoop/lib下面,包括master
注意:
我的hbase使用的是hbase-0.20.6,所以对应的hive本应该是hive.0.6.x版本的,但因网上更新的很快,现在已经找不到对应的6.x的版本。直接用hive-hbase-handler-0.8.1.jar的话,在hive中创建hbase识别的表的时候会报错,应该是版本不兼容。我自己重新编译了hive-hbase-handler-0.8.1.jar,之后用就没问题了
以下是重新编译hive-hbase-handler-0.8.1.jar的方法
创建项目
1.首先在eclipse中创建一个java project,名字随便取,点击完成;
2.选中src右击import,依次按照下面图的操作,最后点击完成
点击完成后你会发现很多地方报错,编译没通过,因为没有导入相关的jar包;
接下来在项目中导入以下jar包
此时应该没有编译错误了,如果还有,直接把代码注释掉。
接下来把项目导出来便是,如下图
至此,hive-hbase-handler重新编译工作已完成,最后把此包拷贝到各个节点的hadoop/lib中去就可以了。
在hive中如果创建的是hbase识别的表,添加的时候不支持导入txt的方式,只能是查询别的表从别的表添加进去。
create table pokes (id int,name string) row format delimited fields terminated by ',' stored as textfile ;