赞
踩
在学习“大数据技术”这门课时,涉及到hbase的全分布式安装,虽然林子雨老师的教程:
HBase2.2.2安装和编程实践指南_厦大数据库实验室博客 (xmu.edu.cn)
很详细,但只有单机和伪分布的,所以笔者在此记录一下全分布式的安装教程,希望对读者有帮助!
通过查找网上资料得知,hadoop2.10.1版本与2.4.1版本的hbase兼容。
cd ~
sudo tar -zxf ~/下载/hbase-2.4.1-bin.tar.gz -C /usr/local
cd /usr/local
sudo mv ./hbase-2.4.1 ./hbase
把hbase目录权限赋予给hadoop用户
cd /usr/local
sudo chown -R hadoop ./hbase
vim ~/.bashrc
在安装hadoop时已经引入过PATH请在export PATH这行追加/usr/local/hbase/bin,这里的“:”是分隔符。
执行source命令使上述配置在当前终端立即生效;
source ~/.bashrc
cd /usr/local
sudo chown -R hadoop ./hbase #将hbase下的所有文件的所有者改为hadoop,hadoop是当前用户的用户名。
/usr/local/hbase/bin/hbase version
- jdk
- Hadoop( 单机模式不需要,伪分布式模式和分布式模式需要)
- SSH
三者均已完成安装
开启hadoop命令:
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
1. 配置/usr/local/hbase/conf/hbase-env.sh ,需分别找到
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_382
export HBASE_MANAGES_ZK=true
使用如下命令打开:
vim /usr/local/hbase/conf/hbase-env.sh
source hbase-env.sh#使配置生效
2. 配置/usr/local/hbase/conf/hbase-site.xml
vim /usr/local/hbase/conf/hbase-site.xml
更改如下:
参数解释如下:
hbase.rootdir: 指定HBase的存储目录
hbase.cluster.distributed: true代表设置集群处于分布式模式
hbase.zookeeper.quorum:指定使用zookeeper的主机地址,必须是奇数个
hbase.zookeeper.property.dataDir:zookeeper的属性数据存储目录
3.配置regionservers文件:写入各节点名称
sudo vim regionservers
4.拷贝Hadoop的两个配置文件core-site.xml和hdfs-site.xml到HBase的配置文件目录(HBase对HDFS有依赖关系)
cp /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hbase/conf
cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hbase/conf
5.将配置过的整个hbase文件使用scp命令传输到各个salve节点上
cd /usr/local/hbase/conf
scp hbase-env.sh hbase-site.xml core-site.xml hdfs-site.xml regionservers hadoop@slave01:/usr/local/hbase/conf/
scp hbase-env.sh hbase-site.xml core-site.xml hdfs-site.xml regionservers hadoop@slave02:/usr/local/hbase/conf/
使配置生效,可以在从节点的对应位置上看到传输成功的文件
source hbase-env.sh
6. 测试运行(需开启hadoop)
切换目录至/usr/local/hbase;再启动HBase
cd /usr/local/hbase
bin/start-hbase.sh
主节点如图:
从节点slave01:
从节点slave02:
至此配置全部结束!
进入shell页面:
bin/hbase shell
HBase中用create命令创建表,具体如下:
create 'student','Sname','Ssex','Sage','Sdept','course'
此时,即创建了一个“student”表,属性有:Sname,Ssex,Sage,Sdept,course。因为HBase的表中会有一个系统默认的属性作为行键,无需自行创建,默认为put命令操作中表名后第一个数据。创建完“student”表后,可通过describe命令查看“student”表的基本信息。
本小节主要介绍HBase的增、删、改、查操作。在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时,只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。
put 'student','95001','Sname','LiYing'
表示为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001。
put 'student','95001','course:math','80'
表示为95001行下的course列族的math列添加了一个数据。
put 'student','95001','Ssex','Male'
表示为95001行下的Ssex列添加了一个数据。
在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是:1. delete用于删除一个数据,是put的反向操作;2. deleteall操作用于删除一行数据。
1. delete命令
delete 'student','95001','Ssex'
即删除了student表中95001行下的Ssex列的所有数据。
2. deleteall命令
deleteall 'student','95001'
即删除了student表中的95001行的全部数据。
1. get命令,用于查看表的某一行数据;
2. scan命令,用于查看某个表的全部数据。
均在删除数据模块使用过。
删除表有两步,第一步先让该表不可用,第二步删除表。
disable 'student'
drop 'student'
1、在创建表的时候,指定保存的版本数(假设指定为5)
create 'teacher',{NAME=>'username',VERSIONS=>5}
2、插入数据然后更新数据,使其产生历史版本数据。注意:这里插入数据和更新数据都是用put命令
put 'teacher','91001','username','Mary'
put 'teacher','91001','username','Mary1'
put 'teacher','91001','username','Mary2'
put 'teacher','91001','username','Mary3'
put 'teacher','91001','username','Mary4'
put 'teacher','91001','username','Mary5'
3、查询时,指定查询的历史版本数。默认会查询出最新的数据。(有效取值为1到5)
get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}
exit
运行eclipse
点击launch
点击’project’
选择’java project’
选择’JavaSE-1.8’
点击next
在弹出的界面中(如下图所示),用鼠标点击“Libraries”选项卡,然后,点击界面右侧的“Add External JARs...”按钮。
在弹出的“JAR Selection”界面中(如下图所示),进入到“/usr/local/hbase/lib”目录,选中该目录下的所有jar文件(注意,不要选中client-facing-thirdparty、ruby、shaded-clients和zkcli这四个目录),然后,点击界面底部的“打开”按钮。
在“client-facing-thirdparty”目录下(如下图所示),选中所有jar文件,再点击界面底部的“打开”按钮。
然后,再点击界面(如下图所示)底部的“Finish”按钮。
在界面(如下图所示)左侧的“HBaseExample”工程名称上单击鼠标右键,在弹出的菜单中选择“New”,再在弹出的子菜单中选择“Class”。
在弹出的“New Java Class”对话框(如下图所示)中,在“Name”文本框中输入“ExampleForHBase”,然后,点击界面底部的“Finish”按钮。
在代码窗口中(如下图所示),ExampleForHBase.java代码内容输入。
注意:需要把"hdfs://localhost:9000/hbase"中的localhost改为自己主节点的名称,我这里是master。
- import org.apache.hadoop.conf.Configuration;
-
- import org.apache.hadoop.hbase.*;
-
- import org.apache.hadoop.hbase.client.*;
-
- import org.apache.hadoop.hbase.util.Bytes;
-
- import java.io.IOException;
-
- public class ExampleForHBase {
-
- public static Configuration configuration;
-
- public static Connection connection;
-
- public static Admin admin;
-
- public static void main(String[] args)throws IOException{
-
- init();
-
- createTable("student",new String[]{"score"});
-
- insertData("student","zhangsan","score","English","69");
-
- insertData("student","zhangsan","score","Math","86");
-
- insertData("student","zhangsan","score","Computer","77");
-
- getData("student", "zhangsan", "score","English");
-
- close();
-
- }
-
-
-
- public static void init(){
-
- configuration = HBaseConfiguration.create();
-
- configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
-
- try{
-
- connection = ConnectionFactory.createConnection(configuration);
-
- admin = connection.getAdmin();
-
- }catch (IOException e){
-
- e.printStackTrace();
-
- }
-
- }
-
-
-
- public static void close(){
-
- try{
-
- if(admin != null){
-
- admin.close();
-
- }
-
- if(null != connection){
-
- connection.close();
-
- }
-
- }catch (IOException e){
-
- e.printStackTrace();
-
- }
-
- }
-
-
-
- public static void createTable(String myTableName,String[] colFamily) throws IOException {
-
- TableName tableName = TableName.valueOf(myTableName);
-
- if(admin.tableExists(tableName)){
-
- System.out.println("talbe is exists!");
-
- }else {
-
- TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
-
- for(String str:colFamily){
-
- ColumnFamilyDescriptor family =
-
- ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build();
-
- tableDescriptor.setColumnFamily(family);
-
- }
-
- admin.createTable(tableDescriptor.build());
-
- }
-
- }
-
-
-
- public static void insertData(String tableName,String rowKey,String colFamily,String col,String val) throws IOException {
-
- Table table = connection.getTable(TableName.valueOf(tableName));
-
- Put put = new Put(rowKey.getBytes());
-
- put.addColumn(colFamily.getBytes(),col.getBytes(), val.getBytes());
-
- table.put(put);
-
- table.close();
-
- }
-
-
-
- public static void getData(String tableName,String rowKey,String colFamily, String col)throws IOException{
-
- Table table = connection.getTable(TableName.valueOf(tableName));
-
- Get get = new Get(rowKey.getBytes());
-
- get.addColumn(colFamily.getBytes(),col.getBytes());
-
- Result result = table.get(get);
-
- System.out.println(new String(result.getValue(colFamily.getBytes(),col==null?null:col.getBytes())));
-
- table.close();
-
- }
-
- }
在开始运行程序之前,需要启动HDFS和HBase。
然后,如下图所示,点击界面中的运行图标右侧的“倒三角”,在弹出的菜单中选择“Run As”,再在弹出的菜单中点击“2 Java Application”,开始运行程序。
点击’OK’
运行结果:出现“69”。
这时,可以看到HBase Shell交互式环境中,使用list命令查看student表是否创建成功;使用scan 表名 命令可查看指定表中的数据。
解释:这里的teacher表为上面讲述历史版本的时候创建的,因此共有两个表。
最后,关闭各系统:
stop-hbase.sh
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver
完成!
解决:这是由于目标文件夹没有写入权限,需要修改目标文件夹的写入权限
chmod 777 目标文件夹路径
解决:yum属于在线安装,及联网获取安装包,如果安装失败的话,一般和网络脱不了关系。
①通过ping www.baidu.com 来检测网络是否ping通
②执行vi /etc/sysconfig/network-scripts/ifcfg-ens33打开ifcfg-ens33文件,将BOOTPROTO设置为dhcp
③重启网卡
④使用ping命令测试网络
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。