您好,登錄后才能下訂單哦!
本篇內容介紹了“ HBase的環境配置及應用方法 ”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
hbase是bigtable的開源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存儲、可伸縮、實時讀寫的數據庫系統。
它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索數據,僅支持單行事務(可通過hive支持來實現多表join等復雜操作)。主要用來存儲非結構化和半結構化的松散數據。與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。
HBase以表的形式存儲數據。表有行和列組成。列劃分為若干個列族(row family)。
我們可以先來看一下傳統的關系型數據庫中的表:
然后與HBase的表進行對比,hbase的表結構,與傳統的關系型數據庫有較大的差別
1、一個表會按照行劃分為若干個region,每一個region分配給一臺特定的regionserver管理
2、每一個region內部還要一句列族劃分為若干個HStore
3、每個HStore中的數據會落地到若干個HFILE文件中
4、region體積會隨著數據插入而不斷增長,到一定閾值后悔分裂
5、隨著region的分裂,一臺regionserver上管理的region會越來越多
6、HMASTER會根據regionserver上管理的region數做負載均衡
7、region中的數據擁有一個內存緩存:memstore,數據的訪問優先在memstore中進行
8、memstore中的數據因為空間有限,所以需要定期flush到文件storefile中,每次flush都是生成新的storefile
9、storefile的數量隨著時間也會不斷增加,regionserver會定期將大量storefile進行合并(merge)
行鍵的設計對數據查詢效率的影響非常大。
HBase具有很好的可伸縮性:如果存儲容量不夠的時候,直接加datanode或者regionservers
hbase可以作為一個線上系統的底層系統的功能。
Hmaster可以做負載均衡,監控到各個節點之間的數據存儲情況。
每一個store(列族)會有一個內存緩存,存放的是一些最熱的數據(最近訪問的),這樣的話讀取數據的速度會快很多。
文件都是有索引的,所以查起來會比較快的。
region會在storefile定期進行合并操作。
1、首先要去下載一個HBase的安裝文件: http://hbase.apache.org/,然后解壓到你需要安裝的目錄,如果你已經學到hbase了,我相信這些基本的安裝肯定全部都會了的。
2、在habse目錄下的conf目錄下找到hbase-env.sh和hbase-site.xml,以及regionservers,然后分別按照下面的進行配置,整個配置過程非常簡單。
在hbase-env.sh中,主要是配置java的環境變量,還有就是要開啟zookeeper功能,這里要把默認的true改成的false,意思就是啟用zookeeper,但是啟用的不是hbase自帶的zookeeper,而是使用我自己安裝的zookeeper。
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64 export HBASE_MANAGES_ZK=false
在hbase-site.xml中,主要就是配置hdfs的主機地址,還有下面的ubuntu1,2,3就是zookeeper的主機名個端口2181,不同的機器可以酌情配置。
configuration> <property> <name>hbase.rootdir</name> <value>hdfs://ubuntu2:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>ubuntu1:2181,ubuntu2:2181,ubuntu3:2181</value> </property> </configuration>
3、最后修改regionservers,將默認的localhost修改為主機的地址,這個配置文件的意思就是設置從節點,和我們之前配置的hadoop集群都是差不多的,就相當于那個salver。
ubuntu1 ubuntu2 ubuntu3
4、最后將hadoop中的core-site.xml和hdfs-site.xml拷貝到hbase的conf目錄下。
5、然后通過scp將這個配置好的文件發往其他的兩個節點。
最后我只想說一句不要在這配置文件里面多打了字母,否則會報錯的。
1、啟動所有的hbase進程
首先啟動zk集群
./zkServer.sh start
啟動hbase集群
start-dfs.sh
啟動hbase,在主節點上運行:
start-hbase.sh
2、 通過瀏覽器訪問hbase管理頁面
192.168.44.131:60010
3、 為保證集群的可靠性,要啟動多個HMaster
hbase-daemon.sh start master
jps在主節點上面的效果是:會啟動HRegionServer和HMaster
我們可以通過web頁面查看啟動的情況:192.168.44.131:60010,也就是你的主節點的ip或主機名+端口號60010就可以了。
官方給的例子是:
Examples: hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40'] hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40'] hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe' hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' } hbase> # Optionally pre-split the table into NUMREGIONS, using hbase> # SPLITALGO ("HexStringSplit", "UniformSplit">
那么我們就以例子為準,來新建一個用戶信息表。表名為user-info,包含兩個列族(base_info和extra_info),保留3個版本。
create 'user-info',{NAME=>'base_info',VERSIONS=>3},{NAME=>'extra_info'}
官方給的語句是:
hbase> put 'ns1:t1', 'r1', 'c1', 'value', ts1
那么我們就按照它的語法來寫:
put 'user-info','rk-100001','base_info:name','張s' put 'user-info','rk-100001','base_info:age','20' put 'user-info','rk-100001','base_info:address','湖南長沙'
在hbase只能一條條的插入,就比如一次只能插入name,那么如果我們想插入age,address就需要一個個的put。
1、我們可以通過scan來查詢:
scan 'user-info'
我們可以從圖中看到它是按key來排序的(字段的名稱會根據字典排序)k-value
如果我再插入一行,
put 'user-info','rk100003','base_info:name','angelabby'
一行中的所有字段名+字段值,在存儲的時候,hbase會排序,排序的依據是按照K的字典順序,所有的行也會有序存儲,排序的依據是rowkey的字典順序。
這個特性會影響連續存放。
2、get取數據,一次只能取一行數據
get 'user-info','rk100003'
三個版本:
put 'user-info','rk100003','base_info:name',’yangying' put 'user-info','rk100003','base_info:name','baobao'
查看以前版本的值:
scan 'user-info',{VERSIONS=>10}
需要先禁用這個表,然后才可以drop掉。
需要先禁用這個表,然后才可以drop掉。 disable 'user-info' drop 'user-info'
打開eclipse,導入hbase/lib中的所有包。然后就可以愉快的開始寫了,這里以在eclipse中庸hbase建表和插入數據為例:
//建表,DDL操作 public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException { // Configuration conf=new Configuration(); //會加載hbase-site.xml配置文件 Configuration conf=HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","ubuntu1:2181,ubuntu2:2181,ubuntu3:2181"); HBaseAdmin admin=new HBaseAdmin(conf); TableName name = TableName.valueOf("user-info"); HTableDescriptor tableDescriptor=new HTableDescriptor(name); //創建列名 HColumnDescriptor base_info = new HColumnDescriptor("base_info"); //給列族增加版本約束 base_info.setMaxVersions(3); //將列族添加到表描述對象中 tableDescriptor.addFamily(base_info); //用createTable方法創建一個tabelDescriptor所描述的對象 admin.createTable(tableDescriptor); //關閉連接 admin.close(); }
最后我們可以在hbase的shell窗口來查看表是否已建好表。輸入list就可以查詢了
然后來插入數據:
@Test //插入數據,屬于DML操作 public void Put() throws IOException{ Configuration conf=HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","ubuntu1:2181,ubuntu2:2181,ubuntu3:2181"); HTable hTable = new HTable(conf,"user-info"); Put put=new Put(Bytes.toBytes("rk-10001")); put.add("base_info".getBytes(),"name".getBytes(),"wangming".getBytes()); put.add("base_info".getBytes(),"age".getBytes(),"20".getBytes()); hTable.put(put); hTable.close(); }
最后我們可以在hbase的shell窗口來查看表是否已插入好數據。
“ HBase的環境配置及應用方法 ”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。