hadoop生態圈:hadoop集羣的搭建(一)

目錄

1 hadoop概述

1.1 hadoop是什麼

1.2 hadoop的組成

1.2.1 hdfs架構概述

1.2.2 YARN概述

1.2.3 MapReduce架構概述

1.3 大數據生態體系

1.4 推薦系統架構圖

2  Hadoop集羣搭建

2.1 虛擬機環境準備

2.2 安裝jdk和hadoop

2.3 集羣配置

3 集羣啓動

3.1 集羣單點啓動

3.2 SSH無密登陸設置

3.3 集羣一鍵啓動/停止方式

4  測試

          4.1啓動集羣

4.2 集羣基本測試

4.3 集羣時間同步

4.3.1 時間服務器配置(必須是root用戶)

4.3.2 其他機器配置(root用戶)


1 hadoop概述

1.1 hadoop是什麼

  1. Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構
    1. 集羣:多個機器共同完成一件事
    2. 分佈式:多個機器共同完成一件事,然後不同機器作用不同,各司其職
    3. 集羣不一定是分佈式,分佈式一定是集羣
  2. 主要解決,海量數據的存儲和海量數據的分析計算問題。
  3. 廣義上來說,HADOOP通常是指一個更廣泛的概念——HADOOP生態圈

1.2 hadoop的組成

  1. Hadoop HDFS:(hadoop distribute file system )一個高可靠、高吞吐量的分佈式文件系統
  2. Hadoop MapReduce:一個分佈式的離線並行計算框架
  3. Hadoop YARN:作業調度與集羣資源管理的框架
  4. Hadoop Common:支持其他模塊的工具模塊(Configuration、RPC、序列化機制、日誌操作)。

1.2.1 hdfs架構概述

 

1.2.2 YARN概述

  1. ResourceManager(rm):處理客戶端請求、啓動/監控ApplicationMaster、監控NodeManager、資源分配與調度;
  2. NodeManager(nm):單個節點上的資源管理、處理來自ResourceManager的命令、處理來自ApplicationMaster的命令;
  3. ApplicationMaster:數據切分、爲應用程序申請資源,並分配給內部任務、任務監控與容錯。
  4. Container:對任務運行環境的抽象,封裝了CPU、內存等多維資源以及環境變量、啓動命令等任務運行相關的信息。

1.2.3 MapReduce架構概述

MapReduce將計算過程分爲兩個階段:Map(映射)和Reduce(歸約)

  1. Map階段並行處理輸入數據
  2. Reduce階段對Map結果進行彙總

1.3 大數據生態體系

圖中涉及的技術名詞解釋如下:

  1. Sqoop:sqoop是一款開源的工具,主要用於在Hadoop(Hive)與傳統的數據庫(mysql)間進行數據的傳遞,可以將一個關係型數據庫(例如 : MySQL ,Oracle 等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中。
  2. Flume:Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力。
  3. Kafka:Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,有如下特性:
    1. 通過O(1)的磁盤數據結構提供消息的持久化,這種結構對於即使數以TB的消息存儲也能夠保持長時間的穩定性能。
    2. 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒數百萬的消息
    3. 支持通過Kafka服務器和消費機集羣來分區消息。
    4. 支持Hadoop並行數據加載。
  4. Storm:Storm爲分佈式實時計算提供了一組通用原語,可被用於“流處理”之中,實時處理消息並更新數據庫。這是管理隊列及工作者集羣的另一種方式。 Storm也可被用於“連續計算”(continuous computation),對數據流做連續查詢,在計算時就將結果以流的形式輸出給用戶。
  5. Spark:Spark是當前最流行的開源大數據內存計算框架。可以基於Hadoop上存儲的大數據進行計算。
  6. Oozie:Oozie是一個管理Hdoop作業(job)的工作流程調度管理系統。Oozie協調作業就是通過時間(頻率)和有效數據觸發當前的Oozie工作流程。
  7. Hbase:HBase是一個分佈式的、面向列的開源數據庫。HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。
  8. Hive:hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換爲MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
  9. R語言:R是用於統計分析、繪圖的語言和操作環境。R是屬於GNU系統的一個自由、免費、源代碼開放的軟件,它是一個用於統計計算和統計製圖的優秀工具。
  10. Mahout:
    1. Apache Mahout是個可擴展的機器學習和數據挖掘庫,當前Mahout支持主要的4個用例:
    2. 推薦挖掘:蒐集用戶動作並以此給用戶推薦可能喜歡的事物。
    3. 聚集:收集文件並進行相關文件分組。
    4. 分類:從現有的分類文檔中學習,尋找文檔中的相似特徵,併爲無標籤的文檔進行正確的歸類。
    5. 頻繁項集挖掘:將一組項分組,並識別哪些個別項會經常一起出現。
  11. ZooKeeper:Zookeeper是Google的Chubby一個開源的實現。它是一個針對大型分佈式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、 分佈式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。

1.4 推薦系統架構圖

2  Hadoop集羣搭建

安裝所需要的軟件鏈接:請點這裏;提取碼:i431 

也可以去官網自行下載

2.1 虛擬機環境準備

  • 三臺虛擬機
  • 修改主機名 /etc/sysconfig/network    sync然後重啓

主機名分別爲:hadoop101;hadoop102;hadoop103;

  • 修改克隆虛擬機的靜態ip,分別爲:

IP分別爲:192.168.1.101;192.168.1.102;192.168.1.103

  • 配置主機名和IP的映射關係(便於使用主機名訪問虛擬機

[root@ hadoop101桌面]# vim /etc/hosts

添加如下內容

192.168.1.101 hadoop101

192.168.1.102 hadoop102

192.168.1.103 hadoop103

  • 關閉防火牆 service iptables stop;chkconfig iptables off
  • 在各個機器上使用root用戶在/opt目錄下創建module、software文件夾

2.2 安裝jdk和hadoop

安裝測略:現在一臺節點上配置,然後通過命令發送到另外兩臺節點上

1. 卸載現有的jdk

查詢是否安裝jdk,如果版本低於1.7,卸載該jdk

[root@hadoop101 opt]$ rpm -qa | grep java

[root@hadoop101 opt]$  rpm -e 軟件包

2. 將jdk和hadoop上傳到/opt/software目錄下

3.在Linux系統目錄下查看是否上傳成功

[root@hadoop101 opt]$ cd software/

[root@hadoop101 software]$ ls

hadoop-2.7.2.tar.gz  jdk-8u144-linux-x64.tar.gz

4. 解壓jdk和hadoop到/opt/module目錄

[root@hadoop101 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/

[root@hadoop101 software]# tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

5.配置jdk和hadoop的環境變量

打開/etc/profile文件,在最後添加下列內容

[root@hadoop101 software]$  vi /etc/profile

#JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_144

export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME

export HADOOP_HOME=/opt/module/hadoop-2.7.2

export PATH=$PATH:$HADOOP_HOME/bin

保存退出    :wq

讓配置文件重新生效

[root@ hadoop101 software]$ source /etc/profile

6.測試是否安裝成功

[root@hadoop101 ~]# java -version

java version "1.8.0_144"

[root @hadoop101 ~]$ hadoop version

Hadoop 2.7.2

7.重啓(如果命令不成功再重啓)

2.3 集羣配置

1. 集羣部署規劃

 

hadoop101

hadoop102

hadoop103

HDFS

 

NameNode

DataNode

 

DataNode

SecondaryNameNode

DataNode

YARN

 

NodeManager

ResourceManager

NodeManager

 

NodeManager

2. 配置集羣

1. 配置hadoop所使用的Java的環境變量:hadoop-env.sh

[root@hadoop101 hadoop]$ vim hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

 

2. 核心配置文件:core-site.xml(hdfs的核心配置文件)

[root@hadoop101 hadoop]$ vim core-site.xml

<!-- 指定HDFS中NameNode的地址 -->

<property>

        <name>fs.defaultFS</name>

        <value>hdfs://hadoop101:9000</value>

</property>

 

<!-- 指定hadoop運行時產生文件的存儲目錄 -->

<property>

        <name>hadoop.tmp.dir</name>

        <value>/opt/module/hadoop-2.7.2/data/tmp</value>

</property>

3. hdfs配置文件:hdfs-site.xml

[root@hadoop101 hadoop]$ vim hdfs-site.xml

<!--副本數量-->

<property>

        <name>dfs.replication</name>

        <value>3</value>

</property>

 

<!--secondarynamenode的地址--> 輔助namenode工作

<property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>hadoop103:50090</value>

</property>

4. yarn配置文件

yarn-env.sh

[root@hadoop101 hadoop]$ vim yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

 

yarn-site.xml

[root@hadoop101 hadoop]$ vim yarn-site.xml

<!-- reducer獲取數據的方式 -->

<property>

         <name>yarn.nodemanager.aux-services</name>

         <value>mapreduce_shuffle</value>

</property>

 

<!-- 指定YARN的ResourceManager的地址 -->

<property>

        <name>yarn.resourcemanager.hostname</name>

        <value>hadoop102</value>

</property>

5. mapreduce配置文件

mapred-env.sh

[root@hadoop101 hadoop]$ vim mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

 

mapred-site.xml

[root@hadoop101 hadoop]$ cp mapred-site.xml.template mapred-site.xml

[root@hadoop101 hadoop]$ vim mapred-site.xml

<!-- 指定mr運行在yarn上 -->

<property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

</property>

3. 配置集羣中從節點的信息

/opt/module/hadoop-2.7.2/etc/hadoop/slaves

[root@hadoop101 hadoop]$ vim slaves

hadoop101

hadoop102

hadoop103

4. 分發文件

scp:(secure copy)安全拷貝

①定義:scp可以實現服務器到服務器之間的數據拷貝。(from  server1  to  server2)

安裝scp命令,這個需要每個節點都安裝

yum  install -y openssh-server openssh-clients

②使用:將hadoop101中/opt/module/目錄下的所有文件拷貝到hadoop102、hadoop103

[root@hadoop101 /]$ scp -r /opt/module/*  hadoop102:/opt/module

[root@hadoop101 /]$ scp -r /opt/module/*  hadoop103:/opt/module

5. 查看文件分發情況(驗證一個即可)

[root@hadoop102 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

3 集羣啓動

  1. 單點啓動(不建議使用該方式啓動集羣,假如某個節點掛掉了,可以使用這個單獨啓動)
  2. 一鍵啓動(建議使用,各個服務組件逐一啓動,集羣中某個進程掛掉使用這種方式重啓)

3.1 集羣單點啓動

1. 如果集羣是第一次啓動,需要格式化NameNode(格式化只進行一次)

[root@hadoop101 hadoop-2.7.2]$ hadoop namenode -format

2. 在hadoop101上啓動NameNode

[root@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode

[root@hadoop101 hadoop-2.7.2]$ jps

3461 NameNode

3. 在hadoop101、hadoop102、hadoop103上分別啓動DataNode

[root@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode

[root@hadoop101 hadoop-2.7.2]$ jps

3461 NameNode

3608 Jps

3561 DataNode

[root@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode

[root@hadoop102 hadoop-2.7.2]$ jps

3190 DataNode

3279 Jps

[root@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode

[root@hadoop103 hadoop-2.7.2]$ jps

3237 Jps

3163 DataNode

3.2 SSH無密登陸設置

(一鍵啓動的必備條件)

1. 配置ssh

        1. 基本語法: ssh  另一臺主機的ip地址

如果提示command  not found,需要安裝ssh服務

yum  install -y openssh-server openssh-clients

        2. ssh連接時出現Host key verification failed   直接輸入yes即可

[root@hadoop101 opt] $ ssh hadoop102

The authenticity of host 'hadoop102(192.168.1.102)' can't be established.

RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.

Are you sure you want to continue connecting (yes/no)?

Host key verification failed.

2. 無密鑰配置

1. 免密登陸原理

  1. A服務器通過ssh-key-gen生成密鑰對
  2. 將公鑰(A)拷貝到其他的服務器上
  3. 然後A服務器使用私鑰(A)加密數據後發送到其他的服務器
  4. 其他的服務器接受到數據後,在本機授權key中查找A的公鑰,並解密數據
  5. 數據處理完成後,使用公鑰(A)將數據加密後返回給A服務器

2. 生成密鑰對:

[root@hadoop101 .ssh]# pwd       //.ssh是一個隱藏的文件夾
/root/.ssh

[root@hadoop101 .ssh]$ ssh-keygen -t rsa    //然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)

3. 將公鑰拷貝到要免密登錄的目標機器上

[root@hadoop101 .ssh]$ ssh-copy-id hadoop101

[root@hadoop101 .ssh]$ ssh-copy-id hadoop102

[root@hadoop101 .ssh]$ ssh-copy-id hadoop103

4.測試

[root@hadoop101 .ssh]# ssh hadoop102
Last login: Mon Apr  8 17:00:50 2019 from 192.168.1.1
[root@hadoop102 ~]# exit
logout
Connection to hadoop102 closed.

3. .ssh文件夾下(~/.ssh)的文件功能解釋

  1. known_hosts :記錄ssh訪問過計算機的公鑰(public key)
  2. id_rsa :生成的私鑰
  3. id_rsa.pub :生成的公鑰
  4. authorized_keys :存放授權過得無密登錄服務器公鑰

3.3 集羣一鍵啓動/停止方式

1. 各個服務組件逐一啓動/停止

分別啓動/停止hdfs組件

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

啓動/停止yarn

yarn-daemon.sh  start|stop  resourcemanager|nodemanager

2. 各個模塊分開啓動/停止(配置SSH是前提)常用

整體啓動/停止hdfs(namenode節點啓動,也就是hadoop101)

[root@hadoop101sbin]# ./start-dfs.sh 

[root@hadoop101 sbin]# ./start-dfs.sh 

整體啓動/停止yarn(在resourceManager節點啓動,也就是hadoop102)

[root@hadoop102 sbin]# ./start-yarn.sh 

[root@hadoop102 sbin]# ./stop-yarn.sh 

4  測試

4.1啓動集羣

1. 如果集羣是第一次啓動,需要格式化namenode,如果單點啓動的時候已將格式化,就不需要格式化了!!

[root@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode -format

2. 啓動HDFS

[root@hadoop101 hadoop-2.7.2]$ sbin/start-dfs.sh

[root@hadoop101 hadoop-2.7.2]$ jps

4166 NameNode

4482 Jps

4263 DataNode

[root@hadoop101 hadoop-2.7.2]$ jps

3218 DataNode

3288 Jps

[root@hadoop101 hadoop-2.7.2]$ jps

3221 DataNode

3283 SecondaryNameNode

3364 Jps

啓動之後查看hdfs的WEBUI界面:http://192.168.1.101:50070/

3. 啓動yarn

[root@hadoop102 hadoop-2.7.2]$ sbin/start-yarn.sh

注意:NameNode和ResourceManger如果不是同一臺機器,不能在NameNode上啓動 yarn,應該在ResouceManager所在的機器上啓動yarn。如果不在一臺機器上,則ResourceManger所在機器也需要配置到其他機器的ssh免密登錄

通過jps命令查看進程:

[root@hadoop101 .ssh]# jps
3584 NameNode
3718 DataNode
4872 NodeManager

[root@hadoop102 sbin]# jps
3441 DataNode
5162 NodeManager
5053 ResourceManager

[root@hadoop103 ~]# jps
3542 SecondaryNameNode
5095 NodeManager
3434 DataNode

Yarn的web頁面查看地址:http://hadoop102:8088/

4. 查看SecondaryNameNode的WEBUI界面

4.2 集羣基本測試

1. 上傳文件到集羣

上傳小文件

[root@hadoop101 hadoop-2.7.2]# hadoop fs -mkdir  /upload                 //在hdfs上創建一個文件夾
[root@hadoop101 hadoop-2.7.2]# hadoop fs -put bigdata.txt /upload/

上傳大文件

[root@hadoop101 software]# hadoop fs -put hadoop-2.7.2.tar.gz  /upload

2. 上傳文件後查看文件存放的位置

查看HDFS文件存儲位置

[root@hadoop101 subdir0]$ pwd

/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-327200681-192.168.1.101-1551800072963/current/finalized/subdir0/subdir0

查看HDFS在磁盤存儲的文件內容

[root@hadoop101 subdir0]$ cat blk_1073741825

hadoop yarn

hadoop mapreduce

拼接

-rw-rw-r--. 1 hadoop hadoop 134217728 4月 8  20:01 blk_1073741836

-rw-rw-r--. 1 hadoop hadoop 1048583 4月  8 20:01 blk_1073741836_1012.meta

-rw-rw-r--. 1 hadoop hadoop 63439959 4月  8 20:01 blk_1073741837

-rw-rw-r--. 1 hadoop hadoop 495635 4月  8 20:01 blk_1073741837_1013.meta

[root@hadoop101 subdir0]$ cat blk_1073741836>>tmp.file

[root@hadoop101 subdir0]$ cat blk_1073741837>>tmp.file

[root@hadoop101 subdir0]$ tar -zxvf tmp.file

下載

[root@hadoop101 hadoop-2.7.2]$ hadoop fs -get  /upload/hadoop-2.7.2.tar.gz  ./

4.3 集羣時間同步

時間同步的方式:在集羣中找一臺機器,作爲時間服務器,集羣中其他機器與這臺機器定時的同步時間,比如,每隔十分鐘,同步一次時間。

4.3.1 時間服務器配置(必須是root用戶)

1. 檢查ntp是否安裝,沒有安裝則使用  yum  install  ntp  -y   進行安裝

[root@hadoop101 桌面]# rpm -qa|grep ntp

ntp-4.2.6p5-10.el6.centos.x86_64

fontpackages-filesystem-1.41-1.1.el6.noarch

ntpdate-4.2.6p5-10.el6.centos.x86_64

2. 修改net配置文件

[root@hadoop101 桌面]# vim /etc/ntp.conf

修改內容如下

a)修改1(授權192.168.1.0網段上的所有機器可以從這臺機器上查詢和同步時間)

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap爲

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

b)修改2(集羣在局域網中,不使用其他的網絡時間)

server 0.centos.pool.ntp.org iburst

server 1.centos.pool.ntp.org iburst

server 2.centos.pool.ntp.org iburst

server 3.centos.pool.ntp.org iburst爲

#server 0.centos.pool.ntp.org iburst

#server 1.centos.pool.ntp.org iburst

#server 2.centos.pool.ntp.org iburst

#server 3.centos.pool.ntp.org iburst

c)添加3當該節點丟失網絡連接,依然可以作爲時間服務器爲集羣中的其他節點提供時間同步

server 127.127.1.0

fudge 127.127.1.0 stratum 10

3. 修改/etc/sysconfig/ntpd 文件

[root@hadoop101 桌面]# vim /etc/sysconfig/ntpd

增加內容如下(讓硬件時間與系統時間一起同步)

SYNC_HWCLOCK=yes

4. 重新啓動ntpd

[root@hadoop101 桌面]# service ntpd status

ntpd 已停

[root@hadoop101 桌面]# service ntpd start

正在啓動 ntpd:                                            [確定]

5. 執行:

[root@hadoop101 桌面]# chkconfig ntpd on

4.3.2 其他機器配置(root用戶)

1. 在其他機器配置10分鐘與時間服務器同步一次

[root@hadoop102 hadoop-2.7.2]# crontab -e

編寫腳本

*/10 * * * * /usr/sbin/ntpdate hadoop101

2. 修改任意機器時間

[root@hadoop102 root]# date -s "2017-9-11 11:11:11"

3. 十分鐘後查看機器是否與時間服務器同步

[root@hadoop102 root]# date

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章