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)圈。

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 組成

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)概述

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)體系

圖中涉及的技術(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)框架圖

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
集群操作
#刪除文件系統(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<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 無密登錄配置
生成公鑰和私鑰
[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<105; host++)); do
echo ------------------- hadoop$host --------------
ssh hadoop$host "source /etc/profile && 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