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例子在這裡就不一一測試了,有興趣的可以自己去測試