一臉懵逼學習HBase的搭建(注意HBase的版本)


1:Hdfs分布式文件系統存的文件,文件存儲。
2:Hbase是存儲的數據,海量數據存儲,作用是緩存的數據,將緩存的數據滿后寫入到Hdfs中。
3:hbase集群中的角色:
  (1)、一個或者多個主節點,Hmaster;
  (2)、多個從節點,HregionServer;
4、hbase集群的配置是一主多從或者多主多從(一定注意區分和hive之間的關系,切記),一主多從可以動態添加主節點,配置成多主多從。
5、如何配置HMaster主備:
  a、添加主節點:
    在任意的安裝了hbase的機器上啟動hmaster。命令如下所示:
    [hadoop@slaver1 ~]$ local-master-backup.sh start 2
  b、添加HBase的從節點regionserver節點:復制原子節點到新節點上,hbase-daemon.sh start regionserver 即添加regionserver節點。
   1)、使用[hadoop@slaver1 ~]$ zkCli.sh 可以查看管理的節點。
    2)、[zk: localhost:2181(CONNECTED) 0] ls /
    3)、[zk: localhost:2181(CONNECTED) 1] ls /hbase 可以查看zookeeper管理的hbase的節點個數,然后進行kill和啟動新節點操作。

 1:由於HBase依賴hdfs,所以下載的時候注意HBase的版本:

  注:我使用的是hadoop2.4版本的,所以HBase選擇支持2版本的:hbase-0.96.2-hadoop2-bin.tar.gz

2:上傳hbase安裝包,上傳到一台機器即可:

  建議:自己規划一下自己的機器,最好是獨立的,再搞兩台機器最好,

     如果不想搞更多的機器,這里放到啟動yarn進程的機器上:

       如我的slaver5,slaver6(master節點,slaver1節點,slaver2節點安裝Region Server,slaver5,slaver6安裝Master ),

       這樣負載比較好點,自己電腦吃得消;

過程省略,上傳結果如下所示;

2:解壓縮剛才上傳的hbase-0.96.2-hadoop2-bin.tar.gz

[root@slaver5 hadoop]# tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz

 

3:配置HBase集群,要修改3個文件(首先Zookeeper集群已經安裝好了喲):

  注意:要把hadoop的hdfs-site.xml和core-site.xml 放到HBase/conf下;

[root@slaver5 conf]# cp /home/hadoop/hadoop-2.4.1/etc/hadoop/{core-site.xml,hdfs-site.xml} ./

 開始修改配置文件:

  3.1:修改hbase-env.sh:

修改如下所示:

//自己的jdk路徑
export JAVA_HOME=/usr/java/jdk1.7.0_55
//hadoop配置文件的位置
export HBASE_CLASSPATH=/home/hadoop/hadoop-2.4.1/conf 
//更准確的應該配置下面這個路徑信息
export HBASE_CLASSPATH=/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/etc/hadoop
//告訴hbase使用外部的zk,export HBASE_MANAGES_ZK=true   #如果使用獨立安裝的zookeeper這個地方就是false export HBASE_MANAGES_ZK=false

 演示操作如下所示:

 

可以使用命令查看jdk的路徑:

[root@slaver6 hadoop]# echo $JAVA_HOME
/home/hadoop/jdk1.7.0_65
[root@slaver6 hadoop]#

按ESC進入命令行模式:

搜索內容如下所示:

改成如下內容,使用外部的Zookeeper管理HBase:

 

  3.2:修改hbase-site.xml,vim hbase-site.xml:

修改內容如下所示:

<configuration>
    <!-- 指定hbase在HDFS上存儲的路徑 -->
        <property>
                <name>hbase.rootdir</name>
          <!--如果是三台機器,注意這個路徑,比如hdfs://slaver1/hbase--> <value>hdfs://ns1/hbase</value> </property> <!-- 指定hbase是分布式的 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 指定zk的地址,多個用“,”分割 --> <property> <name>hbase.zookeeper.quorum</name>      <value>master:2181,slaver1:2181,slaver2:2181</value> </property> </configuration>

配置或如下所示,下面的配置僅僅做一下參考,不是此篇博客配置的:

 1 <configuration>
 2   <property>
 3   <!--hbasemaster的主機和端口-->
 4   <name>hbase.master</name>        
 5   <value>master1:60000</value>
 6   </property>
 7   <property>
 8   <!--時間同步允許的時間差-->
 9   <name>hbase.master.maxclockskew</name>   
10   <value>180000</value>
11   </property>
12   <property>
13   <name>hbase.rootdir</name>
14   <!--hbase共享目錄,持久化hbase數據-->
15   <value>hdfs://hadoop-cluster1/hbase</value>
16   </property>
17   <property>
18   <!--是否分布式運行,false即為單機-->
19   <name>hbase.cluster.distributed</name>  
20   <value>true</value>
21   </property>
22   <property>
23   <!--zookeeper地址-->
24   <name>hbase.zookeeper.quorum</name>
25   <value>slave1, slave2,slave3</value>
26   </property>
27   <property>
28   <!--zookeeper配置信息快照的位置-->
29   <name>hbase.zookeeper.property.dataDir</name>
30   <value>/home/hadoop/hbase/tmp/zookeeper</value>
31   </property>
32 </configuration>

 修改操作如下所示:

[root@slaver5 conf]# vim hbase-site.xml

 

演示操作如下所示:

  3.3:修改regionservers,vim regionservers:

因為master節點,slaver1節點,slaver2節點安裝Region Server,所以這里配置一下,slaver5,slaver6安裝Master就可以找到Region Server了;

 4:然后將部署好的HBase傳到其他幾個節點上面(拷貝里面有html文檔,拷貝起來有點慢,可以刪除doc文檔):

  注:將配置好的HBase拷貝到每一個節點並同步時間。

[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ master:/home/hadoop/
[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ slaver1:/home/hadoop/
[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ slaver2:/home/hadoop/
[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ slaver6:/home/hadoop/

5:現在可以啟動HBase了,不過啟動HBase之前需要將HDFS啟動起來(hdfs啟動過程省略,之前啟動好多次了),因為HBase在hdfs下面創建一個目錄叫做hbase,自己配置的:

  注:如果瀏覽器訪問不了,記得關防火牆:service iptables stop,service iptables status;

啟動所有的hbase 1:分別啟動zk ./zkServer.sh start 2:啟動hbase集群 start-dfs.sh 3:啟動hbase,在主節點上運行: start-hbase.sh

啟動完hdfs之后啟動HBase:

注意:hbase依賴hdfs,所以yarn可以暫時不啟動的。

 

可以查看這幾個節點的進程的啟動情況:

現在呢,一個HBase已經啟動起來了,如果想啟動兩個HBase,第一個HBase啟動不會自動啟動第二個HBase,所以現在手動啟動第二個HBase,操作如下所示:

  注:為保證集群的可靠性,要啟動多個HMaster

6:通過瀏覽器訪問hbase管理頁面
    192.168.3.134:60010

可以看到三台master節點,slaver1節點,slaver2節點安裝Region Server;slaver6是安裝的備份的Master;

7:自己可以測試一下,殺死一個HMaster(slaver5節點的),另一個HMaster立馬頂上去了,很強悍,依賴着Zookeeper,爽到爆啊。(kill -9 進程號,-9是強制殺死):

1 添加Hbase節點,刪除的話直接kill:
2 [root@slaver6 hadoop]# hbase-daemon.sh start regionserver

 8:使用HBase的命令行客戶端操作一下HBase(測試使用,真實環境使用Java操作):

1 進入hbase的shell:hbase shell
2 退出hbase的shell:quit
3 頁面:http://ip地址:60010/ 

 由於HBase是非關系型數據庫,可以查看一下help看看都有啥命令,然后再操作:

可以查看一些基本的命令:


HBase的一些基本命令(如果在hbase shell客戶端,打錯了,可按ctrl+BackSpace進行刪除):

1、#創建HBase數據表,如果不給定namespace的名稱,默認創建在default命名空間中。
hbase(main):032:0> create 'myTables',{NAME => 'base_info',VERSIONS => 3},{NAME => 'extra_info'}

hbase(main):016:0> create 'user','info01','info02'
#創建帶有命名空間的hbase數據表,20180408是命名空間,user是表名稱,col1是列簇。
hbase(main):033:0> create '20180408:user','col1'
hbase(main):034:0> list
2、#查看有什么表,顯示hbase表名稱,類似mysql中的show tables;可以通過指定命名空間來查看對應命名空間中的表,默認是顯示所有用戶表,也支持模糊查詢。類似命名list_namespace_table查看對命名空間內有那些表。 hbase(main):032:0> list 3、#查看表結構 describe 'myTables'
hbase(main):016:0> describe '20180408:user'
4、#禁用表 disable 'myTables' 5、#刪除表,刪除之前要先禁用表。刪除用戶表之前需要將表設置為disable,然后刪除。其實在hbase中如果需要對已有表進行ddl操作,均需要將其disable,在ddl操作完成后,再進行enable操作即可。 drop 'myTables' hbase(main):040:0> disable '20180408:test'
hbase(main):041:0> drop '20180408:test'
hbase(main):042:0> list
5.1 #delete命令是刪除指定table的指定rowkey的指定列,也就是說delete命令適合刪除列的情況。如果需要刪除當然rowkey的所有列數據,那么可以使用deleteall命令。
hbase(main):010:0> delete '20180408:user','row1','col1:sex'
hbase(main):012:0> deleteall '20180408:user','row1'
5.2 #清空數據表,truncate命令的作用是清空數據庫,當我們數據庫中的數據比較多的時候,我們可以選擇該命令將數據庫清空。底層原理是禁用表,刪除表,創建表。
hbase(main):015:0> truncate '20180408:user'

6、#插入數據,插入一個表的一行的一列的一個值,最后一個字段不帶。hbase的put命令是進行數據添加的命令。 #不帶分號 #put '表名稱','','base_info/extra_info:列名稱','列值' put 'myTables','0001','base_info:name','張三' put 'myTables','0001','base_info:age','22' put 'myTables','0001','base_info:sex','' put 'myTables','0001','extra_info:addr','河南省' #帶有命名空間的hbase數據表插入操作:
hbase(main):001:0> put '20180408:user','row1','col1:name','zhangsan'
hbase(main):004:0> put '20180408:user','row1','col1:sex','nan'
hbase(main):005:0> put '20180408:user','row1','col1:age','20'
7、#查詢數據,查詢某一行。get命名的作用是獲取對應表中對應rowkey的數據。默認獲取最新版本的全部列數據,可以通過時間戳指定版本信息,也可以指定獲取的列。 get 'myTables','0001'
#row1是自己創建的行,注意,col1是列簇,都是自己創建的。
hbase(main):008:0> get '20180408:user','row1'
#查看指定行的指定列信息。
hbase(main):009:0> get '20180408:user','row1','col1:name'
get 'myTables','0001',{COLUMN => 'base_info:name',VERSION => 10}
#scan命令是hbase的另一種檢索方式,是通過范圍查找hbase中的數據。默認情況下是獲取table的全部數據,可以通過指定column和filter等相關信息進行數據的過濾。
scan 'myTables' #可以查看插入的數據信息
hbase(main):006:0> scan '20180408:user'


#scan提供多種filter命令,常用的filter命令如下所示:ColumnPrefixFilter過濾列名是某前綴的,MultipleColumnValueExcludeFilter過濾多列的前綴只要滿足其中一個的前綴,RowFilter滿足那種類型的過濾,SingleColumnValueFilter某列的value值過濾,SingleColumnValueExcludeFilter過濾某列不符合給定的value值等等。需要注意的是,在指定的value之前需要加'binary';
hbase(main):012:0> scan '20180408:user',{FILTER=>"MultipleColumnPrefixFilter('n')"}
hbase(main):013:0> scan '20180408:user',{FILTER=>"MultipleColumnPrefixFilter('n','a')"}
hbase(main):001:0> scan '20180408:user',{FILTER=>"ColumnPrefixFilter('n')"}
hbase(main):002:0> scan '20180408:user',{FILTER=>"RowFilter(=,'binary:row1')"},注意,rowfilter需要給定兩個參數,第一個參數:=,>,<,>=,<=。第二個參數是二進制的字符串數組。
hbase(main):001:0> scan '20180408:user',{FILTER=>"SingleColumnValueFilter('col1','name',=,'binary:zhangsan')"}

8、#修改值操作,默認不顯示歷史值 put 'myTables','0001','base_info:name','李四'

9、namespace的相關命令:
#創建命名空間,create_namespace命令
hbase(main):019:0> create_namespace '20180408',{'comment'=>'this is my namespace'}
#顯示命名空間,顯示所有存在的命名空間,可以使用正則,可以驗證自己創建的命名空間是否創建成功,也可以去hdfs上面查看。
hbase(main):020:0> list_namespace
hbase(main):020:0> list_namespace '20180408.*'
#刪除命名空間,刪除指定的命名空間,注意刪除的命名空間內不能有table存在,也就是說只能刪除空的namespace。
hbase(main):021:0> drop_namespace '20180408'
#顯示命名空間的相關信息。describe_namespace命令。
hbase(main):026:0> describe_namespace '20180408'
#查看這個命名空間下面的hbase數據表。
hbase(main):035:0> list_namespace_table '20180408'

10、count命令是統計hbase表行數的一個命令,由於相當於一個內置的mapreduce程序,所以當數據量比較大的時候可以選擇使用協處理器方式計算行數。默認情況下INTERVAL是1000間隔數,CACHE是10。
hbase(main):001:0> count '20180408:user'
hbase(main):002:0> count '20180408:user',INTERVAL=2

 可以去Zookeeper查看hbase的一些信息:

 1 [root@master sbin]# cd /home/hadoop/zookeeper-3.4.5/
 2 [root@master zookeeper-3.4.5]# ls
 3 bin          conf     dist-maven       ivy.xml      NOTICE.txt            recipes              zookeeper-3.4.5.jar.asc
 4 build.xml    contrib  docs             lib          README_packaging.txt  src                  zookeeper-3.4.5.jar.md5
 5 CHANGES.txt  data     ivysettings.xml  LICENSE.txt  README.txt            zookeeper-3.4.5.jar  zookeeper-3.4.5.jar.sha1
 6 [root@master zookeeper-3.4.5]# cd bin/
 7 [root@master bin]# ls
 8 README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  zookeeper.out
 9 [root@master bin]# ./zkCli.sh 
10 Connecting to localhost:2181
11 2017-12-18 17:08:22,357 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT
12 2017-12-18 17:08:22,383 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=master
13 2017-12-18 17:08:22,383 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.7.0_65
14 2017-12-18 17:08:22,383 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
15 2017-12-18 17:08:22,385 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/home/hadoop/jdk1.7.0_65/jre
16 2017-12-18 17:08:22,385 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/home/hadoop/zookeeper-3.4.5/bin/../build/classes:/home/hadoop/zookeeper-3.4.5/bin/../build/lib/*.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/slf4j-api-1.6.1.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/netty-3.2.2.Final.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/log4j-1.2.15.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/jline-0.9.94.jar:/home/hadoop/zookeeper-3.4.5/bin/../zookeeper-3.4.5.jar:/home/hadoop/zookeeper-3.4.5/bin/../src/java/lib/*.jar:/home/hadoop/zookeeper-3.4.5/bin/../conf:
17 2017-12-18 17:08:22,385 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/i386:/lib:/usr/lib
18 2017-12-18 17:08:22,386 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
19 2017-12-18 17:08:22,387 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
20 2017-12-18 17:08:22,396 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
21 2017-12-18 17:08:22,397 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=i386
22 2017-12-18 17:08:22,397 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=2.6.32-358.el6.i686
23 2017-12-18 17:08:22,398 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
24 2017-12-18 17:08:22,428 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
25 2017-12-18 17:08:22,470 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/home/hadoop/zookeeper-3.4.5/bin
26 2017-12-18 17:08:22,472 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@1238fa5
27 Welcome to ZooKeeper!
28 2017-12-18 17:08:22,994 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
29 JLine support is enabled
30 2017-12-18 17:08:23,281 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
31 2017-12-18 17:08:24,145 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x16068706a9b0008, negotiated timeout = 30000
32 
33 WATCHER::
34 
35 WatchedEvent state:SyncConnected type:None path:null
36 [zk: localhost:2181(CONNECTED) 0] ls /
37 [hadoop-ha, hbase, admin, zookeeper, consumers, config, 20171011, storm, yarn-leader-election, brokers, controller_epoch]
38 [zk: localhost:2181(CONNECTED) 3] get /hbase
39 
40 cZxid = 0xc00000007
41 ctime = Wed Oct 25 17:29:19 CST 2017
42 mZxid = 0xc00000007
43 mtime = Wed Oct 25 17:29:19 CST 2017
44 pZxid = 0xf0000004a
45 cversion = 23
46 dataVersion = 0
47 aclVersion = 0
48 ephemeralOwner = 0x0
49 dataLength = 0
50 numChildren = 15
51 [zk: localhost:2181(CONNECTED) 4] ls /
52 [hadoop-ha, hbase, admin, zookeeper, consumers, config, 20171011, storm, yarn-leader-election, brokers, controller_epoch]
53 [zk: localhost:2181(CONNECTED) 5] ls /hbase
54 [meta-region-server, backup-masters, region-in-transition, draining, table, table-lock, running, master, namespace, hbaseid, online-snapshot, replication, recovering-regions, splitWAL, rs]
55 [zk: localhost:2181(CONNECTED) 6] ls /hbase/table
56 [hbase:meta, hbase:namespace, user]
57 [zk: localhost:2181(CONNECTED) 7] 

待續......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM