说明:本文图片较多,耐心等待加载。(建议用电脑)
注意所有打开的文件都要记得保存。
第一步:准备工作
本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。
这一章使用的是之前配置好的Master主机
第二步:安装并配置HBase2.2.2
1. HBase2.2.2安装
点击下面的地址下载HBase2.2.2安装文件HBase官网下载地址
也可以直接点击这里从百度云盘下载软件(提取码:ziyu)。进入百度网盘后,进入“软件”目录,找到hbase-2.2.2-bin.tar.gz文件,下载到本地。
我们这里直接在虚拟机打开浏览器,输入地址:Index of /dist/hbase
选择 找到2.2.2/
点击hbase-2.2.2-bin.tar.gz文件
1.1 解压安装包hbase-2.2.2-bin.tar.gz至路径 /usr/local,命令如下:
cd ~
sudo tar -zxf ~/下载/hbase-2.2.2-bin.tar.gz -C /usr/local
注意:英文版是Downloads,,中文版是下载。
1.2 将解压的文件名hbase-2.2.2改为hbase,以方便使用,命令如下:
cd /usr/local
sudo mv ./hbase-2.2.2 ./hbase
下面把hbase目录权限赋予给hadoop用户:
注意下面的是你自己的用户名hadoop
cd /usr/local
sudo chown -R hadoop ./hbase
1.3 配置环境变量
在终端输入以下i命令:
vim ~/.bashrc
在第一行加入以下内容
export PATH=$PATH::/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/hbase/bin
保存退出后,继续输入
source ~/.bashrc
1.4 添加HBase权限
在终端继续输入,注意下面的hadoop是自己的用户名。
cd /usr/local
sudo chown -R hadoop ./hbase #将hbase下的所有文件的所有者改为hadoop,hadoop是当前用户的用户名。
1.5 查看HBase版本,确定hbase安装成功,命令如下:
/usr/local/hbase/bin/hbase version
也可以直接输入
hbase version
如果输出以下内容,虽然他正确输出了版本号,但是他的加载出现了问题,我们需要解决一下,避免以后出现问题。
解决方法:
终端输入以下内容
nano /usr/local/hbase/conf/hbase-env.sh
在文件末尾添加这两行:
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true
export HBASE_SKIP_GETJAVA_PROPERTY=1
CTRL+O,保存,然后按一下回车,Ctrl+X退出。
解释一下为啥这样能解决
HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true
:禁用 HBase 自动去尝试使用hadoop classpath
命令解析依赖路径。
HBASE_SKIP_GETJAVA_PROPERTY=1
:强制不去加载org.apache.hadoop.hbase.util.GetJavaProperty
类(就是那个报错的主类)。
让后我们重新执行之前的命令
hbase version
2. HBase配置
HBase有三种运行模式,单机模式、伪分布式模式、分布式模式。作为学习,我们重点讨论伪分布式模式。
在终端输入以下命令
vim /usr/local/hbase/conf/hbase-env.sh
在文件内加入以下内容 注意这里的jdk版本号,是你自己的那个我这里是441
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_441
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=true
然后保存退出,继续输入
vim /usr/local/hbase/conf/hbase-site.xml
在文件内加上以下内容(注意下面的Master,是因为我的是集群式hadoop,如果是单机的话就是localhost)
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://Master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
3.接下来测试运行HBase。
1.首先登陆ssh
ssh localhost
2.启动hadoop集群(之前的教程里都有,这里直接输入命令)并用jps检查是否成功启动
注意如果是集群式你就得启动从机Slave1。我这里需要启动
cd /usr/local/hadoop
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
3.切换目录至/usr/local/hbase;再启动HBase.命令如下:
cd /usr/local/hbase
bin/start-hbase.sh
也可以把前面的bin/去掉,直接输入start-hbase.sh
输入命令jps,看到以下界面说明hbase启动成功
4.进入shell界面:
bin/hbase shell
5.退出 shell界面(我们这里先不退出)
exit
6.停止HBase运行,命令如下:(我们这里先不停止)
bin/stop-hbase.sh
注意:
这里启动关闭Hadoop和HBase的顺序一定是:
启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop
我们这里就先不关闭了,继续做。
第三步:编程实践
1. 利用Shell命令
1.1 HBase中创建表
create 'student','Sname','Ssex','Sage','Sdept','course'
查看“student”表的基本信息
describe 'student'
1.2 HBase数据库基本操作
1.添加数据
put 'student','95001','Sname','LiYing'
put 'student','95001','course:math','80'
2.查看数据
get命令
get 'student','95001'
scan命令
scan 'student'
3.删除数据
delete 'student','95001','Ssex'
deleteall 'student','95001'
4.删除表
删除表有两步,第一步先让该表不可用,第二步删除表。
list
disable 'student'
drop 'student'
list
1.3 查询表历史数据
create 'teacher',{NAME=>'username',VERSIONS=>5}
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'
get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}
get 'teacher','91001',{COLUMN=>'username',VERSIONS=>3}
2.HBase Java API编程实践
执行如下命令启动Eclipse:
cd /usr/local/eclipse
./eclipse
点击Launch
继续
继续
继续
然后把下面的代码粘贴进去
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 (connection != null) {
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("table already 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();
}
}
然后点击运行按钮,出现69即为成功
这时,可以到HBase Shell交互式环境中,使用如下命令查看student表是否创建成功:
在终端输入
bin/hbase shell
list
scan 'student'
出现如上界面即为成功。