国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Ubuntu 16.04——Hadoop集群安裝配置

這篇具有很好參考價(jià)值的文章主要介紹了Ubuntu 16.04——Hadoop集群安裝配置。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Hadoop集群安裝配置

hadoop 集群安裝配置分為兩個(gè)部分,一個(gè)部分是 主節(jié)點(diǎn)(Master)從節(jié)點(diǎn)(Slave),兩個(gè)部分需要完成的配置有一定的不同;總的來(lái)說(shuō),Master 所需要做的會(huì)比 Slave 會(huì)多一些。下面會(huì)演示兩個(gè)部分需要做的事情;由于各臺(tái)主機(jī)情況會(huì)有所不同,所以在報(bào)錯(cuò)的時(shí)候也會(huì)有一些的不一樣,所以該文章僅供參考。

環(huán)境

主機(jī)版本:Windows11

虛擬機(jī)版本:ubuntukylin-16.04-desktop-amd64

VMware 版本: VMware? Workstation 17 Pro

網(wǎng)卡:橋接模式

jdk 版本:jdk-8u162-linux-x64

hadoop 版本:hadoop-3.1.3

注:硬件版本是使用的兼容 VMware 12.X 的。

看下文之前,默認(rèn)是已經(jīng)配置好 IP 地址可以上網(wǎng),因?yàn)榇蠹沂褂玫木W(wǎng)絡(luò)適配器可能會(huì)有所不同,所以可能會(huì)出現(xiàn)一些對(duì) NAT 網(wǎng)絡(luò)使用者不友好的情況,再次提醒各位,該篇文章僅供參考。

節(jié)點(diǎn)配置

我們需要對(duì) Master 節(jié)點(diǎn)和 Slave 節(jié)點(diǎn)都進(jìn)行配置,因?yàn)楹芏鄸|西都是可以直接有 Master 來(lái)做的,所以呢,我們就先讓 Master 把能做的都做了先,然后盡量讓 Slave 能輕松一些。中心思想就是一個(gè) Master 配置完之后直接使用傳輸命令將配置好的軟件直接打包發(fā)送到 Slave 上,所以相對(duì)來(lái)說(shuō) Master 會(huì)做的更多一些,但是也會(huì)節(jié)省資源。

配置前提

因?yàn)榭紤]到很多人可能是做偽分布的,所以會(huì)出現(xiàn)多多少少的問(wèn)題,所以這里還是在給大家看一些簡(jiǎn)單的前提。

修改主機(jī)名

在修改主機(jī)名稱(chēng)之前,我們需要先查看另外一個(gè)文件的內(nèi)容,因?yàn)檫@個(gè)會(huì)對(duì)我們修改后有一定的影響。

我們首先是需要先打開(kāi) /etc/hosts 查看內(nèi)容,一般hosts文件中只能有一個(gè)127.0.0.1,其對(duì)應(yīng)主機(jī)名為localhost,如果有多余127.0.0.1映射,應(yīng)刪除,特別是不能存在“127.0.1.1 [主機(jī)名]”這樣的映射記錄。修改后需要重啟Linux系統(tǒng)。

sudo vim /etc/hosts

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

打開(kāi)后我們可以看到這里會(huì)有被紅色框框圈起來(lái)的地方,如果沒(méi)有可以不用管,如果有,請(qǐng)把它注釋掉或者直接刪除。我這里選擇的就是把它注釋掉。注釋之后效果就是如下圖這樣子了。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

既然需要大家把它注釋掉肯定是因?yàn)樗幸恍﹦e的作用,最主要的作用就是為了避免我們使用命令的時(shí)候發(fā)生報(bào)錯(cuò)或者其他一些 warning,比如像下圖,無(wú)法解析主機(jī)的錯(cuò)誤,因?yàn)槲覀冃薷闹鳈C(jī)名稱(chēng)之后,他們之間的映射關(guān)系變了,但是之前的映射關(guān)系并沒(méi)有被覆蓋或者刪除,所以系統(tǒng)無(wú)法對(duì)修改后的主機(jī)名進(jìn)行映射,最終產(chǎn)生這樣的錯(cuò)誤。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

sudo vim /etc/hostname

執(zhí)行上面命令后,就打開(kāi)了“/etc/hostname”這個(gè)文件,這個(gè)文件里面記錄了主機(jī)名,比如,假設(shè)安裝Ubuntu系統(tǒng)時(shí),設(shè)置的主機(jī)名是“hadoop01”,因此,打開(kāi)這個(gè)文件以后,里面就只有“hadoop01”這一行內(nèi)容,可以直接刪除,并修改為“Master”(注意是區(qū)分大小寫(xiě)的),然后,保存退出vim編輯器,這樣就完成了主機(jī)名的修改,需要重啟Linux系統(tǒng)才能看到主機(jī)名的變化。

Master

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

要注意觀察主機(jī)名修改前后的變化。在修改主機(jī)名之前,如果用hadoop登錄Linux系統(tǒng),打開(kāi)終端,進(jìn)入Shell命令提示符狀態(tài),會(huì)顯示如下內(nèi)容:

hadoop@hadoop01:~$

修改主機(jī)名并且重啟系統(tǒng)之后,用hadoop登錄Linux系統(tǒng),打開(kāi)終端,進(jìn)入Shell命令提示符狀態(tài),會(huì)顯示如下內(nèi)容:

hadoop@Master:~$

可以看出,這時(shí)就很容易辨認(rèn)出當(dāng)前是處于Master節(jié)點(diǎn)上進(jìn)行操作,不會(huì)和Slave節(jié)點(diǎn)產(chǎn)生混淆。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

然后,在Master節(jié)點(diǎn)中執(zhí)行如下命令打開(kāi)并修改Master節(jié)點(diǎn)中的“/etc/hosts”文件:

sudo vim /etc/hosts

打開(kāi)文件后,我們?cè)谖募淖詈笮略鰞?nèi)容,假設(shè)我們現(xiàn)在使用的是三臺(tái)主機(jī)進(jìn)行連接,那么就有兩臺(tái)是 Slave 節(jié)點(diǎn),格式如下:

[Master的IP] Master
[Slave1的IP] Slave1
[Slave2的IP] Slave2

配置完成后,效果類(lèi)似下圖,但因?yàn)槲沂怯兴呐_(tái)主機(jī),所以我有三個(gè) SLave 節(jié)點(diǎn),至于有一行 Master 被注釋了,則是因?yàn)樾枰脴蚪泳W(wǎng)絡(luò),而且虛擬機(jī)會(huì)在機(jī)房電腦和我的筆記本上輾轉(zhuǎn),所以就會(huì)有兩個(gè)不一樣的,但因?yàn)樽⑨屃耍灾挥械谝粋€(gè)是生效的。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

修改完成以后,請(qǐng)重新啟動(dòng)各節(jié)點(diǎn)的Linux系統(tǒng)。這樣就完成了 Master 節(jié)點(diǎn)和 Slave 節(jié)點(diǎn)的配置,然后,需要在各個(gè)節(jié)點(diǎn)上都執(zhí)行如下命令,測(cè)試是否相互ping得通,如果ping不通,后面就無(wú)法順利配置成功:

ping Master -c 3   # 只ping 3次就會(huì)停止,否則要按Ctrl+c中斷ping命令
ping Slave1 -c 3

這里只演示了兩個(gè),請(qǐng)大家根據(jù)自己的實(shí)際情況(有多少臺(tái)主機(jī))進(jìn)行修改,需要相互都可以 ping 通才算是可以連接上,關(guān)于各個(gè)主機(jī)之間的免密登陸,這里就不過(guò)多進(jìn)行贅述,就默認(rèn)都已經(jīng)可以免密登陸了。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

Master 配置

在 Master 上是需要配置環(huán)境變量,然后是對(duì) Hadoop 進(jìn)行配置,配置文件總共有六個(gè),分別為 workers、core-site.xml、hdfs-site.xmlmapred-site.xml、yarn-site.xml,具體的在下面會(huì)給大家進(jìn)行解釋?zhuān)稽c(diǎn)拙見(jiàn),若有不對(duì),可以在評(píng)論區(qū)指出。

配置PATH變量

如果還沒(méi)有配置PATH變量,那么需要在Master節(jié)點(diǎn)上進(jìn)行配置。 首先執(zhí)行命令“vim ~/.bashrc”,也就是使用vim編輯器打開(kāi)“ bashrc ”文件

sudo vim ~/.bashrc

然后,在該文件最上面的位置加入下面一行內(nèi)容:

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

配置完 jdk 和 hadoop 的環(huán)境變量之后,~/.bashrc 文件中就會(huì)有這么幾行內(nèi)容,路徑隨安裝的路徑會(huì)有所不同。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

保存后執(zhí)行命令“source ~/.bashrc”,使配置生效。

source ~/.bashrc
配置集群/分布式環(huán)境

在配置集群/分布式模式時(shí),需要修改“/usr/local/hadoop/etc/hadoop”目錄下的配置文件,這里僅設(shè)置正常啟動(dòng)所必須的設(shè)置項(xiàng),包括workers 、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml共5個(gè)文件,更多設(shè)置項(xiàng)可查看官方說(shuō)明。接下來(lái)我們配置文件都會(huì)默認(rèn)在 Hadoop 的安裝目錄下面。

cd /usr/local/hadoop/etc/hadoop # 進(jìn)入文件所在目錄文件夾
修改配置文件
(1)修改 workers 文件

需要把所有數(shù)據(jù)節(jié)點(diǎn)的主機(jī)名寫(xiě)入該文件,每行一個(gè),默認(rèn)為 localhost(即把本機(jī)作為數(shù)據(jù)節(jié)點(diǎn)),所以,在偽分布式配置時(shí),就采用了這種默認(rèn)的配置,使得節(jié)點(diǎn)既作為名稱(chēng)節(jié)點(diǎn)也作為數(shù)據(jù)節(jié)點(diǎn)。在進(jìn)行分布式配置時(shí),可以保留 localhost,讓 Master 節(jié)點(diǎn)同時(shí)充當(dāng)名稱(chēng)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),或者也可以刪掉localhost這行,讓 Master 節(jié)點(diǎn)僅作為名稱(chēng)節(jié)點(diǎn)使用。

vim workers 

Master節(jié)點(diǎn)僅作為名稱(chēng)節(jié)點(diǎn)使用,因此將 workers 文件中原來(lái)的 localhost 刪除,添加如下內(nèi)容:

Slave1
Slave2
Slave3

因?yàn)槲沂撬呐_(tái)主機(jī)連在一起,然后我的選擇是 Master 作為 Namenode,其余 Slave 節(jié)點(diǎn)作為 Datanode,所以文件中我需要填寫(xiě)三個(gè)節(jié)點(diǎn)的主機(jī)名稱(chēng)。具體效果如下圖:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

(2)修改配置文件 core-site.xml

Hadoop 的配置文件是 xml 格式,每個(gè)配置以聲明 <property><name><value> 的方式來(lái)實(shí)現(xiàn)。通過(guò) gedit 編輯會(huì)比較方便

gedit ./etc/hadoop/core-site.xml

請(qǐng)把 core-site.xml 文件修改為如下內(nèi)容:

  1. fs.defaultFS,值的格式是: file:///文件:///,這是默認(rèn)文件系統(tǒng)的名稱(chēng)。 一個(gè)URI,其方案和權(quán)限決定了文件系統(tǒng)的實(shí)現(xiàn)。 該 uri 的方案確定配置屬性(fs.SCHEME.impl)命名 FileSystem 實(shí)現(xiàn)類(lèi)。 uri 的權(quán)限用于 確定文件系統(tǒng)的主機(jī)、端口等。
  2. hadoop.tmp.dir,值的格式是:/tmp/hadoop-${user.name},是其他臨時(shí)目錄的基目錄。
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:///usr/local/hadoop/tmp</value>
                <description>A base for other temporary directories.</description>
        </property>
</configuration>

修改前:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)
修改后:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

放出修改前后圖是為了讓大家能對(duì)比清楚需要修改的地方,以免大家改了不該改的。

(3)修改文件

對(duì)于 Hadoop 的分布式文件系統(tǒng) HDFS 而言,一般都是采用冗余存儲(chǔ),冗余因子通常為3,也就是說(shuō),一份數(shù)據(jù)保存三份副本。如果只使用了一個(gè)Slave節(jié)點(diǎn)作為數(shù)據(jù)節(jié)點(diǎn),即集群中只有一個(gè)數(shù)據(jù)節(jié)點(diǎn),數(shù)據(jù)只能保存一份,所以 ,dfs.replication 的值還是設(shè)置為 1。所以在修改的時(shí)候需要根據(jù)節(jié)點(diǎn)數(shù)量來(lái)決定。

vim hdfs-site.xml

修改的 hdfs-site.xml 具體內(nèi)容如下:

  1. dfs.namenode.secondary.http-address,值的格式是:0.0.0.0:9868,輔助名稱(chēng)節(jié)點(diǎn) http 服務(wù)器地址和端口。
  2. dfs.replication,因?yàn)槲矣腥齻€(gè) Datanode,所以這里我的值設(shè)置為3,默認(rèn)數(shù)據(jù)塊復(fù)制。 創(chuàng)建文件時(shí)可以指定實(shí)際的復(fù)制次數(shù)。 如果在創(chuàng)建時(shí)未指定復(fù)制,則使用默認(rèn)值。
  3. dfs.namenode.name.dir,值的格式是: file://${hadoop.tmp.dir}/dfs/name,確定 DFS 名稱(chēng)節(jié)點(diǎn)在本地文件系統(tǒng)上的位置 應(yīng)該存儲(chǔ)名稱(chēng)表(fsimage)。 如果這是一個(gè)逗號(hào)分隔的列表 的目錄中,則名稱(chēng)表將復(fù)制到所有目錄,用于冗余。
  4. dfs.datanode.data.dir,值的格式為: file://${hadoop.tmp.dir}/dfs/data,確定DFS數(shù)據(jù)節(jié)點(diǎn)在本地文件系統(tǒng)上的位置 應(yīng)該存儲(chǔ)其塊。 如果這是逗號(hào)分隔的 目錄列表,則數(shù)據(jù)將存儲(chǔ)在所有命名的 目錄,通常位于不同的設(shè)備上。應(yīng)標(biāo)記目錄 具有 HDFS 的相應(yīng)存儲(chǔ)類(lèi)型([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) 存儲(chǔ)策略。如果目錄是磁盤(pán),則默認(rèn)存儲(chǔ)類(lèi)型為DISK 沒(méi)有明確標(biāo)記的存儲(chǔ)類(lèi)型。不存在的目錄將 如果本地文件系統(tǒng)權(quán)限允許,則創(chuàng)建。
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:///usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

修改前:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

修改后:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

(4)修改文件 mapred-site.xml

/usr/local/hadoop/etc/hadoop目錄下有一個(gè)mapred-site.xml.template,需要修改文件名稱(chēng),把它重命名為 mapred-site.xml,當(dāng)然,也可能沒(méi)有,我這里是沒(méi)有,不知道大家有沒(méi)有,就先記錄下來(lái)。

vim mapred-site.xml

mapred-site.xml 文件配置成如下內(nèi)容:

  1. mapreduce.framework.name,值根據(jù)具體情況進(jìn)行調(diào)整,用于執(zhí)行 MapReduce 作業(yè)的運(yùn)行時(shí)框架。值可以是 local, classic 的或 yarn 之一。
  2. mapreduce.jobhistory.address,值的格式為: 0.0.0.0:10020,**MapReduce JobHistory Server IPC(進(jìn)程間通信)**主機(jī)和端口是標(biāo)識(shí)可以在網(wǎng)絡(luò)上訪問(wèn) MapReduce JobHistory Server 的詳細(xì)信息。IPC主機(jī)通常是運(yùn)行 JobHistory Server 的計(jì)算機(jī)的 IP 地址或主機(jī)名。端口號(hào)是網(wǎng)絡(luò)用于將通信量定向到正確進(jìn)程的唯一標(biāo)識(shí)符。這些值是客戶端(如Hadoop Web UI)訪問(wèn) JobHistory Server 和查看有關(guān)已完成 MapReduce 作業(yè)的詳細(xì)信息所必需的。 默認(rèn)情況下,JobHistory Server 使用端口 10020 進(jìn)行 IPC 通信。如果 JobHistory 服務(wù)器在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行,則在配置客戶端或Web UI以與其通信時(shí),需要指定IPC主機(jī)和端口。例如,在Hadoop Web UI中,可以通過(guò)將 mapreduce.jobhistory.address 配置屬性設(shè)置為來(lái)指定 JobHistory Server IPC 主機(jī)和端口。<hostname>:<port>. 您還可以在使用命令行 Hadoop 實(shí)用程序時(shí)指定這些值,例如 mapred job -history <hostname>:<port>。請(qǐng)注意,JobHistoryServerIPC 地址和端口配置可以在 Hadoop 配置目錄的 mapred-site.xml 文件中找到。 如果需要更改這些值,則需要更新配置文件并重新啟動(dòng) JobHistory Server,以使更改生效。
  3. mapreduce.jobhistory.webapp.address,屬性值的格式為 <hostname>:<port>。hostname 是指運(yùn)行 JobHistoryServer 的機(jī)器的主機(jī)名或IP地址,port是 JobHistoryServer Web 應(yīng)用程序偵聽(tīng)傳入請(qǐng)求的端口號(hào)。例如,如果 JobHistoryServer 在計(jì)算 “historyserver.example.com” 上運(yùn)行并偵聽(tīng)端口 19888,則可以將 mapreduce.jobhistory.webapp.address 屬性設(shè)置為 “historyserver.example.com:19888”,以便從另一臺(tái)計(jì)算機(jī)上的 Web 瀏覽器訪問(wèn) Web 應(yīng)用程序。需要注意的是,JobHistoryServer Web 應(yīng)用程序需要其他幾個(gè) Hadoop 服務(wù)正常運(yùn)行才能正常工作。 這些服務(wù)包括 ResourceManager、HDFS NameNode 和 HDFS DataNodes。如果您在訪問(wèn) Web 應(yīng)用程序時(shí)遇到問(wèn)題,則值得檢查所有這些服務(wù)是否已啟動(dòng)并正在運(yùn)行,以及是否已設(shè)置正確的配置選項(xiàng)。
  4. yarn.app.mapreduce.am.env,是一個(gè)在YARN主節(jié)點(diǎn)應(yīng)用程序管理器環(huán)境下運(yùn)行的 MapReduce 作業(yè)的環(huán)境變量列表。該變量包含了一些配置參數(shù),如 Hadoop 的 classpath、JAVA_HOME等,可用于設(shè)置環(huán)境變量以方便在 MapReduce 任務(wù)運(yùn)行環(huán)境中使用。在配置 YARN MapReduce 環(huán)境時(shí),該參數(shù)非常有用。
  5. mapreduce.map.env,這是一個(gè)環(huán)境變量,用于在 MapReduce 作業(yè)的 Map 任務(wù)中指定其他需要設(shè)置的環(huán)境變量。在 Map 任務(wù)運(yùn)行時(shí),系統(tǒng)會(huì)自動(dòng)設(shè)置這個(gè)環(huán)境變量,并根據(jù)其值設(shè)置其他必要的環(huán)境變量。這個(gè)環(huán)境變量的值是一個(gè)以逗號(hào)分隔的鍵值對(duì)列表,每個(gè)鍵值對(duì)表示一個(gè)要設(shè)置的環(huán)境變量和其值。例如:export mapreduce_map_env="JAVA_HOME=/usr/local/java,PATH=$PATH:/usr/local/bin" 這個(gè)例子指定了兩個(gè)環(huán)境變量,JAVA_HOME 和 PATH。其中 JAVA_HOME 被設(shè)置為 /usr/local/java,PATH被設(shè)置為原有的值加上: /usr/local/bin。在 Map 任務(wù)運(yùn)行時(shí),這些環(huán)境變量的值就會(huì)被設(shè)置為指定的值,方便應(yīng)用程序使用。
    1. mapreduce.reduce.env,是 Hadoop MapReduce 中的一個(gè)配置設(shè)置,它指定傳遞給 reduce 任務(wù)的環(huán)境變量列表。reduce 任務(wù)可以使用這些變量來(lái)自定義其行為或訪問(wèn)特定資源。例如,reduce 任務(wù)可能需要訪問(wèn)并非在集群的每個(gè)節(jié)點(diǎn)上都可用的數(shù)據(jù)庫(kù)或文件系統(tǒng)。 通過(guò)在 mapreduce.reduce.env 中設(shè)置適當(dāng)?shù)沫h(huán)境變量,reduce 任務(wù)可以輕松地訪問(wèn)這些資源。mapreduce.reduce.env 的語(yǔ)法如下:mapreduce.reduce.env=<var1>=<value1>,<var2>=<value2>,... <var1>,<var2>,... 是變量名, <value1>,<value2>... 是它們的相應(yīng)值。 可以指定多個(gè)變量,用逗號(hào)分隔它們。為Hadoop作業(yè)設(shè)置環(huán)境變量的推薦方法是使用 hadoop 命令的 -D 選項(xiàng)。 例如:hadoop jar myjob.jar -D mapreduce.reduce.env="VAR1=value1,VAR2=value2"...這會(huì)將作業(yè)中所有 reduce 任務(wù)的環(huán)境變量 VAR 1 和 VAR 2 分別設(shè)置為 value 1 和 value 2。
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.map.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.reduce.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property> 
</configuration>

修改前:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

修改后:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

(5)修改文件 yarn-site.xml

yarn-site.xml 是 Apache Hadoop YARN 的配置文件,它代表 Yet Another Resource Negotiator。 YARN是一個(gè)跨計(jì)算機(jī)集群并行處理大量數(shù)據(jù)的分布式框架,包含一組定義YARN應(yīng)用程序行為的屬性。

vim yarn-site.xml

請(qǐng)把 yarn-site.xml 文件配置成如下內(nèi)容:

  1. yarn.resourcemanager.hostname,值的格式為:0.0.0.0,這是一個(gè)在 Apache Hadoop YARN 群集上使用的配置屬性,用于定義 YARN 資源管理器的主機(jī)名或 IP 地址。該屬性是在 yarn-site.xml 文件中進(jìn)行配置的。資源管理器是一個(gè) YARN 服務(wù),其主要職責(zé)是管理群集中的資源,包括內(nèi)存、CPU、磁盤(pán)等等,并分配資源給正在運(yùn)行的應(yīng)用程序。在 YARN 群集中運(yùn)行應(yīng)用程序時(shí),它們會(huì)通過(guò) yarn.resourcemanager.hostname 所指定的主機(jī)名或 IP 地址與資源管理器進(jìn)行通信,以請(qǐng)求和接收資源分配。如果集群中只有一個(gè)資源管理器,那么在 YARN 客戶端上設(shè)置 yarn.resourcemanager.hostname 屬性一般不是必需的,因?yàn)榭蛻舳藭?huì)自動(dòng)查找它所在的主機(jī)上的資源管理器。但如果集群中有多個(gè)資源管理器,則需要在客戶端上顯式設(shè)置該屬性,以確定它將要連接哪一個(gè)資源管理器。
  2. yarn.nodemanager.aux-services,是YARN(Yet Another Resource Negotiator)中 NodeManager 的一個(gè)重要配置參數(shù),它用來(lái)指定 NodeManager 啟動(dòng)的輔助服務(wù)。輔助服務(wù)是指在NodeManager之外運(yùn)行并為 MapReduce 應(yīng)用程序提供支持的服務(wù),例如 Hive、HBase等。通常情況下,輔助服務(wù)配置文件位于 $HADOOP_HOME/etc/hadoop/ 目錄下的 yarn-site.xml 文件中。
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

修改前:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

修改后:有一行是注釋?zhuān)云鋵?shí)可以不用管它。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

傳輸文件到 Slave 節(jié)點(diǎn)中

上述5個(gè)文件全部配置完成以后,需要把Master節(jié)點(diǎn)上的“/usr/local/hadoop”文件夾復(fù)制到各個(gè)節(jié)點(diǎn)上。如果之前已經(jīng)運(yùn)行過(guò)偽分布式模式,建議在切換到集群模式之前首先刪除之前在偽分布式模式下生成的臨時(shí)文件。

因?yàn)槲覀円獙⒄麄€(gè) Hadoop 目錄打包,然后再發(fā)送到其他節(jié)點(diǎn)中,所以我們需要先離開(kāi) Hadoop 的安裝目錄,所以先用 cd /usr/local 到達(dá) Hadoop 安裝目錄的上一級(jí)目錄,然后刪除臨時(shí)文件,之后再打包壓縮發(fā)送到 Slave 節(jié)點(diǎn)上。注意:此時(shí)使用了 scp 命令之后是不需要輸入密碼的,如果需要輸入密碼,那就是 ssh 免密配置不成功,需要重新配置。

cd /usr/local
sudo rm -r ./hadoop/tmp     # 刪除 Hadoop 臨時(shí)文件
sudo rm -r ./hadoop/logs/*   # 刪除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先壓縮再?gòu)?fù)制

因?yàn)槲疫€沒(méi)有格式化 Namenode,并且沒(méi)有啟動(dòng) DFS 服務(wù),所以是沒(méi)有 tmplogs 目錄文件的。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop # 將壓縮包發(fā)送到 Slave1 節(jié)點(diǎn)的 home 目錄上
scp ./hadoop.master.tar.gz Slave2:/home/hadoop # 將壓縮包發(fā)送到 Slave2 節(jié)點(diǎn)的 home 目錄上
scp ./hadoop.master.tar.gz Slave3:/home/hadoop # 將壓縮包發(fā)送到 Slave3 節(jié)點(diǎn)的 home 目錄上

Slave 配置

修改主機(jī)名

在修改主機(jī)名稱(chēng)之前,我們需要先查看另外一個(gè)文件的內(nèi)容,因?yàn)檫@個(gè)會(huì)對(duì)我們修改后有一定的影響。

修改 /etc/hosts 文件

我們首先是需要先打開(kāi)這個(gè)文件查看內(nèi)容,一般hosts文件中只能有一個(gè)127.0.0.1,其對(duì)應(yīng)主機(jī)名為localhost,如果有多余127.0.0.1映射,應(yīng)刪除,特別是不能存在“127.0.1.1 [主機(jī)名]”這樣的映射記錄。修改后需要重啟Linux系統(tǒng)。

sudo vim /etc/hosts

打開(kāi)后我們可以看到這里會(huì)有被紅色框框圈起來(lái)的地方,如果沒(méi)有可以不用管,如果有,請(qǐng)把它注釋掉或者直接刪除。我這里選擇的就是把它注釋掉。注釋之后效果就是如下圖這樣子了。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

接著修改 /etc/hostname 文件

sudo vim /etc/hostname

執(zhí)行上面命令后,就打開(kāi)了“/etc/hostname”這個(gè)文件,這個(gè)文件里面記錄了主機(jī)名,比如,假設(shè)安裝Ubuntu系統(tǒng)時(shí),設(shè)置的主機(jī)名是“hadoop01”,因此,打開(kāi)這個(gè)文件以后,里面就只有“hadoop01”這一行內(nèi)容,可以直接刪除,并修改為“Master”(注意是區(qū)分大小寫(xiě)的),然后,保存退出vim編輯器,這樣就完成了主機(jī)名的修改,需要重啟Linux系統(tǒng)才能看到主機(jī)名的變化。

Slave1

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

要注意觀察主機(jī)名修改前后的變化。在修改主機(jī)名之前,如果用hadoop登錄Linux系統(tǒng),打開(kāi)終端,進(jìn)入Shell命令提示符狀態(tài),會(huì)顯示如下內(nèi)容:

hadoop@hadoop02:~$

修改主機(jī)名并且重啟系統(tǒng)之后,用hadoop登錄Linux系統(tǒng),打開(kāi)終端,進(jìn)入Shell命令提示符狀態(tài),會(huì)顯示如下內(nèi)容:

hadoop@Slave1:~$ 

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

修改完成以后,請(qǐng)重啟節(jié)點(diǎn)的Linux系統(tǒng)。這樣就完成了 Slave 節(jié)點(diǎn)的配置,然后,需要在各個(gè)節(jié)點(diǎn)上都執(zhí)行如下命令,測(cè)試是否相互ping得通,如果ping不通,后面就無(wú)法順利配置成功:

ping Master -c 3   # 只ping 3次就會(huì)停止,否則要按Ctrl+c中斷ping命令
ping Slave1 -c 3

這里只演示了兩個(gè),請(qǐng)大家根據(jù)自己的實(shí)際情況(有多少臺(tái)主機(jī))進(jìn)行修改,需要相互都可以 ping 通才算是可以連接上,關(guān)于各個(gè)主機(jī)之間的免密登陸,這里就不過(guò)多進(jìn)行贅述,就默認(rèn)都已經(jīng)可以免密登陸了。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)
ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)
ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

配置 Hadoop

在 Master 節(jié)點(diǎn)上已經(jīng)配置完畢并且發(fā)送了 Hadoop 安裝包到 Slave 的前提下,進(jìn)行以下的配置,首先是刪除舊的 Hadoop 安裝包,如果以前有安裝單機(jī)分布或者偽分布的話,如果沒(méi)有,可以忽略這一步。然后就是對(duì)發(fā)送過(guò)來(lái)的包進(jìn)行解壓,解壓到 /usr/local 目錄下,最后給修改目錄的權(quán)限。

sudo rm -r /usr/local/hadoop    # 刪掉舊的(如果存在)
sudo tar -zxvf ~/hadoop.master.tar.gz -C /usr/local # zxvf中的 V 可以看到解壓的過(guò)程。
sudo chown -R hadoop /usr/local/hadoop

同樣,如果有其他Slave節(jié)點(diǎn),也要執(zhí)行將 hadoop.master.tar.gz 傳輸?shù)?Slave 節(jié)點(diǎn)以及在 Slave 節(jié)點(diǎn)解壓文件的操作。

啟動(dòng) Hadoop 集群

首次啟動(dòng) Hadoop 集群時(shí),需要先在 Master 節(jié)點(diǎn)執(zhí)行名稱(chēng)節(jié)點(diǎn)的格式化(只需要執(zhí)行這一次,后面再啟動(dòng) Hadoop 時(shí),不要再次格式化名稱(chēng)節(jié)點(diǎn)),命令如下:

hdfs namenode -format

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

現(xiàn)在就可以啟動(dòng) Hadoop 了,啟動(dòng)需要在 Master 節(jié)點(diǎn)上進(jìn)行,執(zhí)行如下命令:

start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver

通過(guò)命令jps可以查看各個(gè)節(jié)點(diǎn)所啟動(dòng)的進(jìn)程。如果已經(jīng)正確啟動(dòng),則在Master節(jié)點(diǎn)上可以看到 NameNodeResourceManager、SecondrryNameNodeJobHistoryServer 進(jìn)程,如下圖所示。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

在 Slave 節(jié)點(diǎn)可以看到 DataNodeNodeManager 進(jìn)程,如下圖所示:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)
ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

缺少任一進(jìn)程都表示出錯(cuò)。另外還需要在 Master 節(jié)點(diǎn)上通過(guò)命令hdfs dfsadmin -report查看數(shù)據(jù)節(jié)點(diǎn)是否正常啟動(dòng),如果屏幕信息中的Live datanodes為 3 (根據(jù)實(shí)際情況進(jìn)行調(diào)整),則說(shuō)明集群?jiǎn)?dòng)成功。

hdfs dfsadmin -report

由于我有 3 個(gè) Slave 節(jié)點(diǎn)充當(dāng)數(shù)據(jù)節(jié)點(diǎn),因此,數(shù)據(jù)節(jié)點(diǎn)啟動(dòng)成功以后,會(huì)顯示如下圖所示信息:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

也可以在主機(jī) Windows 系統(tǒng)的瀏覽器中輸入地址 http:// + [Maste節(jié)點(diǎn)的IP] +:9870/ 或者在 Linux 系統(tǒng)的瀏覽器中輸入地址 http://master:9870/ ,通過(guò) Web 頁(yè)面看到查看名稱(chēng)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的狀態(tài)。如果不成功,可以通過(guò)啟動(dòng)日志(logs)排查原因。
這里再次強(qiáng)調(diào),偽分布式模式和分布式模式切換時(shí)需要注意以下事項(xiàng):
(a)從分布式切換到偽分布式時(shí),不要忘記修改slaves配置文件;
(b)在兩者之間切換時(shí),若遇到無(wú)法正常啟動(dòng)的情況,可以刪除所涉及節(jié)點(diǎn)的臨時(shí)文件夾,這樣雖然之前的數(shù)據(jù)會(huì)被刪掉,但能保證集群正確啟動(dòng)。所以,如果集群以前能啟動(dòng),但后來(lái)啟動(dòng)不了,特別是數(shù)據(jù)節(jié)點(diǎn)無(wú)法啟動(dòng),不妨試著刪除所有節(jié)點(diǎn)(包括Slave節(jié)點(diǎn))上的 /usr/local/hadoop/tmp 文件夾,再重新執(zhí)行一次 hdfs namenode -format ,再次啟動(dòng)即可。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

執(zhí)行分布式實(shí)例

執(zhí)行分布式實(shí)例過(guò)程與偽分布式模式一樣,首先創(chuàng)建 HDFS 上的用戶目錄,命令如下:

hdfs dfs -mkdir -p /user/hadoop

然后,在 HDFS 中創(chuàng)建一個(gè) input 目錄,并把 /usr/local/hadoop/etc/hadoop 目錄中的配置文件作為輸入文件復(fù)制到 input 目錄中,命令如下:

hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

接著就可以運(yùn)行 MapReduce 作業(yè)了,命令如下:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'

運(yùn)行時(shí)的輸出信息與偽分布式類(lèi)似,會(huì)顯示 MapReduce作業(yè)的進(jìn)度,如下圖所示:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

執(zhí)行過(guò)程可能會(huì)有點(diǎn)慢,但是,如果遲遲沒(méi)有進(jìn)度,比如5分鐘都沒(méi)看到進(jìn)度變化,那么不妨重啟Hadoop再次測(cè)試。若重啟還不行,則很有可能是內(nèi)存不足引起,建議增大虛擬機(jī)的內(nèi)存,或者通過(guò)更改 YARN 的內(nèi)存配置來(lái)解決。

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

在執(zhí)行過(guò)程中,可以在 Windows 系統(tǒng)瀏覽器中地址欄輸入 http://[Master的IP地址]:8088/cluster 或在 Linux 系統(tǒng)中打開(kāi)瀏覽器,在地址欄輸入http://master:8088/cluster,通過(guò)Web界面查看任務(wù)進(jìn)度,在Web界面點(diǎn)擊 Tracking UI 這一列的 History 連接,可以看到任務(wù)的運(yùn)行信息,如下圖所示:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

然后我們可以使用命令查看輸出結(jié)果:

./bin/hdfs dfs -cat output/*

輸出結(jié)果如下圖所示:

ubuntu部署hadoop,Linux,hadoop,ubuntu,大數(shù)據(jù)

最后,關(guān)閉Hadoop集群,需要在Master節(jié)點(diǎn)執(zhí)行如下命令:

stop-yarn.sh
stop-dfs.sh
mapred --daemon stop historyserver

至此就完成了 Hadoop 集群的搭建。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-781583.html

到了這里,關(guān)于Ubuntu 16.04——Hadoop集群安裝配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Ubuntu官方安裝微信——Ubuntu16.04/18.04/20.04/22.04

    Ubuntu官方安裝微信——Ubuntu16.04/18.04/20.04/22.04

    通過(guò)以下教程可以快速的安裝官方版微信,本教程適用于Ubuntu16.04/18.04/20.04/22.04 進(jìn)入微信下載官網(wǎng)下載微信Linux客戶端 點(diǎn)擊64位下載即可,如果不能下載,使用終端如下命令 雙擊deb文件,點(diǎn)擊install進(jìn)行安裝 安裝成功,可以在菜單中點(diǎn)擊運(yùn)行

    2024年02月08日
    瀏覽(54)
  • ubuntu16.04下編譯安裝python3.10

    1、安裝依賴(lài)庫(kù) sudo apt install libffi-dev sudo apt install libgdbm-dev 2、編譯安裝openssl(下載最新版本源碼即可) 安裝完成后,建立軟連接(如果可以正常運(yùn)行,不需要建立): sudo ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1 sudo ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1 3、編譯

    2024年02月11日
    瀏覽(36)
  • Ubuntu16.04服務(wù)器安裝LLaVA對(duì)應(yīng)的CUDA

    Ubuntu16.04服務(wù)器安裝LLaVA對(duì)應(yīng)的CUDA

    在根據(jù) LLaVA 項(xiàng)目說(shuō)明配置好 conda 等環(huán)境后,安裝相關(guān)依賴(lài),在測(cè)試程序中輸出 torch.__version__ 查看相應(yīng)的 CUDA 版本。 得到的輸出結(jié)果為 2.0.1-cu117 ,說(shuō)明對(duì)應(yīng)版本是 CUDA 11.7 ,檢查本機(jī) CUDA 版本(命令如下,得到結(jié)果為10.0)。 檢查后得到的結(jié)果是,應(yīng)該是CUDA版本不夠,考慮升

    2024年01月24日
    瀏覽(20)
  • 如何在 Ubuntu 16.04 上配置 NTP 以在 NTP Pool 項(xiàng)目中使用

    介紹 準(zhǔn)確的時(shí)間記錄對(duì)于幾乎任何服務(wù)或軟件都至關(guān)重要。電子郵件、日志記錄器、事件系統(tǒng)和調(diào)度程序、用戶認(rèn)證機(jī)制以及在分布式平臺(tái)上運(yùn)行的服務(wù)都需要準(zhǔn)確的時(shí)間戳來(lái)按時(shí)間順序記錄事件。這些服務(wù)使用網(wǎng)絡(luò)時(shí)間協(xié)議(Network Time Protocol,NTP)將系統(tǒng)時(shí)鐘與可信的外部

    2024年04月25日
    瀏覽(20)
  • Ubuntu16.04完美安裝微信(ukylin優(yōu)麒麟系統(tǒng)版微信WeChat)

    Ubuntu16.04完美安裝微信(ukylin優(yōu)麒麟系統(tǒng)版微信WeChat)

    Ubuntu下有很多種安裝微信的方式,但是很多都不太好用,我之前用的是通過(guò)deepwine的方式安裝的微信,經(jīng)常無(wú)法正常輸入中文,腦闊疼。然后又在網(wǎng)上找到了ubuntukylin(優(yōu)麒麟)官方提供的封裝好的wine版的微信,試了一下,效果還不錯(cuò),至少比之前那個(gè)強(qiáng)。 1.下載Wine環(huán)境包:

    2024年02月05日
    瀏覽(20)
  • ubuntu16.04安裝語(yǔ)音識(shí)別whisper及whisper-ctranslate2工具(填坑篇)

    環(huán)境: 系統(tǒng)ubuntu16.04,顯卡是NVIDIA ?Quadro RTX5000 目標(biāo): 安裝語(yǔ)音識(shí)別工具whipser/whipser-ctranslate2 ????????因之前有過(guò)幾次在linux和windows上有過(guò)部署whisper經(jīng)驗(yàn)和使用經(jīng)驗(yàn),其中有使用GPU的,有CPU的,各自語(yǔ)音識(shí)別效率一言難盡,建議直接裝whipser-ctranslate2。同時(shí),感謝B站博主

    2024年02月04日
    瀏覽(23)
  • Ubuntu16.04安裝Python3.8,3.7,3.9(含卸載方法,支持多版本共存)

    Ubuntu16.04安裝Python3.8,3.7,3.9(含卸載方法,支持多版本共存)

    本文將按照Python的各個(gè)版本進(jìn)行介紹的是 Ubuntu16.04 下安裝相應(yīng)版本 Python 的過(guò)程,可選擇所需的版本進(jìn)行查看,各個(gè)版本的命令基本相同,其中 Python3.8的是圖解版,其余的是命令版 。本文僅在Ubuntu16.04下測(cè)試過(guò),對(duì)于其他系統(tǒng)版本未測(cè)試,一般情況下具有通用性,這里看個(gè)人

    2024年02月03日
    瀏覽(22)
  • ubuntu16.04安裝vscode遇到的code 依賴(lài)于 libnss3 (>= 2:3.30)解決

    ubuntu16.04安裝vscode遇到的code 依賴(lài)于 libnss3 (>= 2:3.30)解決

    ubuntu16.04安裝vscode遇到的code 依賴(lài)于 libnss3 (= 2:3.30);然而:系統(tǒng)中 libnss3:amd64 的版本為 2:3.28.4-0ubuntu0.16.04.14解決方法 一開(kāi)始下載了最新版本的vscode,安裝時(shí)出現(xiàn)了上面的錯(cuò)誤狀況,最新版本的依賴(lài)庫(kù)版本過(guò)低的問(wèn)題,于是下載之前的版本試了一下,成功安裝

    2024年02月05日
    瀏覽(19)
  • ubuntu16.04搭建gitlab

    ubuntu16.04搭建gitlab

    工作中遇到需要在遠(yuǎn)端服務(wù)器搭建gitlab,耗時(shí)4天,踩坑無(wú)數(shù),特此開(kāi)個(gè)虛擬機(jī)再次搭建一次gitlab并記錄供以后參考! 背景:為保證服務(wù)器安全,遠(yuǎn)端服務(wù)器在內(nèi)網(wǎng),本地只能通過(guò)指定外網(wǎng)IP和端口去訪問(wèn)遠(yuǎn)端服務(wù)器 1.本地下載ubuntu16.04的gitlab包(2021-06-01)(ubuntu版本最好能和

    2023年04月09日
    瀏覽(24)
  • ubuntu 16.04 安裝mujoco mujoco_py gym stable_baselines版本問(wèn)題

    ubuntu 16.04系統(tǒng) Python 3.7.16 mujoco200 查看已有虛擬環(huán)境 conda env list 新建虛擬環(huán)境 conda create --name koopmanproject python=3.7 激活一個(gè)環(huán)境: conda activate env_name 停用當(dāng)前環(huán)境: conda deactivate (py37mujoco) abc@123:~/github/spinningup$ pip list Package?????????????????????? Version?? Editable pro

    2024年02月15日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包