天天看點

Hadoop

hadoop搭建:

環境搭建:利用分發腳本在所有伺服器上部署java和hadoop

元件部署:三個重要元件分别部署在三台伺服器上,并修改配置檔案

啟動叢集并測試功能:格式化後分别啟動元件并上傳檔案,配置曆史伺服器和日志功能

伺服器相關概念

類型:檔案伺服器、資料庫伺服器、web伺服器

特點:高處理能力、高擴充性、高可靠性

伺服器磁盤

機械硬碟:

scsi接口硬碟,早期使用,已停售,1w轉/min

sas接口硬碟:提升,1.5w轉/min

stat硬碟:序列槽硬碟,主流硬碟帶糾錯、降噪功能,7200轉/min

固态硬碟:

ssd硬碟:貴,性能高

交換機:

存儲轉發裝置,交換式集線器,擴充端口功能、實體編址……

網卡:

以太網網卡,pci總線接口伺服器一般使用千兆網卡

機架:

存儲伺服器主機的機櫃。通信使用交換機

idc資料中心:

電信部門為企業做托管

radi磁盤陣列:

獨立磁盤備援陣列,最新的raid5,将校驗的資料分布在所有磁盤上,基本滿足大部分需求,主流用品

hadoop

概念:分布式系統基礎架構,主要解決海量資料的存儲和分析計算,廣義上指的是hadoop生态圈

三大發行版本

apache:基礎版本(2006)

cloudera:繼承大資料架構,産品cdh(2008)

hortonworks:文檔較好,hdp(2011)

優勢:

高可靠性,底層多個資料副本,某計算單元故障不會丢失

高擴充性,叢集間配置設定任務資料,動态擴充節點

高效性,hadoop是并行工作,加快任務處理速度

搞容錯性,自動将失敗的任務重新配置設定

hadoop 1.x、2.x和3.x

1.x:mapreduce(計算+資源排程);hdfs(資料存儲);common(輔助工具)

2.x:mapreduce(計算);yarn(資源排程);hdfs(資料存儲);common(輔助工具)

3.x:在組成上和2代沒有差別,有其他差別

hdfs架構

namenode(nn):存儲檔案的中繼資料,如檔案名、目錄結構、檔案屬性,以及每個檔案的塊清單和塊所在的datanode

datanode(dn):在本地檔案系統存儲檔案塊資料,以及塊資料的校驗和

secondary namenode(2nn):每隔一段時間對nn中繼資料備份

yarn架構概述

另一種資源協調者,是hadoop的資料總管

resourceanager(rm):整個叢集資源(記憶體cpu等)的總管,存在多個用戶端送出job讓其運作

nodemanager(nm):單個節點伺服器的資源老大,一個節點可有多個container

applicationmaster(am):單個任務運作的老大

container:容器,相當于一台獨立的伺服器,封裝了任務運作所需的記憶體cpu磁盤網絡等

mapreduce架構

mapreduce将計算分為兩個階段:map和reduce,map階段是并行處理輸入資料,redce是對map結果進行彙總

hdfs、yarn、mapreduce三者關系

hdfs是基礎的架構,namenode記錄中繼資料,datanode是存儲單元,2nn負責備份資料。用戶端向叢集送出一個任務,yarn中的resourcemanager會尋找其中一個節點伺服器的nodemanager,開啟一個container,将任務放在applicationmaster中運作,am向rm申請運作資源,在節點中尋找到合适資源後開啟資源,由am開啟maptask,這就是map階段,每一個maptask獨立工作,檢索後傳回結果寫入磁盤上,形成一個reducetask,namenode再次進行記錄操作

大資料生态體系

資料來源層:資料庫(結構化)、檔案日志(半結構化)、視訊、ppt等(非結構化)

資料傳輸層:sqoop資料傳遞、flime日志收集、kafka消息隊列(也可整理結構化與非結構化)

資料存儲層:hdfs檔案存儲(結構、非結構)、hbase(非結構)

資源管理層:yran資源管理

資料計算層:mapreduce(離線計算、hive資料查詢)、sparkcore(記憶體計算、sparkmlib資料挖掘、sparksql資料查詢、sparkstreaming、flink實時計算)

任務排程:oozie任務排程、azkaban任務排程器

整個資料平台的排程者:zookeeper

業務層:葉樹模型、資料可視化、業務應用

案例:在電商購買推薦的商品:使用者操作——nginx埋點擷取通路日志——産生資料存儲至檔案日志——flume日志收集——kafka進行緩沖——flink雲計算并傳回結果至資料庫——背景讀取分析資料,并傳回推薦頁給使用者

Hadoop

前置工作:

vm虛拟機、linux初始化、xshell遠端等

磁盤分區:/boot分1g,/swap分4g,/分45g,裝好之後給虛拟機建立初始快照

設定固定ip網關dns:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

将dhcp改成static

末尾添加

ipaddr=192.168.200.10x

gatwat=192.169.200.2

nds1=192.168.200.2

vi /etc/hosts 末尾添加:

192.168.200.100 hadoop100

192.168.200.101 hadoop101

192.168.200.102 hadoop102

192.168.200.103 hadoop103

192.168.200.104 hadoop104

192.168.200.105 hadoop105

------------------------------------虛拟機快照由此結束-------------------------------------

虛拟機基礎工具:

yum install -y epel-release安裝應用商店

yum install -y net-tools安裝工具包

yum install -y vim 安裝vim

添加部署java和hadoop

tar -zxvf jdk-8u212-linux-x64.tar.gz  -c /opt/module解壓java

tar -zxvf hadoop-3.1.3.tar.gz -c /opt/module/解壓hadoop

前往/etc/profile.d建立my_env.sh腳本,腳本中加入java、hadoop環境變量

添加後source /etc/profile即可

hadoop檔案分析

hadoop/bin目錄中存儲和hdfs、yran、mapred相關執行檔案

hadoop/etc/hadoop目錄中存儲的xx-site.xml、workers相關

hadoop/sbin目錄中一些叢集功能開關相關腳本

hadoop/lib/native目錄中存儲的本地動态連結庫,壓縮功能會需要

hadoop運作模式

local (standalone) mode linux本地存儲模式,一般測試用,企業不會用

pseudo-distributed mode 僞分布式模式,資料存儲在hdfs上

fully-distributed mode 完全分布式模式,公司一般使用的

scp拷貝檔案至其他伺服器,首次遷移使用

基本文法:

scp:指令,實作伺服器與伺服器之間的拷貝

 -r :遞歸

$pdir/$fname:源檔案位址路徑/名稱

$user@$host:$pdir/$fname:目的地使用者@主機:目的地路徑/名稱

例如:

scp -r ./jdk1.7/ root@hadoop103:/opt/module(将102本地推送至103),或

scp -r root@hadoop103:/opt/module/jdk1.7/ ./module(将遠端102拉取至103)

rsync同步檔案至其他伺服器,速度較快,修改檔案後使用

rsync:指令,實作伺服器與伺服器之間的檔案同步

 -av:歸檔拷貝并顯示複制過程

rsync -av hadoop-3.1.3/ root@hadoop103:/opt/module/hadoop-3.1.3/  将本地hadoop檔案同步至103上

注意:需要雙方同時安裝了rsync才可以執行操作

利用rsync實作同步分發 格式:xsync xxx,即可分發至所有指定伺服器

注意:想要全局使用xsync必須滿足以下條件:

檔案為可執行檔案,即授權777

将xsync上層路徑添加至全局環境變量中,即/etc/profile,但這個檔案千萬不能亂改,否則出了cd其他指令都會失效,補救方法如下:

初始化path:export path=/usr/bin:/usr/sbin:/bin:/sbin:/usr/x11r6/bin

使用vi重新修改path,将錯誤的地方改掉:/bin/vi /etc/profile  ,并重新source /etc/profile

腳本代碼:

該腳本缺陷:ssh時需要重複驗證密碼,不能一次到位,相當麻煩。是以需要使用ssh免登入

ssh免密登入

    普通情況下通過ssh其他伺服器需要輸入目标伺服器密碼,但也可以通過密鑰來實作免密登入(注:未主動使用ssh指令的機器沒有.ssh檔案)

在目前使用者下的.ssh/下輸入ssh-keygen -t rsa注冊密鑰,則在.ssh/下生成id_rsa私鑰和id_rsa.pub公鑰,還有一個存放目标節點的公鑰集合檔案known_hosts

輸入ssh-copy-id xxxx将公鑰拷貝至目标伺服器,首次需要輸入密碼,以後即可無密通路。若想通路伺服器本身,也許這樣操作

被無密通路過的伺服器會在.ssh/生成一個authorized_keys檔案,存放允許通路它的伺服器;而known_hosts存放着它能夠無密通路的其他伺服器

主動無密通路其他節點的伺服器才會有密鑰

注意:防火牆關閉(centos7):

檢視防火牆狀态: systemctl status firewalld

永久關閉防火牆: systemctl disable firewalld

重新開機防火牆: systemctl enable firewalld

關閉防火牆開機自啟: systemctl disable firewalld.service

叢集部署規劃

原則:namenode、secondarynamenode和resourcemanager很耗記憶體,不要安裝在同一個台機器上

<col>

hadoop102

hadoop103

hadoop104

hdfs

namenode

datanode

secondarynamenode

yarn

nodemanager

resourcemanager

預設配置檔案:官網下載下傳,存放在hadoop的jar包中

自定義配置檔案:$hadoop_home/etc/hadoop位置下的core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml檔案

根據自己需要,參照預設配置檔案,将自定義配置檔案修改

配置叢集

核心配置檔案core-site.xml

hdfs配置檔案 hdfs-site.xml

yarn配置檔案yarn-site.xml

mapreduce配置檔案 mapred-site.xml

$hadoop_home/etc/hadoop/woekers中的localhost改成

使用分發腳本xsync将目前改動分發至所有伺服器

啟動叢集

首次啟動叢集需要使用hdfs namenode -format進行格式化,注意格式化必須停止所有程序(stop-all.sh)并删除所有機器的data和logs目錄,再進行格式化

啟動hdfs:sbin/start-dfs.sh

此處教程是用子使用者操作的,而我這邊直接用在root下操作,是以有些地方需要修改

針對root使用者的問題,在start-dfs.sh,stop-dfs.sh中分别添加

hdfs_datanode_user=root

hdfs_datanode_secure_user=hdfs

hdfs_namenode_user=root

hdfs_secondarynamenode_user=root

使用jps檢視目前java相關的程序:

7281 jps

6948 datanode

6812 namenode

浏覽器輸入hadoop102:9870 檢視hdfs上存儲的資料資訊

在配置了resourcemanager的伺服器中啟動yarn:sbin/start-yarn.sh

同樣針對root使用者,在start-yarn.sh和stop-yarn.sh中添加

用jps檢視yarn節點中的程序

2609 datanode

3089 nodemanager

3420 jps

2958 resourcemanager

浏覽器中輸入hadoop103:8088 檢視yarn運作的job資訊 

叢集基本測試

上傳檔案到叢集

        hadoop fs -mkdir /input 在/目錄下建立一個input檔案夾

        hadoop fs -put $hadoop_home/wcinput/word.txt /input  将word.txt上傳到/input下

檢視hdfs檔案存儲路徑

        不太清楚是什麼原因,教程中的檔案在102、103和104中都各自存了一份,而我的檔案卻隻有在104是完整的,103是不完整的,102就壓根沒有這個檔案夾。在103和104中,在104确實是能夠cat出來看到源檔案的上傳的檔案分成多個檔案塊存儲在一起,文本檔案可直接cat檢視,gz壓縮包則需要使用cat輸出重定向至目前檔案夾,然後才可正常解壓:cat xxx&gt;&gt; xxx.tar.gz

問題:web端嘗試删除上傳的檔案時,出現“permission denied: user=dr.who, access=read_execute, inode="/user":root:supergroup:drwx-wx-wx”。這樣的話直接在core-site.xml中添加以下配置即可

&lt;!-- 不開啟權限檢查 --&gt;

&lt;property&gt;

  &lt;name&gt;dfs.permissions.enabled&lt;/name&gt;

  &lt;value&gt;false&lt;/value&gt;

&lt;/property&gt;

問題警告:

存儲位置會跳來跳去,不是固定是3等份!!!!但是删除後又好了,原因不明,新問題是中繼資料重新壓縮後解壓出現錯誤,原因不明

有出現過上傳的檔案隻在102中有,103和104找不到的情況,還有web頁面打不開(已解決,防火牆的問題,關閉後需要重新開機)。

Hadoop

運作hadoop自帶的hadoop-mapreduce-examples.jar來測試,将檔案上傳後預覽

hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput

注意:

此處的wordcount是類似結果的變量(但在hdfs内沒看到這個名字)

這裡填寫的是輸入輸出位址,即/wcinput 和 /wcoutput。其中wcinput需要已存在于hdfs上,而wxoutput不能提前建立,否則會報錯。這個邏輯很奇怪,後面再看看什麼原因,并且由于我配置設定的記憶體過小,在計算時有殺掉一些其他程序,導緻無法預覽,這個現在也不看,評論區有加記憶體的部落格位址,需要的話随時去看

叢集崩潰處理辦法

先停止yarn和hdfs,再将所有叢集節點的$hadoop_home下的/data和/logs檔案夾删除,最後重新格式化hdfs即可

sbin/stop-yarn.sh

sbin/stop-dfs.sh

rm -rf data/ logs/

hdfs namenode -format

注意:datanode版本号相關,沒聽懂,與資料版本相關

配置曆史伺服器與日志聚集功能

曆史伺服器配置成功後,在程式運作完成後的yarn前端頁面可檢視其曆史運作情況

日志功能配置成功後,可在曆史運作情況頁面打開logs,友善分析運作情況

在mapred-site.xml中添加以下參數後,分發至各個節點:

在yarn-site.xml中添加以下參數後,分發至各個節點:

開啟曆史伺服器和日志聚集功能之前,先将hdfs和yarn重新開機一遍,再在102中啟動。啟動後即可在jps中檢視曆史伺服器程序,日志聚集不會産生程序,會從下次任務開始生成日志:

$hadoop_home/bin/mapred --daemon start historyserver

hdfs/yarn的兩種開關方式

整體開關:start/stop-dfs.sd;start/stop-yarn.sh

單節點開關:hdfs --daemon start/stop namenode/datanode/secondarynamenode;yarn ==daemon start/stop resourcemanager/nodemanager

hadoop叢集常用腳本

叢集元件開關腳本:統一開關hdfs、yarn、historyserver、logs

統一檢視叢集伺服器狀态

分發到各節點上之後,就可在任意一台節點檢視各節點程序情況

hadoop常見端口号

端口名稱

hadoop2.x

hadoop3.x

namenode内部通信端口

8020 / 9000

8020 / 9000/9820

namenode http ui

50070

9870

mapreduce檢視執行任務端口

8088

曆史伺服器通信端口

19888

常用配置檔案

hadoop3.x:core-site.xml  hdfs-site.xml yarn-site.xml  mapred-site.xml  workers

hadoop2.x:core-site.xml  hdfs-site.xml yarn-site.xml  mapred-site.xml  slaves