非關系型數(shù)據(jù)庫大作業(yè)【教學作業(yè)】
《非關系型數(shù)據(jù)庫大作業(yè)【教學作業(yè)】》由會員分享,可在線閱讀,更多相關《非關系型數(shù)據(jù)庫大作業(yè)【教學作業(yè)】(29頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 實驗三HBase環(huán)境搭建、sehll操作及Java API編程 實驗步驟: 1.搭建Zookeeper和HBase 1.ntp時間同步服務器搭建與使用 安裝ntp服務端(master) # apt-get install ntp 啟動ntp服務 # /etc/init.d/ntp start 修改配置文件 # vim /etc/ntp.conf 修改內容如下: 重啟ntp服務 # /etc/init.d/ntp restart 1.2安裝ntp客戶端(slaver1、slaver2) 使用ntpdate命令,如果不存在這個命令,則先安裝apt-get i
2、nstall ntp 同步服務器時間 # /usr/sbin/ntpdate 10.49.85.172 設置定時同步 # vim /etc/crontab 1.3 ulimit 和 nproc設置(集群均配置) HBase是數(shù)據(jù)庫,會在同一時間使用很多的文件句柄。大多數(shù)Ubuntu系統(tǒng)使用的默認值1024是不能滿足的,所以你需要修改你的最大文件句柄限制??梢栽O置到10k. 你還需要修改 hbase 用戶的 nproc,如果過低會造成 OutOfMemoryError異常。 需要澄清的,這兩個設置是針對操作系統(tǒng)的,不是Hbase本身的。有一個常見的錯誤是Hbase運行的用戶,和
3、設置最大值的用戶不是一個用戶。在Hbase啟動的時候,第一行日志會現(xiàn)在ulimit信息,所以你最好檢查一下。 1)修改limits.conf文件 # vim /etc/security/limits.conf 添加如下內容: 2)修改common-session文件 # vim /etc/pam.d/common-session 添加如下內容: 重啟系統(tǒng) 1.4 Zookeeper集群環(huán)境安裝過程詳解 1)解壓zookeeper tar zxvf zookeeper-3.4.5.tar.gz 2) 修改zoo.cfg配置文件 進入到zookeeper的conf
4、目錄下將zoo_sample.cfg文件拷貝一份,命名為為zoo.cfg vim zoo.cfg 修改內容如下: 配置文件中"server.id=host:port:port"中的第一個port是從機器(follower)連接到主機器(leader)的端口號,第二個port是進行l(wèi)eadership選舉的端口號。接下來在dataDir所指定的目錄下創(chuàng)建一個文件名為myid的文件,文件中的內容只有一行,為本主機對應的id值,也就是上圖中server.id中的id。例如:在服務器1中的myid的內容應該寫入1,在服務器2中的myid的內容應該寫入2,在服務器3中的myid的內容應該寫入3
5、。 3)同時創(chuàng)建log目錄 # mkdir log 4)修改環(huán)境變量 # vim /etc/profile # source /etc/profile # scp -r /root/zookeeper-3.4.5/ cc-slaver1:/root/ # scp -r /root/zookeeper-3.4..5/ cc-slaver2:/root/ 在對應slaver節(jié)點同時修改profile文件,添加 export ZOOKEEPER_HOME=/root/zookeeper-3.4.5 export CLASSPATH=.:${ZOOK
6、EEPER_HOME}/lib:$CLASSPATH export PATH=${ZOOKEEPER_HOME}/bin:${ZOOKEEPER_HOME}/conf:$PATH 同時: 在slaver1節(jié)點中 # pwd /soft/zookeeper # mkdir data # echo "2" > myid 在slaver2節(jié)點中 # pwd /soft/zookeeper # mkdir data # echo "3" > myid 1.5 啟動zookeeper集群 在ZooKeeper集群的每個結點上,執(zhí)行啟動ZooKeeper服務的腳本:
7、 # zkServer.sh start 如下圖所示: 其中,QuorumPeerMain是zookeeper進程,啟動正常。 出現(xiàn)錯誤可以通過 # tail -f /soft/zookeeper/zookeeper.out 如上依次啟動了所有機器上的Zookeeper之后可以通過ZooKeeper的腳本來查看啟動狀態(tài),包括集群中各個結點的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每個結點上查詢的結果: 通過上面狀態(tài)查詢結果可見,cc-slaver1是集群的Leader,其余的兩個結點是Follower。 另外,可以
8、通過客戶端腳本,連接到ZooKeeper集群上。對于客戶端來說,ZooKeeper是一個整體(ensemble),連接到ZooKeeper集群實際上感覺在獨享整個集群的服務,所以,你可以在任何一個結點上建立到服務集群的連接,例如: # zkCli.sh -server cc-slaver2:2181 1.6 停止zookeeper進程 在ZooKeeper集群的每個結點上,執(zhí)行停止ZooKeeper服務的腳本: # zkServer.sh stop 至此,Zookeeper集群安裝完成。 1.7HBase的安裝和配置 # tar -zxvf hbase-1.2.4.tar
9、.gz 1)配置conf/hbase-env.sh 修改內容如下: 一個分布式運行的Hbase依賴一個zookeeper集群。所有的節(jié)點和客戶端都必須能夠訪問zookeeper。默認的情況下Hbase會管理一個zookeep集群,即Hbase默認自帶一個zookeep集群。這個集群會隨著Hbase的啟動而啟動。而在實際的商業(yè)項目中通常自己管理一個zookeeper集群更便于優(yōu)化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 來切換。這個值默認是true的,作用是讓Hbase啟動的時候同時也啟動zooke
10、eper.在本實驗中,我們采用獨立運行zookeeper集群的方式,故將其屬性值改為false。
2)配置conf/hbase-site.xml
配置如下:
11、erty>
12、
13、oop里面的 slaver 一樣). 列在這里的server會隨著集群的啟動而啟動,集群的停止而停止。 4)hadoop配置文件拷入 # cp ~/hadoop-2.6.5/etc/hadoop/hdfs-site.xml ~/hbase-1.2.4/conf # cp ~/hadoop-2.6.5/etc/hadoop/core-site.xml ~/hbase-1.2.4/conf 5)分發(fā)hbase # scp -r /root/hbase-1.2.4 cc-slaver1:/root # scp -r /root/hbase-1.2.4 cc-slaver2:/ro
14、ot 配置環(huán)境變量 # vim /etc/profile 在末尾添加如下內容 6)運行和測試 在master上執(zhí)行: (1)# start-all.sh (2)# zkServer.sh start(各個節(jié)點均執(zhí)行) (3)# start-hbase.sh (涵蓋web管理界面的啟動) 使用jps查看進程 通過瀏覽器查看60010,60030端口查看 http://10.49.85.172:60010/ 瀏覽器主節(jié)點信息 7)多節(jié)點啟動HMaster # hbase-daemon.sh start master 在其他子節(jié)點同時啟動H
15、Master 可以做等待備份作用; 2.使用HBase shell命令進行表的創(chuàng)建,增加刪除修改操作。Hbase腳本 啟動:hbase?shell 創(chuàng)建表 在member表中添加幾條數(shù)據(jù) 修改表數(shù)據(jù) 刪除數(shù)據(jù) 3使用Java API進行表的創(chuàng)建,增加刪除修改操作。 向表中添加數(shù)據(jù): 更新表updateTable: 刪除所有列deleteAllColumn: 刪除列deleteColumn: 刪除表deleteTable: 刪除所有表getAllTables: 獲取結果getResult: 獲
16、取某一列的值getResultByColumn: 查詢某列的多版本getResultByVersion: 遍歷查詢getResultByScann: 具體代碼如下: import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil;
17、 import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.TableName; im
18、port org.apache.hadoop.hbase.ZooKeeperConnectionException; 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
19、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; public class Hbase { // 聲明靜態(tài)配置 static Configuration conf = null; static { conf = HBaseCon
20、figuration.create(); conf.set("hadoop.home.dir","hdfs://10.49.85.172:9000/hbase"); //conf.set("hadoop.home.dir", "hdfs://ns/hbas"); conf.set("hbase.zookeeper.property.clientPort", "2181"); //hbase.zookeeper.quorum值不能采用IP方式,必須 使用名稱 conf.set("hbase.zookeeper.quorum", "
21、cc-master,cc-slaver1,cc-slaver2"); //conf.set("hbase.master", "60000"); // System.setProperty("hadoop.home.dir", "hdfs://ns/hbase"); } // Hbase獲取所有的表信息 public static List getAllTables() throws MasterNotRunningException, ZooKeeperConnectionException, IOE
22、xception {
HBaseAdmin admin = new HBaseAdmin(conf);
List
23、rayList
24、 { e.printStackTrace(); } } return tables; } /* * 創(chuàng)建表 * * @tableName 表名 * * @family 列族列表 */ public static void creatTable(String tableName, String[] family) throws Exceptio
25、n { HBaseAdmin admin = new HBaseAdmin(conf); // HTableDescriptor desc = new HTableDescriptor(tableName); HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName)); // System.out.println("========="); for (int i = 0; i < family.length; i++
26、) { desc.addFamily(new HColumnDescriptor(family[i])); } if (admin.tableExists(tableName)) { System.out.println("table Exists!"); System.exit(0); } else { System.out.println("========="); admin.createTa
27、ble(desc); System.out.println("create table Success!"); } } /* * 為表添加數(shù)據(jù)(適合知道有多少列族的固定表) * * @rowKey rowKey * * @tableName 表名 * * @column1 第一個列族列表 * * @value1 第一個列的值的列表 * * @column2 第二個列族列表 *
28、 * @value2 第二個列的值的列表 */ public static void addData(String rowKey, String tableName, String[] column1, String[] value1, String[] column2, String[] value2) throws IOException { Put put = new Put(Bytes.toBytes(rowKey));// 設置rowkey HTable tab
29、le = new HTable(conf, Bytes.toBytes(tableName)); // HTabel負責跟記錄相關的操作如增刪改查等 // 獲取所有的列族 HColumnDescriptor[] columnFamilies = table.getTableDescriptor() .getColumnFamilies(); for (int i =
30、0; i < columnFamilies.length; i++) { String familyName = columnFamilies[i].getNameAsString(); // 獲取列族名 if (familyName.equals("article")) { // article列族put數(shù)據(jù) for (int j = 0; j < column1.length; j++) { put.add(Bytes.toBytes(familyName),
31、 Bytes.toBytes(column1[j]), Bytes.toBytes(value1[j])); } } if (familyName.equals("author")) { // author列族put數(shù)據(jù) for (int j = 0; j < column2.length; j++) { put.add(Bytes.toBytes(familyName),
32、 Bytes.toBytes(column2[j]), Bytes.toBytes(value2[j])); } } } table.put(put); System.out.println("add data Success!"); } /* * 根據(jù)rwokey查詢 * * @rowKey rowKey * * @tableName 表名
33、 */ public static Result getResult(String tableName, String rowKey) throws IOException { Get get = new Get(Bytes.toBytes(rowKey)); HTable table = new HTable(conf, Bytes.toBytes(tableName));// 獲取表 // Result result = table.get(get); // for (KeyVa
34、lue kv : result.list()) { // System.out.println("family:" + Bytes.toString(kv.getFamily())); // System.out // .println("qualifier:" + Bytes.toString(kv.getQualifier())); // System.out.println("value:" + Bytes.toString(kv.getValue())); //
35、 System.out.println("Timestamp:" + kv.getTimestamp()); // System.out.println("-------------------------------------------"); // } Result result = table.get(get); for (Cell cell : result.rawCells()) { System. out .println(
36、 "Rowkey : " +Bytes. toString (result.getRow())+ " Familiy:Quilifier : " +Bytes.toString (CellUtil.cloneQualifier (cell))+ " Value : " +Bytes.toString (CellUtil.cloneValue (cell)) + " Timestamp:" + cell.getTimestamp()
37、 ); } return result; } /* * 遍歷查詢hbase表 * * @tableName 表名 */ public static void getResultScann(String tableName) throws IOException { Scan scan = new Scan(); ResultScanner rs = null; HTable table = new
38、 HTable(conf, Bytes.toBytes(tableName)); try { rs = table.getScanner(scan); for (Result r : rs) { for (KeyValue kv : r.list()) { System.out.println("row:" + Bytes.toString(kv.getRow())); System.out.println(
39、"family:" + Bytes.toString(kv.getFamily())); System.out.println("qualifier:" + Bytes.toString(kv.getQualifier())); System.out .println("value:" + Bytes.toString(kv.getValu
40、e())); System.out.println("timestamp:" + kv.getTimestamp()); System.out .println("-------------------------------------------"); } } } finally { rs.close(); } }
41、 /* * 遍歷查詢hbase表 * * @tableName 表名 */ public static void getResultScann(String tableName, String start_rowkey, String stop_rowkey) throws IOException { Scan scan = new Scan(); scan.setStartRow(Bytes.toBytes(start_rowkey)); sca
42、n.setStopRow(Bytes.toBytes(stop_rowkey)); ResultScanner rs = null; HTable table = new HTable(conf, Bytes.toBytes(tableName)); try { rs = table.getScanner(scan); for (Result r : rs) { for (KeyValue kv : r.list()) {
43、 System.out.println("row:" + Bytes.toString(kv.getRow())); System.out.println("family:" + Bytes.toString(kv.getFamily())); System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));
44、 System.out .println("value:" + Bytes.toString(kv.getValue())); System.out.println("timestamp:" + kv.getTimestamp()); System.out .println("-------------------------------------------"
45、); } } } finally { rs.close(); } } /* * 查詢表中的某一列 * * @tableName 表名 * * @rowKey rowKey */ public static void getResultByColumn(String tableName, String rowKey, String famil
46、yName, String columnName) throws IOException { HTable table = new HTable(conf, Bytes.toBytes(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); // 獲取指定列族和列修飾符對應的列 Result result = table.get(ge
47、t); for (KeyValue kv : result.list()) { System.out.println("family:" + Bytes.toString(kv.getFamily())); System.out .println("qualifier:" + Bytes.toString(kv.getQualifier())); System.out.println("value:" + Bytes.toString(kv.getValue
48、())); System.out.println("Timestamp:" + kv.getTimestamp()); System.out.println("-------------------------------------------"); } table.close(); } /* * 更新表中的某一列 * * @tableName 表名 * * @rowKey rowKey *
49、* @familyName 列族名 * * @columnName 列名 * * @value 更新后的值 */ public static void updateTable(String tableName, String rowKey, String familyName, String columnName, String value) throws IOException { HTable table = new HTable(conf, By
50、tes.toBytes(tableName)); Put put = new Put(Bytes.toBytes(rowKey)); put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value)); table.put(put); System.out.println("update table Success!"); } /* * 查詢某列數(shù)據(jù)的多個
51、版本 * * @tableName 表名 * * @rowKey rowKey * * @familyName 列族名 * * @columnName 列名 */ public static void getResultByVersion(String tableName, String rowKey, String familyName, String columnName) throws IOException { HTa
52、ble table = new HTable(conf, Bytes.toBytes(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); get.setMaxVersions(5); Result result = table.get(get); for (KeyValue kv : result.list())
53、 { System.out.println("family:" + Bytes.toString(kv.getFamily())); System.out.println("qualifier:" + Bytes.toString(kv.getQualifier())); System.out.println("value:" + Bytes.toString(kv.getValue())); System.out.println("Timestamp:" + kv.getTimestamp
54、()); System.out.println("-------------------------------------------"); } } /* * 刪除指定的列 * * @tableName 表名 * * @rowKey rowKey * * @familyName 列族名 * * @columnName 列名 */ public static void del
55、eteColumn(String tableName, String rowKey, String falilyName, String columnName) throws IOException { HTable table = new HTable(conf, Bytes.toBytes(tableName)); Delete deleteColumn = new Delete(Bytes.toBytes(rowKey)); deleteColumn.deleteColumns(Bytes.toBytes(f
56、alilyName), Bytes.toBytes(columnName)); table.delete(deleteColumn); System.out.println(falilyName + ":" + columnName + "is deleted!"); } /* * 刪除指定的列 * * @tableName 表名 * * @rowKey rowKey */ public static void de
57、leteAllColumn(String tableName, String rowKey) throws IOException { HTable table = new HTable(conf, Bytes.toBytes(tableName)); Delete deleteAll = new Delete(Bytes.toBytes(rowKey)); table.delete(deleteAll); System.out.println("all columns are deleted!"
58、); } /* * 刪除表 * * @tableName 表名 */ public static void deleteTable(String tableName) throws IOException { HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(tableName); admin.deleteTable(tableName); System.out.prin
59、tln(tableName + "is deleted!"); } public static void main(String[] args) throws Exception { // 創(chuàng)建表 String tableName = "blog21"; String[] family = { "article", "author" }; creatTable(tableName, family); //獲取數(shù)據(jù)庫列表 //getAllTables();
60、 //addData("a", "blog21", new String[]{"article1","article2"}, new String[]{"hello1","world1"} , new String[]{"author1","author2"}, new String[]{"hadoop1","hbase1"}); // // 遍歷查詢 //getResultScann("blog21"); // // 根據(jù)row key范圍遍歷查詢 // getResultScann("blog2", "rowkey4"
61、, "rowkey5"); // // // 查詢 // getResult("blog2", "rowkey1"); // // // 查詢某一列的值 // getResultByColumn("blog2", "rowkey1", "author", "name"); // // // 更新列 // updateTable("blog2", "rowkey1", "author", "name", "bin"); // // // 查詢某一列的值 // g
62、etResultByColumn("blog2", "rowkey1", "author", "name"); // // // 查詢某列的多版本 // getResultByVersion("blog2", "rowkey1", "author", "name"); // // // 刪除一列 // deleteColumn("blog2", "rowkey1", "author", "nickname"); // // // 刪除所有列 // deleteAllColumn("blog2", "rowkey1"); // // // 刪除表 // deleteTable("blog2"); } } 29 教育專業(yè)b
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 110中國人民警察節(jié)(筑牢忠誠警魂感受別樣警彩)
- 2025正字當頭廉字入心爭當公安隊伍鐵軍
- XX國企干部警示教育片觀后感筑牢信仰之基堅守廉潔底線
- 2025做擔當時代大任的中國青年PPT青年思想教育微黨課
- 2025新年工作部署會圍繞六個干字提要求
- XX地區(qū)中小學期末考試經(jīng)驗總結(認真復習輕松應考)
- 支部書記上黨課筑牢清廉信念為高質量發(fā)展營造風清氣正的環(huán)境
- 冬季消防安全知識培訓冬季用電防火安全
- 2025加強政治引領(政治引領是現(xiàn)代政黨的重要功能)
- 主播直播培訓直播技巧與方法
- 2025六廉六進持續(xù)涵養(yǎng)良好政治生態(tài)
- 員工職業(yè)生涯規(guī)劃方案制定個人職業(yè)生涯規(guī)劃
- 2024年XX地區(qū)黨建引領鄉(xiāng)村振興工作總結
- XX中小學期末考試經(jīng)驗總結(認真復習輕松應考)
- 幼兒園期末家長會長長的路慢慢地走