[ Hadoop ] 單機僞集羣配置試驗和分析

同步發在:java

https://evergreen-tree.github.io/articles/2016-05/daily-hadoop-singleNode-setupnode

 

如下內容摘自網路:linux

Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。 用戶能夠在不瞭解分佈式底層細節的狀況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。git

Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFSHDFS有高容錯性的特色,而且設計用來部署在低廉的(low-cost)硬件上;並且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,能夠以流的形式訪問(streaming access)文件系統中的數據。github

Hadoop的框架最核心的設計就是:HDFSMapReduce。HDFS爲海量的數據提供了存儲,則MapReduce爲海量的數據提供了計算。。正則表達式

從網絡上摘抄出來的內容看出來,hadoop的確已經徹底造成了本身的體系。apache

從準備開始學習hadoop到真正開始使用hadoop的過程當中感受本身走了不少彎路,其中最主要的一個就是一直以來把hadoop當成了一款開源軟件來進行學習,開源軟件學習的過程通常是經過閱讀tutorial(說明書)來進行最初的設定,而且完成最基本的接入操做,而後逐步深刻,閱讀和使用分佈式的配置,閱讀和使用更多的feature。例如學習activeMQ,就能夠經過閱讀user guide來完成入門,而後經過閱讀配置部分加java的demo,基本完成對於activemq的設定和使用,但是這一招在面對hadoop的時候失效了。windows

爲何失效?這是個讓我很頭痛的問題,後來通過一系列的學習和分析終於對hadoop有所掌握以後發現hadoop實際上不是一款開源軟件,而是一個分佈式運算的體系或者平臺,咱們能夠把hadoop認爲是一種分佈式運算的操做系統,提供了不少底層的API的定義,而後在hadoop這個體系的內部呢,有不少的開源軟件的實現,好比mapreduce,好比hdfs,好比yarn等等,這些軟件被集成在hadoop平臺內部,從而經過hadoop平臺的分配掉用來完成真正的工做。固然了上面的說法可能不盡準確,可是這樣進行思考可讓你更快的學會使用hadoop。網絡

經過上面的說法咱們能夠制定接下里的方向,操做系統咱們要學習的固然是命令了,就是hadoop基本的CLI的命令(具體的命令見附件部分)。經過這一系列的命令咱們能夠操做在hadoop這個系統中的文件,以及執行一些特定的操做,甚至於運行咱們本身編寫的軟件(如jar命令)。架構

學習完操做系統,接下來要想作事情就須要學習運行在操做系統上面的軟件了,好比咱們的硬盤存儲HDFS,好比咱們的資源管理和計算操做軟件YARN,經過學習逐漸的發覺,學習hadoop其實就是學習HDFS跟MAPREDUCE的過程,由於實際上啓動hadoop就是啓動hadoop的存儲並運行分佈式運算的過程。

扯了這麼多,咱們如今先回來感覺一把hadoop的魅力:

首先要說明一點的就是hadoop的更新實在太快了,因此網絡上面不少的文章已經不是特別的準確,若是須要閱讀相關的文檔,英文夠好的話建議直接閱讀發行包裏面的文檔,它就在你下載的發行包的share/doc底下。

另外不建議你們再windows下玩兒hadoop,有條件的最好安裝linux操做系統,或者使用虛擬機,沒有條件的也建議使用cygwin而不是在windows下使用bat進行操做。

單點啓動方式

hadoop下載完成以後並非說下載了操做系統,而後須要安裝軟件,它的軟件是集成在裏面的。好比咱們下載的2.6.4的髮型包裏面就是集成了HDFS跟YARN的。

hadoop下載完成以後,不須要任何的配置便可以單點方式運行,這時候hadoop並不會啓動hdfs跟yarn或者maprduce,而僅僅以單一的java進程來處理你的命令。

$ mkdir input
  $ cp etc/hadoop/*.xml input
  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep input output 'dfs[a-z.]+'
  $ cat output/*

上面的命令可讓你體驗一下hadoop竟然是能夠運行的,惟一的前提條件是你要安裝過JAVA,而且配置了JAVA_HOME.

簡單介紹一下上面的命令所體現出來的內容:

  1. mdkir和cp部分是新建一個來源文件目錄
  2. 緊跟其後的hadoop jar命令,指定hadoop裝載本地的一個jar文件而且以mapreduce的方式運行該jar中的mapreduce對象(具體該jar怎麼被建立出來後面的章節會介紹)。
  3. grep命令是demo裏面所須要的運行時參數,input是輸入文件的路徑,output是結果的輸出路徑,最後的正則表達式是grep的規則。也就是說但願hadoop將input中全部的文件經過提供的正則表達式的規則過濾到output中。
  4. 最後是檢查在output中到底有什麼內容:

運行cat以後的結果以下(看起來全部的文件中存在dfs[a-z.]+正則匹配的只是出現了一次,此次叫作dfsadmin)

1       dfsadmin

僞分佈式單機啓動

上面的啓動方式固然不夠炫酷,並且單機運行的時候實際上除了有個結果以外並無法讓你看到任何hadoop的痕跡,因此hadoop提供了第二種單機運行的方式,僞分佈式,在僞分佈式中,hadoop將會啓動兩個進程,一個爲hdfs進程,一個爲mapreduce的管理進程,若是已經配置了yarn的,那麼將會啓動的就是yarn的進程。

啓動一個分佈式的hadoop的過程其實就是分別啓動hadoop的四個基本元素的過程,即

  • NameNode
  • DataNode
  • ResourceManager
  • NodeManager

其中,NameNode & DataNode在默認的發行版裏面是經過start-dfs來完成,即NameNode&DataNode是HDFS的組成部分,而ResourceManager&NodeManager發行版裏面有默認的實現以及yarn,鑑於官方的文檔也建議使用yarn來進行資源管理,咱們的配置也使用yarn進行配置。

依次更改下面的配置文件:

etc/hadoop/core-site.xml(基本配置,這個配置文件在集羣裏面全部的機器應該配置爲相同的): ```xml

fs.defaultFS hdfs://localhost:9000

etc/hadoop/hdfs-site.xml(在NameNode/DataNode不一樣的配置文件,咱們如今經過一臺機器進行模擬,因此不須要進行多餘的配置):
```xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

至此咱們沒有使用yarn進行mapreduce的操做,而是使用hadoop默認的mapreduce,若是須要使用其餘的mapreduce實現,那麼須要修改: etc/hadoop/mapred-site.xml

這個文件的修改咱們接下里會說。

完成上面兩個文件的修改以後,咱們就擁有了一個僞分佈式的環境,在這個環境裏面NameNode,DataNode,ResourceManger跟NodeManager都分別以獨立的進程來運行。

接下來咱們來運行咱們的hadoop操做系統。

由於hadoop是經過ssh來進行各個節點的啓動和中止操做的,因此須要ssh的支持,爲了簡單起見咱們能夠設置ssh免密碼登錄,具體的原理請參照https://evergreen-tree.github.io/articles/2016-05/daily-ssh-authorized-keys

咱們本地須要設置的是對於localhost的免密碼登錄:

依次執行下面的命令便可

$ ssh localhost
If you cannot ssh to localhost without a passphrase, execute the following commands:

  $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  • 第一步,格式化硬盤(格式化NameNode)
    • bin/hdfs namenode -format
  • 第二步,啓動硬盤管理系統(啓動hdfs)
    • sbin/start-dfs.sh
    • 硬盤(HDFS)管理器啓動以後,有一個UI可讓你更加直觀的看到本地hdfs裏面的內容,訪問方式以下:
    • http://localhost:50070/
  • 第三步,硬盤 (HDFS)啓動成功以後經過操做系統(hadoop)來向硬盤寫入數據以備計算使用。(這一步官方的文檔存在bug,最好使用我給的命令)
    • bin/hdfs dfs -mkdir /user - 建立工做目錄
    • bin/hdfs dfs -mkdir /user/test - 建立工做目錄,按照官方文檔,這裏面新建的目錄應該是當前linux系統登陸的用戶,爲了區別起見,咱們使用test
    • bin/hdfs dfs -put etc/hadoop /user/test/input - 將本地文件導入到hadoop系統中的HDFS
  • 第四步,從新運行咱們在單點模式的時候運行的JOB
    • bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep /user/test/input output 'dfs[a-z.]+'
    • 在上面單點運行的時候結果會直接被寫入到運行命令的當前目錄的output文件夾,可是在使用hadoop執行命令的時候,命令實際上是被運行在了hadoop系統裏面,因此結果被寫入到了hadoop平臺的output文件夾裏面
  • 檢查成果
    • bin/hdfs dfs -cat output/*
    • 最終的結果會被寫入到/user/root/output默認是linux的登錄用戶的用戶名。
  • 若是不想繼續了請關閉sbin/stop-dfs.sh

對上面的操做進行一些分析:

啓動dfs以後,其實在後臺啓動了NameNode跟SecondNameNode(secondNameNode是NameNode的容災)

root     24225     1 17 14:28 ?        00:00:07 /etc/alternatives/java_sdk/bin/java -Dproc_namenode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-2.6.4 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,console -Djava.library.path=/opt/hadoop-2.6.4/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=hadoop-root-namenode-localhost.localdomain.log -Dhadoop.home.dir=/opt/hadoop-2.6.4 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop-2.6.4/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS org.apache.hadoop.hdfs.server.namenode.NameNode
root     24326     1 21 14:28 ?        00:00:08 /etc/alternatives/java_sdk/bin/java -Dproc_datanode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-2.6.4 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,console -Djava.library.path=/opt/hadoop-2.6.4/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=hadoop-root-datanode-localhost.localdomain.log -Dhadoop.home.dir=/opt/hadoop-2.6.4 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop-2.6.4/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -server -Dhadoop.security.logger=ERROR,RFAS -Dhadoop.security.logger=ERROR,RFAS -Dhadoop.security.logger=ERROR,RFAS -Dhadoop.security.logger=INFO,RFAS org.apache.hadoop.hdfs.server.datanode.DataNode
root     24529     1 17 14:28 ?        00:00:05 /etc/alternatives/java_sdk/bin/java -Dproc_secondarynamenode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-2.6.4 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,console -Djava.library.path=/opt/hadoop-2.6.4/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=hadoop-root-secondarynamenode-localhost.localdomain.log -Dhadoop.home.dir=/opt/hadoop-2.6.4 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop-2.6.4/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode

進入tmp目錄會發現有下面的目錄結構:

[root@localhost tmp]# ll
drwxr-xr-x. 3 root root 4096 May 25 14:28 hadoop-root
-rw-r--r--. 1 root root    6 May 25 14:28 hadoop-root-datanode.pid
-rw-r--r--. 1 root root    6 May 25 14:28 hadoop-root-namenode.pid
-rw-r--r--. 1 root root    6 May 25 14:28 hadoop-root-secondarynamenode.pid
drwxr-xr-x. 2 root root 4096 May 25 14:28 hsperfdata_root
drwxr-xr-x. 4 root root 4096 May 25 14:28 Jetty_0_0_0_0_50070_hdfs____w2cu08
drwxr-xr-x. 4 root root 4096 May 25 14:28 Jetty_0_0_0_0_50075_datanode____hwtdwq
drwxr-xr-x. 4 root root 4096 May 25 14:28 Jetty_0_0_0_0_50090_secondary____y6aanv

經過UI界面(http://10.132.65.77:50070/)(個人UI)咱們能夠看到如今機器上面已經啓動了一個datanode:

而後執行完全部的命令以後咱們看到的結果以下;

[root@localhost hadoop]# bin/hdfs dfs -cat output/*
16/05/25 14:34:35 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
cat: `output/output': No such file or directory
6       dfs.audit.logger
4       dfs.class
3       dfs.server.namenode.
2       dfs.period
2       dfs.audit.log.maxfilesize
2       dfs.audit.log.maxbackupindex
1       dfsmetrics.log
1       dfsadmin
1       dfs.servers
1       dfs.replication
1       dfs.file

至此咱們已經完成了經過一臺機器啓動NameNode & DataNode的過程,secondNameNode的啓動你們能夠暫時先忽略掉,咱們看到若是不想要使用特定的mapreduce方案,那麼只要啓動namenode跟datanode便可。

經過剛纔的設置,咱們已經搭建好一個基本的運行環境,若是你剛纔設置core-site.xml的時候綁定的是0.0.0.0那麼你如今已經能夠經過下面的java方法來遠程鏈接你的hdfs而且進行一些簡單的操做了!

package distributed.lock.hadoopJob;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

import java.io.InputStream;
import java.net.URI;

public class HDFSTest {
	public static void main(String[] args) throws Exception {
		String uri = "hdfs://10.132.65.77:9000/";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(uri), config);

		FileStatus[] statuses = fs.listStatus(new Path("/user/root"));
		for (FileStatus status : statuses) {
			System.out.println(status);
		}

		FSDataOutputStream os = fs.create(new Path("/user/root/input/test.log"));
		os.write("Hello World!".getBytes());
		os.flush();
		os.close();

		InputStream is = fs.open(new Path("/user/root/test.log"));
		IOUtils.copyBytes(is, System.out, 1024, true);
	}
}

上面的類我在執行的時候發生了一些小問題,不過用來驗證能夠進行鏈接操做仍是蠻好的。不深究了。

使用yarn進行mapreduce

在使用yarn以前,建議首先刪除掉原來的/tmp的全部文件而且從新format

依次修改下面的配置文件:

etc/hadoop/mapred-site.xml - 指定使用yarn做爲mapreduce的調度者

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

etc/hadoop/yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

而後啓動yarn便可 sbin/start-yarn.sh(上面的dfs須要重啓)

啓動yarn以後,會發覺多出來兩個進程(ResourceManager跟NodeManager):

root     29518     1 99 15:08 pts/2    00:00:09 /etc/alternatives/java_sdk/bin/java -Dproc_resourcemanager -Xmx1000m -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dyarn.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=yarn-root-resourcemanager-localhost.localdomain.log -Dyarn.log.file=yarn-root-resourcemanager-localhost.localdomain.log -Dyarn.home.dir= -Dyarn.id.str=root -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop-2.6.4/lib/native -Dyarn.policy.file=hadoop-policy.xml -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dyarn.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=yarn-root-resourcemanager-localhost.localdomain.log -Dyarn.log.file=yarn-root-resourcemanager-localhost.localdomain.log -Dyarn.home.dir=/opt/hadoop-2.6.4 -Dhadoop.home.dir=/opt/hadoop-2.6.4 -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop-2.6.4/lib/native -classpath /opt/hadoop-2.6.4/etc/hadoop:/opt/hadoop-2.6.4/etc/hadoop:/opt/hadoop-2.6.4/etc/hadoop:/opt/hadoop-2.6.4/share/hadoop/common/lib/*:/opt/hadoop-2.6.4/share/hadoop/common/*:/opt/hadoop-2.6.4/share/hadoop/hdfs:/opt/hadoop-2.6.4/share/hadoop/hdfs/lib/*:/opt/hadoop-2.6.4/share/hadoop/hdfs/*:/opt/hadoop-2.6.4/share/hadoop/yarn/lib/*:/opt/hadoop-2.6.4/share/hadoop/yarn/*:/opt/hadoop-2.6.4/share/hadoop/mapreduce/lib/*:/opt/hadoop-2.6.4/share/hadoop/mapreduce/*:/etc/alternatives/java_sdk/lib/tools.jar:/contrib/capacity-scheduler/*.jar:/contrib/capacity-scheduler/*.jar:/contrib/capacity-scheduler/*.jar:/opt/hadoop-2.6.4/share/hadoop/yarn/*:/opt/hadoop-2.6.4/share/hadoop/yarn/lib/*:/opt/hadoop-2.6.4/etc/hadoop/rm-config/log4j.properties org.apache.hadoop.yarn.server.resourcemanager.ResourceManager

root     29623     1 99 15:08 ?        00:00:09 /etc/alternatives/java_sdk/bin/java -Dproc_nodemanager -Xmx1000m -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dyarn.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=yarn-root-nodemanager-localhost.localdomain.log -Dyarn.log.file=yarn-root-nodemanager-localhost.localdomain.log -Dyarn.home.dir= -Dyarn.id.str=root -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop-2.6.4/lib/native -Dyarn.policy.file=hadoop-policy.xml -server -Dhadoop.log.dir=/opt/hadoop-2.6.4/logs -Dyarn.log.dir=/opt/hadoop-2.6.4/logs -Dhadoop.log.file=yarn-root-nodemanager-localhost.localdomain.log -Dyarn.log.file=yarn-root-nodemanager-localhost.localdomain.log -Dyarn.home.dir=/opt/hadoop-2.6.4 -Dhadoop.home.dir=/opt/hadoop-2.6.4 -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop-2.6.4/lib/native -classpath /opt/hadoop-2.6.4/etc/hadoop:/opt/hadoop-2.6.4/etc/hadoop:/opt/hadoop-2.6.4/etc/hadoop:/opt/hadoop-2.6.4/share/hadoop/common/lib/*:/opt/hadoop-2.6.4/share/hadoop/common/*:/opt/hadoop-2.6.4/share/hadoop/hdfs:/opt/hadoop-2.6.4/share/hadoop/hdfs/lib/*:/opt/hadoop-2.6.4/share/hadoop/hdfs/*:/opt/hadoop-2.6.4/share/hadoop/yarn/lib/*:/opt/hadoop-2.6.4/share/hadoop/yarn/*:/opt/hadoop-2.6.4/share/hadoop/mapreduce/lib/*:/opt/hadoop-2.6.4/share/hadoop/mapreduce/*:/etc/alternatives/java_sdk/lib/tools.jar:/contrib/capacity-scheduler/*.jar:/contrib/capacity-scheduler/*.jar:/opt/hadoop-2.6.4/share/hadoop/yarn/*:/opt/hadoop-2.6.4/share/hadoop/yarn/lib/*:/opt/hadoop-2.6.4/etc/hadoop/nm-config/log4j.properties org.apache.hadoop.yarn.server.nodemanager.NodeManager

tmp下面也增長了相應的pid等文件:

drwxr-xr-x. 4 root root 4096 May 25 15:08 hadoop-root
-rw-r--r--. 1 root root    6 May 25 15:07 hadoop-root-datanode.pid
-rw-r--r--. 1 root root    6 May 25 15:07 hadoop-root-namenode.pid
-rw-r--r--. 1 root root    6 May 25 15:07 hadoop-root-secondarynamenode.pid
drwxr-xr-x. 2 root root 4096 May 25 15:08 hsperfdata_root
drwxr-xr-x. 4 root root 4096 May 25 15:07 Jetty_0_0_0_0_50070_hdfs____w2cu08
drwxr-xr-x. 4 root root 4096 May 25 15:07 Jetty_0_0_0_0_50075_datanode____hwtdwq
drwxr-xr-x. 4 root root 4096 May 25 15:07 Jetty_0_0_0_0_50090_secondary____y6aanv
drwxr-xr-x. 5 root root 4096 May 25 15:08 Jetty_0_0_0_0_8042_node____19tj0x
drwxr-xr-x. 5 root root 4096 May 25 15:08 Jetty_0_0_0_0_8088_cluster____u0rgz3
-rw-r--r--. 1 root root    6 May 25 15:08 yarn-root-nodemanager.pid
-rw-r--r--. 1 root root    6 May 25 15:08 yarn-root-resourcemanager.pid
相關文章
相關標籤/搜索