Hadoop學習之旅
- Hadoop 概述
- 介紹
- Hadoop 優勢
- Hadoop 組成
- HDFS 架構
- MapReduce 架構
- YARN 架構
- 大資料技術生態體系
- 推薦系統框架圖
- 配置服務器
- 修改服務器名
- 修改主機名稱
- 查看主機名稱
- 修改映射 hosts 檔案
- 修改映射 hosts 檔案
- 查看映射 hosts 檔案
- 安裝 epel-release
- 安裝 net-tool
- 安裝 vim
- 關閉防火墻
- 關閉防火墻開機自啟
- 卸載服務器自帶的 JDK
- 查看是否有JDK
- 洗掉JDK
- 創建檔案夾
- 安裝JDK
- 解壓 JDK
- 配置 JDK 環境變數
- 測驗 JDK
- 安裝 Hadoop
- 解壓
- 環境變數
- 測驗安裝
- Hadoop 目錄結構
- 重啟服務器
- Hadoop 運行模式
- 本地運行模式(玩具)
- 準備作業
- 執行程式
- 查看結果
- 完全分布式運行模式
- 準備
- scp(secure copy) 安全拷貝
- rsync 遠程同步工具
- 測驗
- 集群分發腳本 xsync
- 需求:
- 需求分析:
- 腳本實作
- 測驗
- SSH 無密登錄配置
- 免密登錄原理
- 生成公鑰和私鑰
- 將公鑰拷貝到要免密登錄的目標機器上
- .ssh
- ssh 連接
- 無密傳輸
- 集群配置
- 集群部署規劃
- 組態檔說明
- 配置集群
- 分發配置好的 Hadoop 組態檔
- 查看檔案分發
- 群起集群
- 配置 workers
- 啟動集群
- 集群基本測驗
- 配置歷史服務器
- 配置 mapred-site.xml
- 分發配置
- 啟動歷史服務器
- 查看歷史服務器是否啟動
- 查看 JobHistory
- 配置日志的聚集
- 集群啟動/停止方式總結
- 撰寫 Hadoop 集群常用腳本
- 常用埠號說明
- 集群時間同步
我一口氣整?三臺云服務器(有錢豪橫)
| cpucode100 | 2核 4 G |
|---|---|
| cpucode101 | 1核 2 G |
| cpucode102 | 2核 4 G |
Hadoop 概述
介紹
Hadoop是一個由Apache基金會所開發的分布式系統基礎架構
解決 : 海量資料的存盤和海量資料的分析計算問題

Hadoop創始人Doug Cutting

Google是Hadoop的思想之源( Google在大資料方面的三篇論文)
GFS —> HDFS
Map-Reduce —> MR
BigTable —> HBase

Hadoop 優勢
- 高可靠性
- 高擴展性
- 高效性
- 高容錯性
高可靠性: Hadoop底層維護多個資料副本, 所以即使Hadoop某個計算元素或存盤出現故障, 也不會導致資料的丟失

高擴展性:在集群間分配任務資料, 可方便的擴展數以千計的節點

高效性:在MapReduce的思想下, Hadoop是并行作業的, 以加快任務處理速度

高容錯性:能夠自動將失敗的任務重新分配

Hadoop 組成
在 Hadoop1.x 時 代 ,Hadoop中的MapReduce同時處理業務邏輯運算和資源的調度, 耦合性較大,
在Hadoop2.x時代, 增加了Yarn, Yarn只負責資 源 的 調 度 ,MapReduce 只負責運算,
Hadoop3.x在組成上沒有變化

HDFS 架構
Hadoop Distributed File System,簡稱 HDFS,是一個分布式檔案系統
-
NameNode(nn) :存盤檔案的元資料, 如檔案名, 檔案目錄結構, 檔案屬性( 生成時間、 副本數、檔案權限) , 以及每個檔案的塊串列和塊所在的DataNode等
-
DataNode(dn):在本地檔案系統存盤檔案塊資料, 以及塊資料的校驗和
-
Secondary NameNode(2nn): 每隔一段時間對NameNode元資料備份
MapReduce 架構
MapReduce 將計算程序分為兩個階段: Map 和 Reduce
-
Map 階段并行處理輸入資料
-
Reduce 階段對 Map 結果進行匯總

YARN 架構
Yet Another Resource Negotiator 簡稱 YARN ,另一種資源協調者, 是 Hadoop 的資源管理器
-
ResourceManager( RM) :整個集群資源( 記憶體、 CPU等) 的老大
-
NodeManager( NM) :單個節點服務器資源老大
-
ApplicationMaster( AM) :單個任務運行的老大
-
Container:容器,相當一臺獨立的服務器,里面封裝了任務運行所需要的資源, 如記憶體、 CPU、磁盤、網路等,

Note :
- 客戶端可以有多個
- 集群上可以運行多個 ApplicationMaster
- 每個 NodeManager 上可以有多個 Container
大資料技術生態體系

-
Sqoop: Sqoop 是一款開源的工具,主要用于在 Hadoop、 Hive 與傳統的資料庫(MySQL)間進行資料的傳遞,可以將一個關系型資料庫(例如 : MySQL, Oracle 等)中的資料導進到 Hadoop 的 HDFS 中,也可以將 HDFS 的資料導進到關系型資料庫中
-
Flume: Flume 是一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統,Flume 支持在日志系統中定制各類資料發送方,用于收集資料
-
Kafka: Kafka 是一種高吞吐量的分布式發布訂閱訊息系統
-
Spark: Spark 是當前最流行的開源大資料記憶體計算框架,可以基于 Hadoop 上存盤的大資料進行計算
-
Flink: Flink 是當前最流行的開源大資料記憶體計算框架, 用于實時計算的場景較多
-
Oozie: Oozie 是一個管理 Hadoop 作業(job)的作業流程調度管理系統
-
Hbase: HBase 是一個分布式的、面向列的開源資料庫, HBase 不同于一般的關系資料庫,它是一個適合于非結構化資料存盤的資料庫
-
Hive: Hive 是基于 Hadoop 的一個資料倉庫工具,可以將結構化的資料檔案映射為一張資料庫表,并提供簡單的 SQL 查詢功能,可以將 SQL 陳述句轉換為MapReduce 任務進行運行,其優點是學習成本低,可以通過類 SQL 陳述句快速實作簡單的 MapReduce 統計,不必開發專門的 MapReduce 應用,十分適合資料倉庫的統計分析
-
ZooKeeper:它是一個針對大型分布式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分布式同步、組服務等
推薦系統框架圖

配置服務器
修改服務器名
修改主機名稱
vim /etc/hostname
查看主機名稱
cat /etc/hostname



修改映射 hosts 檔案
修改所有電腦的 hosts 檔案
修改映射 hosts 檔案
vim /etc/hosts
查看映射 hosts 檔案
cat /etc/hosts

安裝 epel-release
Extra Packages for Enterprise Linux 是為“紅帽系”的作業系統提供額外的軟體包,適用于 RHEL、 CentOS 和 Scientific Linux,相當于是一個軟體倉庫, 大多數 rpm 包在官方 repository 中是找不到的)
yum install -y epel-release

安裝 net-tool
工具包集合,包含 ifconfig 等命令
yum install -y net-tools
安裝 vim
編輯器
yum install -y vim
關閉防火墻
systemctl stop firewalld
關閉防火墻開機自啟
systemctl disable firewalld.service
卸載服務器自帶的 JDK
查看是否有JDK
rpm -qa | grep -i java
- rpm -qa: 查詢所安裝的所有 rpm 軟體包
- grep -i:忽略大小寫

洗掉JDK
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
- xargs -n1:表示每次只傳遞一個引數
- rpm -e --nodeps:強制卸載軟體

創建檔案夾
在/opt 目錄下創建檔案夾
cd /opt
mkdir module
mkdir software

安裝JDK
上傳檔案

下載 JDK
jdk-8u212-linux-x64.tar.gz

解壓 JDK
到 /opt/module 目錄下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

配置 JDK 環境變數
新建/etc/profile.d/my_env.sh 檔案
sudo vim /etc/profile.d/my_env.sh
添加如下內容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
保存后退出
:wq

讓新的環境變數 PATH 生效
source /etc/profile
測驗 JDK
是否安裝成功
java -version

安裝 Hadoop
下載 Hadoop
hadoop-3.1.3.tar.gz
解壓
安裝檔案到/opt/module 下面
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
環境變數
在 my_env.sh 檔案末尾添加如下內容
sudo vim /etc/profile.d/my_env.sh
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
保存并退出
:wq

修改后的檔案生效
source /etc/profile
測驗安裝
hadoop version

Hadoop 目錄結構

- bin 目錄 :存放對 Hadoop 相關服務(hdfs, yarn, mapred)進行操作的腳本
- etc 目錄 : Hadoop 的組態檔目錄,存放 Hadoop 的組態檔
- lib 目錄 :存放 Hadoop 的本地庫(對資料進行壓縮解壓縮功能)
- sbin 目錄 :存放啟動或停止 Hadoop 相關服務的腳本
- share 目錄 :存放 Hadoop 的依賴 jar 包、 檔案、 和官方案例
重啟服務器
reboot
Hadoop 運行模式
- 本地模式
- 偽分布式模式
- 完全分布式模式
本地模式:單機運行,只是用來演示一下官方案例, 生產環境不用
偽分布式模式: 也是單機運行,但是具備 Hadoop 集群的所有功能, 一臺服務器模擬一個分布式的環境, 缺錢的公司用來測驗,生產環境不用
完全分布式模式: 多臺服務器組成分布式環境, 生產環境使用
本地運行模式(玩具)
演示 官方 WordCount
準備作業
創建檔案夾
mkdir wcinput
創建檔案
cd wcinput
vim word.txt
檔案中輸入如下內容
cpucode cpu
code
cpuc cpucode
code
cpu
保存退出: :wq

執行程式
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount ./wcinput/ ./wcoutput

查看結果
cat wcoutput/part-r-00000

完全分布式運行模式
準備
- 準備 3 臺客戶機(關閉防火墻、靜態 IP、主機名稱)
- 安裝 JDK
- 配置環境變數
- 安裝 Hadoop
- 配置環境變數
- 配置集群
- 單點啟動
- 配置 ssh
- 群起并測驗集群
scp(secure copy) 安全拷貝
scp 可以實作服務器與服務器之間的資料拷貝(from server1 to server2)
scp -r $pdir/$fname $user@$host:$pdir/$fname
- scp : 命令
- -r : 遞回
- $pdir/$fname : 要拷貝的檔案路徑/名稱
- $user@$host:$pdir/$fname : 目的地用戶@主機:目的地路徑/名稱
note :
在 所有服務器 都要創建好的 /opt/module、/opt/software 兩個目錄
在 cpucode100 機器上
將 cpucode100 中/opt/module/jdk1.8.0_212 目錄拷貝到 cpucode101 上
scp -r /opt/module/jdk1.8.0_212 root@cpucode101:/opt/module/

在 cpucode101 機器上
將 cpucode100 中/opt/module/hadoop-3.1.3 目錄拷貝到 cpucode101 上
scp -r root@cpucode100:/opt/module/hadoop-3.1.3 /opt/module/

將 cpucode100 中/opt/module 目錄下所有目錄拷貝到 cpucode102 上
scp -r root@cpucode100:/opt/module/* root@cpucode102:/opt/module/
rsync 遠程同步工具
rsync 主要用于備份和鏡像,具有速度快、避免復制相同內容和支持符號鏈接的優點,
rsync 和 scp 區別:
- rsync 做檔案的復制要比 scp 的速度快, rsync 只對差異檔案做更新
- scp 是把所有檔案都復制過去
rsync -av $pdir/$fname $user@$host:$pdir/$fname
- -a 歸檔拷貝
- v 顯示復制程序
測驗
洗掉
rm -rf wcinput/ wcoutput/

在 cpucode102
同步 cpucode100 中的/opt/module/* 到 cpucode102
rsync -av root@cpucode100:/opt/module/* /opt/module


集群分發腳本 xsync
需求:
回圈復制檔案到所有節點的相同目錄下
需求分析:
- rsync 命令原始拷貝:
rsync -av /opt/module/* root@cpucode101:/opt/module
-
期望腳本:xsync 要同步的檔案名稱
-
期望腳本在任何路徑都能使用(腳本放在宣告了全域環境變數的路徑)
查看全域環境變數
echo $PATH

腳本實作
在 /usr/local/sbin/ 目錄下創建 xsync 檔案
cd /usr/local/sbin/

編輯
vim xsync
強制保存退出
:wq!
#!/bin/bash
#1. 判斷引數個數
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍歷集群所有機器
for host in cpucode100 cpucode101 cpucode102
do
echo ==================== $host ====================
#3. 遍歷所有目錄,挨個發送
for file in $@
do
#4. 判斷檔案是否存在
if [ -e $file ]
then
#5. 獲取父目錄
pdir=$(cd -P $(dirname $file); pwd)
#6. 獲取當前檔案的名稱
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done

修改腳本 xsync 具有執行權限
chmod 777 xsync

測驗
用了 sudo,那么 xsync 一定要給它的路徑補全
sudo /usr/local/sbin/xsync /etc/profile.d/my_env.sh

查看是否成功
cat /etc/profile.d/my_env.sh


讓環境變數生效
source /etc/profile

SSH 無密登錄配置
免密登錄原理

生成公鑰和私鑰
ssh-keygen -t rsa
敲(三個回車),就會生成兩個檔案 id_rsa(私鑰)、 id_rsa.pub(公鑰)

cd /root/.ssh/

將公鑰拷貝到要免密登錄的目標機器上
所有服務器配置
ssh-copy-id cpucode100
ssh-copy-id cpucode101
ssh-copy-id cpucode102

.ssh
- known_hosts : 記錄 ssh 訪問過計算機的公鑰(public key)
- id_rsa : 生成的私鑰
- id_rsa.pub : 生成的公鑰
- authorized_keys : 存放授權過的無密登錄服務器公鑰
ssh 連接
ssh cpucode100
退回
exit

無密傳輸
傳輸 xsync 腳本
xsync ./xsync

集群配置
集群部署規劃
注意:
- NameNode 和 SecondaryNameNode 不要安裝在同一臺服務器
- ResourceManager 也很消耗記憶體,不要和 NameNode、 SecondaryNameNode 配置在同一臺機器上
| cpucode100 | cpucode101 | cpucode102 | |
|---|---|---|---|
| HDFS | NameNode | SecondaryNameNode | |
| DataNode | DataNode | DataNode | |
| YARN | ResourceManager | ||
| NodeManager | NodeManager | NodeManager |
組態檔說明
Hadoop 組態檔分兩類:
- 默認組態檔
- 自定義組態檔
只有用戶想修改某一默認配置值時,才需要修改自定義組態檔,更改相應屬性值,
默認組態檔 :
| 要獲取的默認檔案 | 檔案存放在 Hadoop 的 jar 包中的位置 |
|---|---|
| core-default.xml | hadoop-common-3.1.3.jar/core-default.xml |
| hdfs-default.xml | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
| yarn-default.xml | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
| mapred-default.xml | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
自定義組態檔:
四個組態檔存放在 $HADOOP_HOME/etc/hadoop 這個路徑上, 用戶可以根據專案需求重新進行修改配置
- core-site.xml
- hdfs-site.xml
- yarn-site.xml
- mapred-site.xml

配置集群
- 核心組態檔
- HDFS 組態檔
- YARN 組態檔
- MapReduce 組態檔
核心組態檔
core-site.xml
vim core-site.xml
檔案內容 :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cpucode100:8020</value>
</property>
<!-- 指定 hadoop 資料的存盤目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 網頁登錄使用的靜態用戶為 cpucode -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>cpucode</value>
</property>
</configuration>

HDFS 組態檔
配置 hdfs-site.xml
vim hdfs-site.xml
檔案內容 :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端訪問地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>cpucode100:9870</value>
</property>
<!-- 2nn web 端訪問地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>cpucode101:9868</value>
</property>
</configuration>

YARN 組態檔
配置 yarn-site.xml
vim yarn-site.xml
檔案內容 :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cpucode102</value>
</property>
<!-- 環境變數的繼承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>

MapReduce 組態檔
配置 mapred-site.xml
vim mapred-site.xml
檔案內容 :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程式運行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

分發配置好的 Hadoop 組態檔
xsync /opt/module/hadoop-3.1.3/etc/hadoop/

查看檔案分發
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-size.xml

群起集群
配置 workers
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
note :
該檔案中添加的內容結尾不允許有空格,檔案中不允許有空行
內容:
cpucode100
cpucode101
cpucode102

同步所有節點組態檔
xsync /opt/module/hadoop-3.1.3/etc

啟動集群
如果集群是第一次啟動
需要在 cpucode100 節點格式化 NameNode
注意:
格式化 NameNode, 會產生新的集群 id, 導致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往資料,
如果集群在運行程序中報錯,需要重新格式化 NameNode 的話, 一定要先停止 namenode 和 datanode 行程, 并且要洗掉所有機器的 data 和 logs 目錄,然后再進行格式化,
hdfs namenode -format

啟動 HDFS

./start-dfs.sh

在配置了 ResourceManager 的節點(cpucode102) 啟動 YARN
./start-yarn.sh

Web 端查看 HDFS 的 NameNode
Web 端查看 YARN 的 ResourceManager
集群基本測驗
配置歷史服務器
配置 mapred-site.xml
分發配置
啟動歷史服務器
查看歷史服務器是否啟動
查看 JobHistory
配置日志的聚集
配置 yarn-site.xml
分發配置
關閉 NodeManager 、 ResourceManager 和 HistoryServer
關閉 NodeManager 、 ResourceManager 和 HistoryServer
洗掉 HDFS 上已經存在的輸出檔案
執行 WordCount 程式
查看日志
集群啟動/停止方式總結
各個模塊分開啟動/停止(配置 ssh 是前提)
各個服務組件逐一啟動/停止
撰寫 Hadoop 集群常用腳本
Hadoop 集群啟停腳本(包含 HDFS, Yarn, Historyserver): myhadoop.sh
常用埠號說明
集群時間同步
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/356757.html
標籤:其他
上一篇:大資料之路——資料同步
