天天看點

好程式員大資料分享Hadoop2.X的環境配置與運作官方案例JAVA_HOME

一、安裝之前的準備

1.1 修改主機名稱

進入 Linux 系統檢視本機的主機名。通過 hostname 指令檢視。

[root@localhost ~]# hostname

localhost.localdomain

如果此時需要修改主機名則可以按照如下的方式進行修改

範例一:臨時修改主機名稱為Hadoop01 hostname hadoop01 重新開機之後失效

範例二:永久修改主機名稱為Hadoop01

vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=hadoop01

在修改完主機名稱之後,需要編輯/etc/hosts 檔案需要把主機名稱與IP位址進行映射

vi /etc/hosts 在該檔案下添加如下内容

192.168.1.128 hadoop01 # 位址是自己主機名稱的ip

1.2 關閉防火牆

1)service iptables stop 關閉防火牆

2)chkconfig iptables off 永久關閉防火牆啟動

3)chkconfig iptables --list 檢視防火牆開機啟動狀态

1.3 規劃軟體安裝目錄

1)建立安裝包的儲存目錄,以及安裝目錄

mkdir -p /opt/software 儲存軟體的安裝包

mkdir -p /opt/app 軟體的安裝路徑

1.4 建立Hadoop使用者,以及賦予sudo權限

1)建立Hadoop使用者,以後的操作都是在hadoop使用者下完成的

useradd hadoop 建立hadoop使用者

passwd hadoop 為hadoop使用者設定密碼

2)為hadoop使用者賦予sudo權限

在root使用者下,執行visudo指令編輯如下内容

Allow root to run any commands anywhere root ALL=(ALL) ALL

hadoop ALL=(ALL) ALL 為hadoop使用者設定sudo權限

Same thing without a password %wheel ALL=(ALL) NOPASSWD: ALL hadoop ALL=(ALL) NOPASSWD: ALL. 為hadoop使用者設定免密碼sudo權限

1.5 安裝JDK環境

首先先把jdk的安裝包上傳到software 檔案夾下,之後對其安裝

1)解壓 sudo tar -zvxf jdk-8u181-linux-x64.tar.gz

2)配置JDK環境變量

首先擷取JDK的安裝路徑

[hadoop@hadoop01 jdk1.8.0_181]$ pwd

/opt/soft/jdk1.8.0_181

接下來打開 /etc/profile 檔案進行環境變量的設定

vi /etc/profile

在 profie 檔案末尾添加 jdk 路徑:

JAVA_HOME

export JAVA_HOME=/data/jdk1.8.0_181

export PATH=$JAVA_HOME/bin:$PATH

儲存後推出 :wq

完成以上的操作之後,配置檔案并不能立即生效,需要使用到如下指令,使配置檔案立即生效

[hadoop@hadoop01 jdk1.8.0_181]$ source /etc/profile

之後測試JDK環境變量是否配置成功,使用如下指令輸出JDK的版本資訊

[hadoop@hadoop01 jdk1.8.0_181]$ java -version

java version "1.8.0_181"

Java(TM) SE Runtime Environment (build 1.8.0_181-b13)

Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

如果能看到如上的資訊,說明JDK的環境變量已經配置成功

1.6 安裝Hadoop環境

1)進入到軟體包的安裝路徑下:

[hadoop@hadoop01 /]$ cd /opt/soft/

對hadoop安裝包進行解壓

[hadoop@hadoop01 soft]$ sudo tar -zvxf hadoop-2.7.2.tar.gz

解壓成功之後,hadoop的安裝目錄結構如下:

bin:Hadoop最基本的管理腳本和使用腳本所在目錄,這些腳本是sbin目錄下管理腳本的基礎實作,使用者可以直接使用這些腳本管理和使用hadoop

etc:Hadoop配置檔案所在目錄,包括core-site.xml, hdfs-site.xml, mapred-site.xml等從hadoop1.0繼承而來的配置檔案和yarn-site.xml等hadoop 2.0新增的配置檔案

include:對外提供的程式設計酷頭檔案(具體動态庫和靜态庫在lib目錄中),這些頭檔案均是用c++定義的,通常用于c++程式通路hdfs或者編寫mapreduce程式

lib:該目錄包含了Hadoop對外提供的的程式設計動态庫和靜态庫,與include目錄中的頭檔案結合使用。

libexec:各個服務對應的shell配置檔案所在目錄,可用于配置日志輸出目錄,啟動參數(比如JVM參數)等基本資訊。

sbin:Hadoop管理腳本所在目錄,主要包含HDFS和YARN中各類服務的啟動/關閉腳本

share:Hadoop各個子產品編譯後的jar包所在目錄

2) 配置hadoop環境

hadoop需要我們配置的相關檔案都存放在$HADOOP_HOME/etc/hadoop目錄下面,首先進入到該目錄

[hadoop@hadoop01 hadoop]$ cd etc/hadoop/

進入到該目錄之後使用ls 指令檢視該目錄下的檔案資訊

-rw-r--r--. 1 root root 4436 May 22 2017 capacity-scheduler.xml

-rw-r--r--. 1 root root 1335 May 22 2017 configuration.xsl

-rw-r--r--. 1 root root 318 May 22 2017 container-executor.cfg

-rw-r--r--. 1 root root 774 May 22 2017 core-site.xml

-rw-r--r--. 1 root root 3670 May 22 2017 hadoop-env.cmd

-rw-r--r--. 1 root root 4224 May 22 2017 hadoop-env.sh

-rw-r--r--. 1 root root 2598 May 22 2017 hadoop-metrics2.properties

-rw-r--r--. 1 root root 2490 May 22 2017 hadoop-metrics.properties

-rw-r--r--. 1 root root 9683 May 22 2017 hadoop-policy.xml

-rw-r--r--. 1 root root 775 May 22 2017 hdfs-site.xml

-rw-r--r--. 1 root root 1449 May 22 2017 httpfs-env.sh

-rw-r--r--. 1 root root 1657 May 22 2017 httpfs-log4j.properties

-rw-r--r--. 1 root root 21 May 22 2017 httpfs-signature.secret

-rw-r--r--. 1 root root 620 May 22 2017 httpfs-site.xml

-rw-r--r--. 1 root root 3518 May 22 2017 kms-acls.xml

-rw-r--r--. 1 root root 1527 May 22 2017 kms-env.sh

-rw-r--r--. 1 root root 1631 May 22 2017 kms-log4j.properties

-rw-r--r--. 1 root root 5511 May 22 2017 kms-site.xml

-rw-r--r--. 1 root root 11237 May 22 2017 log4j.properties

-rw-r--r--. 1 root root 951 May 22 2017 mapred-env.cmd

-rw-r--r--. 1 root root 1383 May 22 2017 mapred-env.sh

-rw-r--r--. 1 root root 4113 May 22 2017 mapred-queues.xml.template

-rw-r--r--. 1 root root 758 May 22 2017 mapred-site.xml.template

-rw-r--r--. 1 root root 10 May 22 2017 slaves

-rw-r--r--. 1 root root 2316 May 22 2017 ssl-client.xml.example

-rw-r--r--. 1 root root 2268 May 22 2017 ssl-server.xml.example

-rw-r--r--. 1 root root 2250 May 22 2017 yarn-env.cmd

-rw-r--r--. 1 root root 4567 May 22 2017 yarn-env.sh

-rw-r--r--. 1 root root 690 May 22 2017 yarn-site.xml

我們首先可以發現,這些檔案目前的權限都是基于root使用者的,但是我們現在使用的是hadoop使用者,hadoop使用者并沒有這些檔案的權限,是以首先需要修改權限

使用chown 指令修改使用者與使用者組權限

sudo chown -R hadoop:hadoop /opt/soft/hadoop-2.7.2/

修改完成之後再次使用ls指令檢視檔案,檢視是否修改成功 [hadoop@hadoop01 hadoop]$ ll

-rw-r--r--. 1 hadoop hadoop 4436 May 22 2017 capacity-scheduler.xml

-rw-r--r--. 1 hadoop hadoop 1335 May 22 2017 configuration.xsl

-rw-r--r--. 1 hadoop hadoop 318 May 22 2017 container-executor.cfg

-rw-r--r--. 1 hadoop hadoop 774 May 22 2017 core-site.xml

-rw-r--r--. 1 hadoop hadoop 3670 May 22 2017 hadoop-env.cmd

-rw-r--r--. 1 hadoop hadoop 4224 May 22 2017 hadoop-env.sh

-rw-r--r--. 1 hadoop hadoop 2598 May 22 2017 hadoop-metrics2.properties

-rw-r--r--. 1 hadoop hadoop 2490 May 22 2017 hadoop-metrics.properties

-rw-r--r--. 1 hadoop hadoop 9683 May 22 2017 hadoop-policy.xml

-rw-r--r--. 1 hadoop hadoop 775 May 22 2017 hdfs-site.xml

-rw-r--r--. 1 hadoop hadoop 1449 May 22 2017 httpfs-env.sh

-rw-r--r--. 1 hadoop hadoop 1657 May 22 2017 httpfs-log4j.properties

-rw-r--r--. 1 hadoop hadoop 21 May 22 2017 httpfs-signature.secret

-rw-r--r--. 1 hadoop hadoop 620 May 22 2017 httpfs-site.xml

-rw-r--r--. 1 hadoop hadoop 3518 May 22 2017 kms-acls.xml

-rw-r--r--. 1 hadoop hadoop 1527 May 22 2017 kms-env.sh

-rw-r--r--. 1 hadoop hadoop 1631 May 22 2017 kms-log4j.properties

-rw-r--r--. 1 hadoop hadoop 5511 May 22 2017 kms-site.xml

-rw-r--r--. 1 hadoop hadoop 11237 May 22 2017 log4j.properties

-rw-r--r--. 1 hadoop hadoop 951 May 22 2017 mapred-env.cmd

-rw-r--r--. 1 hadoop hadoop 1383 May 22 2017 mapred-env.sh

-rw-r--r--. 1 hadoop hadoop 4113 May 22 2017 mapred-queues.xml.template

-rw-r--r--. 1 hadoop hadoop 758 May 22 2017 mapred-site.xml.template

-rw-r--r--. 1 hadoop hadoop 10 May 22 2017 slaves

-rw-r--r--. 1 hadoop hadoop 2316 May 22 2017 ssl-client.xml.example

-rw-r--r--. 1 hadoop hadoop 2268 May 22 2017 ssl-server.xml.example

-rw-r--r--. 1 hadoop hadoop 2250 May 22 2017 yarn-env.cmd

-rw-r--r--. 1 hadoop hadoop 4567 May 22 2017 yarn-env.sh

-rw-r--r--. 1 hadoop hadoop 690 May 22 2017 yarn-site.xml

通過再次檢視我們發現,現在的權限已經全部修改為hadoop ,這樣我們就可以在hadoop使用者下對這些檔案進行操作了

完成了以上的配置之後,我們接下來首先需要配置如下檔案

hadoop-env.sh: 用于hadoop的環境變量配置檔案

#The java implementation to use.

export JAVA_HOME=/opt/soft/jdk1.8.0_181

在該配置檔案中,找到如上内容,并且修改JAVA_HOME 為自己的JDK路徑 配置完成之後,可以在hadoop根路徑下,輸入如下指令

bin/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 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 copy file or directories recursively

archive -archiveName NAME -p * 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.

如果能看到如上的資訊,說明基本的運作環境已經搭建完成了

二、Hadoop運作模式

Hadoop的運作模式,分為以下幾種:

1) 本地模式(預設模式)

不需要啟用單獨程序,直接可以運作,測試和開發時使用。

2)僞分布模式

等同于完全分布式,隻有一個節點。

3)完全分布式模式

多個節點一起運作。

2.1 本地運作Hadoop官方案例Grep

對于這個案例來說,主要的作用就是,在一堆檔案中與規定的正規表達式進行比對,把比對成功的單詞出現的次數,進行統計

$ mkdir input

$ cp etc/hadoop/*.xml input

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'

$ cat output/*

以上為官網上給出的案例代碼

從以上的案例代碼可以得出,首先需要建立一個目錄,用于存放需要統計的檔案,而對于統計結果的儲存目錄則不用以前建立,注意:Hadoop中輸出結果的目錄是不能提前存在的

範例:運作grep案例

1)在hadoop根目錄下建立一個檔案夾input

[hadoop@hadoop01 hadoop-2.7.2]$ mkdir input

2) 将hadoop的xml配置檔案複制到input

[hadoop@hadoop01 hadoop-2.7.2]$ cp etc/hadoop/*.xml input/

3) 執行share目錄下的mapreduce程式

[hadoop@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'

4) 檢視輸出結果

[hadoop@hadoop01 hadoop-2.7.2]$ cat output/*

1 dfsadmin

2.2 運作官方wordcount案例

1) 在hadoop根目錄中建立用于儲存統計檔案的wcinput目錄

[hadoop@hadoop01 hadoop-2.7.2]$ mkdir wcinput

2) 在 wcinput 檔案下建立一個 wordcount.txt 檔案

[hadoop@hadoop01 wcinput]$ vi worldcount.txt

hello java world input

hadoop hive zookeeper java

world input hello hadoop

hbase zookeeper sqoop

3) 執行wordcount案例程式

[hadoop@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput

4) 檢視結果

[hadoop@hadoop01 hadoop-2.7.2]$ cat wcoutput/part-r-00000

hadoop 2

hbase 1

hello 2

hive 1

input 2

java 2

sqoop 1

world 2

zookeeper 2

通過以上的方式,就可以完成Hadoop的最基本的環境搭建,以及運作Hadoop的一些案例