1. 程式人生 > >[喵咪大資料]Hadoop單機模式

[喵咪大資料]Hadoop單機模式

千里之行始於足下,學習大資料我們首先就要先接觸Hadoop,上節介紹到Hadoop分為Hadoop-HDFS,Hadoop-YARN,Hadoop-Mapreduce組成,分別負責分散式檔案儲存,任務排程,計算處理,本機我們在單機模式下把Hadoop執行起來並且簡單的使用接觸Hadoop相關的機制.

附上:

1.環境準備

這裡所有的系統統一使用Centos7.X 64位系統 其他系統未經過測試

建立install目錄存放各項包,使用oneinstack更新基礎元件(按照提示選擇即可)

> mkdir -p /app/install && cd /app/install
# 使用oneinstack更新一下環境基礎元件 全部選擇N即可
> wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz > tar -zxvf oneinstack-full.tar.gz > cd oneinstack && ./install.sh

建立hadoop使用者並設定密碼(如果暴露外網IP務必使用複雜密碼避免攻擊)

useradd -m hadoop -s /bin/bash
passwd hadoop

為 hadoop 使用者增加管理員許可權,方便使用sudo來以root許可權來進行操作

visudo
# 找到root複製一條改為hadoop
root ALL=(ALL) ALL hadoop ALL=(ALL) ALL

新增SSH免密登入

# 先切換到hadoop使用者
su hadoop
ssh-keygen -t rsa              # 會有提示,都按回車就可以
cd ~/.ssh/  
cat id_rsa.pub >> authorized_keys  # 加入授權
chmod 600 ./authorized_keys    # 修改檔案許可權
ssh localhost      # 此時使用ssh首次需要yes以下不用密碼即可登入

2.Hadoop安裝

這裡使用的Hadoop版本為2.7.3版本可以自行在官網下載
統一安裝目錄均為/usr/local/XX

2.1 環境配置

需要準備好JAVA安裝包和Hadoop安裝包,我們把以下兩個檔案放到我們建立好的install目錄下

hadoop-2.7.3.tar.gz
jdk-8u101-linux-x64.tar.gz

JAVA環境

cd /app/install
sudo tar -zxvf jdk-8u101-linux-x64.tar.gz 
sudo mv jdk1.8.0_101/ /usr/local/jdk1.8

環境變數增加如下內容

sudo vim /etc/profile

# JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=/usr/local/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

# 使環境變數生效
source /etc/profile

如下結果為Java安裝成功輸出

java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

Hadoop環境

> sudo tar -zxvf hadoop-2.7.3.tar.gz
> sudo mv hadoop-2.7.3 /usr/local/
> sudo chown -R hadoop:hadoop /usr/local/hadoop-2.7.3

環境變數增加如下內容

> sudo vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop-2.7.3
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

# 使環境變數生效
> source /etc/profile

檢視hadoop版本資訊驗證是否安裝成功

hadoop version
# 如下結構為安裝成功
Hadoop 2.7.3
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff
Compiled by root on 2016-08-18T01:41Z
Compiled with protoc 2.5.0
From source with checksum 2e4ce5f957ea4db193bce3734ff29ff4
This command was run using /usr/local/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar

2.1 測試Hadoop是否正常

Hadoop 預設模式為非分散式模式,無需進行其他配置即可執行。非分散式即單 Java 程序,方便進行除錯。
現在我們可以執行例子來感受下 Hadoop 的執行。Hadoop 附帶了豐富的例子執行如下命令可以看到所有例子 包括 wordcount、terasort、join、grep 等。

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar 

在此我們選擇執行 grep 例子來驗證搭建的hadoop是否可以正常執行,我們將 input 資料夾中的所有檔案作為輸入,篩選當中符合正則表示式 dfs[a-z.]+ 的單詞並統計出現的次數,最後輸出結果到 output 資料夾中。

cd $HADOOP_HOME
mkdir ./input
cp ./etc/hadoop/*.xml ./input   # 將配置檔案作為輸入檔案
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*          # 檢視執行結果
# 如果執行成功結果如下
1       dfsadmin

注意,Hadoop 預設不會覆蓋結果檔案,因此再次執行上面例項會提示出錯,需要先將 ./output 刪除。

3.Hadoop偽分散式配置

Hadoop 可以在單節點上以偽分散式的方式執行,Hadoop 程序以分離的 Java 程序來執行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的檔案。

Hadoop 的配置檔案位於 $HADOOP_HOME/etc/hadoop/ 中,偽分散式需要修改2個配置檔案 core-site.xml 和 hdfs-site.xml 。Hadoop的配置檔案是 xml 格式,每個配置以宣告 property 的 name 和 value 的方式來實現。

修改配置檔案hadoop-env.sh 更新JAVA_HOME環境變數

export JAVA_HOME=/usr/local/jdk1.8

修改配置檔案 core-site.xml

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop-2.7.3/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

這裡配置namenode和datanode的目錄,namenode和datanode是什麼東西呢??

NameNode:管理檔案系統的元資料,所有的資料讀取工作都會先經過NameNode獲取源資料在哪個DataNode裡面在進行獲取操作
DataNode:實際資料儲存節點,具體的對映關係會儲存在NameNode下

修改配置檔案vim :

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop-2.7.3/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop-2.7.3/tmp/dfs/data</value>
    </property>
</configuration>

配置完成後,執行 NameNode 的格式化:

hdfs namenode -format

成功的話,會看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若為 “Exitting with status 1” 則是出錯。

接著開啟 NaneNode 和 DataNode 守護程序:

start-dfs.sh

若出現如下 SSH 的提示 “Are you sure you want to continue connecting”,輸入 yes 即可。
啟動完成後,可以通過命令 jps 來判斷是否成功啟動,若成功啟動則會列出如下程序: “NameNode”、”DataNode”和SecondaryNameNode(如果 SecondaryNameNode 沒有啟動,請執行 sbin/stop-dfs.sh 關閉程序,然後再次嘗試啟動嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查之前步驟,或通過檢視啟動日誌排查原因。

16035 Jps
15748 DataNode
15621 NameNode
15911 SecondaryNameNode

成功啟動後,可以訪問 Web 介面 http://localhost:50070 檢視 NameNode 和 Datanode 資訊,還可以線上檢視 HDFS 中的檔案。

上面的單機模式,grep 例子讀取的是本地資料,偽分散式讀取的則是 HDFS 上的資料。要使用 HDFS,首先需要在 HDFS 中建立使用者目錄:

hdfs dfs -mkdir -p /user/hadoop

接著將 ./etc/hadoop 中的 xml 檔案作為輸入檔案複製到分散式檔案系統中,即將 /usr/local/hadoop/etc/hadoop 複製到分散式檔案系統中的 /user/hadoop/input 中。我們使用的是 hadoop 使用者,並且已建立相應的使用者目錄 /user/hadoop ,因此在命令中就可以使用相對路徑如 input,其對應的絕對路徑就是 /user/hadoop/input:

hdfs dfs -mkdir input
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml input

複製完成後,可以通過如下命令檢視 HDFS 中的檔案列表:

hdfs dfs -ls input

偽分散式執行 MapReduce 作業的方式跟單機模式相同,區別在於偽分散式讀取的是HDFS中的檔案(可以將單機步驟中建立的本地 input 資料夾,輸出結果 output 資料夾都刪掉來驗證這一點)。

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'

檢視執行結果的命令(檢視的是位於 HDFS 中的輸出結果):

hdfs dfs -cat output/*
1       dfsadmin
1       dfs.replication
1       dfs.namenode.name.dir
1       dfs.datanode.data.dir

Hadoop 執行程式時,輸出目錄不能存在,否則會提示錯誤 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,因此若要再次執行,需要執行如下命令刪除 output 資料夾:

hdfs dfs -rm -r output 

若要關閉 Hadoop-HDFS,則執行

stop-dfs.sh

4.YARN

(偽分散式不啟動 YARN 也可以,一般不會影響程式執行)
有的讀者可能會疑惑,怎麼啟動 Hadoop 後,見不到書上所說的 JobTracker 和 TaskTracker,這是因為新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也稱為 YARN,Yet Another Resource Negotiator)。

YARN 是從 MapReduce 中分離出來的,負責資源管理與任務排程。YARN 運行於 MapReduce 之上,提供了高可用性、高擴充套件性,YARN 的更多介紹在此不展開,有興趣的可查閱相關資料。

上述通過 start-dfs.sh 啟動 Hadoop,僅僅是啟動了 MapReduce 環境,我們可以啟動 YARN ,讓 YARN 來負責資源管理與任務排程。

首先修改配置檔案 mapred-site.xml

mv $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

接著修改配置檔案 yarn-site.xml:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

然後就可以啟動 YARN 了

start-yarn.sh      $ 啟動YARN
mr-jobhistory-daemon.sh start historyserver  # 開啟歷史伺服器,才能在Web中檢視任務執行情況

在使用jps檢視可以看到多了幾項

16707 ResourceManager
15748 DataNode
15621 NameNode
15911 SecondaryNameNode
16811 NodeManager
17199 Jps
17151 JobHistoryServer

啟動 YARN 之後,執行例項的方法還是一樣的,僅僅是資源管理方式、任務排程不同。觀察日誌資訊可以發現,不啟用 YARN 時,是 “mapred.LocalJobRunner” 在跑任務,啟用 YARN 之後,是 “mapred.YARNRunner” 在跑任務。啟動 YARN 有個好處是可以通過 Web 介面檢視任務的執行情況:ur,如下圖所示。但 YARN 主要是為叢集提供更好的資源管理與任務排程,然而這在單機上體現不出價值,反而會使程式跑得稍慢些。因此在單機上是否開啟 YARN 就看實際情況了。

不啟動 YARN 需重新命名 mapred-site.xml
如果不想啟動 YARN,務必把配置檔案 mapred-site.xml 重新命名,改成 mapred-site.xml.template,需要用時改回來就行。否則在該配置檔案存在,而未開啟 YARN 的情況下,執行程式會提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的錯誤,這也是為何該配置檔案初始檔名為 mapred-site.xml.template。

同樣的,關閉 YARN 的指令碼如下:

stop-yarn.sh
mr-jobhistory-daemon.sh stop historyserver

YARN webui

啟動yarn之後可以通過web介面檢視執行進度等,訪問hadoop-1:8080會獲得如下介面

5 總結

本節我們先簡單瞭解了一下Hadoop大家應該對Hadoop有了一個簡單的概念,HDFS是什麼,怎麼配置環境,怎麼測試執行情況,但是這僅僅是一個開始後面還有很長的路要走,那麼大家要是有問題可以在博文下留言,有好的想法可以來和喵咪來溝通交流哦!

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

相關推薦

[資料]Hadoop單機模式

千里之行始於足下,學習大資料我們首先就要先接觸Hadoop,上節介紹到Hadoop分為Hadoop-HDFS,Hadoop-YARN,Hadoop-Mapreduce組成,分別負責分散式檔案儲存,任務排程,計算處理,本機我們在單機模式下把Hadoop執行起來

[資料]Presto查詢引擎

如果大家正在按照筆者的教程嘗試使用大資料元件還是之前有使用過相關的元件,大家會發現一個問題HIVE在負責的查詢下呼叫Mapreduce會很慢,在這個場景下就湧現出很多查詢引擎來優化,比如大家熟悉的Spark-SQL,Impala,kilin已經今天的主角Pr

零基礎資料HADOOP學習-筆記3-安全模式 safemode

【安全模式 safemode】 3種方式 方式一:Namenode的一種狀態,啟動時會自動進入安全模式,在安全模式,檔案系統不 允許有任何修改,“只讀不寫”。目的,是在系統啟動時檢查各個DataNod

[資料]hadoop 聯邦機制 及 配置檔案

hadoop 聯邦機制 1 原理 即多個ha 聯合組成一套叢集環境,對外提供一致介面【ViewFs】(相當於擴容) 即cluserID 相等 但是相同的datanode服務於不同的namenode。 原理是通過namenodeID和blockPool-id來判別檔案存放的位置

[資料] hadoop HA 配置

前提:已經通過上一篇的環境配置好了zookeeper環境 1 叢集規劃 bigdata01.com bigdata02.com bigdata02.com namenode n

[資料]hadoop 環境配置(1)

1 基礎環境搭建 Centos 6.4 環境 hadoop 環境搭建 1 使用者新增 sodo adduser kfk 2 hostname 更改 sudo vi /etc/sysconfig/network 3 hosts 更改 sudo vi /etc/h

資料Hadoop系列之Hadoop服務開機自啟動配置

1.  編寫執行指令碼 $ sudo cd /etc/init.d $ sudo vi hadoop #!/bin/bash #chkconfig:35 95 1 #description:script to start/stop hadoop su - hadoop

資料 Hadoop之HDFS

前言 HDFS(Hadoop Distributed File System)是基於流資料模式訪問和處理超大檔案的需求而開發的,它可以運行於廉價的商用伺服器上。 大資料 基礎概念 大資料 Centos基礎 大資料 Shell基礎 大資料 ZooKeepe

資料 Hadoop介紹、配置與使用

前言 Hadoop是Apache軟體基金會旗下的一個開源分散式計算平臺。 大資料 基礎概念 大資料 Centos基礎 大資料 Shell基礎 大資料 ZooKeeper 大資料 Hadoop介紹、配置與使用 大資料 Hadoop之HDFS

資料Hadoop學習筆記(三)

1.HDFS架構講解 2.NameNode啟動過程 3.YARN架構組建功能詳解 4.MapReduce 程式設計模型 HDFS架構講解 源自谷歌的GFS論文 HDFS: *抑鬱擴充套件的分散式系統 *執行在大量普通的鏈家機器上,提供容錯機制 *為

資料Hadoop學習筆記(二)

Single Node Setup 官網地址 1. 本地模式 2.偽分散式模式 ************************* 本地模式 **************************** . grep input output ‘dfs[a-

資料Hadoop學習筆記(一)

大資料Hadoop2.x hadoop用來分析儲存網路資料 MapReduce:對海量資料的處理、分散式。 思想————> 分而治之,大資料集分為小的資料集,每個資料集進行邏輯業務處理合並統計資料結果(reduce) 執行模式:本地模式和yarn模式 input—

資料Hadoop學習筆記(五)

分散式部署 本地模式Local Mode 分散式Distribute Mode 偽分散式 一臺機器執行所有的守護程序 從節點DN和NM只有一個 完全分散式

資料Hadoop學習筆記(四)

MapReduce執行過程 ======== step1 : input InputFormat 讀取資料 轉換成<key, value>

資料Hadoop學習筆記(六)

HDFS HA 背景: 在hadoop2.0之前,HDFS叢集中的NameNode存在單點故障(SPOF)對於只有一個NameNode的叢集,若NameNode機器出現故障,則整個叢集將無法使用,直到NameNode重新啟動 NameNode主要在一下兩方面影響

hadoop單機模式connect refused問題

所以說這裡一定要寫一下了,由於之前偷懶,在沒有執行hadoop自帶的jar包的情況下就配置了hadoop的core-site.xml和hdfs-site.xml導致單機模式執行hadoop就會出現connection refused的錯誤,因此將以前配置的內容刪除就可以了  

資料Hadoop學習系列之Hadoop、Spark學習路線

1 Java基礎: 視訊方面:推薦畢老師《畢向東JAVA基礎視訊教程》。 學習hadoop不需要過度的深入,java學習到javase,在多執行緒和並行化多多理解實踐即可。 書籍方面:推薦李興華的《java開發實戰經典》 2 Linux基礎: 視訊方面:(1)馬哥的高薪Linux

資料架構師:如何從零基礎搭建資料hadoop生態圈

從年初起,幾家國際大廠的開發者大會,無論是微軟Build、Facebook F8還是稍後的Google I/O,莫不把“AI優先”的大旗扯上雲霄。如果這一波AI大潮只是空喊幾句口號,空提幾個戰略,空有幾家炙手可熱的創業公司,那當然成不了什麼大氣候。但風浪之下,我們看到的卻是,Google一線的各大業

資料-Hadoop-分散式資源排程系統YARN部署

1:YARN部署 1.1:etc/hadoop/mapred-site.xml:     <property>         <name>mapreduce.framework.name</name&

資料-Hadoop-HDFS(分散式檔案系統)環境搭建

1:Hadoop三大核心元件 A:分散式檔案系統HDFS B:分散式資源排程器 C:分散式計算框架MapReduce 2:HDFS簡介: HDFS架構:HDFS採用Master/Slave架構 即:一個Master(NameNode)對應多個Slave(DataNode)