歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Ganglia環境搭建並監控Hadoop分布式集群

Ganglia環境搭建並監控Hadoop分布式集群

日期:2017/3/1 11:55:51   编辑:關於Linux

簡介

Ganglia可以監控分布式集群中硬件資源的使用情況,例如CPU,內存,網絡等資源。通過Ganglia可以監控Hadoop集群在運行過程中對集群資源的調度,作為簡單地運維參考。

環境搭建流程

1、我們先在主機master01上面搭建好Ganglia環境

2、在master01主機上解壓JDK和Hadoop到安裝目錄、修改配置文件

3、克隆出兩台主機slave01,slave02並修改主機名和IP主機名映射、做免密碼登錄

4、啟動Ganglia和Hadoop集群、實現wordcount實例

關閉防火牆和Selinux

關閉防火牆和Selinux是因為這兩者會對Ganglia和Hadoop環境搭建造成影響,比如防火牆會導致集群間一些通信問題。

關閉防火牆

臨時和永久關閉防火牆

臨時:

service iptables stop

永久:

chkconfig iptables off
\

關閉Selinux

vi /etc/sysconfig/selinux

修改內容如下:

\

使配置生效:

setenforce 0


Ganglia單機環境搭建

Ganglia簡介

Ganglia 是 UC Berkeley 發起的一個開源監視項目,設計用於測量數以千計的節點。每台計算機都運行一個收集和發送度量數據(如處理器速度、內存使用量等)的名為 gmond 的守護進程。它將從操作系統和指定主機中收集。接收所有度量數據的主機可以顯示這些數據並且可以將這些數據的精簡表單傳遞到層次結構中。正因為有這種層次結構模式,才使得 Ganglia 可以實現良好的擴展。gmond 帶來的系統負載非常少,這使得它成為在集群中各台計算機上運行的一段代碼,而不會影響用戶性能。

一、Ganglia組件

Ganglia 監控套件包括三個主要部分:gmond,gmetad,和網頁接口,通常被稱為ganglia-web。

Gmond :是一個守護進程,他運行在每一個需要監測的節點上,收集監測統計,發送和接受在同一個組播或單播通道上的統計信息 如果他是一個發送者(mute=no)他會收集基本指標,比如系統負載(load_one),CPU利用率。他同時也會發送用戶通過添加C/Python模塊來自定義的指標。 如果他是一個接收者(deaf=no)他會聚合所有從別的主機上發來的指標,並把它們都保存在內存緩沖區中。

Gmetad:也是一個守護進程,他定期檢查gmonds,從那裡拉取數據,並將他們的指標存儲在RRD存儲引擎中。他可以查詢多個集群並聚合指標。他也被用於生成用戶界面的web前端。

Ganglia-web :顧名思義,他應該安裝在有gmetad運行的機器上,以便讀取RRD文件。 集群是主機和度量數據的邏輯分組,比如數據庫服務器,網頁服務器,生產,測試,QA等,他們都是完全分開的,你需要為每個集群運行單獨的gmond實例。

一般來說集群中每個節點需要一個接收的gmond,每個網站需要一個gmetad。

二、安裝依賴

注:建議使用超級用戶安裝

    yum install –y gcc gcc-c++ libpng freetype zlib libdbi apr* libxml2-devel pkg-config glib pixman pango pango-devel freetye-devel fontconfig cairo cairo-devel libart_lgpl libart_lgpl-devel pcre* rrdtool*
\

\

三、安裝expat依賴

    cd /root
    wget http://jaist.dl.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz
    tar -xf expat-2.1.0.tar.gz && cd expat-2.1.0 && ./configure --prefix=/usr/local/expat && make && make install && cd ..
\

四、安裝confuse

    wget http://ftp.twaren.net/Unix/NonGNU//confuse/confuse-2.7.tar.gz
tar -xf confuse-2.7.tar.gz && cd confuse-2.7 && ./configure CFLAGS=-fPIC --disable-nls --prefix=/usr/local/confuse && make && make install && cd ..
\

64bit機器需要拷貝動態鏈接庫:

mkdir -p /usr/local/confuse/lib64 && cp -a -f /usr/local/confuse/lib/* /usr/local/confuse/lib64/

五、安裝ganglia

    wget http://jaist.dl.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.6.0/ganglia-3.6.0.tar.gz
    tar -xf ganglia-3.6.0.tar.gz && cd ganglia-3.6.0 && ./configure --with-gmetad --enable-gexec --with-libconfuse=/usr/local/confuse --with-libexpat=/usr/local/expat --prefix=/usr/local/ganglia --sysconfdir=/etc/ganglia && make && make install && cd ..
\

六、服務端配置

創建rrdtool數據目錄,看$ganglia-3.2.0/web/conf.php裡面的gmetad_root變量,並根據apache的運行用戶創建權限,例如apache運行於apache用戶上 。

    mkdir -p /var/lib/ganglia/rrds && mkdir -p /var/lib/ganglia/dwoo && chown -R root:root /var/lib/ganglia

配置一個數據源,修改/etc/ganglia/gmetad.conf文件,同時將運行用戶設置為rrdtool的目錄權限用戶,例如apache用戶

    data_source "Hadoop" 192.168.1.108:8649
    setuid_username "root"

說明:這裡的 " hadoop " 表示的是集群的名稱,後面的內容是這個集群中所包含的主機信息,也就是要監控的主機ip。

添加自啟動腳本

    cp -f ganglia-3.6.0/gmetad/gmetad.init /etc/init.d/gmetad && cp -f /usr/local/ganglia/sbin/gmetad /usr/sbin/gmetad && chkconfig --add gmetad

啟動gmetad服務

    service gmetad start

看見Starting GANGLIA gmetad: [ OK ]就代表運行正常了。 通過telnet localhost 8651驗證gmetad是否正常。

\

七、客戶端配置(gmond節點)

本機安裝如下:

    cp -f ganglia-3.6.0/gmond/gmond.init /etc/init.d/gmond && cp -f /usr/local/ganglia/sbin/gmond /usr/sbin/gmond && chkconfig --add gmond && gmond --default_config > /etc/ganglia/gmond.conf

對於生成的默認配置文件/etc/ganglia/gmond.conf需要做適當的修改

globals {
  user = root /*運行Ganglia的用戶*/
  host_dmax = 120 /*secs */
  send_metadata_interval = 15 /*發送數據的時間間隔*/
}
 
cluster {
  name = "hadoop" /*集群名稱*/
  owner = "root" /*運行Ganglia的用戶*/
}
 
udp_send_channel {
   	  # mcast_join = 239.2.11.71 /*注釋掉組播*/
  host = 192.168.1.108/*發送給安裝gmetad的機器*/
}
 
udp_recv_channel { #接受UDP包配置
  # mcast_join = 239.2.11.71
  # bind = 239.2.11.71
}

其中name是將要在服務端進行的分組,是服務端的數據源。接下來開啟服務

    service gmond start

看見Starting GANGLIA gmetad: [ OK ]代表啟動成功。如果有失敗,可以講gmond.conf中的debug從0改為100,看更多的日志,然後進行排查。

\

八、服務端的WEB配置

PHP程序需要依賴Apache來運行,因此需要安裝如下依賴

    yum -y install php httpd
    service httpd start //啟動httpd 服務


九、測試安裝是否成功

    vi /var/www/html/index.php

輸入:

    

保存,然後浏覽器 localhost/index.php

正常是看到php的信息。

\

    cd /root
    wget http://jaist.dl.sourceforge.net/project/ganglia/ganglia-web/3.5.10/ganglia-web-3.5.10.tar.gz
tar -xf ganglia-web-3.5.10.tar.gz && cd ganglia-web-3.5.10 && make install && cd ..

\

這樣 在/var/www/html/下 生成了 ganglia 目錄

注(可能出現的問題):

Ganglia訪問失敗:

    There was an error collecting ganglia data (127.0.0.1:8652): fsockopen error: Permission denied

解決:

需要關閉selinux:vi /etc/selinux/config,把SELINUX=enforcing改成SELINUX=disabled;需要重啟機器。

可以使用命令setenforce 0來關閉selinux而不需要重啟,刷新頁面,即可訪問。但此方法只是一權宜之計。要想永久修改selinux設置,還是要使用第一種方法。

重啟httpd服務器即可看到效果

    service httpd restart
\

使用http://master/ganglia查看對應的ganglia信息。(注:master為運行gmetad的主機的hostname)

\

Ganglia集群配置

免密碼登錄

單機配置好後,現在來配置集群的:

把剛才配置的那台VMware中的虛擬機,使用克隆功能,克隆出兩台,然後:

vi /etc/sysconfig/network   #修改主機名
vi /etc/hosts       #修改主機名和IP映射
三台主機IP、主機名、角色對應關系:

\

在每台主機中敲入如下命令,然後一直回車確認就可以了,如果是root用戶,會在/root/.ssh目錄下生成密鑰文件。

ssh-keygen -t rsa
\

拷貝slave01上公鑰到master01上面(slave02也需要)

\

然後通過命令拷貝三台主機公鑰到authorized_keys文件

在master01主機上/root/.ssh目錄下,slave01和slave02中id_rsa.pub也拷貝到這個目錄,並且名稱分別為slave01,slave02

cat id_rsa.pub >> authorized_keys
cat slave01 >> authorized_keys
cat slave02 >> authorized_keys
\

這時我們就可以免密碼登錄了

\

配置並開啟Ganglia集群

永久關閉slave01,slave02上面的Ganglia服務端gmetad

\

查看Ganglia服務端gmetad和客戶端gmond是否都開啟

\

開啟Apache的httpd服務

\

Ganglia監控圖示:

\

\

Hadoop環境軟件准備

首先需要將JDK以及Hadoop軟件解壓到需要安裝的目錄

安裝JDK

配置Java到環境變量

\

驗證Java環境是否安裝好

\

安裝Hadoop

把Hadoop添加到環境變量

\

拷貝master01上修改好的/etc/profile文件到其他兩台主機

\

使環境變量立即生效

\

查看hadoop版本

\

建立data,name,tmp文件夾:後面配置文件中需要用到

\

Hadoop配置文件修改

hadoop-env.sh

在文件頭添加如下內容

export JAVA_HOME=/usr/local/jdk1.7.0_80
export HADOOP_LOG_DIR=/usr/local/hadoop_repo/logs
export HADOOP_ROOT_LOGGER=DEBUG,DRFA

core-site.xml


    
        fs.defaultFS
        hdfs://master01:9000
    
    
        hadoop.tmp.dir
        /usr/local/hadoop_repo/tmp    


hdfs-site.xml


      
        dfs.namenode.name.dir  
        file:///usr/local/hadoop_repo/name  
      
      
        dfs.datanode.data.dir  
        file:///usr/local/hadoop_repo/data  
    
    
        dfs.namenode.checkpoint.dir
        file:///usr/local/hadoop_repo/namesecondary
   
   
        dfs.namenode.secondary.http-address
        master01:9001
    
    
        dfs.replication
        1
    
      
        dfs.webhdfs.enabled  
        true  
    
        dfs.permissions
        false
    

mapred-site.xml


    
        mapreduce.framework.name
        yarn
    
      
        mapreduce.jobhistory.address  
        master01:10020  
      
      
        mapreduce.jobhistory.webapp.address  
        master01:19888  
    
    
        yarn.app.mapreduce.am.staging-dir
        /history
    
    
        mapreduce.jobhistory.done-dir
        ${yarn.app.mapreduce.am.staging-dir}/history/done
    
    
        mapreduce.jobhistory.intermediate-done-dir
        ${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate
    
    
    mapreduce.map.log.level
        DEBUG
    
    
        mapreduce.reduce.log.level
        DEBUG
    
 

slaves

master01
slave01
slave02

yarn-env.sh

export JAVA_HOME=/usr/local/jdk1.7.0_80
export YARN_LOG_DIR=/usr/local/hadoop_repo/logs
export YARN_ROOT_LOGGER=DEBUG,DRFA

yarn-site.xml


    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
    
        yarn.resourcemanager.hostname
    master01
    
      
        yarn.resourcemanager.address  
        master01:8032  
      
      
        yarn.resourcemanager.scheduler.address  
        master01:8030  
      
      
        yarn.resourcemanager.resource-tracker.address  
        master01:8031  
      
      
        yarn.resourcemanager.admin.address  
        master01:8033  
      
      
        yarn.resourcemanager.webapp.address  
        master01:8088  
    
      
        yarn.log-aggregation-enable  
        true  
    


Hadoop集群啟動

啟動HDFS

格式化:

\

啟動dfs:

\

master01上面的hdfs進程:

\

slave01,slave02上面的hdfs進程:

\

HDFS的web頁面: 192.168.33.181:50070/

\

啟動yarn

啟動yarn命令:

start-yarn.xml
\

Yarn的Web頁面:192.168.33.181:8088

\

Wordcount實例運行

Wordcount實例所在jar包位置:

/usr/local/hadoop-2.6.0/share/hadoop/mapreduce
\

創建一個words文件,並寫入如下文本:

vi words 

\

通過客戶端查看HDFS文件系統目錄:

hdfs dfs -ls -R /
\

運行wordcount的腳本命令

hadoop jar hadoop-mapreduce-examples-2.6.0.jar wordcount /input/words /output

HDFS文件系統路徑頁面示圖:

\

HDFS頁面查看運行結果目錄:

\

通過Yarn的web頁面查看實例運行狀態,如下為實例運行結束的圖示:

\

查看wordcount實例的運行結果:

hdfs dfs -text /output/part-r-00000
\

Ganglia監控Hadoop集群圖

\

Copyright © Linux教程網 All Rights Reserved