H01_Linux系統中搭建Hadoop和Spark集群

来源:https://www.cnblogs.com/suhaha/archive/2018/06/09/9159232.html
-Advertisement-
Play Games

前言 1.操作系統為Centos7 2.所有操作都是使用root用戶去操作。也可以使用其他用戶,非root的話要註意操作的許可權問題。 3.安裝的Hadoop版本是2.6.5,Spark版本是2.2.0,Scala的版本是2.11.8。 如果安裝的Spark要同Hadoop搭配工作,則需註意他們之間的 ...


前言

  1.操作系統:Centos7

  2.安裝時使用的是root用戶。也可以用其他非root用戶,非root的話要註意操作時的許可權問題。

  3.安裝的Hadoop版本是2.6.5,Spark版本是2.2.0,Scala的版本是2.11.8。

     如果安裝的Spark要同Hadoop搭配工作,則需註意他們之間的版本依賴關係。可以從Spark官網上查詢到Spark運行需要的環境,如下:

  4.需要的安裝包:

安裝包下載地址:

  JDK: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  Hadoop2.6.5:http://archive.apache.org/dist/hadoop/common/hadoop-2.6.5/

  Scala2.11.8:https://www.scala-lang.org/download/all.html

  Spark2.2.0:http://archive.apache.org/dist/spark/spark-2.2.0/

 

1.基礎環境配置

1.1集群規劃:

伺服器

進程

Hostname

IP

配置

Namenode

SecondaryNamenode

Datanode

ResourceManager

NodeManager

Master

Worker

Hadoop1

192.168.137.21

1G記憶體、1核

 

 

 

Hadoop2

192.168.137.22

1G記憶體、1核

 

 

 

 

Hadoop3

192.168.137.23

1G記憶體、1核

 

 

 

 

 註:因為我自己的筆記本配置並不高,所以這裡給每台虛擬機分配的資源都很少,可以的話應儘量分配多一點的資源。

 

1.2所有節點都增加ip和機器名稱的映射關係,且3個節點可以相互ping通。 

命令:

vim /etc/hosts

 在文件中加入如下內容

192.168.137.21 hadoop1
192.168.137.22 hadoop2
192.168.137.23 hadoop3

如下:

 

1.3所有節點關閉防火牆

查看防火牆狀態:

systemctl status firewalld

關閉防火牆:

systemctl stop firewalld
systemctl disable firewalld

如下:

 

1.4 SSH免密登錄設置

SSH免密登錄設置參考:https://www.cnblogs.com/suhaha/p/9071216.html。

通過配置,使得hadoop1、hadoop2、和hadoop3之間都可以相互免密登錄(至少要使得hadoop1可以免密登錄hadoop2和hadoop3)。

 

1.5配置NTP

這一步在測試環境中可有可無。生產環境的話,畢竟集群之間需要協同工作,幾個節點之間的時間同步還是比較重要的。

集群中配置NTP可參考:http://www.cnblogs.com/suhaha/p/8552897.htm

 

1.6配置JDK(所有節點)

JDK的配置可參考:https://blog.csdn.net/qian_feifei/article/details/75195016

如下:

 

 

註:到這一步,基礎環境算是配置好了,這時可以給各個節點做個快照,後面步驟出錯了也可以快速恢復。

 

 

2.安裝Hadoop

下麵的2.1~2.2的步驟在所有節點上都要如此操作。我們先在hadoop1上做這些操作,然後在2.3步用scp命令將配置好的hadoop文件發送到hadoop2、hadoop3節點。

2.1解壓安裝包到/usr/local/目錄下(hadoop1上操作)

命令:

cd /data/soft
tar -xvf hadoop-2.6.5.tar.gz -C /usr/local/

如下:

 

2.2進入到/usr/local/hadoop-2.6.5/etc/hadoop目錄下,修改配置文件。(hadoop1上操作)

2.2.1配置hadoop-env.sh

命令:

vim hadoop-env.sh

在hadoop-env.sh中修改JAVA_HOME

export JAVA_HOME=/usr/local/jdk

如下:

註:需根據實際java路徑進行修改

 

2.2.2配置core-site.xml

命令:

vim core-site.xml

 在文件中加入如下內容

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop1:9000</value>
</property>

如下:

 

2.2.3配置hdfs-site.xml

命令:

vim hdfs-site.xml

 在文件中加入如下內容

<property>
         <name>dfs.replication</name>
         <value>2</value>
</property>

如下:

註:該文件其實也可以保持預設,其他個性化操作比如有:

<property>
        <name>dfs.namenode.name.dir</name>
        <value> /bigdata/dfs/name</value>
        <description>需要創建相應的/bigdata/dfs/name目錄</description>
</property>
<property>
        <name>dfs.datanode.data.dir</name>
        <value> /bigdata/dfs/data</value>
        <description>需要創建相應的/bigdata/data/name目錄</description>
</property>
<property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
</property>

  

2.2.4配置yarn-site.xml

命令:

vim yarn-site.xml

 在文件中添加如下內容

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.resourcemanager.address</name>
    <value>hadoop1:8032</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>hadoop1:8030</value>
</property>
<property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>hadoop1:8031</value>
</property>
<property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>hadoop1:8033</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>hadoop1:8088</value>
</property>
<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

如下:  

註:

可以看到上面有許多埠的配置,網上很多文章的教程中是沒有的,這是因為這些埠預設就是8032、8031這樣,感覺沒有必要顯式地再次配置。

最開始我也沒配,結果出錯了,出錯的情形表現為:通過主節點可以啟動yarn集群,子節點上有NodeManager進程,但是,在http://192.168.137.22:8088/cluster/nodes頁面卻沒有顯示子節點的信息,同時在主節點上通過yarn node -list -all命令查看也沒有子節點的信息。然後在nodemanager節點的相關日誌日誌文件里(/usr/local/hadoop-2.6.5/logs/yarn-root-nodemanager-hadoop2.log)有org.apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8031異常,如下圖一所示。我的理解是,因為在yarn-site.xml文件中沒有顯式地將這些埠配置出來的原因,導致子節點無法向主節點註冊(Registered)——然後,從報錯的信息看貌似是只要把8031埠配置上了就可以了,其實也不是so easy的……如果不配置其他埠,則提交spark-on-yarn任務的時候會無限地卡在ACCEPTED狀態上,卡在該狀態上的日誌我看不出問題來,但是確實把上面的埠都配置了之後就好了。

因此,最好是將這些埠都顯式配置好!!!

圖一:

註:判定上圖信息是異常的原因,是因為子節點要去連接主節點,它需要連接到正確的主節點IP才行,而上圖中連接的卻是0.0.0.0——在子節點上,0.0.0.0的IP代表的是子節點自己,它連接錯了,自然無法向主節點註冊。

 

關於最後兩項配置

yarn.nodemanager.pmem-check-enabled:是否啟動一個線程檢查每個任務正使用的物理記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true

yarn.nodemanager.vmem-check-enabled:是否啟動一個線程檢查每個任務正使用的虛擬記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true

因為我實驗時給3台機器分配的資源都很少,所以必須得設置它們都為false,否則運行yarn程式的時候會報如下錯誤。

報錯是因為,執行程式時,yarn對於機器能分配的資源進行了檢查,結果發現運行程式需要的資源超出了機器所能分配資源的上限,然後就粗錯了。如果把上面兩項設置為false,則運行程式時就不會去進行對應的資源檢查了,此時雖然機器能分配的資源依然不足,但是yarn不會像之前那樣立馬把container幹掉了,而是會花較長的時間才能把程式跑完。

 

2.2.5配置mapred-site.xml

命令:

cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml

文件中加入如下內容

    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

註:這裡指定運行mapreduce程式時使用yarn作為資源調度器。

  若運行mapreduce程式時不需要以yarn作為資源調度器的話也可以不配置此項,不會出錯,也不會影響Spark以spark-on-yarn模式運行spark程式。

 

2.2.6配置slaves

命令:

vim slaves

 在文件中加入如下內容

hadoop2
hadoop3

如下:

註:本次配置中hadoop1是管理節點,hadoop2和hadoop3是數據節點。如果如果想使得hadoop1既是管理節點又是數據節點,可以把hadoop1也寫到slaves文件中來。

 

2.3將hadoop1上配置好的hadoop文件分發到hadoop2和hadoop3節點上(hadoop1上操作)

命令:

scp -r /usr/local/hadoop-2.6.5 root@hadoop2:/usr/local/
scp -r /usr/local/hadoop-2.6.5 root@hadoop3:/usr/local/

  

2.4修改環境變數,在hadoop1上執行以下命令

命令:

vim /etc/profile

在文件中添加如下內容:

export HADOOP_HOME=/usr/local/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

 

source /etc/profile命令使修改的環境變數生效,接著用which hdfs命令查看是否修改成功。

 

 

2.5配置完成,接著格式化hdfs

在主節點hadoop1上執行以下命令

hdfs namenode -format

如下:

註:命令執行完之後從結果上很難看出是否格式化成功了,這時可以緊接著通過echo $? 命令查看hdfs namenode -format命令是否執行成功。如果輸出0,則說明上一條執行成功,如上圖所示。

 

2.6啟動hdfs,在hadoop1上執行以下命令

cd /usr/local/hadoop-2.6.5/sbin
./start-dfs.sh

如下:

 

2.7驗證hdfs是否啟動成功

方法一:

在主節點hadoop1上用jps命令查看是否存在SecondaryNameNode和NameNode進程:

在任一子節點上用jps命令可以查是否存在DataNode進程

 

由上面兩張圖的查詢結果可知,在相應節點上可以查看到相應的SecondaryNameNode、NameNode和DataNode進程。如此,可以認為,從主節點上可以成功啟動hdfs集群了。

但是是否一定沒有問題了呢?不一定。

我們知道,hadoop集群啟動成功之後,子節點會定時向主節點發送心跳信息,主節點以此判斷子節點的狀態。所以,有時即使我們通過主節點啟動hadoop集群成功了,使用jps命令也能查詢到相應的SecondaryNameNode、NameNode和DataNode進程——但如果由於某些原因,比如某個子節點的某個配置配錯了,如我搭建時的情況是子節點的core-site.xml文件中fs.defaultFS項配置錯了,或者是由於防火牆的原因,又或者是由於前面格式化次數太多了出問題導致子節點的cluster_id跟主節點的cluster_id不一致——導致子節點無法向主節點發送心跳信息,那麼對主節點來說,該子節點就是dead的了。

於是,作為進一步驗證的方法,是在主節點上使用hdfs dfsadmin -report來觀察集群配置情況。如下:

 

方法二:

通過本地瀏覽器查看192.168.137.21:50070,驗證否部署成功

註:一定要在頁面看到所有子節點信息才算hdfs集群沒有問題。

 

2.8啟動yarnhadoop1上執行以下命令

cd  /usr/local/hadoop-2.6.5/sbin
./start-yarn.sh

如下:

 

2.9驗證yarn是否啟動成功

方法一

在主節點上用jps命令查看是否有ResourceManager進程

在子節點上用jps命令查看是否有NodeManager進程

由上面兩張圖可以看到相應的ResourceManager和NodeManager進程已經啟動起來了。

但是,同樣還不能認為yarn集群就沒有問題了,原因如2.2.4中所說的那樣(即:可能由於某些原因,導致子節點在啟動之後卻無法向主節點註冊)。

因此,保險起見,應在主節點上再通過yarn node -list -all命令查看一下。如下:

如上圖所示,說明yarn啟動成功。

如果像下圖一那樣,說明yarn集群是有問題的——這種時候如果提交了以yarn作為資源調度器的Spark任務,則任務會永遠卡在ACCEPTED狀態(如下圖二),這是因為此時yarn集群只剩下ResourceManager這個光桿司令了,沒有資源可以給它調度,所以它會一直卡在分配資源的狀態下,要命的是它會一直很頑強地不斷地努力嘗試分配資源,還不報錯......

圖一:

圖二:

 

方法二:

通過本地瀏覽器訪問192.168.137.21:8088,查看yarn是否正常工作

如上圖,在頁面上能看到子節點的信息,說明yarn集群沒有問題。如果像下圖這樣,說明你的yarn集群是有問題的。

 

 

 

2.10 hadoop集群驗證

 經過前面的步驟,簡單的hadoop集群已經搭建完畢,接下來利用hadoop自帶的jar包執行一個wordcount的mapreduce程式進行驗證。

(1)首先在linux系統中有一個hello.txt文件,文件的內容如下所示

 

(2)接下來在hdfs中新建一個目錄input,然後將hello.txt上傳到該目錄下

命令:

hadoop fs -mkdir /input
hadoop fs -put /data/my_jar/hello.txt /input

 

使用hadoop fs -ls -R /input命令可以看到已經將hello.txt文件放到hdfs上了

 使用hadoop fs -text /input/hello.txt命令可以看到hdfs中hello.txt文件的內容

 

(3)輸入已經準備好了。接下來使用以下命令執行wordcount例子程式。

命令:

hadoop jar /usr/local/hadoop-2.6.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /input /output

註:

  (1)由於我們前面已經配置mapred-site.xml文件使得mapreduce程式使用yarn作為資源調度器,因此在執行命令時,可以在http://192.168.137.21:8088/cluster/apps頁面上看到相應的application信息。

  (2)該命令使用的是hadoop自帶的jar包:/usr/local/hadoop-2.6.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar

  (3)註意到到命令的最後兩個參數/input和/output——程式將讀取hdfs中的/input目錄下的文件作為輸入,最後將運算結果保存在hdfs的/output目錄下。

  (4)註意執行命令前需保證/output目錄不存在,否則將會報錯。

如下:

註:由上圖的Connecting to ResourceManager at hadoop1/192.168.137.21:8032可以看出此次運行的mapreduce程式使用yarn作為資源調度器。

 

在yarn的http://192.168.137.21:8088/cluster/apps頁面上可以看到相應的application信息(下圖的第二個application):

 註:圖中的Application Type可以看出這裡跑的是mapreduce程式,如果是以spark-on-yarn模式跑的Spark程式,則這裡的顯示會是SPARK,如上圖的第一個application所示。

 

(4)查看輸出

由命令我們知道,該mapreduce程式將運算結果保存在了/output目錄下

命令:

hadoop fs -ls -R /output
hadoop fs -text /output/part-r-00000

如下:

 

(5)剛纔跑的mapreduce程式是用yarn來做資源調度的,而該程式之所以會以yarn作為資源調度器,是因為前面在第2.2.5步驟中配置了mapred-site.xml,指定mapreduce程式運行時以yarn作為資源調度器。

    倘若在2.2.5步中沒有如此指定,則mapreduce程式照樣可以運行,如下圖所示。

    不過此時的mapreduce程式就不是以yarn作為資源調度器了,並且這時候yarn甚至都可以不啟動。

 

 

3.安裝Spark

Spark的安裝跟hadoop(包括yarn)是相對獨立的,即使是需要以spark-on-yarn模式運行Spark程式。Spark和hadoop的關係,不像hadoop和jdk之間的關係那樣——安裝hadoop之前必須配置好jdk,但安裝Spark之前並不必須得先安裝hadoop。

Spark和hadoop的關係,更像是你和樓下飯店的關係,當你自己做飯吃的時候,樓下飯店存不存在是與你無關的;只有當你不自己做飯了,你才需要樓下有家飯店。拿Spark來說,就是:如果只是需要以local或者standalone模式運行Spark程式,那麼集群中有沒有安裝hadoop都無關緊要;只有當Spark程式需要以spark-on-yarn模式運行或者需要讀取hdfs中的文件時,它才需要hadoop的存在。所以如果沒有以spark-on-yarn模式運行Spark程式的需求的話,可以不安裝第2步中的hadoop環境,不過第1步的基礎環境還是需要配置的。——這是我初學Spark時一直迷糊的一個點,希望這裡說明清楚了。

 

3.1安裝Scala

關於安裝Spark之前要不要安裝scala?其實我也不確定。有教程說不用安裝,因為Spark安裝包中自帶scala了。也有的教程說需要先安裝scala。

對於我來說,首先因為安裝scala也沒多難,其次後期我還要用scala來開發Spark程式,所以也就安裝了。

不管怎樣,安裝步驟如下。

3.1.1root用戶解壓scala安裝包到/usr/local目錄下hadoop1上操作

命令:

cd /data/soft
tar -xvf scala-2.11.8.tgz  -C  /usr/local/

  

3.1.2將解壓後的scala目錄拷貝到hadoop2hadoop3hadoop1上操作

命令:

scp -r /usr/local/scala-2.11.8 root@hadoop2:/usr/local/
scp -r /usr/local/scala-2.11.8 root@hadoop3:/usr/local/

  

3.1.3分別在三台虛擬機上修改環境變數:

命令:

vi /etc/profile

加入如下內容

export SCALA_HOME=/usr/local/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin

如下:

 

3.1.4使修改的環境變數生效

命令:

source  /etc/profile

 

接著用which scala命令查看scala的安裝目錄是不是我們想要的

 

3.1.5測試是否安裝成功

命令:

scala

或者

scala -version

 

3.2安裝Spark(hadoop1上操作)

3.2.1解壓Spark安裝包到/usr/local/目錄下

命令:

cd /data/soft
tar -xvf spark-2.2.0-bin-hadoop2.6.tgz -C /usr/local/

  

3.2.2參數配置

3.2.2.1配置slaves

命令:

cd  /usr/local/spark-2.2.0-bin-hadoop2.6/conf
cp slaves.template slaves
vim slaves

寫入如下內容

hadoop2
hadoop3

如下:

 

3.2.2.2配置spark-env.sh

命令:

cp spark-env.sh.template spark-env.sh
vi spark-env.sh

在文件中加入以下內容:

export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop-2.6.5
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_MASTER_HOST=hadoop1
export SPARK_MASTER_PORT=7077

如下:

註:

  1) JAVA_HOME是一定要配置的

  2) 配置HADOOP_HOME和HADOOP_CONF_DIR是因為,之後我需要以spark-on-yarn模式運行Spark程式,配置HADOOP_CONF_DIR才能使得Spark可以找到正確的hadoop環境,否則每次以spark-on-yarn模式運行Spark程式時都需要手動export HADOOP_CONF_DIR=/usr/local/hadoop-2.6.5/etc/hadoop才行。如果只想以local或standalone模式運行Spark程式,則這兩項可以不配置。

  3) 至於SPARK_MASTER_HOST和SPARK_MASTER_PORT,感覺沒有必要顯式地配置,因為人家使用預設值也是沒有問題的,但是我還是配上了,不配置的話會不會有問題我就不知道了。

 

3.2.3將配置好的spark文件拷貝到hadoop2和hadoop3節點上

命令:

scp -r /usr/local/spark-2.2.0-bin-hadoop2.6 root@hadoop2:/usr/local/
scp -r /usr/local/spark-2.2.0-bin-hadoop2.6 root@hadoop3:/usr/local/

  

3.2.4在hadoop1節點上配置環境變數

命令:

vim /etc/profile

在文件中加入以下內容:

export SPARK_HOME=/usr/local/spark-2.2.0-bin-hadoop2.6
export PATH=$PATH: ${SPARK_HOME}/bin

如下:

註:這裡之所以沒有在PATH中加入${SPARK_HOME}/sbin,是因為該目錄和$HADOOP_HOME/sbin目錄下都存在start-all.sh和stop-all.sh腳本,如果在PATH中加入${SPARK_HOME}/sbin,當然也是沒有問題的,但是有可能會產生誤操作(有時候你想關閉Spark集群,於是在任意位置執行stop-all.sh命令,極有可能就把hadoop集群給關咯),所以為了避免這種情況,乾脆不配置了,當要執行start-all.sh和stop-all.sh時再手動切換到${SPARK_HOME}/sbin目錄下去執行即可。

 

使修改的環境變數生效:

source  /etc/profile

  

3.2.5啟動spark集群

命令:

cd /usr/local/spark-2.2.0-bin-hadoop2.6/sbin
./start-all.sh

如下:

 

3.2.6 通過網頁192.168.137.21:8080查看是否成功

註:同樣也是要在頁面上看到所有的Woker子節點的信息才算是成功了。

 

3.3運行spark程式測試

安裝完Spark之後,應該測試一下安裝的Spark在local模式、standalone模式和spark-on-yarn模式下是否等能成功運行程式。

對於安裝的Spark集群,有必要測試一下Spark程式是否可以以standalone模式運行。

倘若以後需要以spark-on-yarn模式進行開發,則spark-on-yarn模式的測試也非常有必要,因為有的時候雖然yarn集群啟動成功了,但是由於yarn預設參數配置不一定適合你當時的集群硬體配置,極有可能是有問題的,只有跑一個程式測試一下才能試出問題來。

Spark中也自帶了測試例子,測試方式參考:https://blog.csdn.net/pucao_cug/article/details/72453382

 

 

 

至此,配置完成。

  

 


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

-Advertisement-
Play Games
更多相關文章
  • 檢查硬體要求 系統必須滿足下麵最小的硬體要求 記憶體要求 Minimum: 1 GB of RAMRecommended: 2 GB of RAM or more To determine the RAM size, enter the following command: The following ...
  • 一、準備工作 1、IDE的pom.xml中添加 2、IDE的reources中放入centos中Hbase的三個配置文件 core-site.xmlhbase-site.xmlhdfs-site.xml 註:文件路徑:/soft/hbase/conf/**** 二、Hbase -- API操作 組成 ...
  • 單表查詢 1、查詢所有: select * from 表名; 2、查詢選中欄位數據: select 欄位名 from 表名; 3、查詢指定條件下的數據: select 欄位名 from 表名 where 條件(例id>3); 4、查詢後為欄位取別名 as: select 原名 as 更改名 from ...
  • 背景 由於項目的需要,使用 資料庫,因此在Windows上安裝 資料庫。但是在安裝後,無法訪問本地資料庫,這個時候查看 目錄,沒有任何文件。而且安裝過程中,彈出提示框 Problem running post install step.Installation may not complete co ...
  • 在鎖與事務系列里已經寫完了上篇中篇,這次寫完下篇。這個系列俺自認為是有條不紊的進行,但感覺鎖與事務還是有多很細節沒有講到,溫故而知新可以為師矣,也算是一次自我提高總結吧,也謝謝大伙的支持。在上一篇的末尾寫了事務隔離級別的不同表現,還沒寫完,只寫到了重覆讀的不同隔離表現,這篇繼續寫完序列化,快照的不同 ...
  • 一、表關係 先參照如下表結構創建7張表格,並創建相關約束 年級表: class_grade 1. 班級表class create table class ( cid int primary key auto_increment, caption char(10), grade_id int ); i ...
  • 第一步:使用記事本打開mysql安裝目錄下的"my.ini”文件。 看看default-character-set 是不是 utf8不是的話 改為utf8即可!(以前的版本可能沒有這句話 直接加上就好了!) 第二步:在mysql資料庫cmd中輸入:show variables like'%char% ...
  • zookeeper的安裝分為三種模式:單機模式、集群模式和偽集群模式。 1、單機模式 首先,從Apache官網下載一個Zookeeper穩定版本,本次教程採用的是zookeeper-3.4.9版本。 http://apache.fayea.com/zookeeper/zookeeper-3.4.9/ ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...