主頁 >  其他 > 大資料開發基礎入門與專案實戰(三)Hadoop核心及生態圈技術堆疊之1.Hadoop簡介及Apache Hadoop完全分布式集群搭建

大資料開發基礎入門與專案實戰(三)Hadoop核心及生態圈技術堆疊之1.Hadoop簡介及Apache Hadoop完全分布式集群搭建

2021-09-05 07:37:04 其他

文章目錄

  • 前言
  • 1.大資料簡介
    • (1)知識體系
    • (2)大資料定義及應用場景
    • (3)大資料發展趨勢及從業人員發展路線
  • 2.Hadoop簡介
  • 3.Hadoop的重要組成
  • 4.Apache Hadoop 完全分布式集群搭建
    • (1)虛擬機環境準備
    • (2)環境變數配置
    • (3)集群規劃實施
    • (4)撰寫集群分發腳本
    • (5)集群啟動
      • Ⅰ 單節點啟動
      • Ⅱ 集群群起
      • Ⅲ 集群停止
    • (6)集群測驗
    • (7)歷史日志服務器配置
  • 總結

前言

本文主要介紹了Hadoop簡介及Apache Hadoop完全分布式集群搭建,包括大資料簡介、Hadoop簡介、Hadoop的重要組成和Apache Hadoop 完全分布式集群搭建,

1.大資料簡介

(1)知識體系

大資料技術解決的主要是海量資料的存盤和計算

Hadoop的廣義和狹義之分:

(1)狹義的Hadoop:

狹義的Hadoop指的是一個框架,Hadoop是由三部分組成:

  • HDFS

????分布式檔案系統,用于存盤,

  • MapReduce

????分布式離線計算框架,用于計算,

  • Yarn

????資源調度框架

(2)廣義的Hadoop:

廣義Hadoop不僅僅包含Hadoop框架,除了Hadoop框架之外還有一些輔助框架:

  • Flume

????日志資料采集,

  • Sqoop

????關系型資料庫資料的采集,
????

  • Hive

????深度依賴Hadoop框架完成計算(SQL),

  • Hbase

????大資料領域的資料庫(MySQL),

  • Sqoop

????資料的匯出,

廣義Hadoop指的是一個生態圈,

核心知識體系如下:

  • 大資料簡介(定義,特點,應用場景,發展趨勢,職業發展路線)

  • Hadoop簡介(歷史,發展路線-版本變更,發行版(CDH))

  • Hadoop的重要組成(hdfs,mapreduce,yarn)

  • Apache Hadoop完全分布式集群搭建

  • HDFS分布式檔案系統(架構,原理,常用api,元資料管理,權限,日志采集的綜合案例)

  • MapReduce分布式計算框架 (原理,常用的編程規范等,大量案例練習-磁區,排序-快排-歸并排序,壓縮,自定義組件,綜合案例)

  • Yarn資源調度框架(架構,原理,三種資源調度策略)

  • Apche Hadoop核心原始碼剖析(nn,dn啟動流程原始碼分析,nn高并發的支撐原理,hadoop3.0新特性)

  • 調優及二次開發示例(hdfs,mr,yarn調優,nn常見GC問題,完成二次開發編譯原始碼)

(2)大資料定義及應用場景

大資料的定義:

大資料是指無法在一定時間范圍內用常規軟體工具進行捕捉、管理和處理的資料集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的資訊資產,

大資料的特點(5V):

bigdata 5v

  • 大量

????采集、存盤和計算的資料量都非常大,

????隨著科學技術的發展和互聯網的普及,全球的資料量已經大到爆了,而傳統的關系型資料庫根本處理不了如此海量的資料,

  • 高速

????在大資料時代,資料的創建、存盤、分析都要求被高速處理,比如電商網站的個性化推薦盡可能要求實時完成推薦,這也是大資料區別于傳統資料挖掘的顯著特征,

  • 多樣

????資料形式和來源多樣化,包括結構化、半結構化和非結構化資料,具體表現為網路日志、音頻、視頻、圖片、地理位置資訊等,多型別的資料對資料的處理能力提出了更高的要求,

  • 真實

????確保資料的真實性,才能保證資料分析的正確性,

  • 低價值

????資料價值密度相對較低,或者說是浪里淘沙卻又彌足珍貴

????互聯網發展催生了大量資料,資訊海量,但價值密度較低,如何結合業務邏輯并通過強大的機器演算法來挖掘資料價值,是大資料時代最需要解決的問題,也是一個有難度的課題,

隨著大資料的發展,大資料技術已經廣泛應用在眾多行業,比如倉儲物流、電商零售、汽車、電信、生物醫學、人工智能、智慧城市等等領域,包括在疫情防控戰中,大資料技術也發揮了重要的作用:

  • 倉儲物流

????大資料技術驅動了倉儲物流領域的智能化發展,以蘇寧為例,蘇寧物流可在全國的各級倉庫間實作智能分倉、就近備貨和預測式調撥,實作“客戶需要的商品就在離客戶最近的配送中心”,

bigdata storage logistics

  • 電商零售

????- 零售業“啤酒+紙尿褲”案例

bidgata ec

????- 個性推薦

bigdata recommend

????- “雙11購物節”實時銷售額大屏

bigdata double eleven

  • 汽車

????利用了大資料和物聯網技術的無人駕駛汽車,在不遠的未來將走入我們的日常生活,

  • 電信

????移動聯通根據用戶年齡、職業、消費情況,分析統計哪種套餐適合哪類人群,對市場人群精準定制,

  • 生物醫學

????大資料可以幫助我們實作流行病預測、智慧醫療、健康管理,同時還可以幫助我們解讀DNA,了解更多的生命奧秘,比如影像大資料支撐下的早期肺癌支撐平臺,基于大量病例資料樣本,制定早期肺癌高危人群預警指標,

  • 人工智能

????人工智能的基礎上就是大資料,在大量資料訓練的基礎上得到“經驗”,

????典型的例子是AlphaGo戰勝人類棋手,因為AlphaGo已經經過了大量的下棋訓練,訓練得到了“下棋經驗”,

bigdata ai

  • 智慧城市

????大資料有效支撐智慧城市發展,成為城市的”資料大腦“,比如,在智慧城市建設上,杭州始終走在全國前列,如覆寫面廣的移動支付、新穎的在線醫療模式、創新的物流運輸模式,都受到較大關注,

bigdata intelligent city

大資料的價值,遠遠不止于此,大資料對各行各業的滲透,大大推動了社會生產和生活,未來必將產生重大而深遠的影響,

(3)大資料發展趨勢及從業人員發展路線

大資料行業發展趨勢的兩個層面:

(1)國家政策層面

  1. 2015年黨的十八屆五中全會提出“實施國家大資料戰略”,國務院印發《促進大資料發展行動綱要》,大資料技術和應用處于創新突破期,國內市場需求處于爆發期,我國大資料產業面臨重要的發展機遇,

  2. 2017年十九大報告明確 “推動互聯網、大資料、人工智能和物體經濟深度融合”,

  3. 2020年全國政協十三屆三次會議新聞發布會上,更進一步強調:大資料、人工智能、5G是引領未來發展的戰略性技術,

顯然,發展大資料是我國的戰略性決策,前景自然不言而喻,

(2)高校教育和就業層面

  1. 2017年北京大學、中國人民大學、北京郵電大學等25所高校成功申請開設大資料課程

  2. 大資料屬于高新技術,大牛少,升職競爭小

  3. 2020年5月6日,人力資源和社會保障部發布《新職業—大資料工程技術人員就業景氣現狀分析報告》,報告顯示:預計2020年中國大資料行業人才需求規模將達210萬,2025年前大資料人才需求仍將保持30%~40%的增速,需求總量在2000萬人左右,

  4. 在北京大資料開發工程師的平均薪水已經超越 1.5w 直逼2w,而且目前還保持強勁的發展勢頭,

大資料職業發展路線:

目前大資料高、中、低三個檔次的人才都很缺, 現在我們談大資料,就像當年談電商一樣,未來前景已經很明確,接下來就是優勝劣汰,競爭上崗,不想當架構師的程式員不是好程式員!

大資料發展到現階段,涉及大資料相關的職業崗位也越來越精細,從職業發展來看,由大資料開發、挖掘、演算法、到架構,從級別來看,從工程師、高級工程師,再到架構師,甚至到科學家,而且,契合不同的行業領域,又有專屬于這些行業的崗位衍生,如涉及金融領域的資料分析師等,

大資料的相關作業崗位有很多,有資料分析師、資料挖掘工程師、大資料開發工程師、大資料產品經理、可視化工程師、爬蟲工程師、大資料運營經理、大資料架構師、資料科學家等
等,

從事大資料崗位包括:

  • ETL工程師—資料清洗

  • 資料倉庫工程師—資料倉庫搭建

  • 實時流處理工程師

  • 用戶畫像工程師

  • 資料挖掘

  • 演算法工程師

  • 推薦系統工程

2.Hadoop簡介

Hadoop 是一個適合大資料的分布式存盤和計算平臺
前面已經提到,狹義上說Hadoop就是一個框架平臺,廣義上講Hadoop代表大資料的一個技術生態圈,包括很多其他軟體框架,如下:

Hadoop生態圈技術堆疊
Hadoop(HDFS + MapReduce + Yarn)
Hive 資料倉庫工具
HBase 海量列式非關系型資料庫
Flume 資料采集工具
Sqoop ETL工具
Kafka 高吞吐訊息中間件
……

Hadoop 的發展歷程如下:

Nutch —> Google論文(GFS、MapReduce)
—> Hadoop產生
—> 成為Apache頂級專案
—> Cloudera公司成立(Hadoop快速發展)

(1)Hadoop最早起源于Nutch,創始人是Doug Cutting

Nutch 是一個開源 Java 實作的搜索引擎,它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲,但隨著抓取網頁數量的增加,遇到了嚴重的可擴展性問題——如何解決數十億網頁的存盤和索引問題,

(2)2003年、2004年谷歌發表的兩篇論文為該問題提供了可行的解決方案:

GFS,可用于處理海量網頁的存盤;

MapReduce,可用于處理海量網頁的索引計算問題,

其中,Google的三篇論文(三駕馬車)分別是:

  • GFS:Google的分布式檔案系統(Google File System)

  • MapReduce:Google的分布式計算框架

  • BigTable:大型分布式資料庫

發展演變關系:

  • GFS —> HDFS

  • oogle MapReduce —> Hadoop MapReduce

  • BigTable —> HBase

隨后,Google公布了部分GFS和MapReduce思想的細節,Doug Cutting等人用2年的業余時間實作了DFS和MapReduce機制,使Nutch性能飆升,

(3)2005年,Hadoop 作為Lucene的子專案Nutch的一部分引入Apache,

(4)2006年,Hadoop從Nutch剝離出來獨立,

(5)2008年,Hadoop成為Apache的頂級專案,

Hadoop名字來源于Hadoop之父Doug Cutting兒子的毛絨玩具象:

bigdata Hadoop logo

Hadoop的特點如下:

bigdata hadoop feature

Hadoop的發行版本指不同的分支:

目前Hadoop發行版非常多,有Cloudera發行版(CDH)、Hortonworks發行版、華為發行版、Intel發行版等,所有這些發行版均是基于Apache Hadoop衍生出來的,之所以有這么多的版本,是由Apache Hadoop的開源協議決定的(任何人可以對其進行修改,并作為開源或商業產品發布/銷售),

企業中主要用到的三個版本分別是:Apache Hadoop版本(最原始的,所有發行版均基于這個版本進行改進)、Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,簡稱“CDH”)、Hortonworks版本(Hortonworks Data Platform,簡稱“HDP”),

分別如下:

  • Apache Hadoop

????原始版本,學習環境使用,
????官網地址:http://hadoop.apache.org/,

????優點:擁有全世界的開源貢獻,代碼更新版本比較快,學習非常方便;

????缺點:版本的升級,版本的維護,以及版本之間的兼容性
????

????Apache所有軟體的下載地址(包括各種歷史版本):

????http://archive.apache.org/dist/,

  • 軟體收費版本ClouderaManager

????CDH版本,生產環境使用,

????官網地址:https://www.cloudera.com/

????Cloudera主要是美國一家大資料公司,在Apache開源Hadoop的版本上,通過自己公司內部的各種補丁,實作版本之間的穩定運行,大資料生態圈的各個版本的軟體都提供了對應的版本,解決了版本的升級困難,版本兼容性等各種問題,生產環境強烈推薦使用,

  • 免費開源版本HortonWorks

????HDP版本,生產環境使用,

????官網地址:https://hortonworks.com/

????hortonworks主要是雅虎主導Hadoop開發的副總裁,帶領二十幾個核心成員成立Hortonworks,核心產品軟體HDP(ambari),HDF免費開源,并且提供一整套的web管理界面,供我們可以通過web界面管理我們的集群狀態,

????web管理界面軟體HDF網址:http://ambari.apache.org/,

????因為HortonWorks已經被Cloudera收購,所以HDP的使用也可能會逐漸減少,商用以CDH為主,

目前使用Apache Hadoop,其版本更迭如下:

  1. 0.x 系列版本:Hadoop當中最早的一個開源版本,在此基礎上演變而來的1.x以及2.x的版本;

  2. 1.x 版本系列:Hadoop版本當中的第二代開源版本,主要修復0.x版本的一些bug等;

  3. 2.x 版本系列:架構產生重大變化,引入了yarn平臺等許多新特性;

  4. 3.x 版本系列:EC技術、Yarn的時間軸服務等新特性,

3.Hadoop的重要組成

狹義的Hadoop由四部分組成:

  • HDFS(分布式檔案系統)

  • MapReduce(分布式計算框架)

  • Yarn(資源協調框架)

  • Common模塊

(1)HDFS(Hadoop Distribute File System )——高可靠、高吞吐量的分布式檔案系統

HDFS的思想是分而治之,主要功能如下:

  • 資料切割

????將海量資料進行拆分,以保證可以在單臺機器上進行保存,

????例如100T資料拆分為10G一個資料塊由一個電腦節點存盤這個資料塊,

  • 制作副本

????由于電腦可能出現宕機的情況,所以需要制作副本,讓另外的電腦也保存相同的資料,

  • 分散儲存

????將資料切割后,分散存盤在不同的機器上,同時在另外的機器上有相同資料的副本,

圖示如下:

Hadoop nn 2nn

HDFS屬于Master/Slave(主從架構):

  • NameNode(nn)

????屬于Master節點,主要負責管理和維護元資料:

????存盤檔案的元資料,元資料記錄了檔案名、檔案目錄結構、檔案屬性(生成時間、副本數、檔案權限),以及每個檔案的塊串列和塊所在的DataNode節點資訊等,
????

  • SecondaryNameNode(2nn)

????輔助NameNode管理和維護元資料,用來監控HDFS狀態的輔助后臺程式,每隔一段時間獲取HDFS元資料快照,

  • DataNode(dn)

????屬于Slave節點,負責存盤檔案資料塊:

????在本地檔案系統存盤檔案塊資料,以及塊資料的校驗
????

其中,NN、2NN、DN既是角色名稱、行程名稱,也代指電腦節點名稱,

HDFS存入程序:

對于大資料進行拆分(切割)得到資料塊,可能得到多個資料塊,由多個DataNode進行存盤,

HDFS獲取檔案程序:

向NameNode請求獲取到之前存入檔案的塊以及塊所在的DataNode的資訊,分別下載并最終合并,就得到之前的檔案,

(2)Hadoop MapReduce——一個分布式的離線并行計算框架

MapReduce的思想也是分而治之,主要功能如下:

  • 拆解任務

????將資料進行切分,得到切片,

  • 分散處理

  • 匯整結果

圖示如下:

bigdata hadoop mr

M a p R e d u c e 計 算 = M a p 階 段 + R e d u c e 階 段 MapReduce計算 = Map階段 + Reduce階段 MapReduce=Map+Reduce

  • Map階段就是“分”的階段

????將資料切分到多個節點后,多個節點并行處理 輸入資料,即每個節點負責一份資料的計算,并得到部分結果,

  • Reduce階段就是“合”的階段

????對Map階段的輸出結果進行匯總,得到全域的結果,

(3)Hadoop Yarn——作業調度與集群資源管理的框架

Yarn負責集群中計算資源的分配和作業任務的調度:

Hadoop yarn

Yarn架構也是主從架構主要角色如下:

  • ResourceManager(rm)

????是Master,處理客戶端請求、啟動/監控ApplicationMaster、監控NodeManager、資源分配與調度,

  • NodeManager(nm)

????是Slave,單個節點上的資源管理、處理來自ResourceManager的命令、處理來自ApplicationMaster的命令,

  • ApplicationMaster(am)

????是計算任務專員,資料切分、為應用程式(任務)申請資源,并分配給內部任務、任務監控與容錯,

  • Container

????對任務運行環境的抽象,一個Container負責一個Task,封裝了CPU、記憶體等多維資源以及環境變數、啟動命令等任務運行相關的資訊,可以理解為虛擬資源集合或小型計算機,

(4)Hadoop Common——支持其他模塊的工具模塊

包括以下幾部分:

  • Configuration

????公共的配置,包括集群節點、節點資源、IP、主機名、引數等配置項

  • RPC

????遠程程序呼叫,是分布式框架中多個節點之間進行網路通訊的首選方式,高效、穩定、安全,Hadoop中實作了Hadoop RPC框架,

  • 序列化機制

  • 日志操作

4.Apache Hadoop 完全分布式集群搭建

(1)虛擬機環境準備

Hadoop框架是采用Java語言撰寫的,所以需要Java環境(JVM)才能運行,即虛擬機中必須安裝JDK,同時必須使用JDK8版本,而不能使用更高的版本,因為在撰寫Hadoop時使用的就不是JDK8以上的版本,

之前在虛擬機上安裝的就是jdk-8u231-linux-x64,

Hadoop搭建的方式包括3種:

  • 單機模式

????單節點、不是集群,生產不會使用這種模式,

  • 單機偽分布式模式

????單節點、多執行緒模擬集群的效果,因為發揮的也只是一臺電腦的性能,因此生產中不會使用,

  • 完全分布式模式

????多臺節點,真正的分布式Hadoop集群的搭建,生產環境建議使用這種方式,

完全分布式集群需要多臺電腦,目前可以使用VMWare軟體虛擬三臺Linux節點,同時建議系統選擇CentOS 7,之前已經準備好了,同時已經完成靜態IP配置、關閉防火墻、修改主機名、配置免密登錄和集群時間同步等操作,

之前已經在虛擬機中安裝好了JDK和Tomcat,并且是將它們安裝在/opt/software目錄下的,將Hadoop安裝到相同的目錄,

在安裝之前需要下載Hadoop的安裝包,可以到https://hadoop.apache.org/releases.html下載最新版,也可以在https://archive.apache.org/dist/hadoop/common/中選擇合適的版本進行下載,這里選擇2.9.2版本,

可以先點擊https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz下載到本地,再使用工具上傳到虛擬機的/opt/software目錄下,也可以直接在虛擬機的/opt/software目錄下執行wget https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz進行下載,可以根據需要選擇,

在使用時,可以參考Hadoop官方檔案https://hadoop.apache.org/docs/r2.9.2/,

(2)環境變數配置

現在進行集群規劃,對3臺虛擬機的角色分布如下:

框架node01node02node03
HDFSNameNode、DataNodeDataNodeSecondaryNameNode、DataNode
YarnNodeManagerNodeManagerNodeManager、ResourceManager

以node01為NameNode,所以也只需要在這一臺機器下載安裝Hadoop,

現在在node01上安裝Hadoop:

(1)解壓檔案

進入software目錄cd /opt/software,解壓之前上傳的Hadoop安裝包tar -xzvf hadoop-2.9.2.tar.gz,再將安裝包移動到package目錄mv hadoop-2.9.2.tar.gz ../packages/,查看software目錄:

[root@node01 software]$ ll -ht
總用量 0
drwxr-xr-x. 3 root root     69 820 14:22 tomcat
drwxr-xr-x. 3 root root     26 820 14:09 java
drwxr-xr-x  9  501 dialout 149 1113 2018 hadoop-2.9.2

hadoop-2.9.2就是安裝的目錄,

(2)配置環境變數

編輯profile檔案vim /etc/profile,添加Hadoop到環境變數,在末尾添加如下內容即可:

# HADOOP_HOME
export HADOOP_HOME=/opt/software/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

其中,安裝路徑/opt/software/hadoop-2.9.2可以根據自己的需要進行修改;

保存退出后,再執行source /etc/profile使環境變數生效,

可以使用hadoop version命令驗證Hadoop是否安裝成功,如輸出類似如下,則說明安裝成功:

[root@node01 software]$ hadoop version
Hadoop 2.9.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 826afbeae31ca687bc2f8471dc841b66ed2c6704
Compiled by ajisaka on 2018-11-13T12:42Z
Compiled with protoc 2.5.0
From source with checksum 3a9939967262218aa556c684d107985
This command was run using /opt/software/hadoop-2.9.2/share/hadoop/common/hadoop-common-2.9.2.jar

在安裝成功之后,可以查看Hadoop的安裝目錄,如下:

[root@node01 software]$ cd hadoop-2.9.2/
[root@node01 hadoop-2.9.2]$ ll -ht
總用量 128K
drwxr-xr-x 2 501 dialout  106 1113 2018 include
drwxr-xr-x 2 501 dialout  194 1113 2018 bin
drwxr-xr-x 2 501 dialout  239 1113 2018 libexec
drwxr-xr-x 3 501 dialout 4.0K 1113 2018 sbin
drwxr-xr-x 3 501 dialout   20 1113 2018 etc
drwxr-xr-x 3 501 dialout   20 1113 2018 lib
-rw-r--r-- 1 501 dialout 104K 1113 2018 LICENSE.txt
-rw-r--r-- 1 501 dialout  16K 1113 2018 NOTICE.txt
-rw-r--r-- 1 501 dialout 1.4K 1113 2018 README.txt
drwxr-xr-x 4 501 dialout   31 1113 2018 share

可以看到,此時各個目錄的屬主和屬組是501和dialout,而之后都是使用root用戶來進行Hadoop集群的相關操作,同時需要分發到其他節點,為了保證屬主和屬組都正常、避免出現資訊混亂,因此這里需要修改Hadoop安裝目錄所屬用戶和用戶組,執行命令chown -R root:root /opt/software/hadoop-2.9.2/,執行后再查看,如下:

[root@node01 hadoop-2.9.2]$ ll .. -ht
總用量 0
drwxr-xr-x. 3 root root  69 820 14:22 tomcat
drwxr-xr-x. 3 root root  26 820 14:09 java
drwxr-xr-x  9 root root 149 1113 2018 hadoop-2.9.2
[root@node01 hadoop-2.9.2]$ ll -ht
總用量 128K
drwxr-xr-x 2 root root  106 1113 2018 include
drwxr-xr-x 2 root root  194 1113 2018 bin
drwxr-xr-x 2 root root  239 1113 2018 libexec
drwxr-xr-x 3 root root 4.0K 1113 2018 sbin
drwxr-xr-x 3 root root   20 1113 2018 etc
drwxr-xr-x 3 root root   20 1113 2018 lib
-rw-r--r-- 1 root root 104K 1113 2018 LICENSE.txt
-rw-r--r-- 1 root root  16K 1113 2018 NOTICE.txt
-rw-r--r-- 1 root root 1.4K 1113 2018 README.txt
drwxr-xr-x 4 root root   31 1113 2018 share

可以看到,此時Hadoop安裝目錄的各個子目錄的屬主和陣列已經修改,

安裝目錄中各個部分的含義如下:

  • bin目錄

????對Hadoop進行操作的相關命令,如hadoop、hdfs等,如下:

./bin/
├── container-executor
├── hadoop
├── hadoop.cmd
├── hdfs
├── hdfs.cmd
├── mapred
├── mapred.cmd
├── rcc
├── test-container-executor
├── yarn
└── yarn.cmd

????其中,以.cmd結尾的是在Windows上使用的,其他是在Linux上使用的,包含了hadoop、hdfs和yarn,因為之前將該目錄配置到了環境變數,所以可以執行hadoop version命令,

  • etc目錄

????Hadoop的組態檔目錄,如hdfs-site.xml、core-site.xml等,

  • lib目錄

????Hadoop本地庫(解壓縮的依賴),

  • libexec目錄

????針對本地作業系統的依賴庫,

  • include目錄

????包含了jar包,

  • sbin目錄

????存放的是Hadoop集群啟動和停止的相關腳本、命令,如下:

./sbin/
├── distribute-exclude.sh
├── FederationStateStore
│   ├── MySQL
│   │   ├── dropDatabase.sql
│   │   ├── dropStoreProcedures.sql
│   │   ├── dropTables.sql
│   │   ├── dropUser.sql
│   │   ├── FederationStateStoreDatabase.sql
│   │   ├── FederationStateStoreStoredProcs.sql
│   │   ├── FederationStateStoreTables.sql
│   │   └── FederationStateStoreUser.sql
│   └── SQLServer
│       ├── FederationStateStoreStoreProcs.sql
│       └── FederationStateStoreTables.sql
├── hadoop-daemon.sh
├── hadoop-daemons.sh
├── hdfs-config.cmd
├── hdfs-config.sh
├── httpfs.sh
├── kms.sh
├── mr-jobhistory-daemon.sh
├── refresh-namenodes.sh
├── slaves.sh
├── start-all.cmd
├── start-all.sh
├── start-balancer.sh
├── start-dfs.cmd
├── start-dfs.sh
├── start-secure-dns.sh
├── start-yarn.cmd
├── start-yarn.sh
├── stop-all.cmd
├── stop-all.sh
├── stop-balancer.sh
├── stop-dfs.cmd
├── stop-dfs.sh
├── stop-secure-dns.sh
├── stop-yarn.cmd
├── stop-yarn.sh
├── yarn-daemon.sh
└── yarn-daemons.sh

????包含了sh和cmd檔案,

  • share目錄

????Hadoop的一些依賴jar、公開檔案和官方案例等,

(3)集群規劃實施

這里選擇先在node01節點把所有配置項配置完成后,再將配置分發給其他節點,來保證所有結點的配置是統一的,

Hadoop集群配置包括三部分:

  • HDFS集群配置

  • MapReduce集群配置

  • Yarn集群配置

先在node01節點進行HDFS集群配置,步驟如下:

(1)將JDK路徑明確配置給HDFS——修改hadoop-env.sh

在Hadoop安裝目錄進入Hadoop組態檔目錄cd etc/hadoop/,可以看到組態檔:

.
├── capacity-scheduler.xml
├── configuration.xsl
├── container-executor.cfg
├── core-site.xml
├── hadoop-env.cmd
├── hadoop-env.sh
├── hadoop-metrics2.properties
├── hadoop-metrics.properties
├── hadoop-policy.xml
├── hdfs-site.xml
├── httpfs-env.sh
├── httpfs-log4j.properties
├── httpfs-signature.secret
├── httpfs-site.xml
├── kms-acls.xml
├── kms-env.sh
├── kms-log4j.properties
├── kms-site.xml
├── log4j.properties
├── mapred-env.cmd
├── mapred-env.sh
├── mapred-queues.xml.template
├── mapred-site.xml.template
├── slaves
├── ssl-client.xml.example
├── ssl-server.xml.example
├── yarn-env.cmd
├── yarn-env.sh
└── yarn-site.xml


修改hadoop-env.shvim hadoop-env.sh指定JDK安裝路徑,如下:

# The java implementation to use.
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/opt/software/java/jdk1.8.0_231

其中,JDK安裝路徑可以通過echo $JAVA_HOME命令獲取;

保存退出,

(2)指定NameNode節點以及資料存盤目錄——修改core-site.xml

修改core-site.xmlvim core-site.xml,如下:

<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000</value>
</property>
<!-- 指定Hadoop運行時產生檔案的存盤目錄 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/software/hadoop-2.9.2/data/tmp</value>
</property>
</configuration>

其中,配置項需要放到core-site.xml檔案中的configuration標簽中,配置才會生效;

Hadoop對于XML組態檔都有默認配置,配置項的含義可以從檔案https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/core-default.xml中進行查詢:例如fs.defaultFS配置項是組態檔系統的名稱,配置值是一個 URI,用于確定檔案系統的主機、埠等;hadoop.tmp.dir配置項是其他臨時目錄的基礎,

保存后退出,

(3)指定SecondaryNameNode節點——修改hdfs-site.xml

編輯hdfs-site.xmlvim hdfs-site.xml,如下:

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

其中,指定了副本數量后,每個資料塊有3個副本;

也可以在https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml中查看默認配置;

保存后退出,

(4)指定DataNode從節點——修改etc/hadoop/slaves檔案,每個節點配置資訊占一行)

編輯slavesvim slaves,如下:

node01
node02
node03

需要確保本檔案中每一行結尾不允許有空格、只有節點主機名,同時檔案中不允許有空行,否則讀取配置時無法識別,

再進行MapReduce集群配置:

(1)將JDK路徑明確配置給MapReduce——修改mapred-env.sh

編輯mapred-env.shvim mapred-env.sh如下:

# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/opt/software/java/jdk1.8.0_231

保存退出,

(2)指定MapReduce計算框架運行Yarn資源調度框架——修改mapred-site.xml

修改mapred-site.xml組態檔名cp mapred-site.xml.template mapred-site.xml,再編輯mapred-site.xmlvim mapred-site.xml,如下:

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

mapred-site.xml默認配置可參考https://hadoop.apache.org/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml;

保存退出,

最后進行Yarn集群配置:

(1)將JDK路徑明確配置給Yarn——修改yarn-env.sh

修改yarn-env.shvim yarn-env.sh,如下:

# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/opt/software/java/jdk1.8.0_231

保存退出,

(2)指定ResourceManager老大節點所在計算機節點——修改yarn-site.xml

編輯yarn-site.xmlvim yarn-site.xml,如下:

<configuration>

<!-- Site specific YARN configuration properties -->
<!-- 指定YARN的ResourceManager的地址 -->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node03</value>
</property>
<!-- Reducer獲取資料的方式 -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
</configuration>

其中,默認配置可查看https://hadoop.apache.org/docs/r2.9.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml;

保存退出,

(3)指定NodeManager節點——通過slaves檔案內容確定

一個DataNode就對應一個NodeManager,所以前面已經配置過slaves檔案,所以這里可以省略,

(4)撰寫集群分發腳本

現在需要進行集群分發,即將Hadoop安裝目錄(包括已經配置好的組態檔)可以使用scp,這里選擇使用rsync,

rsync遠程同步工具主要用于備份和鏡像,具有速度快、避免復制相同內容和支持符號鏈接的優點,

rsync和scp區別如下:

用rsync做檔案的復制要比scp的速度快,rsync只對差異檔案做更新

scp是把所有檔案都復制過去,所以效率較低,

(1)3臺虛擬機安裝

# 命令 選項引數 要拷貝的檔案路徑/名稱 目的用戶@主機:目的路徑/名稱
rsync  -rvl   $pdir/$fname     $user@$host:$pdir/$fname

其中,各選項含義如下:

選項功能
-r遞回
-v顯示復制程序
-l拷貝符號連接

先使用rsync實作拷貝目錄:

(1)3臺虛擬機安裝rsync

在連接工具中同時連接3臺虛擬機,再選擇發送到全部會話 執行yum install -y rsync,即可一次性在3臺虛擬機安裝rsync,

(2)測驗rsync,把node01節點的/opt/packages目錄同步到node02節點的root用戶下的/opt/目錄下

# 虛擬機node01執行rsync命令
[root@node01 ~]$ rsync -ivl /opt/packages/ root@node02:/opt/packages
skipping directory .

sent 16 bytes  received 12 bytes  18.67 bytes/sec
total size is 0  speedup is 0.00
[root@node01 ~]$ rsync -rvl /opt/packages/ root@node02:/opt/packages
sending incremental file list
created directory /opt/packages
./
apache-tomcat-7.0.57.tar.gz
hadoop-2.9.2.tar.gz
jdk-8u231-linux-x64.tar.gz

sent 569,638,685 bytes  received 112 bytes  30,791,286.32 bytes/sec
total size is 569,499,359  speedup is 1.00
# 虛擬機node02查看
[root@node02 opt]$ ls /opt/
packages  software
[root@node02 opt]$ ll /opt/packages/
總用量 556156
-rw-r--r-- 1 root root   8900571 825 10:28 apache-tomcat-7.0.57.tar.gz
-rw-r--r-- 1 root root 366447449 825 10:28 hadoop-2.9.2.tar.gz
-rwxr-xr-x 1 root root 194151339 825 10:28 jdk-8u231-linux-x64.tar.gz


可以看到,已經將packages目錄及其內部的檔案拷貝到node02節點,

節點比較少的時候,直接執行命令進行拷貝是可以的,但是如果節點很多,一一執行命令效率就很低了,此時就可以撰寫集群分發腳本來實作回圈復制檔案到集群所有節點的相同目錄下,

期望的目標是直接執行腳本 要同步的檔案名稱命令就能實作高效分發,同時將腳本放在/usr/local/bin目錄下,方便root用戶在系統任何地方直接執行,

node01節點腳本實作的步驟如下:

(1)切換目錄并編輯檔案

切換到/usr/local/bin目錄cd /usr/local/bin/,編輯腳本檔案vim rsync-script,如下:

#!/bin/bash

# 1.獲取傳入腳本的引數,包括引數個數和引數值
paramnum=$#

if ((paramnum==0)); then
  echo "no args"
  exit;
fi

# 2.獲取檔案名稱
p1=$1

filename=`basename $p1`

echo filename=${filename}

# 3.獲取檔案的絕對路徑,即獲取到檔案的目錄資訊

dir_name=`cd -P $(dirname $p1);pwd`

echo dirname=${dir_name}

# 4.獲取到當前用戶資訊
user=`whoami`

# 5.回圈執行rsync命令,把檔案發送到集群中的所有其他節點
for((host=1; host<4; host++)); do
  echo --------------target hostname=node0$host--------------
  rsync -rvl ${dir_name}/${filename} ${user}@node0$host:${dir_name}
done


保存退出,

(2)修改腳本權限

給rsync-script腳本檔案添加執行權限:

[root@node01 bin]$ chmod 777 rsync-script 
[root@node01 bin]$ ll
總用量 4
-rwxrwxrwx 1 root root 638 825 10:53 rsync-script

(3)執行腳本進行測驗

呼叫腳本的語法格式為rsync-script 檔案名稱,現在以分發rsync-script腳本檔案自己為例進行測驗:

# node01
[root@node01 bin]$ rsync-script rsync-script 
filename=rsync-script
dirname=/usr/local/bin
--------------target hostname=node01--------------
sending incremental file list

sent 68 bytes  received 12 bytes  160.00 bytes/sec
total size is 652  speedup is 8.15
--------------target hostname=node02--------------
sending incremental file list
rsync-script

sent 767 bytes  received 35 bytes  1,604.00 bytes/sec
total size is 652  speedup is 0.81
--------------target hostname=node03--------------
sending incremental file list
rsync-script

sent 767 bytes  received 35 bytes  1,604.00 bytes/sec
total size is 652  speedup is 0.81
# node02
[root@node02 opt]$ ll /usr/local/bin/
總用量 4
-rwxr-xr-x 1 root root 652 825 11:10 rsync-script
# node03
[root@node03 ~]$ ll /usr/local/bin/
總用量 4
-rwxr-xr-x 1 root root 652 825 11:10 rsync-script


可以看到,成功將script檔案拷貝到了其他兩個節點,

(4)呼叫腳本分發Hadoop安裝目錄到其他節點

節點1執行命令rsync-script /opt/software/hadoop-2.9.2/,等待執行完畢,查看其他兩個節點:

# node02
[root@node02 opt]$ ll /opt/software/
總用量 0
drwxr-xr-x  9 root root 149 825 11:17 hadoop-2.9.2
drwxr-xr-x. 3 root root  26 820 14:09 java
drwxr-xr-x. 3 root root  69 820 14:22 tomcat
# node03
[root@node03 ~]$ ll /opt/software/
總用量 0
drwxr-xr-x  9 root root 149 825 11:17 hadoop-2.9.2
drwxr-xr-x. 3 root root  26 820 14:09 java
drwxr-xr-x. 3 root root  69 820 14:22 tomcat


可以看到,已經將Hadoop安裝目錄拷貝到了其他兩個節點,

(5)集群啟動

需要注意:

如果集群是第一次啟動,需要在Namenode所在節點格式化NameNode,非第一次不用執行格式化Namenode操作

集群啟動有兩種方式,分別為單節點啟動和集群群起兩種方式,

Ⅰ 單節點啟動

先使用單節點啟動 方式實作啟動集群:

先啟動HDFS:

(0)格式化NameNode

格式化NameNode需要在NameNode所在的節點執行,命令為hadoop namenode -format,如下:

[root@node01 ~]$ hadoop namenode -format
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

21/08/25 11:36:54 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = node01/192.168.31.155
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.9.2
...
21/08/25 11:36:55 INFO common.Storage: Storage directory /opt/software/hadoop-2.9.2/data/tmp/dfs/name has been successfully formatted.
21/08/25 11:36:55 INFO namenode.FSImageFormatProtobuf: Saving image file /opt/software/hadoop-2.9.2/data/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
21/08/25 11:36:55 INFO namenode.FSImageFormatProtobuf: Image file /opt/software/hadoop-2.9.2/data/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 323 bytes saved in 0 seconds .
21/08/25 11:36:56 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
21/08/25 11:36:56 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at node01/192.168.31.155
************************************************************/

如果出現has been successfully formatted.的日志資訊,則說明NameNode格式化成功;

可以看到,格式化后創建了檔案/opt/software/hadoop-2.9.2/data/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000,查看如下:

[root@node01 ~]$ cd /opt/software/hadoop-2.9.2/data/tmp/dfs/name/current
[root@node01 current]$ ll
總用量 16
-rw-r--r-- 1 root root 323 825 11:36 fsimage_0000000000000000000
-rw-r--r-- 1 root root  62 825 11:36 fsimage_0000000000000000000.md5
-rw-r--r-- 1 root root   2 825 11:36 seen_txid
-rw-r--r-- 1 root root 219 825 11:36 VERSION

其中,fsimage_0000000000000000000是生成的Image檔案、即元資料檔案,fsimage_0000000000000000000.md5用于校驗,seen_txid用于記錄id編號,VERSION用于版本資訊,

需要注意,只是在第一次啟動集群時,需要執行,之后啟動都不需要再進行NameNode格式化,

(1)在node01節點上啟動NameNode

啟動NameNode的腳本檔案位于sbin目錄下,

在node01上啟動NameNode,如下:

[root@node01 current]$ hadoop-daemon.sh start namenode
starting namenode, logging to /opt/software/hadoop-2.9.2/logs/hadoop-root-namenode-node01.out
[root@node01 current]$ jps
21218 Jps
20694 NameNode


可以看到,啟動namenode的日志保存到/opt/software/hadoop-2.9.2/logs/hadoop-root-namenode-node01.out中,如果出現例外需要排查可以查看該日志;

jps命令是查看用于查看Linux中的Java行程,因為Hadoop是用Java撰寫、同時依賴于JVM運行的,所以可以通過查看Java行程來查看是否啟動成功;

可以看到,此時NameNode啟動成功,

(2)在3個節點上分別啟動DataNode

先在node01上啟動DataNode,如下:

[root@node01 current]$ hadoop-daemon.sh start datanode
starting datanode, logging to /opt/software/hadoop-2.9.2/logs/hadoop-root-datanode-node01.out
[root@node01 current]$ jps
22212 Jps
20694 NameNode
21935 DataNode

其中,DataNode的日志保存到/opt/software/hadoop-2.9.2/logs/hadoop-root-datanode-node01.out課用于查看;

node01節點成功啟動了DataNode,

為了方便在node02和node03執行啟動命令,需要將Hadoop的安裝目錄添加到環境變數,和node01類似,先編輯profile檔案vim /etc/profile,在后面添加以下內容:

# HADOOP_HOME
export HADOOP_HOME=/opt/software/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

再執行source /etc/profile使環境變數生效,

然后再執行命令啟動DataNode:

# node02
[root@node02 opt]$ hadoop-daemon.sh start datanode
starting datanode, logging to /opt/software/hadoop-2.9.2/logs/hadoop-root-datanode-node02.out
[root@node02 opt]$ jps
42818 DataNode
43154 Jps
# node03
[root@node03 ~]$ hadoop-daemon.sh start datanode
starting datanode, logging to /opt/software/hadoop-2.9.2/logs/hadoop-root-datanode-node03.out
[root@node03 ~]$ jps
43232 Jps
42587 DataNode


可以看到,成功啟動了node02和node03上的DataNode,

(3)進行網頁驗證

除了使用jps在節點上進行驗證,還可以訪問http://NameNode節點主機名:50070來進行查看,這里即http://node01:50070,如下:

Hadoop hdfs namenode

如果出現此頁面即說明啟動HDFS成功;

可以看到該集群的概覽資訊,同時可以看到HDFS配置的可用存盤容量、可用的DataNode節點數等資訊,

需要注意,如果不能通過http://NameNode節點主機名:50070的方式訪問,有兩種方式進行解決:

(1)可以通過IP來訪問,例如http://192.168.31.155:50070;

(2)可能是因為Windows下沒有配置hosts檔案進行IP與主機名的映射,需要修改位于C:\Windows\System32\drivers\etc下的hosts檔案,如下:

Windows hosts

可以選擇記事本或者Notepad++進行修改,因為該檔案為只讀不可修改,所以在編輯時需要以管理員身份打開記事本或Notepad++軟體,再在軟體在打開hosts檔案進行編輯,在檔案最后增加3臺虛擬機的IP映射即可:

192.168.31.155    node01
192.168.31.156    node02
192.168.31.157    node03

可以根據自己的情況修改IP和主機名,最后保存退出,就能訪問到http://node01:50070了,

還可以瀏覽檔案系統,訪問http://192.168.31.155:50070/explorer.html#/,如下:

Hadoop hdfs fs

可以看到,和Linux類似,根目錄也是/

目前還沒有任何內容,后面可以在根目錄下創建和添加檔案,

再啟動Yarn,如下:

(1)啟動ResourceManager

因為Yarn框架的ResourceManager位于node03,所以在node03啟動ResourceManager,執行yarn-daemon.sh start resourcemanager,如下:

[root@node03 ~]$ yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-resourcemanager-node03.out
[root@node03 ~]$ jps
75809 ResourceManager
75890 Jps
42587 DataNode

可以看到,成功啟動ResourceManager,

(2)啟動NodeManager

在3個節點上執行yarn-daemon.sh start nodemanager啟動NodeManager,如下:

# node01
[root@node01 ~]$ yarn-daemon.sh start nodemanager
starting nodemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-nodemanager-node01.out
[root@node01 ~]$ jps
20694 NameNode
72441 Jps
72331 NodeManager
21935 DataNode
# node02
[root@node02 ~]$ yarn-daemon.sh start nodemanager
starting nodemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-nodemanager-node02.out
[root@node02 ~]$ jps
42818 DataNode
78247 Jps
78041 NodeManager
# node03
[root@node03 ~]$ yarn-daemon.sh start nodemanager
starting nodemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-nodemanager-node03.out
[root@node03 ~]$ jps
105237 ResourceManager
78161 Jps
77881 NodeManager
42587 DataNode


可以看到,3個節點上都成功啟動了NodeManager,

Ⅱ 集群群起

前面的單節點啟動方式是在每一個節點機器分別執行啟動命令啟動對應的服務,在節點較少時具有一定的可行性,但是節點數很多、達到成千上萬個時,可能就不太現實了,

此時就需要用到集群群起的方式來啟動集群服務,

因為前面已經通過單節點啟動的方式啟動了部分服務,因此需要先停掉已經開啟的服務:

# node01
[root@node01 ~]$ hadoop-daemon.sh stop namenode
stopping namenode
[root@node01 ~]$ hadoop-daemon.sh stop datanode
stopping datanode
[root@node01 ~]$ yarn-daemon.sh stop nodemanager
stopping nodemanager
nodemanager did not stop gracefully after 5 seconds: killing with kill -9
[root@node01 ~]$ jps
84312 Jps
# node02
[root@node02 ~]$ hadoop-daemon.sh stop datanode
stopping datanode
[root@node02 ~]$ yarn-daemon.sh stop nodemanager
stopping nodemanager
nodemanager did not stop gracefully after 5 seconds: killing with kill -9
[root@node02 ~]$ jps
106580 Jps
# node03
[root@node03 ~]$ hadoop-daemon.sh stop datanode
stopping datanode
[root@node03 ~]$ yarn-daemon.sh stop resourcemanager
stopping resourcemanager
[root@node03 ~]$ jps
118737 Jps

因為單節點啟動時NameNode已經進行過格式化,所以一定不需要再進行格式化 ,否則DateNode和NameNode版本號不一致,就不能啟動HDFS成功,

現在進行群起:

(1)啟動HDFS

在HDFS主節點node01上執行start-dfs.sh啟動所有HDFS行程,如下:

# node01
[root@node01 ~]$ start-dfs.sh
Starting namenodes on [node01]
node01: starting namenode, logging to /opt/software/hadoop-2.9.2/logs/hadoop-root-namenode-node01.out
node02: starting datanode, logging to /opt/software/hadoop-2.9.2/logs/hadoop-root-datanode-node02.out
node03: starting datanode, logging to /opt/software/hadoop-2.9.2/logs/hadoop-root-datanode-node03.out
node01: starting datanode, logging to /opt/software/hadoop-2.9.2/logs/hadoop-root-datanode-node01.out
Starting secondary namenodes [node03]
node03: starting secondarynamenode, logging to /opt/software/hadoop-2.9.2/logs/hadoop-root-secondarynamenode-node03.out
[root@node01 ~]$ jps
122227 DataNode
122026 NameNode
122877 Jps
# node02
[root@node02 ~]$ jps
127489 DataNode
128151 Jps
# node03
[root@node03 ~]$ jps
129040 Jps
128531 SecondaryNameNode
128252 DataNode


可以看到,已經在3個 節點上啟動了所有的HDFS行程;

此時查看http://node01:50070/dfshealth.html#tab-overview也能看到zhe你剛才的資料,

(2)啟動Yarn

在Yarn主節點node03上執行start-yarn.sh來啟動所有Yarn行程,如下:

# node03
[root@node03 ~]$ start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-resourcemanager-node03.out
node02: starting nodemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-nodemanager-node02.out
node01: starting nodemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-nodemanager-node01.out
node03: starting nodemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-nodemanager-node03.out
[root@node03 ~]$ jps
128531 SecondaryNameNode
9244 ResourceManager
128252 DataNode
9406 NodeManager
9839 Jps
# node01
[root@node01 ~]$ jps
122227 DataNode
2969 NodeManager
122026 NameNode
3820 Jps
# node02
[root@node02 ~]$ jps
127489 DataNode
8912 Jps
8181 NodeManager


可以看到,所有的Yarn行程啟動成功;

顯然,相比于單節點啟動,群起方式要方便很多;

需要注意,NameNode和ResourceManger不是在同一臺機器,不能在NameNode上啟動 YARN,應該在ResouceManager所在的機器上啟動Yarn,

Ⅲ 集群停止

停止集群服務也分為兩種方式:

(1)各個服務組件逐一啟動和停止

啟動和停止HDFS組件的命令如下:

hadoop-daemon.sh  start / stop namenode / datanode / secondarynamenode

啟動和停止Yarn組件的命令如下:

yarn-daemon.sh  start / stop resourcemanager / nodemanager

(2)各個模塊整體啟動和停止

整體啟動和停止HDFS的命令如下:

start-dfs.sh / stop-dfs.sh

整體啟動和停止Yarn的命令如下:

start-yarn.sh / stop-yarn.sh

顯然,整體啟動和停止集群的方式更加方便快捷,也更常用,

(6)集群測驗

在前面已經啟動了HDFS和Yarn,現在可以分別進行測驗,

1.HDFS 分布式存盤初體驗

即從節點本地檔案系統上傳下載檔案驗證HDFS集群作業正常,可以任選一個節點進行操作,這里選擇node01,步驟如下:

(1)節點本地創建1個測驗檔案并寫入內容

節點本地執行vim test.txt編輯檔案,如下:

hello, hdfs

(2)HDFS檔案系統創建目錄

執行hdfs dfs -mkdir -p /test/input命令在HDFS檔案系統中創建測驗目錄,

(3)HDFS上傳測驗檔案到檔案系統中

執行hdfs dfs -put /root/test.txt /test/input將剛剛創建的檔案上傳到檔案系統中創建的目錄下,

(4)HDFS下載上傳的檔案

如下:

[root@node01 ~]$ rm -f test.txt 
[root@node01 ~]$ ll
總用量 8
-rw-------. 1 root root 1259 819 03:28 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 824 21:07 lxDemo
[root@node01 ~]$ hdfs dfs -get /test/input/test.txt
[root@node01 ~]$ ll
總用量 12
-rw-------. 1 root root 1259 819 03:28 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 824 21:07 lxDemo
-rw-r--r--  1 root root   12 825 20:26 test.txt
[root@node01 ~]$ cat test.txt 
hello, hdfs

可以看到,從HDFS檔案系統中下載了之前上傳的檔案,同時檔案內容相同,

除了在節點中下載,還可以在本地瀏覽器下載,如下:

stage3 module1 hdfs filesystem

2.MapReduce 分布式計算初體驗

從節點中給MapReduce分配任務驗證Yarn集群作業正常,也可以任選一個節點進行操作,步驟如下:

(1)節點本地創建測驗檔案

node01節點創建測驗文本檔案vim wc.txt,如下:

Apache Hadoop 2.9.2 is a point release in the 2.x.y release line, building upon the previous stable release 2.9.1.

Here is a short overview of the major features and improvements.

Common

Aliyun OSS Support. See the user documentation for more details.
HADOOP Resource Estimator. See the user documentation for more details.
HDFS

HDFS Router based federation. See the user documentation for more details.
YARN

YARN Timeline Service v.2. See the user documentation for more details.
YARN Federation. See the user documentation for more details.
Opportunistic Containers. See the user documentation for more details.
YARN Web UI v.2. See the user documentation for more details.
Changing queue configuration via API (supported only on the Capacity Scheduler). See the user documentation for more details.
Update Resources and Execution Type of an allocated/running container. (supported only on the Capacity Scheduler). See the user documentation for more details.

保存退出,

(2)HDFS檔案系統中創建目錄

執行hdfs dfs -mkdir /wcinput在HDFS檔案系統中創建wcinput目錄,

(3)上傳檔案到檔案系統中的指定目錄

執行hdfs dfs -put wc.txt /wcinput將創建的檔案上傳到剛剛創建好的wcinput目錄下,

(4)執行命令提交任務給MapReduce

執行命令將計算任務提交給MapReduce進行計算,任務會由Yarn進行調度分配,命令如下:

# hadoop jar 示例jar包 示例名稱 輸入目錄 輸出目錄
hadoop jar /opt/software/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput

這里使用的是Hadoop官方提供的wordcount統計案例;

輸出目錄不能手動創建,應該由MapReduce程式運行時自動創建,

執行如下:

[root@node01 ~]$ hadoop jar /opt/software/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput
21/08/25 22:36:30 INFO client.RMProxy: Connecting to ResourceManager at node03/192.168.31.157:8032
21/08/25 22:36:32 INFO input.FileInputFormat: Total input files to process : 1
21/08/25 22:36:33 INFO mapreduce.JobSubmitter: number of splits:1
21/08/25 22:36:33 INFO Configuration.deprecation: yarn.resourcemanager.system-metrics-publisher.enabled is deprecated. Instead, use yarn.system-metrics-publisher.enabled
21/08/25 22:36:33 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1629895298908_0001
21/08/25 22:36:34 INFO impl.YarnClientImpl: Submitted application application_1629895298908_0001
21/08/25 22:36:34 INFO mapreduce.Job: The url to track the job: http://node03:8088/proxy/application_1629895298908_0001/
21/08/25 22:36:34 INFO mapreduce.Job: Running job: job_1629895298908_0001
21/08/25 22:36:53 INFO mapreduce.Job: Job job_1629895298908_0001 running in uber mode : false
21/08/25 22:36:53 INFO mapreduce.Job:  map 0% reduce 0%
21/08/25 22:37:11 INFO mapreduce.Job:  map 100% reduce 0%
21/08/25 22:37:20 INFO mapreduce.Job:  map 100% reduce 100%
21/08/25 22:37:21 INFO mapreduce.Job: Job job_1629895298908_0001 completed successfully
21/08/25 22:37:21 INFO mapreduce.Job: Counters: 49
        File System Counters
                FILE: Number of bytes read=897
                FILE: Number of bytes written=398591
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=1065
                HDFS: Number of bytes written=624
                HDFS: Number of read operations=6
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
        Job Counters 
                Launched map tasks=1
                Launched reduce tasks=1
                Data-local map tasks=1
                Total time spent by all maps in occupied slots (ms)=14530
                Total time spent by all reduces in occupied slots (ms)=7187
                Total time spent by all map tasks (ms)=14530
                Total time spent by all reduce tasks (ms)=7187
                Total vcore-milliseconds taken by all map tasks=14530
                Total vcore-milliseconds taken by all reduce tasks=7187
                Total megabyte-milliseconds taken by all map tasks=14878720
                Total megabyte-milliseconds taken by all reduce tasks=7359488
        Map-Reduce Framework
                Map input records=19
                Map output records=144
                Map output bytes=1538
                Map output materialized bytes=897
                Input split bytes=98
                Combine input records=144
                Combine output records=67
                Reduce input groups=67
                Reduce shuffle bytes=897
                Reduce input records=67
                Reduce output records=67
                Spilled Records=134
                Shuffled Maps =1
                Failed Shuffles=0
                Merged Map outputs=1
                GC time elapsed (ms)=223
                CPU time spent (ms)=1350
                Physical memory (bytes) snapshot=340258816
                Virtual memory (bytes) snapshot=4164100096
                Total committed heap usage (bytes)=139587584
        Shuffle Errors
                BAD_ID=0
                CONNECTION=0
                IO_ERROR=0
                WRONG_LENGTH=0
                WRONG_MAP=0
                WRONG_REDUCE=0
        File Input Format Counters 
                Bytes Read=967
        File Output Format Counters 
                Bytes Written=624

可以看到,執行任務錢前線連接Yarn架構的ResourceManager ,然后再執行任務,同時可以輸出粗略的進度,最后給出了執行的程序資料和結果概覽,

(5)查看結果

先查看HDFS瀏覽器目錄,如下:

stage3 module1 hdfs wordcount

可以看到,之前上傳的wc.txt檔案已經同步,同時將執行的結果放到了程式創建的wcoutput目錄,其中的part-r-00000檔案就保存了詞頻的統計結果,可以進行查看,如下:

[root@node01 ~]$ hdfs dfs -cat /wcoutput/part-r-00000
(supported      2
2.9.1.  1
2.9.2   1
2.x.y   1
API     1
Aliyun  1
Apache  1
Capacity        2
Changing        1
Common  1
Containers.     1
Estimator.      1
Execution       1
Federation.     1
HADOOP  1
HDFS    2
Hadoop  1
Here    1
OSS     1
Opportunistic   1
Resource        1
Resources       1
Router  1
Scheduler).     2
See     9
Service 1
Support.        1
Timeline        1
Type    1
UI      1
Update  1
Web     1
YARN    4
a       2
allocated/running       1
an      1
and     2
based   1
building        1
configuration   1
container.      1
details.        9
documentation   9
features        1
federation.     1
for     9
improvements.   1
in      1
is      2
line,   1
major   1
more    9
of      2
on      2
only    2
overview        1
point   1
previous        1
queue   1
release 3
short   1
stable  1
the     14
upon    1
user    9
v.2.    2
via     1

可以看到,統計到了測驗文本中的次品,所以也印證了Yarn集群啟動成功,

還可以查看更加詳細的資料,包括報錯日志等資訊,此時需要訪問Yarn集群的Web管理頁面來查看,地址為http://Yarn集群主節點主機名:8088,例如http://node03:8088,訪問如下:

stage3 module1 yarn web

可以看到,此時頁面中顯示了任務執行的詳細資訊,包括任務ID、執行時間、執行狀態等,同時還能查看執行歷史詳細資訊,但是因為還沒有配置歷史日志服務器,所以暫時還不能訪問查看,

(7)歷史日志服務器配置

之前在Yarn中運行的任務產生的日志資料不能查看,為了查看程式的歷史運行情況,需要配置歷史日志服務器,

步驟如下:

(1)配置mapred-site.xml

在node01上切換到組態檔目錄/opt/software/hadoop-2.9.2/etc/hadoop并編輯mapred-site.xmlvim mapred-site.xml,在configuration標簽中添加內容,如下:

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

<!-- 歷史服務器端地址 -->
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>node01:10020</value>
</property>

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

保存退出,

(2)分發mapred-site.xml到其他節點

如下:

# node01
[root@node01 hadoop]$ rsync-script mapred-site.xml
filename=mapred-site.xml
dirname=/opt/software/hadoop-2.9.2/etc/hadoop
--------------target hostname=node01--------------
sending incremental file list

sent 52 bytes  received 12 bytes  42.67 bytes/sec
total size is 1,144  speedup is 17.88
--------------target hostname=node02--------------
sending incremental file list
mapred-site.xml

sent 103 bytes  received 47 bytes  300.00 bytes/sec
total size is 1,144  speedup is 7.63
--------------target hostname=node03--------------
sending incremental file list
mapred-site.xml

sent 103 bytes  received 47 bytes  300.00 bytes/sec
total size is 1,144  speedup is 7.63
# node02
[root@node02 ~]$ tail -n 20 /opt/software/hadoop-2.9.2/etc/hadoop/mapred-site.xml

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

<!-- 歷史服務器端地址 -->
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>node01:10020</value>
</property>

<!-- 歷史服務器web端地址 -->
<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node01:19888</value>
</property>
</configuration>
# node03類似

可以看到,已經將修改后的組態檔同步到其他節點,

(3)啟動歷史服務器

因為日志服務是配置在node01節點的,所以啟動也應該在node01節點,執行mr-jobhistory-daemon.sh start historyserver,如下:

[root@node01 hadoop]$ mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /opt/software/hadoop-2.9.2/logs/mapred-root-historyserver-node01.out
[root@node01 hadoop]$ jps
38050 NodeManager
37716 NameNode
37878 DataNode
47689 Jps
47611 JobHistoryServer

可以看到,成功啟動了歷史服務器,

(4)訪問網頁查看歷史執行情況

訪問http://日志服務器節點主機名:配置IP,例如http://node01:19888,如下:

stage3 module1 history preview

可以看到,在訪問日志目錄后,并沒有顯示對應的日志,而是提示未啟用聚合 ,這是因為Yarn集群調度MapReduce任務時,MapTask可能有多個,所以MapTask具體運行在哪個節點是不確定的,MR任務的日志也可能存在于多個節點上,Aggregation 就是將執行某個MR任務的所有NodeManager上產生的資料匯總到一起,方便查看,

日志聚集:

應用(Job)運行完成以后,將應用運行日志資訊從各個Task匯總上傳到HDFS系統上,

日志聚集的好處:

可以方便的查看到程式運行詳情,方便開發除錯,

所以現在需要開啟日志聚集功能,具體步驟如下:

(1)配置yarn-site.xml

在node01編輯yarn-site.xmlvim yarn-site.xml,如下:

<configuration>

<!-- Site specific YARN configuration properties -->
<!-- 指定YARN的ResourceManager的地址 -->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node03</value>
</property>
<!-- Reducer獲取資料的方式 -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>

<!-- 日志聚合功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留時間設定7天 -->
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>
<property>
        <name>yarn.log.server.url</name>
        <value>http://node01:19888/jobhistory/logs</value>
</property>
</configuration>

保存退出,

(2)分發yarn-site.xml到集群其他節點

執行rsync-script yarn-site.xml命令分發剛修改過的yarn-site.xml檔案到其他節點,如下:

[root@node01 hadoop]$ rsync-script yarn-site.xml 
filename=yarn-site.xml
dirname=/opt/software/hadoop-2.9.2/etc/hadoop
--------------target hostname=node01--------------
sending incremental file list

sent 50 bytes  received 12 bytes  124.00 bytes/sec
total size is 1,327  speedup is 21.40
--------------target hostname=node02--------------
sending incremental file list
yarn-site.xml

sent 728 bytes  received 47 bytes  1,550.00 bytes/sec
total size is 1,327  speedup is 1.71
--------------target hostname=node03--------------
sending incremental file list
yarn-site.xml

sent 728 bytes  received 47 bytes  1,550.00 bytes/sec
total size is 1,327  speedup is 1.71

(3)重啟Yarn集群和歷史服務器

開啟日志聚集功能,修改了組態檔,所以需要重新啟動NodeManager 、ResourceManager和HistoryManager才能讓組態檔生效,

node02節點重啟Yarn集群:

[root@node03 ~]$ stop-yarn.sh 
stopping yarn daemons
stopping resourcemanager
node01: stopping nodemanager
node03: stopping nodemanager
node02: stopping nodemanager
node01: nodemanager did not stop gracefully after 5 seconds: killing with kill -9
node03: nodemanager did not stop gracefully after 5 seconds: killing with kill -9
node02: nodemanager did not stop gracefully after 5 seconds: killing with kill -9
no proxyserver to stop
[root@node03 ~]$ start-yarn.sh 
starting yarn daemons
starting resourcemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-resourcemanager-node03.out
node01: starting nodemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-nodemanager-node01.out
node02: starting nodemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-nodemanager-node02.out
node03: starting nodemanager, logging to /opt/software/hadoop-2.9.2/logs/yarn-root-nodemanager-node03.out
[root@node03 ~]$ jps
82353 NodeManager
83013 Jps
44108 DataNode
82221 ResourceManager
44542 SecondaryNameNode

node01節點重啟歷史服務器:

[root@node01 hadoop]$ mr-jobhistory-daemon.sh stop historyserver
stopping historyserver
[root@node01 hadoop]$ mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /opt/software/hadoop-2.9.2/logs/mapred-root-historyserver-node01.out
[root@node01 hadoop]$ jps
37716 NameNode
75813 Jps
37878 DataNode
75355 NodeManager
75611 JobHistoryServer

(4)洗掉HDFS上已經存在的輸出檔案

此時需要重新執行任務,以生成日志進行查看,因為輸出目錄不能存在所以需要先洗掉,執行命令hdfs dfs -rm -R /wcoutput即可,

(5)重新執行wordcount測驗任務

執行hadoop jar /opt/software/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput命令重新執行詞頻統計任務,

(6)網頁中查看日志資訊

此時就可以在網頁中查看詳細的日志資訊了,可以在http://node03:8088和http://node01:19888查看,如下:

stage3 module1 history detail

如果出現錯誤,則可以根據日志進行排查,

總結

在當下,資料有著極大的價值,而大資料就是處理海量資料獲取價值的重要手段;Hadoop是大資料中的基礎框架,有著廣泛的應用,也是其他大資料框架的基礎,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297530.html

標籤:其他

上一篇:JSP用戶登錄連接資料庫

下一篇:資料匯出/遷移(Sqoop技術)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more