Hadoop 入門

1 大數據機率

大數據是指在必定時間內沒法用常規軟件工具進行捕捉、管理和處理的數據集合,是須要新處理模式才能具備更強的決策力、洞察發現力和流程優化能力的海量、高增加率和多樣化的信息增加。html

主要解決海量的存儲和海量數據的分析計算問題。java

1.1 大數據的特色

Volume(大量)node

Velocity(高速)linux

Variety(多樣)web

Value(低價值密度)shell

1.2 大數據應用場景

物流倉儲:大數據分析系統助力商家精細化運營、提高銷量、節約成本。數據庫

零售:分析用戶消費習慣,爲用戶購買商品提供方便,從而提高商品銷量。vim

旅遊:深度結合大數據能力與旅遊行業需求,共建旅遊產業智慧管理、智慧服務和智慧營銷的將來。centos

商品推薦:根據用戶購買記錄推薦商品。bash

保險:海量數據挖掘及風險預測,助力保險行業精準營銷,提高精細化訂價能力。

金融:多維度體現用戶特徵,幫助金融機構推薦優質客戶,防範欺詐風險。

房地產:大數據全面助力房地產行業,打造精準投策與營銷,選出更合適的地,建造更合適的樓,賣給更合適的人。

人工智能:以大數據爲依託。

2 從 Hadoop 框架討論大數據生態

2.1 Hadoop 是什麼?

Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。

主要解決,海量數據的存儲和海量數據的分析計算問題。

廣義上來講,Hadoop一般是指一個更普遍的概念——Hadoop生態圈。
Hadoop 入門

2.2 Hadoop 發行版本

Apache版本最原始(最基礎)的版本,對於入門學習最好。

Cloudera在大型互聯網企業中用的較多。

Hortonworks文檔較好。

2.3 Hadoop 的優點

高可靠性:Hadoop 底層維護多個數據副本,因此即便 Hadoop 某個計算元素或存儲出現故障,也不會致使數據的丟失。

高擴展性:在集羣間分配任務數據,可方便的擴展數以千計的節點。

高效性:在 MapReduce 的思想下,Hadoop 是並行工做的,以加快任務處理速度。

高容錯性:可以自動將失敗的任務從新分配。

2.4 Hadoop 組成

Hadoop 入門

2.4.1 HDFS架構概述

NameNode(nn):存儲文件的元數據,如文件名,文件目錄結構,文件屬性(生成時間、副本數、文件權限),以及每一個文件的塊列表和塊所在的DataNode等。

DataNode(dn):在本地文件系統存儲文件塊數據,以及塊數據的校驗和。

Secondary NameNode(2nn):用來監控 HDFS 狀態的輔助後臺程序,每隔一段時間獲取 HDFS 元數據的快照。

2.4.2 YARN架構概述

Hadoop 入門

2.4.3 MapReduce 架構概述

MapReduce 將計算過程分爲兩個階段:Map 和 Reduce

Map 階段並行處理輸入數據

Reduce 階段對 Map 結果進行彙總

2.5 大數據技術生態體系

Hadoop 入門

圖中涉及的技術名詞解釋以下:

1)Sqoop:Sqoop 是一款開源的工具,主要用於在 Hadoop、Hive 與傳統的數據庫(MySQL)間進行數據的傳遞,能夠將一個關係型數據庫中的數據導進到 Hadoop 的 HDFS 中,也能夠將 HDFS 的數據導進到關係型數據庫中。

2)Flume:Flume 是 Cloudera 提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume 支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume 提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力。

3)Kafka:Kafka 是一種高吞吐量的分佈式發佈訂閱消息系統,有以下特性:

(1)經過O(1)的磁盤數據結構提供消息的持久化,這種結構對於即便數以 TB 的消息存儲也可以保持長時間的穩定性能。

(2)高吞吐量:即便是很是普通的硬件 Kafka 也能夠支持每秒數百萬的消息。

(3)支持經過 Kafka 服務器和消費機集羣來分區消息。

(4)支持 Hadoop 並行數據加載。

4)Storm:Storm 用於「連續計算」,對數據流作連續查詢,在計算時就將結果以流的形式輸出給用戶。

5)Spark:Spark 是當前最流行的開源大數據內存計算框架,能夠基於 Hadoop 上存儲的大數據進行計算。

6)Oozie:Oozie 是一個管理 Hdoop 做業(job)的工做流程調度管理系統。

7)Hbase:HBase 是一個分佈式的、面向列的開源數據庫,HBase 不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。

8)Hive:Hive 是基於 Hadoop 的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的 SQL查詢功能,能夠將 SQL 語句轉換爲 MapReduce 任務進行運行, 其優勢是學習成本低,能夠經過類 SQL 語句快速實現簡單的 MapReduce 統計,沒必要開發專門的 MapReduce 應用,十分適合數據倉庫的統計分析。

10)R語言:R 是用於統計分析、繪圖的語言和操做環境。R 是屬於 GNU 系統的一個自由、免費、源代碼開放的軟件,它是一個用於統計計算和統計製圖的優秀工具。

11)Mahout:Apache Mahout 是個可擴展的機器學習和數據挖掘庫。

12)ZooKeeper:Zookeeper 是 Google 的 Chubby 一個開源的實現,它是一個針對大型分佈式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、 分佈式同步、組服務等,ZooKeeper 的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。

2.6 推薦系統框架圖

Hadoop 入門

3 Hadoop 運行環境搭建

3.1 虛擬機環境準備

關閉防火牆

# 關閉防火牆
systemctl stop firewalld
# 開機禁用防火牆
systemctl disable firewalld

建立用戶

# 建立用戶
useradd djm
# 修改密碼
passwd djm

配置用戶具備 root 權限

djm     ALL=(ALL)       NOPASSWD:ALL

在 /opt 目錄下建立文件夾

sudo mkdir /opt/software
sudo mkdir /opt/module

3.2 安裝 JDK

卸載現有 Java

rpm -qa | grep java | xargs sudo rpm -e --nodeps

解壓到 /opt/module 目錄

tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/

配置環境變量

sudo vim /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin

刷新配置

source /etc/profile

測試是否安裝成功

java -version

3.3 安裝 Hadoop

解壓到 /opt/module 目錄

tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

配置環境變量

sudo vim /etc/profile
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

刷新配置

source /etc/profile

測試是否安裝成功

hadoop version

3.4 Hadoop 目錄結構

bin 目錄:存放對 Hadoop 相關服務(HDFS,YARN)進行操做的腳本

etc 目錄:Hadoop 的配置文件目錄,存放 Hadoop 的配置文件

lib 目錄:存放 Hadoop 的本地庫(對數據進行壓縮解壓縮功能)

sbin 目錄:存放啓動或中止 Hadoop 相關服務的腳本

share 目錄:存放 Hadoop 的依賴 jar 包、文檔、和官方案例

4 Hadoop 運行模式

4.1 本地運行模式

建立一個 input 文件夾

[djm@hadoop101 hadoop-2.7.2]$ mkdir input

將 Hadoop 的 xml 配置文件複製到 input

[djm@hadoop101 hadoop-2.7.2]$ cp etc/hadoop/*.xml input

執行 share 目錄下的 MapReduce 程序

# output 必須是一個不存在的文件夾
[djm@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'

查看輸出結果

[djm@hadoop101 hadoop-2.7.2]$ cat output/*

4.2 僞分佈式運行模式

4.2.1 啓動 HDFS 並運行 MapReduce 程序

配置 hadoop-env.sh

#修改JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 core-site.xml

<configuration>
    <!-- 指定HDFS中NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop101:9000</value>
    </property>
    <!-- 指定Hadoop運行時產生文件的存儲目錄 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
</configuration>

配置 hdfs-site.xml

<configuration>
    <!-- 指定HDFS副本的數量 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

啓動集羣

#格式化NameNode
[djm@hadoop101 hadoop-2.7.2]$ hdfs namenode -format
#啓動NameNode
[djm@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
#啓動DataNode
[djm@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

查看是否啓動成功

jps

web 端查看HDFS文件系統

http://hadoop101:50070/dfshealth.html#tab-overview

操做集羣

#在HDFS文件系統上建立input
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/djm/input
#將測試文件內容上傳到文件系統上
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/djm/input/
#運行MapReduce程序
[djm@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/djm/input/ /user/djm/output
#查看運行結果
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -cat /user/djm/output/*
#刪除運行結果
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -rm -r /user/djm/output

爲何不能一直格式化 NameNode,格式化 NameNode,要注意什麼?

當咱們執行文件系統格式化時,會在 NameNode 數據文件夾(即配置文件中 dfs.name.dir 在本地系統的路徑)中保存一個 dfs/data/current/VERSION 文件,記錄了 clusterID 和 datanodeUuid,格式化 NameNode 會產生新的 clusterID,可是 VERSION 文件只記錄第一次格式化時保存的 clusterID,所以形成 DataNode 與 NameNode 之間的 ID 不一致,解決方法是刪除 VERSION 文件。

4.2.2 啓動 YARN 並運行 MapReduce 程序

配置 yarn-env.sh

#修改JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 yarn-site.xml

<configuration>
    <!-- Reducer獲取數據的方式 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop101</value>
    </property>
</configuration>

配置 mapred-env.sh

#修改JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 mapred-site.xml

#將mapred-site.xml.template重命名爲mapred-site.xml
[djm@hadoop101 hadoop-2.7.2]$ mv mapred-site.xml.template mapred-site.xml
<configuration>
    <!-- 指定MR運行在YARN上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

啓動集羣

#啓動NameNode
[djm@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
#啓動DataNode
[djm@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
#啓動ResourceManager
[djm@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
#啓動NodeManager
[djm@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager

web 端查看 YARN

http://hadoop101:8088/cluster

集羣操做

#刪除文件系統上的output文件
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -rm -R /user/djm/output
#執行MapReduce程序
[djm@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/djm/input  /user/djm/output

4.2.3 配置歷史服務器

配置 mapred-site.xml

<configuration>
    <!-- 歷史服務器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop101:10020</value>
    </property>
    <!-- 歷史服務器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop101:19888</value>
    </property>
</configuration>

啓動歷史服務器

mr-jobhistory-daemon.sh start historyserver

查看 JobHistory

http://hadoop101:19888/jobhistory

4.2.4 配置日誌的彙集

日誌彙集概念:應用運行完成之後,將程序運行日誌信息上傳到 HDFS 系統上。

日誌彙集功能好處:能夠方便的查看到程序運行詳情,方便開發調試。

<configuration>
    <!-- 日誌彙集功能使能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 日誌保留時間設置7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
</configuration>

重啓 NodeManager 、ResourceManager 和 HistoryServer

[djm@hadoop101 hadoop-2.7.2]$ yarn-daemon.sh stop resourcemanager
[djm@hadoop101 hadoop-2.7.2]$ yarn-daemon.sh stop nodemanager
[djm@hadoop101 hadoop-2.7.2]$ mr-jobhistory-daemon.sh stop historyserver
[djm@hadoop101 hadoop-2.7.2]$ yarn-daemon.sh start resourcemanager
[djm@hadoop101 hadoop-2.7.2]$ yarn-daemon.sh start nodemanager
[djm@hadoop101 hadoop-2.7.2]$ mr-jobhistory-daemon.sh start historyserver

刪除 HDFS 上已經存在的輸出文件

[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -rm -R /user/djm/output

執行 WordCount 程序

[djm@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/djm/input  /user/djm/output

查看日誌

http://hadoop101:19888/jobhistory

4.2.5 配置文件說明

Hadoop 配置文件分兩類:默認配置文件和自定義配置文件,只有用戶想修改某一默認配置值時,才須要修改自定義配置文件,更改相應屬性值。

自定義配置文件:

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四個配置文件存放在 $HADOOP_HOME/etc/hadoop 這個路徑上,用戶能夠根據項目需求從新進行修改配置。

4.3 徹底分佈式運行模式

4.3.1 編寫集羣分發腳本 xsync

建立 xsync

[djm@hadoop102 ~]$ mkdir bin
[djm@hadoop102 ~]$ cd bin/
[djm@hadoop102 bin]$ touch xsync
[djm@hadoop102 bin]$ vi xsync

在該文件中編寫以下代碼

#!/bin/bash
#1 獲取輸入參數個數,若是沒有參數,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi

#2 獲取文件名稱
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 獲取上級目錄到絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 獲取當前用戶名稱
user=`whoami`

#5 循環
for((host=103; host&lt;105; host++)); do
        echo ------------------- hadoop$host --------------
        rsync -av $pdir/$fname $user@hadoop$host:$pdir
done

分發

[djm@hadoop102 ~]$ xsync /opt/module/jdk1.8.0_144
[djm@hadoop102 ~]$ xsync /opt/module/hadoop-2.7.2
[djm@hadoop102 ~]$ xsync /etc/profile

4.3.2 集羣配置

集羣部署規劃

hadoop102 hadoop103 hadoop104
HDFS NameNode、DataNode DataNode SecondaryNameNode、DataNode
YARN NodeManager ResourceManager、NodeManager NodeManager

配置 core-site.xml

<configuration>
    <!-- 指定HDFS中NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop101:9000</value>
    </property>
    <!-- 指定Hadoop運行時產生文件的存儲目錄 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
</configuration>

配置 hadoop-env.sh

#修改JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 hdfs-site.xml

<configuration>
    <!-- 指定HDFS副本的數量 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 指定Hadoop輔助名稱節點主機配置 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:50090</value>
    </property>
</configuration>

配置 yarn-env.sh

#修改JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 yarn-site.xml

<configuration>
    <!-- Reducer獲取數據的方式 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</value>
    </property>
</configuration>

配置 mapred-env.sh

#修改JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 mapred-site.xml

<configuration>
    <!-- 指定MR運行在YARN上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

在集羣上分發配置好的 Hadoop 配置文件

[djm@hadoop102 ~]$ xsync /opt/module/hadoop-2.7.2/etc/hadoop/

4.3.3 集羣單點啓動

若是集羣是第一次啓動,須要格式化 NameNode

[djm@hadoop102 hadoop-2.7.2]$ hdfs namenode -format

在 hadoop102 上啓動 NameNode

[djm@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode

在 hadoop10二、hadoop103 以及 hadoop104 上分別啓動 DataNode

[djm@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[djm@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[djm@hadoop104 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

爲何三個主機來回切換佔用一個 datanode?

分別查看三臺主機的 VERSION 文件,發現 datanodeUuid 相同,果斷分別刪除 VERSION 文件,從新啓動 datanode,問題解決

4.3.4 SSH 無密登陸配置

Hadoop 入門

生成公鑰和私鑰

[djm@hadoop102 .ssh]$ ssh-keygen -t rsa

將公鑰拷貝到要免密登陸的目標機器上

[djm@hadoop102 .ssh]$ ssh-copy-id hadoop102
[djm@hadoop102 .ssh]$ ssh-copy-id hadoop103
[djm@hadoop102 .ssh]$ ssh-copy-id hadoop104
[djm@hadoop103 .ssh]$ ssh-copy-id hadoop102
[djm@hadoop103 .ssh]$ ssh-copy-id hadoop103
[djm@hadoop103 .ssh]$ ssh-copy-id hadoop104
[djm@hadoop104 .ssh]$ ssh-copy-id hadoop102
[djm@hadoop104 .ssh]$ ssh-copy-id hadoop103
[djm@hadoop104 .ssh]$ ssh-copy-id hadoop104

.ssh 下(~/.ssh)的文件功能解釋

known_hosts 記錄ssh訪問過計算機的公鑰(public key)
id_rsa 生成的私鑰
id_rsa.pub 生成的公鑰
authorized_keys 存放受權過得無密登陸服務器公鑰

4.3.5 羣起集羣

編寫 jpsall 腳本

#!/bin/bash

# 循環
for((host=102; host&lt;105; host++)); do
        echo ------------------- hadoop$host --------------
        ssh hadoop$host "source /etc/profile &amp;&amp; jps"       
done

配置 slaves

hadoop102
hadoop103
hadoop104

同步全部節點配置文件

[djm@hadoop102 hadoop]$ xsync slaves

啓動 HDFS

[djm@hadoop102 hadoop-2.7.2]$ start-dfs.sh

啓動 YARN

[djm@hadoop103 hadoop-2.7.2]$ start-yarn.sh

啓動 HistoryServer

[djm@hadoop103 hadoop-2.7.2]$ mr-jobhistory-daemon.sh start historyserver

查看是否啓動成功

[djm@hadoop102 hadoop-2.7.2]$ jpsall 
------------------- hadoop102 --------------
98640 Jps
3266 DataNode
3037 NameNode
3549 NodeManager
------------------- hadoop103 --------------
74929 DataNode
75258 NodeManager
39453 Jps
75054 ResourceManager
------------------- hadoop104 --------------
77123 SecondaryNameNode
76562 DataNode
76786 NodeManager
41475 Jps
76904 JobHistoryServer

刪除文件系統上的 output 文件

[djm@hadoop102 hadoop-2.7.2]$ hdfs dfs -rm -R /user/djm/output

執行 MapReduce 程序

[djm@hadoop102 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/djm/input  /user/djm/output

4.3.6 集羣啓動/中止方式總結

各個服務組件逐一啓動/中止

  • 分別啓動/中止 HDFS 組件

    hadoop-daemon.sh  start / stop  namenode / datanode / secondarynamenode
  • 啓動/中止 YARN

    yarn-daemon.sh  start / stop  resourcemanager / nodemanager

各個模塊分開啓動/中止(配置 ssh 是前提)經常使用

  • 總體啓動/中止 HDFS

    start-dfs.sh   /  stop-dfs.sh
  • 總體啓動/中止 YARN

    start-yarn.sh  /  stop-yarn.sh

4.3.7 集羣時間同步

檢查是否安裝了 ntp 服務

[root@hadoop102 ~]# rpm -qa | grep ntp

修改 /etc/ntp.conf

將
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
修改成
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
將
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
修改成
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
添加
server 127.127.1.0
fudge 127.127.1.0 stratum 10

修改 /etc/sysconfig/ntpd

#同步硬件時間
SYNC_HWCLOCK=yes

從新啓動 ntpd 服務

[root@hadoop102 ~]# systemctl restart ntpd

設置ntpd服務開機啓動

[root@hadoop102 ~]# chkconfig ntpd on

在其餘機器配置 10 分鐘與時間服務器同步一次

[root@hadoop102 ~]# crontab -e
添加
*/10 * * * * /usr/sbin/ntpdate hadoop102
相關文章
相關標籤/搜索