如果你正在安裝,請用hadoop用戶
HBase介紹
HBase是一個分布式的、面向列的開源數(shù)據(jù)庫,源于Google的一篇論文《BigTable:一個結(jié)構(gòu)化數(shù)據(jù)的分布式存儲系統(tǒng)》。HBase以表的形式存儲數(shù)據(jù),表有行和列組成,列劃分為若干個列族/列簇(column family)。欲了解HBase的官方資訊,請訪問(http://hbase.apache.org/)。
HBase的運行有三種模式:單機模式、偽分布式模式、分布式模式。
單機模式:在一臺計算機上安裝和使用HBase,不涉及數(shù)據(jù)的分布式存儲;偽分布式模式:在一臺計算機上模擬一個小的集群;分布式模式:使用多臺計算機實現(xiàn)物理意義上的分布式存儲。
前提
確保已安裝Hadoop
1. HBase2.2.2安裝
將hbase的安裝包下載到虛擬機內(nèi)
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
安裝包路徑記得更改
1.2 將解壓的文件名hbase-2.2.2改為hbase,以方便使用
cd /usr/local
sudo mv ./hbase-2.2.2 ./hbase
把hbase目錄權(quán)限賦予給hadoop用戶
cd /usr/local
sudo chown -R hadoop ./hbase
1.3 配置環(huán)境變量
將hbase下的bin目錄添加到path中
vim ~/.bashrc
# 如果沒有引入過PATH請在~/.bashrc文件尾行添加如下內(nèi)容:
export PATH=$PATH:/usr/local/hbase/bin
編輯完成后,再執(zhí)行source命令使上述配置在當前終端立即生效
source ~/.bashrc
1.4 添加HBase權(quán)限
cd /usr/local
sudo chown -R hadoop ./hbase
1.5 查看HBase版本,確定hbase安裝成功
/usr/local/hbase/bin/hbase version
Error: JAVA_HOME is not set
Please download the latest Sun JDK from the Sun Java web site http://www.oracle.com/technetwork/java/javase/downloads
HBase requires Java 1.8 or later.
開始盤查漏洞!??!
之前在hadoop用戶中安裝,現(xiàn)在登錄的是usr用戶,在配置一遍。試試。
以下內(nèi)容源于安裝Hadoop教程:
在Linux命令行界面中,執(zhí)行如下Shell命令(注意:當前登錄用戶名是hadoop):
cd /usr/lib
sudo mkdir jvm
cd ~
cd Downloads
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm
cd /usr/lib/jvm
ls
cd ~
vim ~/.bashrc
上面命令使用vim編輯器(查看vim編輯器使用方法)打開了hadoop這個用戶的環(huán)境變量配置文件,請在這個文件的開頭位置,添加如下幾行內(nèi)容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
保存.bashrc文件并退出vim編輯器。然后,繼續(xù)執(zhí)行如下命令讓.bashrc文件的配置立即生效:
source ~/.bashrc
java -version
裝java之后,再次查詢hbase版本
可知:要預(yù)先安裝
- jdk
- Hadoop( 單機模式不需要,偽分布式模式和分布式模式需要)
- SSH
2. HBase配置
2.1單機模式配置
- 配置/usr/local/hbase/conf/hbase-env.sh 。配置JAVA環(huán)境變量,并添加配置HBASE_MANAGES_ZK為true,用vi命令打開并編輯hbase-env.sh
vim /usr/local/hbase/conf/hbase-env.sh
發(fā)現(xiàn)文件只讀,不可更改
解決方法,在命令前添加sudo
添加完成后保存退出即可。
- 配置/usr/local/hbase/conf/hbase-site.xml
打開并編輯hbase-site.xml
vim /usr/local/hbase/conf/hbase-site.xml
在啟動HBase前需要設(shè)置屬性hbase.rootdir,用于指定HBase數(shù)據(jù)的存儲位置,若不設(shè)置的話,hbase.rootdir默認為/tmp/hbase-${user.name},這意味著每次重啟系統(tǒng)都會丟失數(shù)據(jù)。此處設(shè)置為HBase安裝目錄下的hbase-tmp文件夾即(/usr/local/hbase/hbase-tmp),添加配置如下:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///usr/local/hbase/hbase-tmp</value>
</property>
</configuration>
- 接下來測試運行。首先切換目錄至HBase安裝目錄/usr/local/hbase;再啟動HBase。
cd /usr/local/hbase
sudo bin/start-hbase.sh
bin/hbase shell
成功啟動HBase
停止HBase運行,命令如下:
bin/stop-hbase.sh
2.2 偽分布式模式配置
1.配置/usr/local/hbase/conf/hbase-env.sh
vim /usr/local/hbase/conf/hbase-env.sh
配置JAVA_HOME,HBASE_CLASSPATH,HBASE_MANAGES_ZK.
HBASE_CLASSPATH設(shè)置為本機HBase安裝目錄下的conf目錄
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=true
由于之前已經(jīng)配置java和zookeeper,所以找到classpath添加路徑即可。
2.配置/usr/local/hbase/conf/hbase-site.xml,用命令vi打開并編輯hbase-site.xml
vim /usr/local/hbase/conf/hbase-site.xml
修改hbase.rootdir,指定HBase數(shù)據(jù)在HDFS上的存儲路徑;將屬性hbase.cluter.distributed設(shè)置為true。假設(shè)當前Hadoop集群運行在偽分布式模式下,在本機上運行,且NameNode運行在9000端口。
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost: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>
注意:修改環(huán)境配置文件可能打開是只讀文件,需要加上sudo
- 接下來測試運行HBase。
第一步:首先登陸ssh,之前設(shè)置了無密碼登陸,因此這里不需要密碼;再切換目錄至/usr/local/hadoop ;再啟動hadoop,如果已經(jīng)啟動hadoop請?zhí)^此步驟。
ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh
ssh登錄開始報錯。。。
不知啟動是否成功jps
試試。
很明顯失敗了,節(jié)點完全沒啟動。
報錯:localhost: usrp@localhost: Permission denied (publickey,password).
回到登錄ssh那一步,可能是免密登錄的問題
無法啟動hadoop,得用hadoop用戶運行,重啟進入hadoop用戶
在hadoop上快速配置一下hbase
運行一下單機模式
運行一下偽分布式,運行成功?。?!
所以,第一次運行失敗問題并不出于localhost,而是hadoop啟動的root不是對應(yīng)用戶。
第二步:切換目錄至/usr/local/hbase;再啟動HBase.
進入shell界面,然后退出,停止HBase運行
bin/hbase shell
exit
bin/stop-hbase.sh
三、 編程實踐
1. 利用Shell命令
1.1 HBase中創(chuàng)建表
HBase中用create命令創(chuàng)建表
(啟動hbase,進入shell先)
create 'student','Sname','Ssex','Sage','Sdept','course'
describe 'student'
1.2 HBase數(shù)據(jù)庫基本操作
1.2.1 添加數(shù)據(jù)
put 鍵,值
1.2.2 查找數(shù)據(jù)
get 表名,行名
scan 表名
1.2.3 刪除數(shù)據(jù)
delete 表名,行,列 //刪除具體行列中的數(shù)據(jù)
deleteall 表名,行 //刪除整個行的數(shù)據(jù)
*刪除數(shù)學(xué)列的內(nèi)容
1.2.4 刪除表
disable 'student'
drop 'student'
1.3 查詢表歷史數(shù)據(jù)
1、在創(chuàng)建表的時候,指定保存的版本數(shù)(假設(shè)指定為5)
2、插入數(shù)據(jù)然后更新數(shù)據(jù),使其產(chǎn)生歷史版本數(shù)據(jù),注意:這里插入數(shù)據(jù)和更新數(shù)據(jù)都是用put命令
3、查詢時,指定查詢的歷史版本數(shù)。默認會查詢出最新的數(shù)據(jù)。(有效取值為1到5)
HBase Java API編程實踐
先裝個eclipse,類似安裝hbase的步驟,但是不用重命名下載過的安裝包,不用修改環(huán)境變量,然后再桌面加個快捷方式
到/usr/local/eclipse目錄下 ./eclipse
啟動軟件
新建一個java項目
導(dǎo)入lib
/usr/local/hbase/lib下所有的jar包
/usr/local/hbase/lib/client-facing-thirdparty下所有的jar包
新建類,輸入代碼文章來源:http://www.zghlxwxcb.cn/news/detail-442422.html
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 java application
程序運行成功以后,會在運行結(jié)果中出現(xiàn)“69”
到HBase Shell交互式環(huán)境中,使用如下命令查看student表是否創(chuàng)建成功:
查看student表中的數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-442422.html
到了這里,關(guān)于HBase2.2.2安裝和編程實踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!