Hadoop 入門

1 大數(shù)據(jù)概率

大數(shù)據(jù)是指在一定時(shí)間內(nèi)無法用常規(guī)軟件工具進(jìn)行捕捉、管理和處理的數(shù)據(jù)集合,是需要新處理模式才能具有更強(qiáng)的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量、高增長率和多樣化的信息增長。

主要解決海量的存儲(chǔ)和海量數(shù)據(jù)的分析計(jì)算問題。

1.1 大數(shù)據(jù)的特點(diǎn)

Volume(大量)

Velocity(高速)

Variety(多樣)

Value(低價(jià)值密度)

1.2 大數(shù)據(jù)應(yīng)用場景

物流倉儲(chǔ):大數(shù)據(jù)分析系統(tǒng)助力商家精細(xì)化運(yùn)營、提升銷量、節(jié)約成本。

零售:分析用戶消費(fèi)習(xí)慣,為用戶購買商品提供方便,從而提升商品銷量。

旅游:深度結(jié)合大數(shù)據(jù)能力與旅游行業(yè)需求,共建旅游產(chǎn)業(yè)智慧管理、智慧服務(wù)和智慧營銷的未來。

商品推薦:根據(jù)用戶購買記錄推薦商品。

保險(xiǎn):海量數(shù)據(jù)挖掘及風(fēng)險(xiǎn)預(yù)測,助力保險(xiǎn)行業(yè)精準(zhǔn)營銷,提升精細(xì)化定價(jià)能力。

金融:多維度體現(xiàn)用戶特征,幫助金融機(jī)構(gòu)推薦優(yōu)質(zhì)客戶,防范欺詐風(fēng)險(xiǎn)。

房地產(chǎn):大數(shù)據(jù)全面助力房地產(chǎn)行業(yè),打造精準(zhǔn)投策與營銷,選出更合適的地,建造更合適的樓,賣給更合適的人。

人工智能:以大數(shù)據(jù)為依托。

2 從 Hadoop 框架討論大數(shù)據(jù)生態(tài)

2.1 Hadoop 是什么?

Hadoop是一個(gè)由Apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。

主要解決,海量數(shù)據(jù)的存儲(chǔ)和海量數(shù)據(jù)的分析計(jì)算問題。

廣義上來說,Hadoop通常是指一個(gè)更廣泛的概念——Hadoop生態(tài)圈。


image

2.2 Hadoop 發(fā)行版本

Apache版本最原始(最基礎(chǔ))的版本,對(duì)于入門學(xué)習(xí)最好。

Cloudera在大型互聯(lián)網(wǎng)企業(yè)中用的較多。

Hortonworks文檔較好。

2.3 Hadoop 的優(yōu)勢(shì)

高可靠性:Hadoop 底層維護(hù)多個(gè)數(shù)據(jù)副本,所以即使 Hadoop 某個(gè)計(jì)算元素或存儲(chǔ)出現(xiàn)故障,也不會(huì)導(dǎo)致數(shù)據(jù)的丟失。

高擴(kuò)展性:在集群間分配任務(wù)數(shù)據(jù),可方便的擴(kuò)展數(shù)以千計(jì)的節(jié)點(diǎn)。

高效性:在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任務(wù)處理速度。

高容錯(cuò)性:能夠自動(dòng)將失敗的任務(wù)重新分配。

2.4 Hadoop 組成

image

2.4.1 HDFS架構(gòu)概述

NameNode(nn):存儲(chǔ)文件的元數(shù)據(jù),如文件名,文件目錄結(jié)構(gòu),文件屬性(生成時(shí)間、副本數(shù)、文件權(quán)限),以及每個(gè)文件的塊列表和塊所在的DataNode等。

DataNode(dn):在本地文件系統(tǒng)存儲(chǔ)文件塊數(shù)據(jù),以及塊數(shù)據(jù)的校驗(yàn)和。

Secondary NameNode(2nn):用來監(jiān)控 HDFS 狀態(tài)的輔助后臺(tái)程序,每隔一段時(shí)間獲取 HDFS 元數(shù)據(jù)的快照。

2.4.2 YARN架構(gòu)概述

image

2.4.3 MapReduce 架構(gòu)概述

MapReduce 將計(jì)算過程分為兩個(gè)階段:Map 和 Reduce

Map 階段并行處理輸入數(shù)據(jù)

Reduce 階段對(duì) Map 結(jié)果進(jìn)行匯總

2.5 大數(shù)據(jù)技術(shù)生態(tài)體系

image

圖中涉及的技術(shù)名詞解釋如下:

1)Sqoop:Sqoop 是一款開源的工具,主要用于在 Hadoop、Hive 與傳統(tǒng)的數(shù)據(jù)庫(MySQL)間進(jìn)行數(shù)據(jù)的傳遞,可以將一個(gè)關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)進(jìn)到 Hadoop 的 HDFS 中,也可以將 HDFS 的數(shù)據(jù)導(dǎo)進(jìn)到關(guān)系型數(shù)據(jù)庫中。

2)Flume:Flume 是 Cloudera 提供的一個(gè)高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng),F(xiàn)lume 支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume 提供對(duì)數(shù)據(jù)進(jìn)行簡單處理,并寫到各種數(shù)據(jù)接受方(可定制)的能力。

3)Kafka:Kafka 是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),有如下特性:

(1)通過O(1)的磁盤數(shù)據(jù)結(jié)構(gòu)提供消息的持久化,這種結(jié)構(gòu)對(duì)于即使數(shù)以 TB 的消息存儲(chǔ)也能夠保持長時(shí)間的穩(wěn)定性能。

(2)高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒數(shù)百萬的消息。

(3)支持通過 Kafka 服務(wù)器和消費(fèi)機(jī)集群來分區(qū)消息。

(4)支持 Hadoop 并行數(shù)據(jù)加載。

4)Storm:Storm 用于“連續(xù)計(jì)算”,對(duì)數(shù)據(jù)流做連續(xù)查詢,在計(jì)算時(shí)就將結(jié)果以流的形式輸出給用戶。

5)Spark:Spark 是當(dāng)前最流行的開源大數(shù)據(jù)內(nèi)存計(jì)算框架,可以基于 Hadoop 上存儲(chǔ)的大數(shù)據(jù)進(jìn)行計(jì)算。

6)Oozie:Oozie 是一個(gè)管理 Hdoop 作業(yè)(job)的工作流程調(diào)度管理系統(tǒng)。

7)Hbase:HBase 是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫,HBase 不同于一般的關(guān)系數(shù)據(jù)庫,它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫。

8)Hive:Hive 是基于 Hadoop 的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡單的 SQL查詢功能,可以將 SQL 語句轉(zhuǎn)換為 MapReduce 任務(wù)進(jìn)行運(yùn)行, 其優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過類 SQL 語句快速實(shí)現(xiàn)簡單的 MapReduce 統(tǒng)計(jì),不必開發(fā)專門的 MapReduce 應(yīng)用,十分適合數(shù)據(jù)倉庫的統(tǒng)計(jì)分析。

10)R語言:R 是用于統(tǒng)計(jì)分析、繪圖的語言和操作環(huán)境。R 是屬于 GNU 系統(tǒng)的一個(gè)自由、免費(fèi)、源代碼開放的軟件,它是一個(gè)用于統(tǒng)計(jì)計(jì)算和統(tǒng)計(jì)制圖的優(yōu)秀工具。

11)Mahout:Apache Mahout 是個(gè)可擴(kuò)展的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘庫。

12)ZooKeeper:Zookeeper 是 Google 的 Chubby 一個(gè)開源的實(shí)現(xiàn),它是一個(gè)針對(duì)大型分布式系統(tǒng)的可靠協(xié)調(diào)系統(tǒng),提供的功能包括:配置維護(hù)、名字服務(wù)、 分布式同步、組服務(wù)等,ZooKeeper 的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù),將簡單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。

2.6 推薦系統(tǒng)框架圖

image

3 Hadoop 運(yùn)行環(huán)境搭建

3.1 虛擬機(jī)環(huán)境準(zhǔn)備

關(guān)閉防火墻

# 關(guān)閉防火墻
systemctl stop firewalld
# 開機(jī)禁用防火墻
systemctl disable firewalld

創(chuàng)建用戶

# 創(chuàng)建用戶
useradd djm
# 修改密碼
passwd djm

配置用戶具有 root 權(quán)限

djm     ALL=(ALL)       NOPASSWD:ALL

在 /opt 目錄下創(chuàng)建文件夾

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

3.2 安裝 JDK

卸載現(xiàn)有 Java

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

解壓到 /opt/module 目錄

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

配置環(huán)境變量

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/

配置環(huán)境變量

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 目錄結(jié)構(gòu)

bin 目錄:存放對(duì) Hadoop 相關(guān)服務(wù)(HDFS,YARN)進(jìn)行操作的腳本

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

lib 目錄:存放 Hadoop 的本地庫(對(duì)數(shù)據(jù)進(jìn)行壓縮解壓縮功能)

sbin 目錄:存放啟動(dòng)或停止 Hadoop 相關(guān)服務(wù)的腳本

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

4 Hadoop 運(yùn)行模式

4.1 本地運(yùn)行模式

創(chuàng)建一個(gè) input 文件夾

[djm@hadoop101 hadoop-2.7.2]$ mkdir input

將 Hadoop 的 xml 配置文件復(fù)制到 input

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

執(zhí)行 share 目錄下的 MapReduce 程序

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

查看輸出結(jié)果

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

4.2 偽分布式運(yùn)行模式

4.2.1 啟動(dòng) HDFS 并運(yùn)行 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運(yùn)行時(shí)產(chǎn)生文件的存儲(chǔ)目錄 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
</configuration>

配置 hdfs-site.xml

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

啟動(dòng)集群

#格式化NameNode
[djm@hadoop101 hadoop-2.7.2]$ hdfs namenode -format
#啟動(dòng)NameNode
[djm@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
#啟動(dòng)DataNode
[djm@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

查看是否啟動(dòng)成功

jps

web 端查看HDFS文件系統(tǒng)

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

操作集群

#在HDFS文件系統(tǒng)上創(chuàng)建input
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/djm/input
#將測試文件內(nèi)容上傳到文件系統(tǒng)上
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/djm/input/
#運(yùn)行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
#查看運(yùn)行結(jié)果
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -cat /user/djm/output/*
#刪除運(yùn)行結(jié)果
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -rm -r /user/djm/output

為什么不能一直格式化 NameNode,格式化 NameNode,要注意什么?

當(dāng)我們執(zhí)行文件系統(tǒng)格式化時(shí),會(huì)在 NameNode 數(shù)據(jù)文件夾(即配置文件中 dfs.name.dir 在本地系統(tǒng)的路徑)中保存一個(gè) dfs/data/current/VERSION 文件,記錄了 clusterID 和 datanodeUuid,格式化 NameNode 會(huì)產(chǎn)生新的 clusterID,但是 VERSION 文件只記錄第一次格式化時(shí)保存的 clusterID,因此造成 DataNode 與 NameNode 之間的 ID 不一致,解決方法是刪除 VERSION 文件。

4.2.2 啟動(dòng) YARN 并運(yùn)行 MapReduce 程序

配置 yarn-env.sh

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

配置 yarn-site.xml

<configuration>
    <!-- Reducer獲取數(shù)據(jù)的方式 -->
    <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運(yùn)行在YARN上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

啟動(dòng)集群

#啟動(dòng)NameNode
[djm@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
#啟動(dòng)DataNode
[djm@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
#啟動(dòng)ResourceManager
[djm@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
#啟動(dòng)NodeManager
[djm@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager

web 端查看 YARN

http://hadoop101:8088/cluster

集群操作

#刪除文件系統(tǒng)上的output文件
[djm@hadoop101 hadoop-2.7.2]$ hdfs dfs -rm -R /user/djm/output
#執(zhí)行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 配置歷史服務(wù)器

配置 mapred-site.xml

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

啟動(dòng)歷史服務(wù)器

mr-jobhistory-daemon.sh start historyserver

查看 JobHistory

http://hadoop101:19888/jobhistory

4.2.4 配置日志的聚集

日志聚集概念:應(yīng)用運(yùn)行完成以后,將程序運(yùn)行日志信息上傳到 HDFS 系統(tǒng)上。

日志聚集功能好處:可以方便的查看到程序運(yùn)行詳情,方便開發(fā)調(diào)試。

<configuration>
    <!-- 日志聚集功能使能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 日志保留時(shí)間設(shè)置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 上已經(jīng)存在的輸出文件

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

執(zhí)行 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 配置文件分兩類:默認(rèn)配置文件和自定義配置文件,只有用戶想修改某一默認(rèn)配置值時(shí),才需要修改自定義配置文件,更改相應(yīng)屬性值。

自定義配置文件:

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四個(gè)配置文件存放在 $HADOOP_HOME/etc/hadoop 這個(gè)路徑上,用戶可以根據(jù)項(xiàng)目需求重新進(jìn)行修改配置。

4.3 完全分布式運(yùn)行模式

4.3.1 編寫集群分發(fā)腳本 xsync

創(chuàng)建 xsync

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

在該文件中編寫如下代碼

#!/bin/bash
#1 獲取輸入?yún)?shù)個(gè)數(shù),如果沒有參數(shù),直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi

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

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

#4 獲取當(dāng)前用戶名稱
user=`whoami`

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

分發(fā)

[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 集群配置

集群部署規(guī)劃

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運(yùn)行時(shí)產(chǎn)生文件的存儲(chǔ)目錄 -->
    <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副本的數(shù)量 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 指定Hadoop輔助名稱節(jié)點(diǎn)主機(jī)配置 -->
    <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獲取數(shù)據(jù)的方式 -->
    <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運(yùn)行在YARN上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

在集群上分發(fā)配置好的 Hadoop 配置文件

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

4.3.3 集群單點(diǎn)啟動(dòng)

如果集群是第一次啟動(dòng),需要格式化 NameNode

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

在 hadoop102 上啟動(dòng) NameNode

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

在 hadoop102、hadoop103 以及 hadoop104 上分別啟動(dòng) 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

為什么三個(gè)主機(jī)來回切換占用一個(gè) datanode?

分別查看三臺(tái)主機(jī)的 VERSION 文件,發(fā)現(xiàn) datanodeUuid 相同,果斷分別刪除 VERSION 文件,重新啟動(dòng) datanode,問題解決

4.3.4 SSH 無密登錄配置

image

生成公鑰和私鑰

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

將公鑰拷貝到要免密登錄的目標(biāo)機(jī)器上

[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訪問過計(jì)算機(jī)的公鑰(public key)
id_rsa 生成的私鑰
id_rsa.pub 生成的公鑰
authorized_keys 存放授權(quán)過得無密登錄服務(wù)器公鑰

4.3.5 群起集群

編寫 jpsall 腳本

#!/bin/bash

# 循環(huán)
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

同步所有節(jié)點(diǎn)配置文件

[djm@hadoop102 hadoop]$ xsync slaves

啟動(dòng) HDFS

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

啟動(dòng) YARN

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

啟動(dòng) HistoryServer

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

查看是否啟動(dòng)成功

[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

刪除文件系統(tǒng)上的 output 文件

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

執(zhí)行 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 集群啟動(dòng)/停止方式總結(jié)

各個(gè)服務(wù)組件逐一啟動(dòng)/停止

  • 分別啟動(dòng)/停止 HDFS 組件

    hadoop-daemon.sh  start / stop  namenode / datanode / secondarynamenode
    
  • 啟動(dòng)/停止 YARN

    yarn-daemon.sh  start / stop  resourcemanager / nodemanager
    

各個(gè)模塊分開啟動(dòng)/停止(配置 ssh 是前提)常用

  • 整體啟動(dòng)/停止 HDFS

    start-dfs.sh   /  stop-dfs.sh
    
  • 整體啟動(dòng)/停止 YARN

    start-yarn.sh  /  stop-yarn.sh
    

4.3.7 集群時(shí)間同步

檢查是否安裝了 ntp 服務(wù)

[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

#同步硬件時(shí)間
SYNC_HWCLOCK=yes

重新啟動(dòng) ntpd 服務(wù)

[root@hadoop102 ~]# systemctl restart ntpd

設(shè)置ntpd服務(wù)開機(jī)啟動(dòng)

[root@hadoop102 ~]# chkconfig ntpd on

在其他機(jī)器配置 10 分鐘與時(shí)間服務(wù)器同步一次

[root@hadoop102 ~]# crontab -e
添加
*/10 * * * * /usr/sbin/ntpdate hadoop102
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • HDFS的體系結(jié)構(gòu) 設(shè)計(jì)目標(biāo) 自動(dòng)快速檢測應(yīng)對(duì)硬件錯(cuò)誤 流式訪問數(shù)據(jù) 轉(zhuǎn)移計(jì)算本身比轉(zhuǎn)移數(shù)據(jù)更加劃算 簡單的數(shù)據(jù)一...
    Spike_3154閱讀 972評(píng)論 0 2
  • 1. HADOOP****背景介紹 ** 1.1 ****什么是HADOOP** HADOOP是apache旗下的...
    NickYS閱讀 1,221評(píng)論 1 51
  • 一、系統(tǒng)參數(shù)配置優(yōu)化 1、系統(tǒng)內(nèi)核參數(shù)優(yōu)化配置 修改文件/etc/sysctl.conf,添加如下配置,然后執(zhí)行s...
    張偉科閱讀 3,923評(píng)論 0 14
  • 昨天的文章給自己寫字承諾要馬上開始學(xué)習(xí)理財(cái)。先從讀《七年就是一輩子》這本書的理財(cái)篇教程開始。以下是讀書筆記。 1....
    來是春初閱讀 561評(píng)論 0 1
  • 鼻梁提高 成天抱怨自己的大餅?zāi)槪悄阕⒁獾阶约旱谋亲恿藛??“面如一朵花,全靠鼻?dāng)家”鼻子承包了面部90%的氣質(zhì)更有...
    美麗超人強(qiáng)閱讀 228評(píng)論 0 0

友情鏈接更多精彩內(nèi)容