第9章 HBase操作

来源:https://www.cnblogs.com/dreamboy/archive/2018/07/11/9293295.html
-Advertisement-
Play Games

[TOC] HBase集群建立在Hadoop集群基礎之上,而且依賴於ZooKeeper,所以在搭建HBase集群之前需要把Hadoop集群搭建起來,並且搭建好ZooKeeper集群。Hadoop與ZooKeeper集群的搭建在前面章節已講解過,在此不再贅述。 9.1 集群環境搭建 HBase集群搭建 ...


目錄

HBase集群建立在Hadoop集群基礎之上,而且依賴於ZooKeeper,所以在搭建HBase集群之前需要把Hadoop集群搭建起來,並且搭建好ZooKeeper集群。Hadoop與ZooKeeper集群的搭建在前面章節已講解過,在此不再贅述。

9.1 集群環境搭建

HBase集群搭建的詳細步驟如下(也可以參考官網http://hbase.apache.org/book.html#quickstart):

1.上傳解壓HBase安裝包

將hbase-1.2.4-bin.tar.gz上傳到centos01伺服器的/opt/softwares目錄並將其解壓到目錄/opt/modules/,解壓命令如下:

[hadoop@centos01 softwares]$ tar -zxf hbase-1.2.4-bin.tar.gz -C /opt/modules/

2.hbase-env.sh文件配置

修改HBase安裝目錄/conf下的配置文件hbase-env.sh,配置關聯的JDK,加入以下代碼:

export JAVA_HOME=/opt/modules/jdk1.8.0_101

如果需要使用HBase自帶的ZooKeeper,則去掉該文件中的註釋 # export HBASE_MANAGES_ZK=true即可。

3.hbase-site.xml文件配置

修改HBase安裝目錄/conf下的配置文件hbase-site.xml,加入以下代碼:

<configuration>
    <property><!--需要與HDFS namenode埠一致-->
    <name>hbase.rootdir</name>
    <value>hdfs://centos01:9000/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property><!--ZooKeeper節點列表 -->
    <name>hbase.zookeeper.quorum</name>
    <value>centos01,centos02,centos03</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/modules/hbase-1.2.4/zkData</value>
  </property>
</configuration>

上述參數解析如下:
hbase.rootdir:HBase的數據存儲目錄,由於HBase數據存儲在HDFS上,所以要寫HDFS的目錄,註意埠要和Hadoop的fs.defaultFS埠一致。配置好後,HBase數據就會寫入到這個目錄中,且目錄不需要手動創建,HBase啟動的時候會自動創建。
hbase.cluster.distributed:設置為true代表開啟完全分散式。
hbase.zookeeper.quorum:設置依賴的ZooKeeper節點,此處加入所有ZooKeeper集群即可。
hbase.zookeeper.property.dataDir:設置ZooKeeper的配置、日誌等數據存放目錄。
另外,還有一個屬性hbase.tmp.dir,是設置HBase臨時文件存放目錄,不設置的話,預設存放在/tmp目錄,該目錄重啟就會清空。

4.regionservers文件配置

regionservers文件列出了所有運行HBase的伺服器,即HRegionServer。對該文件的配置與Hadoop中對slaves文件的配置相似,需要在文件中的每一行指定一臺伺服器,當HBase啟動時會讀取該文件,將文件中指定的所有伺服器啟動。當HBase停止的時候,也會同時停止它們。

本例中,我們將三個節點都作為運行HRegionServer的伺服器,因此,我們需要作出如下修改:
修改HBase安裝目錄下的/conf/regionservers文件,去掉預設的localhost,加入如下內容:

centos01
centos02
centos03

5.拷貝hbase到其它節點。

centos01節點配置完成後,需要拷貝整個HBase安裝目錄文件到集群的其它節點,拷貝命令如下:

[hadoop@centos01 modules]$ scp -r hbase-1.2.4/ hadoop@centos02:/opt/modules/
[hadoop@centos01 modules]$ scp -r hbase-1.2.4/ hadoop@centos03:/opt/modules/

6.啟動與測試

啟動HBase集群之前,需要先啟動Hadoop集群:

sbin/start-all.sh

然後執行如下命令,啟動HBase集群。啟動HBase集群的同時,會將ZooKeeper集群也同時啟動。

bin/start-hbase.sh

HBase啟動日誌如下:

[hadoop@centos01 hbase-1.2.4]$ bin/start-hbase.sh 
centos02: starting zookeeper, logging to /opt/modules/hbase-1.2.4/bin/../logs/hbase-hadoop-zookeeper-centos02.out
centos03: starting zookeeper, logging to /opt/modules/hbase-1.2.4/bin/../logs/hbase-hadoop-zookeeper-centos03.out
centos01: starting zookeeper, logging to /opt/modules/hbase-1.2.4/bin/../logs/hbase-hadoop-zookeeper-centos01.out
starting master, logging to /opt/modules/hbase-1.2.4/bin/../logs/hbase-hadoop-master-centos01.out
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
centos03: starting regionserver, logging to /opt/modules/hbase-1.2.4/bin/../logs/hbase-hadoop-regionserver-centos03.out
centos02: starting regionserver, logging to /opt/modules/hbase-1.2.4/bin/../logs/hbase-hadoop-regionserver-centos02.out
centos01: starting regionserver, logging to /opt/modules/hbase-1.2.4/bin/../logs/hbase-hadoop-regionserver-centos01.out
centos02: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
centos02: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
centos03: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
centos03: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
centos01: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
centos01: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

HBase啟動完成後,查看各節點Java進程:

[hadoop@centos01 hbase-1.2.4]$ jps
12544 DataNode
13584 HQuorumPeer
13074 NodeManager
12916 ResourceManager
14661 Jps
14311 HMaster
12745 SecondaryNameNode
12428 NameNode
14447 HRegionServer

[hadoop@centos02 zookeeper-3.4.9]$ jps
13632 DataNode
13761 NodeManager
14199 HRegionServer
14343 Jps
14093 HQuorumPeer

[hadoop@centos03 zookeeper-3.4.9]$ jps
8994 DataNode
9458 HQuorumPeer
9114 NodeManager
9546 HRegionServer
9679 Jps

從上述查看結果中可以看出,centos01節點上出現了HMaster、HQuorumPeer和HRegionServer進程,centos02和centos03節點上出現了HQuorumPeer和HRegionServer進程。這說明啟動成功了。
HBase1.0以後的Web端訪問預設埠變為了16010,瀏覽器地址輸入http://centos01:16010,查看HBase的運行狀態,如下圖所示。

9.2 HBase Shell命令操作

HBase 為用戶提供了一個非常方便的命令行操作方式,我們稱之為HBase Shell。
HBase Shell 提供了大多數的 HBase 命令,通過 HBase Shell 用戶可以方便地創建、刪除及修改表,還可以向表中添加數據、列出表中的相關信息等。

在啟動 HBase 之後,我們可以通過下麵的命令進入 HBase Shell 之中:

[hadoop@centos01 hbase-1.2.4]$ bin/hbase shell

下麵通過實際操作來介紹HBase Shell的使用。

1.創建表

創建表t1,列族f1,命令如下:

create 't1','f1'

2.添加數據

向表t1中添加一條數據,rowkey為row1,列name的值為zhangsan。命令如下:

put 't1','row1','f1:name','zhangsan'

再向表t1中添加一條數據,rowkey為row2,列age為18。命令如下:

put 't1','row2','f1:age','18'

3.掃描表

掃描表t1,查看數據描述,命令如下:

scan 't1'

執行結果如下:

hbase(main):005:0> scan 't1'
ROW                                        COLUMN+CELL                                                                                                              
 row1                                      column=f1:name, timestamp=1509344793600, value=zhangsan                                                                  
 row2                                      column=f1:age, timestamp=1509345245541, value=18                                                                         
2 row(s) in 0.0450 seconds

可以看到,表t1中已經存在兩條已添加的數據了。

4.修改表

修改row1中的name值,將zhangsan改為lisi,仍然使用put命令:

put 't1','row1','f1:name','lisi'

再掃描表t1,此時row1中name的值已經變為了“lisi”:

hbase(main):002:0> scan 't1'
ROW                                        COLUMN+CELL                                                                                                              
 row1                                      column=f1:name, timestamp=1509345996225, value=lisi                                                                      
 row2                                      column=f1:age, timestamp=1509345245541, value=18                                                                         
2 row(s) in 0.1000 seconds

5.刪除特定單元格

刪除表中rowkey為row1的行的name單元格,命令如下:

delete 't1','row1','f1:name'

掃描表t1,發現rowkey為row1的行不存在了,因為row1只有一個name單元格,name被刪除了,row1一整行也就不存在了。

hbase(main):006:0> scan 't1'
ROW                                        COLUMN+CELL                                                                                                              
 row2                                      column=f1:age, timestamp=1509345245541, value=18                                                                         
1 row(s) in 0.0750 seconds

6.刪除一整行數據

刪除rowkey為row2的行中所有單元格,命令如下:

deleteall 't1','row2'

掃描表t1,發現owkey為row2的行已不存在了:

hbase(main):008:0> scan 't1'
ROW                                        COLUMN+CELL                                                                                                              
0 row(s) in 0.0250 seconds

7.刪除整張表

刪除整張表,需要先禁用表,然後再刪除表。例如,刪除表t1,命令如下:

disable 't1'
drop 't1'

9.3 Java API操作

使用HBase Java API可以對錶進行創建、添加數據、修改刪除數據等。本例在eclipse中編寫Java API進行測試,測試前需先啟動HBase集群。

9.3.1 創建Java工程

在eclipse中新建maven項目hbasedemo,然後在項目pom.xml中加入hbase的客戶端jar包依賴:

<dependency>  
        <groupId>org.apache.hbase</groupId>  
        <artifactId>hbase-client</artifactId>  
        <version>1.2.4</version>  
</dependency>

加入以後發現pom.xml報如下錯誤:
Missing artifact jdk.tools:jdk.tools:jar:1.7
原因是,pom.xml中加入的hbase客戶端jar包隱式依賴tools.jar包,而tools.jar並未存在於maven倉庫中,tools.jar包是JDK自帶的。因此我們需要在pom.xml中繼續引入tools.jar包,代碼如下:

<dependency>  
         <groupId>jdk.tools</groupId>  
         <artifactId>jdk.tools</artifactId>  
         <version>1.7</version>  
         <scope>system</scope>  <!—需要配置好環境變數JAVA_HOME-->
         <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>  
</dependency>

此時問題得到解決。

9.3.2 創建表

(1)在maven項目hbasedemo中新建Java類HBaseCreateTable.java,在main函數中寫入創建表的代碼,如下:

import org.apache.hadoop.conf.Configuration;
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.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

public class HBaseCreateTable{
    public static void main(String[] args) throws Exception {
        //創建Hadoop配置對象
        Configuration conf=HBaseConfiguration.create();
        //指定ZooKeeper集群地址
        conf.set("hbase.zookeeper.quorum", "192.168.170.128:2181,192.168.170.129:2181,192.168.170.130:2181");
        //創建連接對象Connection
        Connection conn=ConnectionFactory.createConnection(conf);
        //得到資料庫管理員對象
        Admin admin=conn.getAdmin();
        
        TableName tableName=TableName.valueOf("t1");
        //創建表描述,並指定表名
        HTableDescriptor desc=new HTableDescriptor(tableName);
        //創建列族描述
        HColumnDescriptor family=new HColumnDescriptor("f1");
        //指定列族
        desc.addFamily(family);
        //創建表
        admin.createTable(desc);
        System.out.println("create table success!!");
    }
}

(2)右鍵運行main函數,輸出create table success!!信息,則說明創建成功。
(3)在HBase集群的centos01節點上,輸入hbase shell進入Shell命令行模式,然後輸入list命令查看當前HBase中的所有表,效果如下:

hbase(main):007:0> list
TABLE                                                                                                                                                           
t1

從輸出結果中我們可以看到,表t1已創建成功。

9.3.3 添加數據

(1)在maven項目hbasedemo中新建Java類HBasePutData.java,在main函數中寫入添加三條數據的代碼,如下:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class HBasePutData{
    public static void main(String[] args) throws Exception {
        //創建Hadoop配置對象
        Configuration conf=HBaseConfiguration.create();
        //指定ZooKeeper集群地址
        conf.set("hbase.zookeeper.quorum", "192.168.170.128:2181,192.168.170.129:2181,192.168.170.130:2181");
        //創建資料庫連接對象Connection
        Connection conn=ConnectionFactory.createConnection(conf);
        //Table負責與記錄相關的操作,如增刪改查等
        TableName tableName=TableName.valueOf("t1");
        Table table=conn.getTable(tableName);
        
        Put put = new Put(Bytes.toBytes("row1"));// 設置rowkey
        //添加列數據,指定列族、列名與列值
        put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("xiaoming"));
        put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes("20"));
        put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), Bytes.toBytes("beijing"));
        
        Put put2 = new Put(Bytes.toBytes("row2"));// 設置rowkey
        //添加列數據,指定列族、列名與列值
        put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("xiaoming2"));
        put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes("22"));
        put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), Bytes.toBytes("beijing2"));
        
        Put put3 = new Put(Bytes.toBytes("row3"));// 設置rowkey
        //添加列數據,指定列族、列名與列值
        put3.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes("25"));
        put3.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), Bytes.toBytes("beijing3"));
        
        //執行添加數據
        table.put(put);
        table.put(put2);
        table.put(put3);
        //釋放資源
        table.close();
        System.out.println("put data success!!");
    }
}

上方代碼中,新建了三個Put對象,每個Put對象包含需要添加的一條數據。
(2)右鍵運行main函數,輸出put data success!!信息,則說明數據添加成功。
(3)在HBase集群的centos01節點上,輸入hbase shell進入Shell命令行模式,然後輸入scan 't1'命令掃描表t1中的數據,結果如下:

hbase(main):017:0> scan 't1'
ROW                                       COLUMN+CELL                                                                                                           
 row1                                     column=f1:address, timestamp=1514533573439, value=beijing                                                             
 row1                                     column=f1:age, timestamp=1514533573439, value=20                                                                      
 row1                                     column=f1:name, timestamp=1514533573439, value=xiaoming                                                               
 row2                                     column=f1:address, timestamp=1514533573514, value=beijing2                                                            
 row2                                     column=f1:age, timestamp=1514533573514, value=22                                                                      
 row2                                     column=f1:name, timestamp=1514533573514, value=xiaoming2                                                              
 row3                                     column=f1:address, timestamp=1514533573524, value=beijing3                                                            
 row3                                     column=f1:age, timestamp=1514533573524, value=25                                                                      
3 row(s) in 0.3930 seconds

從輸出結果中我們可以看到,表t1成功添加了三條數據,rowkey分別為row1、row2和row3,同屬於列族f1,row1有三個欄位address、age、name,row2有三個欄位address、age、name,row3有兩個欄位address、age。

9.3.4 查詢數據

在maven項目hbasedemo中新建Java類HBaseGetData.java,在main函數中寫入查詢數據的代碼。例如,查詢表t1中行鍵為row1的一整條數據,代碼如下:

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.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
/**根據rowkey查詢一條數據,實測成功,直接右鍵運行即可**/
public class HBaseGetData{
    public static void main(String[] args) throws Exception {
        //創建Hadoop配置對象
        Configuration conf=HBaseConfiguration.create();
        //指定ZooKeeper集群地址
        conf.set("hbase.zookeeper.quorum", "192.168.170.128:2181,192.168.170.129:2181,192.168.170.130:2181");
        //獲得資料庫連接
        Connection conn=ConnectionFactory.createConnection(conf);
       //獲取Table對象,指定查詢表名,Table負責與記錄相關的操作,如增刪改查等
        Table table = conn.getTable(TableName.valueOf("t1"));  
        //創建Get對象,根據rowkey查詢,rowkey=row1  
        Get get = new Get("row1".getBytes());
        //查詢數據,取得結果集
        Result r = table.get(get); 
        //迴圈輸出每個單元格的數據
        for (Cell cell : r.rawCells()) {  
            //取得當前單元格所屬的列族名稱
            String family=new String(CellUtil.cloneFamily(cell));
            //取得當前單元格所屬的列名稱
            String qualifier=new String(CellUtil.cloneQualifier(cell));
            //取得當前單元格的列值
            String value=new String(CellUtil.cloneValue(cell));
            //輸出結果
         System.out.println("列:" + family+":"+qualifier + "—————值:" + value);  
        }  
    }
}

右鍵運行main函數,控制台輸出結果為:

列:f1:address—————值:beijing
列:f1:age—————值:20
列:f1:name—————值:xiaoming

與t1表中實際數據一致,則查詢成功。

9.3.5 刪除數據

(1)在maven項目hbasedemo中新建Java類HBaseDeleteData.java,在main函數中寫入刪除數據的代碼。例如,刪除表t1中行鍵為row1的一整條數據,代碼如下:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
/**根據rowkey查詢一條數據,實測成功,直接右鍵運行即可**/
public class HBaseDeleteData{
    public static void main(String[] args) throws Exception {
        //創建Hadoop配置對象
        Configuration conf=HBaseConfiguration.create();
        //指定ZooKeeper集群地址
        conf.set("hbase.zookeeper.quorum", "192.168.170.128:2181,192.168.170.129:2181,192.168.170.130:2181");
        //獲得資料庫連接
        Connection conn=ConnectionFactory.createConnection(conf);
        //獲取Table對象,指定表名,Table負責與記錄相關的操作,如增刪改查等
        TableName tableName=TableName.valueOf("t1");
        Table table=conn.getTable(tableName);
        //創建刪除對象Delete,根據rowkey刪除一整條
        Delete delete=new Delete(Bytes.toBytes("row1"));
        table.delete(delete);
        //釋放資源
        table.close();
        System.out.println("delete data success!!");
    }
}

(2)右鍵運行main函數,輸出delete data success!!信息,則說明數據刪除成功。
(3)在HBase集群的centos01節點上,輸入hbase shell進入Shell命令行模式,然後輸入scan 't1'命令掃描表t1中的數據,結果如下:

hbase(main):019:0> scan 't1'
ROW                                       COLUMN+CELL                                                                                                           
 row2                                     column=f1:address, timestamp=1514533573514, value=beijing2                                                            
 row2                                     column=f1:age, timestamp=1514533573514, value=22                                                                      
 row2                                     column=f1:name, timestamp=1514533573514, value=xiaoming2                                                              
 row3                                     column=f1:address, timestamp=1514533573524, value=beijing3                                                            
 row3                                     column=f1:age, timestamp=1514533573524, value=25                                                                      
2 row(s) in 0.1080 seconds

從結果中我們可以看到,表t1中的rowkey為row1的行已經被刪除了。

原創文章,轉載請註明出處!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL的自增列(AUTO_INCREMENT)和其它資料庫的自增列對比,有很多特性和不同點(甚至不同存儲引擎、不同版本也有一些不同的特性),讓人感覺有點稍微複雜。下麵我們從一些測試開始,來認識、瞭解一下這方面的特殊知識點: 自增列持久化問題 如果一個表擁有自增列,當前最大自增列值為9, 刪除了自... ...
  • 創建資料庫,並創建一張表mytb進行測試 ********************************************************************************************************************************* ...
  • 1.之前安裝好mysql後,我做了操作:切換root用戶,vim /etc/profile,在文件中添加 export PATH=$PATH:/usr/local/mysql/bin 遇到的問題如下圖: 只有在root的用戶下才能找到mysql的命令,解決方法如下: 進入當前coho用戶目錄下編輯 ...
  • 1. 游標的使用(游標) 在存儲過程和函數中可以使用游標對結果集進行迴圈的處理,游標使用包括游標的聲明,open ,fetch,close。 下麵在存儲過程中使用一個游標, 這個舉例中游標里的邏輯不重要, 重點在於如何使用游標: 2. 流程式控制制 包括 if ,case, loop, leave, i ...
  • 社會科學研究社會現象的總體特征,以往採樣一直是主要數據獲取手段,這是人類在無法獲得總體數據信息條件下的無奈選擇。在大數據時代,人們可以獲得與分析更多的數據,甚至是與之相關的所有數據,而不再依賴於採樣,從而可以帶來更全面的認識,可以更清楚地發現樣本無法揭示的細節信息。 推薦一個大數據學習群 11959 ...
  • MySQL添加新用戶時出現如下報錯,如下圖: 經過查資料瞭解到: mysql用戶表的中某些欄位不能為空,沒有預設值,其實是操作錯誤,mysql添加用戶是不能這樣直接insert user表的。 改為以下方式添加新用戶,如下圖: 這樣就添加了一個新用戶ziyue,密碼ziyue@2018。 ...
  • Hadoop簡介 Hadoop是Apache軟體基金會旗下的一個開源分散式計算平臺,為用戶提供了系統底層細節透明的分散式基礎架構。 Hadoop是基於Java語言開發的,具有很好的跨平臺特性,並且可以部署在廉價的電腦集群中。 Hadoop的核心是分散式文件系統(Hadoop Distributed ...
  • 最近在做NBU ORACLE備份的恢複測試,執行恢復時報錯ORA-27211: Failed to load Media Management Library,具體處理過程如下:一、錯誤信息 執行命令: 報錯信息: 二、錯誤原因 由於資料庫的Lib庫不包含NBU的庫文件,所以執行rman恢復時報錯 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...