非關(guān)系型數(shù)據(jù)庫大作業(yè)【教學(xué)作業(yè)】
《非關(guān)系型數(shù)據(jù)庫大作業(yè)【教學(xué)作業(yè)】》由會(huì)員分享,可在線閱讀,更多相關(guān)《非關(guān)系型數(shù)據(jù)庫大作業(yè)【教學(xué)作業(yè)】(29頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 實(shí)驗(yàn)三HBase環(huán)境搭建、sehll操作及Java API編程 實(shí)驗(yàn)步驟: 1.搭建Zookeeper和HBase 1.ntp時(shí)間同步服務(wù)器搭建與使用 安裝ntp服務(wù)端(master) # apt-get install ntp 啟動(dòng)ntp服務(wù) # /etc/init.d/ntp start 修改配置文件 # vim /etc/ntp.conf 修改內(nèi)容如下: 重啟ntp服務(wù) # /etc/init.d/ntp restart 1.2安裝ntp客戶端(slaver1、slaver2) 使用ntpdate命令,如果不存在這個(gè)命令,則先安裝apt-get i
2、nstall ntp 同步服務(wù)器時(shí)間 # /usr/sbin/ntpdate 10.49.85.172 設(shè)置定時(shí)同步 # vim /etc/crontab 1.3 ulimit 和 nproc設(shè)置(集群均配置) HBase是數(shù)據(jù)庫,會(huì)在同一時(shí)間使用很多的文件句柄。大多數(shù)Ubuntu系統(tǒng)使用的默認(rèn)值1024是不能滿足的,所以你需要修改你的最大文件句柄限制??梢栽O(shè)置到10k. 你還需要修改 hbase 用戶的 nproc,如果過低會(huì)造成 OutOfMemoryError異常。 需要澄清的,這兩個(gè)設(shè)置是針對(duì)操作系統(tǒng)的,不是Hbase本身的。有一個(gè)常見的錯(cuò)誤是Hbase運(yùn)行的用戶,和
3、設(shè)置最大值的用戶不是一個(gè)用戶。在Hbase啟動(dòng)的時(shí)候,第一行日志會(huì)現(xiàn)在ulimit信息,所以你最好檢查一下。 1)修改limits.conf文件 # vim /etc/security/limits.conf 添加如下內(nèi)容: 2)修改common-session文件 # vim /etc/pam.d/common-session 添加如下內(nèi)容: 重啟系統(tǒng) 1.4 Zookeeper集群環(huán)境安裝過程詳解 1)解壓zookeeper tar zxvf zookeeper-3.4.5.tar.gz 2) 修改zoo.cfg配置文件 進(jìn)入到zookeeper的conf
4、目錄下將zoo_sample.cfg文件拷貝一份,命名為為zoo.cfg vim zoo.cfg 修改內(nèi)容如下: 配置文件中"server.id=host:port:port"中的第一個(gè)port是從機(jī)器(follower)連接到主機(jī)器(leader)的端口號(hào),第二個(gè)port是進(jìn)行l(wèi)eadership選舉的端口號(hào)。接下來在dataDir所指定的目錄下創(chuàng)建一個(gè)文件名為myid的文件,文件中的內(nèi)容只有一行,為本主機(jī)對(duì)應(yīng)的id值,也就是上圖中server.id中的id。例如:在服務(wù)器1中的myid的內(nèi)容應(yīng)該寫入1,在服務(wù)器2中的myid的內(nèi)容應(yīng)該寫入2,在服務(wù)器3中的myid的內(nèi)容應(yīng)該寫入3
5、。 3)同時(shí)創(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/ 在對(duì)應(yīng)slaver節(jié)點(diǎn)同時(shí)修改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 同時(shí): 在slaver1節(jié)點(diǎn)中 # pwd /soft/zookeeper # mkdir data # echo "2" > myid 在slaver2節(jié)點(diǎn)中 # pwd /soft/zookeeper # mkdir data # echo "3" > myid 1.5 啟動(dòng)zookeeper集群 在ZooKeeper集群的每個(gè)結(jié)點(diǎn)上,執(zhí)行啟動(dòng)ZooKeeper服務(wù)的腳本:
7、 # zkServer.sh start 如下圖所示: 其中,QuorumPeerMain是zookeeper進(jìn)程,啟動(dòng)正常。 出現(xiàn)錯(cuò)誤可以通過 # tail -f /soft/zookeeper/zookeeper.out 如上依次啟動(dòng)了所有機(jī)器上的Zookeeper之后可以通過ZooKeeper的腳本來查看啟動(dòng)狀態(tài),包括集群中各個(gè)結(jié)點(diǎn)的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每個(gè)結(jié)點(diǎn)上查詢的結(jié)果: 通過上面狀態(tài)查詢結(jié)果可見,cc-slaver1是集群的Leader,其余的兩個(gè)結(jié)點(diǎn)是Follower。 另外,可以
8、通過客戶端腳本,連接到ZooKeeper集群上。對(duì)于客戶端來說,ZooKeeper是一個(gè)整體(ensemble),連接到ZooKeeper集群實(shí)際上感覺在獨(dú)享整個(gè)集群的服務(wù),所以,你可以在任何一個(gè)結(jié)點(diǎn)上建立到服務(wù)集群的連接,例如: # zkCli.sh -server cc-slaver2:2181 1.6 停止zookeeper進(jìn)程 在ZooKeeper集群的每個(gè)結(jié)點(diǎn)上,執(zhí)行停止ZooKeeper服務(wù)的腳本: # zkServer.sh stop 至此,Zookeeper集群安裝完成。 1.7HBase的安裝和配置 # tar -zxvf hbase-1.2.4.tar
9、.gz 1)配置conf/hbase-env.sh 修改內(nèi)容如下: 一個(gè)分布式運(yùn)行的Hbase依賴一個(gè)zookeeper集群。所有的節(jié)點(diǎn)和客戶端都必須能夠訪問zookeeper。默認(rèn)的情況下Hbase會(huì)管理一個(gè)zookeep集群,即Hbase默認(rèn)自帶一個(gè)zookeep集群。這個(gè)集群會(huì)隨著Hbase的啟動(dòng)而啟動(dòng)。而在實(shí)際的商業(yè)項(xiàng)目中通常自己管理一個(gè)zookeeper集群更便于優(yōu)化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 來切換。這個(gè)值默認(rèn)是true的,作用是讓Hbase啟動(dòng)的時(shí)候同時(shí)也啟動(dòng)zooke
10、eper.在本實(shí)驗(yàn)中,我們采用獨(dú)立運(yùn)行zookeeper集群的方式,故將其屬性值改為false。
2)配置conf/hbase-site.xml
配置如下:
11、erty>
12、
13、oop里面的 slaver 一樣). 列在這里的server會(huì)隨著集群的啟動(dòng)而啟動(dòng),集群的停止而停止。 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 在末尾添加如下內(nèi)容 6)運(yùn)行和測試 在master上執(zhí)行: (1)# start-all.sh (2)# zkServer.sh start(各個(gè)節(jié)點(diǎn)均執(zhí)行) (3)# start-hbase.sh (涵蓋web管理界面的啟動(dòng)) 使用jps查看進(jìn)程 通過瀏覽器查看60010,60030端口查看 http://10.49.85.172:60010/ 瀏覽器主節(jié)點(diǎn)信息 7)多節(jié)點(diǎn)啟動(dòng)HMaster # hbase-daemon.sh start master 在其他子節(jié)點(diǎn)同時(shí)啟動(dòng)H
15、Master 可以做等待備份作用; 2.使用HBase shell命令進(jìn)行表的創(chuàng)建,增加刪除修改操作。Hbase腳本 啟動(dòng):hbase?shell 創(chuàng)建表 在member表中添加幾條數(shù)據(jù) 修改表數(shù)據(jù) 刪除數(shù)據(jù) 3使用Java API進(jìn)行表的創(chuàng)建,增加刪除修改操作。 向表中添加數(shù)據(jù): 更新表updateTable: 刪除所有列deleteAllColumn: 刪除列deleteColumn: 刪除表deleteTable: 刪除所有表getAllTables: 獲取結(jié)果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 第一個(gè)列族列表 * * @value1 第一個(gè)列的值的列表 * * @column2 第二個(gè)列族列表 *
28、 * @value2 第二個(gè)列的值的列表 */ 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));// 設(shè)置rowkey HTable tab
29、le = new HTable(conf, Bytes.toBytes(tableName)); // HTabel負(fù)責(zé)跟記錄相關(guān)的操作如增刪改查等 // 獲取所有的列族 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)); // 獲取指定列族和列修飾符對(duì)應(yīng)的列 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ù)的多個(gè)
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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 110中國人民警察節(jié)(筑牢忠誠警魂感受別樣警彩)
- 2025正字當(dāng)頭廉字入心爭當(dāng)公安隊(duì)伍鐵軍
- XX國企干部警示教育片觀后感筑牢信仰之基堅(jiān)守廉潔底線
- 2025做擔(dān)當(dāng)時(shí)代大任的中國青年P(guān)PT青年思想教育微黨課
- 2025新年工作部署會(huì)圍繞六個(gè)干字提要求
- XX地區(qū)中小學(xué)期末考試經(jīng)驗(yàn)總結(jié)(認(rèn)真復(fù)習(xí)輕松應(yīng)考)
- 支部書記上黨課筑牢清廉信念為高質(zhì)量發(fā)展?fàn)I造風(fēng)清氣正的環(huán)境
- 冬季消防安全知識(shí)培訓(xùn)冬季用電防火安全
- 2025加強(qiáng)政治引領(lǐng)(政治引領(lǐng)是現(xiàn)代政黨的重要功能)
- 主播直播培訓(xùn)直播技巧與方法
- 2025六廉六進(jìn)持續(xù)涵養(yǎng)良好政治生態(tài)
- 員工職業(yè)生涯規(guī)劃方案制定個(gè)人職業(yè)生涯規(guī)劃
- 2024年XX地區(qū)黨建引領(lǐng)鄉(xiāng)村振興工作總結(jié)
- XX中小學(xué)期末考試經(jīng)驗(yàn)總結(jié)(認(rèn)真復(fù)習(xí)輕松應(yīng)考)
- 幼兒園期末家長會(huì)長長的路慢慢地走