溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hadoop中如何搭建分布式環(huán)境

發(fā)布時間:2021-12-08 14:21:38 來源:億速云 閱讀:170 作者:小新 欄目:云計算

這篇文章主要介紹了hadoop中如何搭建分布式環(huán)境,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一。分布式環(huán)境搭建

下載:http://www.apache.org/dyn/closer.cgi/hbase/ ,hbase-0.98.0-hadoop2-bin.tar.gz。

1.在master主控機(jī)安裝HBase

1)解壓

SHELL$ tar -zxvf hbase-0.98.0-hadoop2-bin.tar.gz 
SHELL$ mv hbase-0.98.0-hadoop2 ~/hbase0.98.0hadoop2 

 

2)配置環(huán)境變量

1)修改/etc/profile文件
    SHELL$ sudo gedit /etc/profile 
hadoop中如何搭建分布式環(huán)境

(2)驗(yàn)證
hadoop中如何搭建分布式環(huán)境

3)修改%HBASE%/conf/hbase-env.sh

hadoop中如何搭建分布式環(huán)境

4)修改$HBASE_HOME/conf/hbase-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<property>
		<!-- hbase的master主機(jī)名和端口 -->
		<name>hbase.master</name>
		<value>hdfs://192.168.1.240:60000</value>
	</property>
	<property>
		<!-- Hbase數(shù)據(jù)保存目錄 -->
		<name>hbase.rootdir</name>
		<!-- 主機(jī)和端口號與$HADOOP_HOME/.../core-site.xml的fs.defaultFS的主機(jī)和端口號一致 -->
		<value>hdfs://192.168.1.240:9000/hbase</value>
	</property>
	<property>
		<!-- 開啟分布式 -->
		<name>hbase.cluster.distributed</name>
		<value>true</value>
	</property>
	<property>
		<!-- hbase集群中zookeeper的主機(jī)各節(jié)點(diǎn),使用奇數(shù)可盡量確保選舉leader公平 -->
		<name>hbase.zookeeper.quorum</name>
		<!-- value>hapsalve1,hapsalve2,hapsalve3</value -->
		<value>192.168.1.241,192.168.1.242,192.168.1.243</value>
	</property>
	<property>
		<!-- hbase臨時文件位置 -->
		<name>hbase.tmp.dir</name>
		<value>/home/hadoop/hbase0.98.0hadoop2/hbase-tmp</value>
	</property>
	<property>
		<!-- hbase臨時zookeeper數(shù)據(jù)存放位置 -->
		<name>hbase.zookeeper.property.dataDir</name>
		<value>/home/hadoop/hbase0.98.0hadoop2/zookeeper-temp</value>
	</property>
</configuration>


5)$HBASE_HOME/conf/regionservers 文件增加

hadoop中如何搭建分布式環(huán)境

2.把HBase復(fù)制到slave從屬機(jī)

SHELL$ sudo scp -rpv /home/hadoop/hbase0.98.0hadoop2/ hadoop@hapslave*:/home/hadoop/ 

3.啟動HBase集群

在Hadoop集群啟動后,再啟動HBase集群。
SHELL$ start-hbase.sh 
hadoop中如何搭建分布式環(huán)境

在主控機(jī)通過web界面查看(本例配置4個節(jié)點(diǎn)):
hadoop中如何搭建分布式環(huán)境

4.停止HBase集群

SHELL$ stop-hbase.sh
hadoop中如何搭建分布式環(huán)境

二。HBase Shell

SHELL$ hbase shell
hadoop中如何搭建分布式環(huán)境

1.建表create

hadoop中如何搭建分布式環(huán)境

2.列出全部表list

hadoop中如何搭建分布式環(huán)境

3.表描述describe

hadoop中如何搭建分布式環(huán)境

4.刪除表disable,drop

hadoop中如何搭建分布式環(huán)境

5.插入條目put

hadoop中如何搭建分布式環(huán)境

6.展示全表scan

hadoop中如何搭建分布式環(huán)境

7.查詢條目get 

hadoop中如何搭建分布式環(huán)境

8.更新條目put

hadoop中如何搭建分布式環(huán)境

9.刪除條目delete

hadoop中如何搭建分布式環(huán)境

清空表:
hadoop中如何搭建分布式環(huán)境

truncate是一個能夠快速清空資料表內(nèi)所有資料的SQL語法。并且能針對具有自動遞增值的字段,做計數(shù)重置歸零重新計算的作用

 

10.統(tǒng)計參數(shù)

hadoop中如何搭建分布式環(huán)境

三。JavaAPI

全部API在%HBase%/docs目錄里,完全是英文的。
本例所須全部jar都可以在%HBase安裝目錄%/lib目錄中找到。圖省事,我一股腦兒全導(dǎo)入了。
hadoop中如何搭建分布式環(huán)境

1.創(chuàng)建一張表

package com.cuiweiyou.test;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Test;

public class HBaseTest {

	//創(chuàng)建表
	@Test
	public void creatTable() throws Exception {

		String strTBName = "tb_test";	//表
		String strColFamily = "cf";		//列族

		//配置
		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

		//管理員
		HBaseAdmin hbaseAdmin = new HBaseAdmin(conf);
		//addColumn(String tableName, HColumnDescriptor column)			//向一個已經(jīng)存在的表添加咧
		//checkHBaseAvailable(HBaseConfiguration hbaseConf)				//靜態(tài)函數(shù),查看HBase是否處于運(yùn)行狀態(tài)
		//deleteTable(byte[] tableName)									//刪除一個已經(jīng)存在的表
		//enableTable(byte[] tableName)									//使表處于有效狀態(tài)
		//disableTable(byte[] tableName)								//使表處于無效狀態(tài)
	 	//HTableDescriptor[] listTables()								//列出所有用戶控件表項(xiàng)
		//modifyTable(byte[] tableName, HTableDescriptor tableDesc)		//修改表的模式,是異步的操作,耗時
		//tableExists(String tableName)									//檢查表是否存在

		//表名稱
		TableName tableName = TableName.valueOf(strTBName);

		//表描述器
		HTableDescriptor tableDesc = new HTableDescriptor(tableName);
		//removeFamily(byte[] column)			//移除一個列族
		//getName()								//獲取表的名字
		//getValue(byte[] key)					//獲取屬性的值
		//setValue(String key, String value)	//設(shè)置屬性的值
		tableDesc.addFamily(new HColumnDescriptor(strColFamily));//添加列族

		//創(chuàng)建一個表,同步操作
		hbaseAdmin.createTable(tableDesc);
		
		System.out.println("創(chuàng)建表" +  strTBName + "成功");
	}
}

hadoop中如何搭建分布式環(huán)境

2.添加一條記錄

//為表添加數(shù)據(jù)
	@Test
	public void addData() throws IOException {
		String strTBName = "tb_test";
		String strColFamily = "cf";
		String strColumn = "col";		//列名
		String strRowKey = "row1";		//行號
		String strValue = "values";		//值

		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

		//表實(shí)例
		HTable table = new HTable(conf, strTBName);	
		//close()														釋放所有的資源或掛起內(nèi)部緩沖區(qū)中的更新
		//exists(Get get)												檢查Get實(shí)例所指定的值是否存在于HTable的列中
		//get(Get get)													獲取指定行的某些單元格所對應(yīng)的值
		//getEndKeys()													獲取當(dāng)前一打開的表每個區(qū)域的結(jié)束鍵值
		//getScanner(byte[] family)										獲取當(dāng)前給定列族的scanner實(shí)例
		//getTableDescriptor()											獲取當(dāng)前表的HTableDescriptor實(shí)例
		//getTableName()												獲取表名
		//isTableEnabled(HBaseConfiguration conf, String tableName)		檢查表是否有效

		// 獲取所有的列族
		HColumnDescriptor[] columnFamilies = table.getTableDescriptor().getColumnFamilies();
		//HColumnDescriptor的常用方法:
		//getName()								//獲取列族的名字
		//getValue(byte[] key)					//獲取對應(yīng)的屬性的值
		//setValue(String key, String value)	//設(shè)置對應(yīng)屬性的值

		//插入器
		Put put = new Put(Bytes.toBytes(strRowKey));// 設(shè)置行號,RowKey
		//add(byte[] family, byte[] qualifier, byte[] value)			將指定的列和對應(yīng)的值添加到Put實(shí)例中
		//add(byte[] family, byte[] qualifier, long ts, byte[] value)	將指定的列和對應(yīng)的值及時間戳添加到Put實(shí)例中
		//getRow()														獲取Put實(shí)例的行
		//getRowLock()													獲取Put實(shí)例的行鎖
		//getTimeStamp()												獲取Put實(shí)例的時間戳
		//isEmpty()														檢查familyMap是否為空
		//setTimeStamp(long timeStamp)									設(shè)置Put實(shí)例的時間戳
		
		for (int i = 0; i < columnFamilies.length; i++) {
			String familyName = columnFamilies[i].getNameAsString(); // 獲取列族名
			
			//指定列族
			if (familyName.equals(strColFamily)) {
				//插入
				put.add(Bytes.toBytes(familyName), Bytes.toBytes(strColumn), Bytes.toBytes(strValue));
			}
		}
		
		table.put(put);	//運(yùn)行插入器
		
		System.out.println("存入數(shù)據(jù)完畢");
	}

hadoop中如何搭建分布式環(huán)境

3.讀取指定行記錄

//根據(jù)RowKey查詢整行
	@Test
	public void getRow() throws IOException {
		String strTBName = "tb_test";
		String strRowKey = "row1";

		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

		HTable table = new HTable(conf, strTBName);	//獲取表實(shí)例
		
		//查詢器
		Get get = new Get(Bytes.toBytes(strRowKey));	//查詢指定行
		//addColumn(byte[] family, byte[] qualifier)	獲取指定列族和列修飾符對應(yīng)的列
		//addFamily(byte[] family)						通過指定的列族獲取其對應(yīng)列的所有列
		//setTimeRange(long minStamp,long maxStamp)		獲取指定取件的列的版本號
		//setFilter(Filter filter)						當(dāng)執(zhí)行Get操作時設(shè)置服務(wù)器端的過濾器

		Result result = table.get(get);
		//containsColumn(byte[] family, byte[] qualifier)		檢查指定的列是否存在
		//getFamilyMap(byte[] family)							獲取對應(yīng)列族所包含的修飾符與值的鍵值對
		//getValue(byte[] family, byte[] qualifier)				獲取對應(yīng)列的最新值
		
		List<Cell> listCells = result.listCells();	//指定行、全部列族的全部列

		for (Cell cell : listCells) {
			System.out.println("列  族:" + Bytes.toString(CellUtil.cloneFamily(cell)));
			System.out.println("列  名:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
			System.out.println("列  值:" + Bytes.toString(CellUtil.cloneValue(cell)));
			System.out.println("時間戳:" + cell.getTimestamp());
		}
	}

hadoop中如何搭建分布式環(huán)境

4.顯示所有數(shù)據(jù)

//遍歷全部條目
	@Test
	public void getAllRows() throws IOException {
		String strTBName = "tb_test";

		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");
		HTable table = new HTable(conf, strTBName);	//獲取表實(shí)例

		//掃描器
		ResultScanner resultScanner = table.getScanner(new Scan());	//針對全表的查詢器
		Iterator<Result> results = resultScanner.iterator();
		while(results.hasNext()) {
			Result result = results.next();
			List<Cell> cells = result.listCells();
			for(Cell cell : cells) {
				System.out.println("列  族:" + Bytes.toString(CellUtil.cloneFamily(cell)));
				System.out.println("列  名:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
				System.out.println("列  值:" + Bytes.toString(CellUtil.cloneValue(cell)));
				System.out.println("時間戳:" + cell.getTimestamp() + "\n------------------");
			}
		}
	}

hadoop中如何搭建分布式環(huán)境

5.更新條目

//更新表中某行的某一列
	@Test
	public void updateTable() throws IOException {
		String strTBName = "tb_test";
		String strColFamily = "cf";
		String strColumn = "col";
		String strRowKey = "row1";
		String strNewValue = "NewValues";

		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");
		HTable table = new HTable(conf, strTBName);	//獲取表實(shí)例

		Put put = new Put(Bytes.toBytes(strRowKey));
		//仍然是插入操作(已知列族,已知列,新值)
		put.add(Bytes.toBytes(strColFamily), Bytes.toBytes(strColumn), Bytes.toBytes(strNewValue));
		table.put(put);

		System.out.println("更新結(jié)束");
	}

hadoop中如何搭建分布式環(huán)境

6.刪除單元格

//刪除指定行的指定的列(刪除單元格)
	@Test
	public void deleteColumn() throws IOException {
		String strTBName = "tb_test";
		String strColFamily = "cf";
		String strColumn = "col";
		String strRowKey = "row1";

		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");
		HTable table = new HTable(conf, strTBName);	//獲取表實(shí)例

		//刪除器
		Delete del = new Delete(Bytes.toBytes(strRowKey));
		del.deleteColumns(Bytes.toBytes(strColFamily), Bytes.toBytes(strColumn));
		table.delete(del);
		
		System.out.println("行:" + strRowKey + ",列族:"+ strColFamily +",列:"+ strColumn +",刪除完畢");
	}

hadoop中如何搭建分布式環(huán)境

7.刪除整行

//刪除整行
	@Test
	public void deleteAllColumn() throws IOException {
		String strTBName = "tb_test";
		String strRowKey = "row1";

		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");
		HTable table = new HTable(conf, strTBName);	//獲取表實(shí)例

		Delete deleteAll = new Delete(Bytes.toBytes(strRowKey));

		table.delete(deleteAll);

		System.out.println("這一行全刪除了");
	}

hadoop中如何搭建分布式環(huán)境

8.刪除表單

//刪除表
	@Test
	public void deleteTable() throws IOException {
		String strTBName = "tb_test";
		
		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

		HBaseAdmin admin = new HBaseAdmin(conf);

		admin.disableTable(strTBName);
		admin.deleteTable(strTBName);
		System.out.println(strTBName + "表 刪除了");
	}

hadoop中如何搭建分布式環(huán)境


感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“hadoop中如何搭建分布式環(huán)境”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI