這篇文章主要介紹了hadoop中如何搭建分布式環(huán)境,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名申請、網站空間、營銷軟件、網站建設、鶴崗網站維護、網站推廣。
下載: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)驗證
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<!-- hbase的master主機名和端口 -->
<name>hbase.master</name>
<value>hdfs://192.168.1.240:60000</value>
</property>
<property>
<!-- Hbase數(shù)據保存目錄 -->
<name>hbase.rootdir</name>
<!-- 主機和端口號與$HADOOP_HOME/.../core-site.xml的fs.defaultFS的主機和端口號一致 -->
<value>hdfs://192.168.1.240:9000/hbase</value>
</property>
<property>
<!-- 開啟分布式 -->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!-- hbase集群中zookeeper的主機各節(jié)點,使用奇數(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ù)據存放位置 -->
<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
在主控機通過web界面查看(本例配置4個節(jié)點):
SHELL$ stop-hbase.sh
SHELL$ hbase shell
清空表:
truncate是一個能夠快速清空資料表內所有資料的SQL語法。并且能針對具有自動遞增值的字段,做計數(shù)重置歸零重新計算的作用
全部API在%HBase%/docs目錄里,完全是英文的。
本例所須全部jar都可以在%HBase安裝目錄%/lib目錄中找到。圖省事,我一股腦兒全導入了。
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) //向一個已經存在的表添加咧
//checkHBaseAvailable(HBaseConfiguration hbaseConf) //靜態(tài)函數(shù),查看HBase是否處于運行狀態(tài)
//deleteTable(byte[] tableName) //刪除一個已經存在的表
//enableTable(byte[] tableName) //使表處于有效狀態(tài)
//disableTable(byte[] tableName) //使表處于無效狀態(tài)
//HTableDescriptor[] listTables() //列出所有用戶控件表項
//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) //設置屬性的值
tableDesc.addFamily(new HColumnDescriptor(strColFamily));//添加列族
//創(chuàng)建一個表,同步操作
hbaseAdmin.createTable(tableDesc);
System.out.println("創(chuàng)建表" + strTBName + "成功");
}
}
//為表添加數(shù)據
@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");
//表實例
HTable table = new HTable(conf, strTBName);
//close() 釋放所有的資源或掛起內部緩沖區(qū)中的更新
//exists(Get get) 檢查Get實例所指定的值是否存在于HTable的列中
//get(Get get) 獲取指定行的某些單元格所對應的值
//getEndKeys() 獲取當前一打開的表每個區(qū)域的結束鍵值
//getScanner(byte[] family) 獲取當前給定列族的scanner實例
//getTableDescriptor() 獲取當前表的HTableDescriptor實例
//getTableName() 獲取表名
//isTableEnabled(HBaseConfiguration conf, String tableName) 檢查表是否有效
// 獲取所有的列族
HColumnDescriptor[] columnFamilies = table.getTableDescriptor().getColumnFamilies();
//HColumnDescriptor的常用方法:
//getName() //獲取列族的名字
//getValue(byte[] key) //獲取對應的屬性的值
//setValue(String key, String value) //設置對應屬性的值
//插入器
Put put = new Put(Bytes.toBytes(strRowKey));// 設置行號,RowKey
//add(byte[] family, byte[] qualifier, byte[] value) 將指定的列和對應的值添加到Put實例中
//add(byte[] family, byte[] qualifier, long ts, byte[] value) 將指定的列和對應的值及時間戳添加到Put實例中
//getRow() 獲取Put實例的行
//getRowLock() 獲取Put實例的行鎖
//getTimeStamp() 獲取Put實例的時間戳
//isEmpty() 檢查familyMap是否為空
//setTimeStamp(long timeStamp) 設置Put實例的時間戳
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); //運行插入器
System.out.println("存入數(shù)據完畢");
}
//根據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); //獲取表實例
//查詢器
Get get = new Get(Bytes.toBytes(strRowKey)); //查詢指定行
//addColumn(byte[] family, byte[] qualifier) 獲取指定列族和列修飾符對應的列
//addFamily(byte[] family) 通過指定的列族獲取其對應列的所有列
//setTimeRange(long minStamp,long maxStamp) 獲取指定取件的列的版本號
//setFilter(Filter filter) 當執(zhí)行Get操作時設置服務器端的過濾器
Result result = table.get(get);
//containsColumn(byte[] family, byte[] qualifier) 檢查指定的列是否存在
//getFamilyMap(byte[] family) 獲取對應列族所包含的修飾符與值的鍵值對
//getValue(byte[] family, byte[] qualifier) 獲取對應列的最新值
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); //獲取表實例
//掃描器
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); //獲取表實例
Put put = new Put(Bytes.toBytes(strRowKey));
//仍然是插入操作(已知列族,已知列,新值)
put.add(Bytes.toBytes(strColFamily), Bytes.toBytes(strColumn), Bytes.toBytes(strNewValue));
table.put(put);
System.out.println("更新結束");
}
//刪除指定行的指定的列(刪除單元格)
@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); //獲取表實例
//刪除器
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); //獲取表實例
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 + "表 刪除了");
}
感謝你能夠認真閱讀完這篇文章,希望小編分享的“hadoop中如何搭建分布式環(huán)境”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!
本文標題:hadoop中如何搭建分布式環(huán)境
文章源于:http://m.newbst.com/article22/pohgjc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、App開發(fā)、移動網站建設、品牌網站設計、品牌網站制作、關鍵詞優(yōu)化
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)