1.基礎(chǔ)的環(huán)境準(zhǔn)備
基礎(chǔ)的環(huán)境準(zhǔn)備不在贅述,包括jdk安裝,防火墻關(guān)閉,網(wǎng)絡(luò)配置,環(huán)境變量的配置,各個(gè)節(jié)點(diǎn)之間進(jìn)行免密等操作等。使用的版本2.0.5.
2.完全分布式 Fully-distributed
參考官方文檔
分布式的部署,都是在單節(jié)點(diǎn)服務(wù)的基礎(chǔ)配置好配置,直接分發(fā)到其他節(jié)點(diǎn)即可。
2.1 配置文件hase-env.sh
jdk路徑的配置,以及不適用內(nèi)部自帶的zk.
export JAVA_HOME=/usr/java/default
export HBASE_MANAGES_ZK=false
2.2 hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://muycluster/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node02,node03,node04</value>
</property>
</configuration>
2.3 配置regionservers
配置集群regionserver的節(jié)點(diǎn)
node02
node03
node04
2.4 配置備用的master
conf/backup-masters
vi backup-masters
node03
2.5 HDFS客戶端配置
官方提供三種方式進(jìn)行配置
-
Add a pointer to your HADOOP_CONF_DIR to the HBASE_CLASSPATH environment variable in hbase-env.sh.
-
Add a copy of hdfs-site.xml (or hadoop-site.xml) or, better, symlinks, under ${HBASE_HOME}/conf, or
-
if only a small set of HDFS client configurations, add them to hbase-site.xml.
一般我們都選擇第二種,直接將hadoop-site.xml配置拷貝到 ${HBASE_HOME}/conf即可
2.6 啟動(dòng)
[root@node01 /]# start-hbase.sh
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/bigdata/hbase-2.0.5/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/bigdata/hadoop-2.6.5/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
running master, logging to /opt/bigdata/hbase-2.0.5/logs/hbase-root-master-node01.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/bigdata/hbase-2.0.5/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/bigdata/hadoop-2.6.5/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
node02: running regionserver, logging to /opt/bigdata/hbase-2.0.5/bin/../logs/hbase-root-regionserver-node02.out
node04: running regionserver, logging to /opt/bigdata/hbase-2.0.5/bin/../logs/hbase-root-regionserver-node04.out
node03: running regionserver, logging to /opt/bigdata/hbase-2.0.5/bin/../logs/hbase-root-regionserver-node03.out
node04: running master, logging to /opt/bigdata/hbase-2.0.5/bin/../logs/hbase-root-master-node04.out
2.7 通過(guò)頁(yè)面查看節(jié)點(diǎn)信息
訪問(wèn)端口16010
:http://node01:16010/master-status
3. java中客戶端操作Hbase
3.1 引入依賴
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-mapreduce</artifactId>
<version>2.0.5</version>
</dependency>
3.2 初始化創(chuàng)建連接
操作表Java API中主要提供了一個(gè)Admin對(duì)象進(jìn)行表的 操作。
HBase schemas can be created or updated using the The Apache HBase Shell or by using Admin in the Java API.文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-438516.html
Configuration conf = null;
Connection conn = null;
//表的管理對(duì)象
Admin admin = null;
Table table = null;
//創(chuàng)建表的對(duì)象
TableName tableName = TableName.valueOf("user");
@Before
public void init() throws IOException {
//創(chuàng)建配置文件對(duì)象
conf = HBaseConfiguration.create();
//加載zookeeper的配置
conf.set("hbase.zookeeper.quorum","node02,node03,node04");
//獲取連接
conn = ConnectionFactory.createConnection(conf);
//獲取對(duì)象
admin = conn.getAdmin();
//獲取數(shù)據(jù)操作對(duì)象
table = conn.getTable(tableName);
}
3.3 操作Hbase數(shù)據(jù)庫(kù)
3.3.1 創(chuàng)建表
/**
* 創(chuàng)建表 主要使用Admin對(duì)象進(jìn)行表的創(chuàng)建
* @throws IOException
*/
@Test
public void createTable() throws IOException {
//定義表描述對(duì)象
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName);
//定義列族描述對(duì)象
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder("cf".getBytes());
//添加列族信息給表
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
if(admin.tableExists(tableName)){
//禁用表
admin.disableTable(tableName);
admin.deleteTable(tableName);
}
//創(chuàng)建表
admin.createTable(tableDescriptorBuilder.build());
}
3.3.2 往創(chuàng)建的user表插入數(shù)據(jù)
@Test
public void insert() throws IOException {
Put put = new Put(Bytes.toBytes("row1"));
put.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("name"),Bytes.toBytes("elite"));
put.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("age"),Bytes.toBytes("22"));
put.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("address"),Bytes.toBytes("gz"));
table.put(put);
}
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-438516.html
3.3.3 使用get 查詢單條數(shù)據(jù)
@Test
public void get() throws IOException {
Get get = new Get(Bytes.toBytes("row1"));
//在服務(wù)端做數(shù)據(jù)過(guò)濾,挑選出符合需求的列
get.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("name"));
get.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("age"));
get.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("address"));
Result result = table.get(get);
Cell cell1 = result.getColumnLatestCell(Bytes.toBytes("cf"),Bytes.toBytes("name"));
Cell cell2 = result.getColumnLatestCell(Bytes.toBytes("cf"),Bytes.toBytes("age"));
Cell cell3 = result.getColumnLatestCell(Bytes.toBytes("cf"),Bytes.toBytes("address"));
System.out.print(Bytes.toString(CellUtil.cloneValue(cell1))+" ");
System.out.print(Bytes.toString(CellUtil.cloneValue(cell2))+" ");
System.out.print(Bytes.toString(CellUtil.cloneValue(cell3)));
}
3.3.4 scan 查詢數(shù)據(jù)
/**
* 獲取表中所有的記錄
*/
@Test
public void scan() throws IOException {
Scan scan = new Scan();
ResultScanner rss = table.getScanner(scan);
for (Result rs: rss) {
Cell cell1 = rs.getColumnLatestCell(Bytes.toBytes("cf"),Bytes.toBytes("name"));
Cell cell2 = rs.getColumnLatestCell(Bytes.toBytes("cf"),Bytes.toBytes("age"));
Cell cell3 = rs.getColumnLatestCell(Bytes.toBytes("cf"),Bytes.toBytes("address"));
System.out.print(Bytes.toString(CellUtil.cloneValue(cell1))+" ");
System.out.print(Bytes.toString(CellUtil.cloneValue(cell2))+" ");
System.out.println(Bytes.toString(CellUtil.cloneValue(cell3)));
}
}
3.3.5 刪除數(shù)據(jù)
/**
* 刪除數(shù)據(jù)
* @throws IOException
*/
@Test
public void delete() throws IOException {
Delete delete = new Delete("row2".getBytes());
table.delete(delete);
}
3.4 關(guān)閉連接
@After
public void close(){
try {
table.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
admin.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (IOException e) {
e.printStackTrace();
}
}
到了這里,關(guān)于Hbase數(shù)據(jù)庫(kù)完全分布式搭建以及java中操作Hbase的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!