您好,登錄后才能下訂單哦!
這篇文章主要介紹了hadoop中如何搭建分布式環(huán)境,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
下載:http://www.apache.org/dyn/closer.cgi/hbase/ ,hbase-0.98.0-hadoop2-bin.tar.gz。
SHELL$ tar -zxvf hbase-0.98.0-hadoop2-bin.tar.gz
SHELL$ mv hbase-0.98.0-hadoop2 ~/hbase0.98.0hadoop2
(1)修改/etc/profile文件
SHELL$ sudo gedit /etc/profile
(2)驗(yàn)證
<?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>
SHELL$ sudo scp -rpv /home/hadoop/hbase0.98.0hadoop2/ hadoop@hapslave*:/home/hadoop/
在Hadoop集群啟動后,再啟動HBase集群。
SHELL$ start-hbase.sh
在主控機(jī)通過web界面查看(本例配置4個節(jié)點(diǎn)):
SHELL$ stop-hbase.sh
SHELL$ hbase shell
清空表:
truncate是一個能夠快速清空資料表內(nèi)所有資料的SQL語法。并且能針對具有自動遞增值的字段,做計數(shù)重置歸零重新計算的作用
全部API在%HBase%/docs目錄里,完全是英文的。
本例所須全部jar都可以在%HBase安裝目錄%/lib目錄中找到。圖省事,我一股腦兒全導(dǎo)入了。
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 + "成功"); } }
//為表添加數(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ù)完畢"); }
//根據(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()); } }
//遍歷全部條目 @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------------------"); } } }
//更新表中某行的某一列 @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é)束"); }
//刪除指定行的指定的列(刪除單元格) @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 +",刪除完畢"); }
//刪除整行 @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("這一行全刪除了"); }
//刪除表 @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 + "表 刪除了"); }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“hadoop中如何搭建分布式環(huán)境”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(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)容。