大數據-01-hadoop-01-入門教程

一、搭建環境這裏不作闡述(jdk、hadoop)html

二、本地運行模式、僞分佈式運行模式、徹底分佈式運行模式三種模式,前兩種你們不用去看,直接看徹底分佈式運行模式java

集羣模式使用3臺機子,分別是hadoop10二、hadoop10三、hadoop104node

三、集羣主要配置web

(1)、核心配置文件vim

vim core-site.xml:指定HDFS中NameNode的地址,datanode目錄地址centos

(2)、HDFS配置文件瀏覽器

hadoop-env.sh:配置java環境變量安全

hdfs-site.xml:副本數,指定Hadoop輔助名稱節點主機配置bash

(3)、YARN配置文件服務器

yarn-env.sh:配置java環境變量

yarn-site.xml:日誌彙集功能使能、日誌保留時間設置多少天、Reducer獲取數據的方式、指定YARN的ResourceManager的地址

(4)、MapReduce配置文件

mapred-env.sh:配置java環境變量

mapred-site.xml:、歷史服務器端地址、歷史服務器web端地址、指定MR運行在Yarn上

說明:core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml四個配置文件存放在$HADOOP_HOME/etc/hadoop這個路徑上,用戶能夠根據項目需求從新進行修改配置,xxx.site.xml的配置文件優先級高於xxx.default.xml的配置文件的優先級,好比core-site.xml優先級高與core-default.xml,高優先級的覆蓋低優先級的配置文件

重要:總結了core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml四個文件企業級別集羣配置大全

參考地址:http://www.javashuo.com/article/p-bzdjlech-hq.html

徹底分佈式運行模式(開發重點

分析:

1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱

2)安裝JDK

3)配置環境變量

4)安裝Hadoop

5)配置環境變量

6)配置集羣

7)單點啓動

8)配置ssh

9)羣起並測試集羣

4.1 虛擬機準備

4.2 編寫集羣分發腳本xsync

1. scp(secure copy)安全拷貝

(1)scp定義:

scp能夠實現服務器與服務器之間的數據拷貝。(from server1 to server2)

(2)基本語法

scp    -r          $pdir/$fname              $user@hadoop$host:$pdir/$fname

命令   遞歸       要拷貝的文件路徑/名稱    目的用戶@主機:目的路徑/名稱

(3)案例實操

(a)在hadoop101上,將hadoop101中/opt/module目錄下的軟件拷貝到hadoop102上。

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

(b)在hadoop103上,將hadoop101服務器上的/opt/module目錄下的軟件拷貝到hadoop103上。

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

(c)在hadoop103上操做將hadoop101中/opt/module目錄下的軟件拷貝到hadoop104上。

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

注意:拷貝過來的/opt/module目錄別忘了在hadoop102hadoop103hadoop104修改全部文件的,全部者和全部者組sudo chown atguigu:atguigu -R /opt/module

(d)將hadoop101中/etc/profile文件拷貝到hadoop102的/etc/profile上。

[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile

(e)將hadoop101中/etc/profile文件拷貝到hadoop103的/etc/profile上。

[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile

(f)將hadoop101中/etc/profile文件拷貝到hadoop104的/etc/profile上。

[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop104:/etc/profile

注意:拷貝過來的配置文件別忘了source一下/etc/profile,

2.  rsync 遠程同步工具

rsync主要用於備份和鏡像。具備速度快、避免複製相同內容和支持符號連接的優勢。

rsync和scp區別:rsync作文件的複製要比scp的速度快,rsync只對差別文件作更新。scp是把全部文件都複製過去。

(1)基本語法

rsync    -rvl       $pdir/$fname              $user@hadoop$host:$pdir/$fname

命令   選項參數   要拷貝的文件路徑/名稱    目的用戶@主機:目的路徑/名稱

  選項參數說明

表2-2

選項

功能

-r

遞歸

-v

顯示覆制過程

-l

拷貝符號鏈接

(2)案例實操

(a)把hadoop101機器上的/opt/software目錄同步到hadoop102服務器的root用戶下的/opt/目錄

[atguigu@hadoop101 opt]$ rsync -rvl /opt/software/ root@hadoop102:/opt/software

3. xsync集羣分發腳本

(1)需求:循環複製文件到全部節點的相同目錄下

(2)需求分析:

(a)rsync命令原始拷貝:

rsync  -rvl     /opt/module    root@hadoop103:/opt/

(b)指望腳本:

xsync要同步的文件名稱

(c)說明:在/home/atguigu/bin這個目錄下存放的腳本,atguigu用戶能夠在系統任何地方直接執行。

(3)腳本實現

(a)在/home/atguigu目錄下建立bin目錄,並在bin目錄下xsync建立文件,文件內容以下:

[atguigu@hadoop102 ~]$ mkdir bin

[atguigu@hadoop102 ~]$ cd bin/

[atguigu@hadoop102 bin]$ touch xsync

[atguigu@hadoop102 bin]$ vi xsync

在該文件中編寫以下代碼

#!/bin/bash

#1 獲取輸入參數個數,若是沒有參數,直接退出

pcount=$#

if((pcount==0)); then

echo no args;

exit;

fi

 

#2 獲取文件名稱

p1=$1

fname=`basename $p1`

echo fname=$fname

 

#3 獲取上級目錄到絕對路徑

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

echo pdir=$pdir

 

#4 獲取當前用戶名稱

user=`whoami`

 

#5 循環

for((host=103; host<105; host++)); do

        echo ------------------- hadoop$host --------------

        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir

done

(b)修改腳本 xsync 具備執行權限

[atguigu@hadoop102 bin]$ chmod 777 xsync

(c)調用腳本形式:xsync 文件名稱

[atguigu@hadoop102 bin]$ xsync /home/atguigu/bin

注意:若是xsync放到/home/atguigu/bin目錄下仍然不能實現全局使用,能夠將xsync移動/usr/local/bin目錄下。

4.3 集羣配置

1. 集羣部署規劃

表2-3

 

hadoop102

hadoop103

hadoop104

HDFS

 

NameNode

DataNode

 

DataNode

SecondaryNameNode

DataNode

YARN

 

NodeManager

ResourceManager

NodeManager

 

NodeManager

2. 配置集羣

(1)核心配置文件

配置core-site.xml

[atguigu@hadoop102 hadoop]$ vi core-site.xml

在該文件中編寫以下配置

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

<property>

<name>fs.defaultFS</name>

      <value>hdfs://hadoop102:9000</value>

</property>

 

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

<property>

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

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

</property>

(2)HDFS配置文件

配置hadoop-env.sh

[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh

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

配置hdfs-site.xml

[atguigu@hadoop102 hadoop]$ vi hdfs-site.xml

在該文件中編寫以下配置

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

 

<!-- 指定Hadoop輔助名稱節點主機配置 -->

<property>

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

      <value>hadoop104:50090</value>

</property>

(3)YARN配置文件

配置yarn-env.sh

[atguigu@hadoop102 hadoop]$ vi yarn-env.sh

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

配置yarn-site.xml

[atguigu@hadoop102 hadoop]$ vi 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>hadoop103</value>

</property>

(4)MapReduce配置文件

配置mapred-env.sh

[atguigu@hadoop102 hadoop]$ vi mapred-env.sh

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

配置mapred-site.xml

[atguigu@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml

 

[atguigu@hadoop102 hadoop]$ vi mapred-site.xml

在該文件中增長以下配置

<!-- 指定MR運行在Yarn上 -->

<property>

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

<value>yarn</value>

</property>

3.在集羣上分發配置好的Hadoop配置文件

[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/

4.查看文件分發狀況

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

4.4 集羣單點啓動

(1)若是集羣是第一次啓動,須要格式化NameNode

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format

(2)在hadoop102上啓動NameNode

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode

[atguigu@hadoop102 hadoop-2.7.2]$ jps

3461 NameNode

(3)在hadoop10二、hadoop103以及hadoop104上分別啓動DataNode

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

[atguigu@hadoop102 hadoop-2.7.2]$ jps

3461 NameNode

3608 Jps

3561 DataNode

[atguigu@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

[atguigu@hadoop103 hadoop-2.7.2]$ jps

3190 DataNode

3279 Jps

[atguigu@hadoop104 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

[atguigu@hadoop104 hadoop-2.7.2]$ jps

3237 Jps

3163 DataNode

(4)思考:每次都一個一個節點啓動,若是節點數增長到1000個怎麼辦?

早上來了開始一個一個節點啓動,到晚上下班恰好完成,下班?

4.3.5 SSH無密登陸配置

1. 配置ssh

(1)基本語法

ssh另外一臺電腦的ip地址

(2)ssh鏈接時出現Host key verification failed的解決方法

[atguigu@hadoop102 opt] $ ssh 192.168.1.103

The authenticity of host '192.168.1.103 (192.168.1.103)' 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.

(3)解決方案以下:直接輸入yes

2. 無密鑰配置

(1)免密登陸原理,如圖2-40所示

圖2-40  免密登錄原理

(2)生成公鑰和私鑰:

[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa

而後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)

(3)將公鑰拷貝到要免密登陸的目標機器上

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104

注意

還須要在hadoop102採用root帳號,配置一下無密登陸到hadoop102hadoop103hadoop104

還須要在hadoop103採用atguigu帳號配置一下無密登陸到hadoop102hadoop103、hadoop104服務器上。

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

表2-4

known_hosts

記錄ssh訪問過計算機的公鑰(public key)

id_rsa

生成的私鑰

id_rsa.pub

生成的公鑰

authorized_keys

存放受權過得無密登陸服務器公鑰

4.5 羣起集羣

1. 配置slaves

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

[atguigu@hadoop102 hadoop]$ vi slaves

在該文件中增長以下內容:

hadoop102

hadoop103

hadoop104

注意:該文件中添加的內容結尾不容許有空格,文件中不容許有空行。

同步全部節點配置文件

[atguigu@hadoop102 hadoop]$ xsync slaves

2. 啓動集羣

(1)若是集羣是第一次啓動,須要格式化NameNode(注意格式化以前,必定要中止上次啓動的全部namenode和datanode進程,而後再刪除datalog數據

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format

2)啓動HDFS

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh

[atguigu@hadoop102 hadoop-2.7.2]$ jps

4166 NameNode

4482 Jps

4263 DataNode

[atguigu@hadoop103 hadoop-2.7.2]$ jps

3218 DataNode

3288 Jps

 

[atguigu@hadoop104 hadoop-2.7.2]$ jps

3221 DataNode

3283 SecondaryNameNode

3364 Jps

(3)啓動YARN

[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

注意:NameNode和ResourceManger若是不是同一臺機器,不能在NameNode上啓動 YARN,應該在ResouceManager所在的機器上啓動YARN。

(4)Web端查看SecondaryNameNode

(a)瀏覽器中輸入:http://hadoop104:50090/status.html

(b)查看SecondaryNameNode信息,如圖2-41所示。

 

圖2-41 SecondaryNameNode的Web端

3. 集羣基本測試

(1)上傳文件到集羣

  上傳小文件

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/atguigu/input

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/atguigu/input

  上傳大文件

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put

 /opt/software/hadoop-2.7.2.tar.gz  /user/atguigu/input

(2)上傳文件後查看文件存放在什麼位置

(a)查看HDFS文件存儲路徑

[atguigu@hadoop102 subdir0]$ pwd

/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

(b)查看HDFS在磁盤存儲文件內容

[atguigu@hadoop102 subdir0]$ cat blk_1073741825

hadoop yarn

hadoop mapreduce

atguigu

atguigu

(3)拼接

-rw-rw-r--. 1 atguigu atguigu 134217728 5月  23 16:01 blk_1073741836

-rw-rw-r--. 1 atguigu atguigu   1048583 5月  23 16:01 blk_1073741836_1012.meta

-rw-rw-r--. 1 atguigu atguigu  63439959 5月  23 16:01 blk_1073741837

-rw-rw-r--. 1 atguigu atguigu    495635 5月  23 16:01 blk_1073741837_1013.meta

[atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file

[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file

[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.file

(4)下載

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get

 /user/atguigu/input/hadoop-2.7.2.tar.gz ./

4.6 集羣啓動/中止方式總結

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

(1)分別啓動/中止HDFS組件

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

(2)啓動/中止YARN

yarn-daemon.sh  start / stop  resourcemanager / nodemanager

2. 各個模塊分開啓動/中止(配置ssh是前提)經常使用

(1)總體啓動/中止HDFS

start-dfs.sh   /  stop-dfs.sh

(2)總體啓動/中止YARN

start-yarn.sh  /  stop-yarn.sh

4.7 集羣時間同步

時間同步的方式:找一個機器,做爲時間服務器,全部的機器與這臺集羣時間進行定時的同步,好比,每隔十分鐘,同步一次時間。

 

配置時間同步具體實操:

1. 時間服務器配置(必須root用戶)

(1)檢查ntp是否安裝

[root@hadoop102 桌面]# 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)修改ntp配置文件

[root@hadoop102 桌面]# vi /etc/ntp.conf

修改內容以下

a)修改1(受權192.168.1.0-192.168.1.255網段上的全部機器能夠從這臺機器上查詢和同步時間)

#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@hadoop102 桌面]# vim /etc/sysconfig/ntpd

增長內容以下(讓硬件時間與系統時間一塊兒同步)

SYNC_HWCLOCK=yes

(4)從新啓動ntpd服務

[root@hadoop102 桌面]# service ntpd status

ntpd 已停

[root@hadoop102 桌面]# service ntpd start

正在啓動 ntpd:                                            [肯定]

(5)設置ntpd服務開機啓動

[root@hadoop102 桌面]# chkconfig ntpd on

2. 其餘機器配置(必須root用戶)

(1)在其餘機器配置10分鐘與時間服務器同步一次

[root@hadoop103桌面]# crontab -e

編寫定時任務以下:

*/10 * * * * /usr/sbin/ntpdate hadoop102

(2)修改任意機器時間

[root@hadoop103桌面]# date -s "2017-9-11 11:11:11"

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

[root@hadoop103桌面]# date

說明:測試的時候能夠將10分鐘調整爲1分鐘,節省時間。

相關文章
相關標籤/搜索