1. 程式人生 > >Hadoop部署(三)——CentOS 7部署Hadoop(單機版)

Hadoop部署(三)——CentOS 7部署Hadoop(單機版)

測試環境

Linux系統版本:CentOS 7 64位

Hadoop部署方式介紹

Hadoop部署方式分三種:Standalone Mode(單機模式)、Pseudo-Distributed Mode(偽分散式模式)、Fully Distributed Mode(全分散式模式)

單機模式:

單機模式是Hadoop的預設模式。這種模式在一臺單機上執行,沒有分散式檔案系統,而是直接讀寫本地作業系統的檔案系統。當首次解壓Hadoop的原始碼包時,Hadoop無法瞭解硬體安裝環境,便保守地選擇了最小配置。在這種預設模式下所有3個XML檔案均為空。當配置檔案為空時,Hadoop會完全執行在本地。因為不需要與其他節點互動,單機模式就不使用HDFS,也不載入任何Hadoop的守護程序。該模式主要用於開發除錯MapReduce程式的應用邏輯。

偽分佈模式:

這種模式也是在一臺單機上執行,但用不同的Java程序模仿分散式執行中的各類結點偽分佈模式在“單節點叢集”上執行Hadoop,其中所有的守護程序都執行在同一臺機器上。該模式在單機模式之上增加了程式碼除錯功能,允許你檢查記憶體使用情況,HDFS輸入輸出,以及其他的守護程序。

全分佈模式:      Hadoop守護程序執行在一個叢集上。

準備工作

Hadoop是使用JAVA寫的,所以需要先安裝JAVA環境,還未安裝Linux系統、配置Java環境變數的參照如下方法:

Hadoop單機版安裝

本文的程式碼框解釋:#後面的為執行程式碼,[]內root為登入使用者,@後master100表示主機名,~代表當前目錄,按下面步驟執行時要注意自己這些資訊和我的是不是一樣的

1、下載Hadoop2.7.3

https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/

2、用root賬戶登入,建立hadoop使用者和hadoop使用者組,建立使用者的時候會自動建立相應的使用者組

[[email protected] ~]# useradd hadoop

3、建立完使用者之後設定一個使用者密碼,有些密碼太簡單會提示無效的密碼,提示重新輸入時再輸一遍就可以強制儲存了

[[email protected] ~]# passwd hadoop
更改使用者 hadoop 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字元
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。

4、為hadoop使用者新增sudo許可權

[[email protected] ~]# vi /etc/sudoers

如下,在root使用者下面一行加上hadoop  ALL=(ALL)       ALL,儲存並退出(這裡需要用wq!強制儲存退出)

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
hadoop  ALL=(ALL)       ALL

5、上傳第1步下載好的hadoop-2.7.3.tar.gz 包到Linux系統中的/usr/local目錄下

sftp:/root> cd /usr/local
sftp:/usr/local> 
Uploading hadoop-2.7.3.tar.gz to remote:/usr/local/hadoop-2.7.3.tar.gz
sftp: sent 204 MB in 9.38 seconds

6、進入/usr/local目錄,解壓上傳的hadoop安裝包

[[email protected] ~]# cd /usr/local
[[email protected] local]# tar -zxvf /usr/local/hadoop-2.7.3.tar.gz

7、解壓完成後可以看到資料夾hadoop-2.7.3,將資料夾名改為hadoop,如果不在/usr/local目錄下,命令使用時請加上資料夾的絕對路徑

[[email protected] local]# ll
總用量 556412
drwxr-xr-x. 2 root root         6 4月  11 12:59 bin
drwxr-xr-x. 2 root root         6 4月  11 12:59 etc
drwxr-xr-x. 2 root root         6 4月  11 12:59 games
drwxr-xr-x. 9 root root       149 8月  18 2016 hadoop-2.7.3
-rw-r--r--. 1 root root 214092195 10月  3 11:43 hadoop-2.7.3.tar.gz
drwxr-xr-x. 2 root root         6 4月  11 12:59 include
-rwxr-xr-x. 1 root root 170023183 10月  2 17:28 jdk-8u181-linux-x64.rpm
-rw-r--r--. 1 root root 185646832 10月  2 16:31 jdk-8u181-linux-x64.tar.gz
drwxr-xr-x. 2 root root         6 4月  11 12:59 lib
drwxr-xr-x. 2 root root         6 4月  11 12:59 lib64
drwxr-xr-x. 2 root root         6 4月  11 12:59 libexec
drwxr-xr-x. 2 root root         6 4月  11 12:59 sbin
drwxr-xr-x. 5 root root        49 10月  2 13:00 share
drwxr-xr-x. 2 root root         6 4月  11 12:59 src
[[email protected] local]# mv hadoop-2.7.3 hadoop
[[email protected] local]# ll
總用量 556412
drwxr-xr-x. 2 root root         6 4月  11 12:59 bin
drwxr-xr-x. 2 root root         6 4月  11 12:59 etc
drwxr-xr-x. 2 root root         6 4月  11 12:59 games
drwxr-xr-x. 9 root root       149 8月  18 2016 hadoop
-rw-r--r--. 1 root root 214092195 10月  3 11:43 hadoop-2.7.3.tar.gz
drwxr-xr-x. 2 root root         6 4月  11 12:59 include
-rwxr-xr-x. 1 root root 170023183 10月  2 17:28 jdk-8u181-linux-x64.rpm
-rw-r--r--. 1 root root 185646832 10月  2 16:31 jdk-8u181-linux-x64.tar.gz
drwxr-xr-x. 2 root root         6 4月  11 12:59 lib
drwxr-xr-x. 2 root root         6 4月  11 12:59 lib64
drwxr-xr-x. 2 root root         6 4月  11 12:59 libexec
drwxr-xr-x. 2 root root         6 4月  11 12:59 sbin
drwxr-xr-x. 5 root root        49 10月  2 13:00 share
drwxr-xr-x. 2 root root         6 4月  11 12:59 src

8、將hadoop資料夾的主:組設定成hadoop

[[email protected] local]# chown -R hadoop:hadoop hadoop
[[email protected] local]# ll
總用量 556412
drwxr-xr-x. 2 root   root           6 4月  11 12:59 bin
drwxr-xr-x. 2 root   root           6 4月  11 12:59 etc
drwxr-xr-x. 2 root   root           6 4月  11 12:59 games
drwxr-xr-x. 9 hadoop hadoop       149 8月  18 2016 hadoop
-rw-r--r--. 1 root   root   214092195 10月  3 11:43 hadoop-2.7.3.tar.gz
drwxr-xr-x. 2 root   root           6 4月  11 12:59 include
-rwxr-xr-x. 1 root   root   170023183 10月  2 17:28 jdk-8u181-linux-x64.rpm
-rw-r--r--. 1 root   root   185646832 10月  2 16:31 jdk-8u181-linux-x64.tar.gz
drwxr-xr-x. 2 root   root           6 4月  11 12:59 lib
drwxr-xr-x. 2 root   root           6 4月  11 12:59 lib64
drwxr-xr-x. 2 root   root           6 4月  11 12:59 libexec
drwxr-xr-x. 2 root   root           6 4月  11 12:59 sbin
drwxr-xr-x. 5 root   root          49 10月  2 13:00 share
drwxr-xr-x. 2 root   root           6 4月  11 12:59 src

9、/usr目錄與/usr/local目錄所屬主:組均為root,預設許可權為755,也就是說其他使用者(hadoop)沒有寫入(w)許可權,在這裡我們需要將這兩個目錄其他使用者的許可權設定為7,命令如下:

chmod 757 /usr
chmod 757 /usr/local

可以看到執行情況如下: 

[[email protected] local]# cd /
[[email protected] /]# chmod 757 /usr
[[email protected] /]# ll
總用量 16
lrwxrwxrwx.   1 root root    7 10月  2 13:00 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 10月  2 13:06 boot
drwxr-xr-x.  20 root root 3240 10月  3 11:47 dev
drwxr-xr-x.  76 root root 8192 10月  3 11:47 etc
drwxr-xr-x.   3 root root   20 10月  3 10:58 home
lrwxrwxrwx.   1 root root    7 10月  2 13:00 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 10月  2 13:00 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 4月  11 12:59 media
drwxr-xr-x.   2 root root    6 4月  11 12:59 mnt
drwxr-xr-x.   2 root root    6 4月  11 12:59 opt
dr-xr-xr-x. 133 root root    0 10月  3 11:46 proc
dr-xr-x---.   3 root root  160 10月  3 11:50 root
drwxr-xr-x.  24 root root  720 10月  3 11:47 run
lrwxrwxrwx.   1 root root    8 10月  2 13:00 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 4月  11 12:59 srv
dr-xr-xr-x.  13 root root    0 10月  3 11:47 sys
drwxrwxrwt.  10 root root  253 10月  3 11:47 tmp
drwxr-xrwx.  14 root root  167 10月  2 17:57 usr
drwxr-xr-x.  19 root root  267 10月  2 13:08 var
[[email protected] /]# chmod 757 /usr/local
[[email protected] /]# cd /usr
[[email protected] usr]# ll
總用量 104
dr-xr-xr-x.  2 root root 24576 10月  2 17:57 bin
drwxr-xr-x.  2 root root     6 4月  11 12:59 etc
drwxr-xr-x.  2 root root     6 4月  11 12:59 games
drwxr-xr-x.  3 root root    23 10月  2 13:01 include
drwxr-xr-x.  3 root root    61 10月  2 17:57 java
dr-xr-xr-x. 27 root root  4096 10月  2 13:02 lib
dr-xr-xr-x. 37 root root 20480 10月  2 13:02 lib64
drwxr-xr-x. 20 root root  4096 10月  2 13:02 libexec
drwxr-xrwx. 13 root root   237 10月  3 11:55 local
dr-xr-xr-x.  2 root root 12288 10月  2 13:02 sbin
drwxr-xr-x. 75 root root  4096 10月  2 13:02 share
drwxr-xr-x.  4 root root    34 10月  2 13:00 src
lrwxrwxrwx.  1 root root    10 10月  2 13:00 tmp -> ../var/tmp

Hadoop環境變數配置

1、編輯/etc/profile檔案

vi /etc/profile

2、在末尾加上如下幾行

export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

這裡注意HADOOP_HOME與PATH的順序,我這裡最後幾行的配置如下:

export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
export HADOOP_HOME=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=$JAVA_HOME/jre

3、配置完環境變數之後儲存退出,讓環境變數立即生效

source /etc/profile

測試

環境變數測試

輸入如下命令:

hadoop
hadoop version

效果如下: 

[[email protected] usr]# hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME            run the class named CLASSNAME
 or
  where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar <jar>            run a jar file
                       note: please use "yarn jar" to launch
                             YARN applications, not this command.
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon
  trace                view and modify Hadoop tracing settings

Most commands print help when invoked w/o parameters.
[[email protected] usr]# 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/share/hadoop/common/hadoop-common-2.7.3.jar

演示Hadoop自帶的MapReduce例子

在這裡用hadoop賬戶登入系統進行測試

Xshell 6 (Build 0095)
Copyright (c) 2002 NetSarang Computer, Inc. All rights reserved.

Type `help' to learn how to use Xshell prompt.
[C:\~]$ 

Connecting to 192.168.33.100:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Wed Oct  3 11:25:59 2018
[[email protected] ~]$ 

Hadoop 預設模式為非分散式模式,無需進行其他配置即可執行。非分散式即單 Java 程序,方便進行除錯。   Hadoop 附帶了豐富的例子(執行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。在此我們選擇執行 grep 例子,我們將 input 資料夾中的所有檔案作為輸入,篩選當中符合正則表示式 dfs[a-z.]+ 的單詞並統計出現的次數,最後輸出結果到 output 資料夾中。

[[email protected] ~]$ cd /usr/local/hadoop

[[email protected] hadoop]$ ll
總用量 108
drwxr-xr-x. 2 hadoop hadoop   194 8月  18 2016 bin
drwxr-xr-x. 3 hadoop hadoop    20 8月  18 2016 etc
drwxr-xr-x. 2 hadoop hadoop   106 8月  18 2016 include
drwxr-xr-x. 3 hadoop hadoop    20 8月  18 2016 lib
drwxr-xr-x. 2 hadoop hadoop   239 8月  18 2016 libexec
-rw-r--r--. 1 hadoop hadoop 84854 8月  18 2016 LICENSE.txt
-rw-r--r--. 1 hadoop hadoop 14978 8月  18 2016 NOTICE.txt
-rw-r--r--. 1 hadoop hadoop  1366 8月  18 2016 README.txt
drwxr-xr-x. 2 hadoop hadoop  4096 8月  18 2016 sbin
drwxr-xr-x. 4 hadoop hadoop    31 8月  18 2016 share

[[email protected] hadoop]$ mkdir ./input

# 將配置檔案作為輸入檔案
[[email protected] hadoop]$ cp ./etc/hadoop/* ./input

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

...........

#檢視執行結果
[[email protected] hadoop]$ cat ./output/*
6	dfs.audit.logger
4	dfs.class
3	dfs.server.namenode.
2	dfs.period
2	dfs.audit.log.maxfilesize
2	dfs.audit.log.maxbackupindex
1	dfsmetrics.log
1	dfsadmin
1	dfs.servers
1	dfs.file

更多的MapReduce例子在這裡就不一一測試了,有興趣的可以自己去測試