Hadoop的安裝(2)---Hadoop配置


一:安裝JDK

hadoop2.x最低jdk版本要求是:jdk1.7(不過推薦用最新的:jdk1.8,因為jdk是兼容舊版本的,而且我們使用的其他軟件可能要求的jdk版本較高

下載地址:https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u80-oth-JPR

注意:版本選取需要同操作系統一致

(一)創建App文件夾

用於存放Hadoop用戶安裝的各種應用

(二)將jdk解壓自App文件夾中

先進入jdk所在文件夾目錄下

 tar -zxvf jdk-7u80-linux-x64.tar.gz -C ~/App/

(三)進行測試使用

cd ~/App/jdk1.7.0_80/bin
./java -version

二:將應用bin和sbin目錄加入環境變量中

編輯/etc/profile文件

sudo vi /etc/profile

添加下面代碼:將java和Hadoop中bin目錄加入環境變量

export JAVA_HOME=/home/hadoop/App/jdk1.7.0_80
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export HADOOP_HOME=/home/hadoop/App/hadoop-2.7.1
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH

使用source /etc/profile保存配置文件

source /etc/profile

三:安裝Hadoop

(一)解壓Hadoop

tar -zvxf hadoop-2.7.1_64bit.tar.gz -C ~/App/

(二)目錄講解

1.bin目錄---存放對Hadoop相關服務(HDFS,YARN)進行操作的腳本

bin: 存放的是我們用來實現管理腳本和使用的腳本的目錄,我們對hadoop文件系統操作的時候用的就是這個目錄下的腳本

常用的命令腳本(我們忽略.cmd的文件這是windows下的使用的文件):hdfs hadoop yarn 來執行對文件操作
其中hadoop文件用於執行hadoop腳本命令,被hadoop-daemon.sh調用執行,也可以單獨執行,一切命令的核心

2.etc目錄---Hadoop的配置文件目錄,存放Hadoop的配置文件

etc:存放一些hadoop的配置文件
cd ./hadoop/

  (1)core-site.xml:    Hadoop全局配置文件

Hadoop核心全局配置文件,可以其他配置文件中引用該文件中定義的屬性,如在hdfs-site.xml及mapred-site.xml中會引用該文件的屬性;
該文件的模板文件存在於$HADOOP_HOME/src/core/core-default.xml,可將模板文件復制到conf目錄,再進行修改。

  (2)hadoop-env.sh    Hadoop環境變量配置文件

Hadoop環境變量

  (3)hdfs-site.xml    HDFS的核心配置文件

HDFS配置文件,該模板的屬性繼承於core-site.xml;該文件的模板文件存於$HADOOP_HOME/src/hdfs/hdfs-default.xml,可將模板文件復制到conf目錄,再進行修改

  (4)yarn-site.xml    yarn的核心配置文件

yarn的配置文件,該模板的屬性繼承於core-site.xml;該文件的模板文件存於$HADOOP_HOME/src/mapred/mapredd-default.xml,
可將模板文件復制到conf目錄,再進行修改

  (5)slaves    用於設置所有的slave的名稱或IP,每行存放一個

用於設置所有的slave的名稱或IP,每行存放一個。如果是名稱,那么設置的slave名稱必須在/etc/hosts有IP映射配置

  (6)mapred-site.xml   MapReduce的核心配置文件,模板文件mapred-site.xml.template

3.include目錄

include:對外提供的編程庫頭文件(具體動態庫和靜態庫在lib目錄中),這些頭文件均是用C++定義的,通常用於C++程序訪問HDFS或者編寫MapReduce程序。

4.lib目錄---存放Hadoop的本地庫(對數據進行壓縮解壓縮功能)

lib:該目錄下存放的是Hadoop運行時依賴的jar包,Hadoop在執行時會把lib目錄下面的jar全部加到classpath中。

5.libexec目錄

libexec:各個服務對用的shell配置文件所在的目錄,可用於配置日志輸出、啟動參數(比如JVM參數)等基本信息。

6.sbin目錄---存放啟動或停止Hadoop相關服務的腳本

sbin: 存放的是我們管理腳本的所在目錄,重要是對hdfs和yarn的各種開啟和關閉和單線程開啟和守護

  start-dfs.sh

啟動NameNode、DataNode以及SecondaryNameNode

  start-yarn.sh 

啟動ResourceManager以及NodeManager

  stop-dfs.sh 

停止NameNode、DataNode以及SecondaryNameNode

  stop-yarn.sh

停止ResourceManager以及NodeManager

  start-all.sh 

相當於執行 start-dfs.sh 及 start-yarn.sh

  stop-all.sh 

相當於執行 stop-dfs.sh 及 stop-yarn.sh

  hadoop-daemon.sh 

通過執行hadoop命令來啟動/停止一個守護進程(daemon);
該命令會被bin目錄下面所有以start或stop開頭的所有命令調用來執行命令;
hadoop-daemons.sh也是通過調用hadoop-daemon.sh來執行命令;
hadoop-daemon.sh本身就是通過調用hadoop命令來執行任務。

7.share目錄---存放Hadoop的依賴jar包、文檔(可刪除)、和官方案例

Hadoop各個模塊編譯后的jar包所在的目錄。開發程序需要從此引入jar包

 

(三)配置安裝Hadoop

1.修改etc/hadoop/下配置文件(linux下不需要修改cmd文件)

(1)hadoop-env.sh文件修改:修改java_home(寫死)

vi hadoop-env.sh 

echo $JAVA_HOME獲取完整環境變量:/home/hadoop/App/jdk1.7.0_80

Hadoop啟動時,需要讀取,*-site.xml文件,都需要修改

(2)修改core-site.xml文件

vi core-site.xml
fs.defaultFS:默認采用的文件系統---指定namenode(主節點)的地址
我們需要修改他,因為Hadoop各組件組件是松耦合聯系,而文件系統可以是本地文件系統,如linux ext等,也可以是HDFS,....。
所以我們需要指定一個專門的文件系統,為HDFS
value值必須為URI類型:例如HDFS URI: hdfs://主節點名稱:端口號/  其中端口默認9000
<property> <name>fs.defaultFS</name> <value>hdfs://hadoopH1:9000</value> </property>
hadoop.tmp.dir:Hadoop公共目錄,用來指定使用hadoop時產生文件的存放目錄(如果可以,應該是磁盤掛載點,方便擴容)
<property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/App/hadoop-2.7.1/data/tmp/</value>    這里我們指定存放在hadoop根目錄下的data文件夾下 </property>

(3)修改hdfs-site.xml文件 

 <property> <name>dfs.replication</name> <value>1</value>         偽分布指定一個即可 </property>  

也可以指定切塊大小,默認128M(太小了,效率會降低)

注:因為每個分塊,都會占用NameNode的一條記錄,如果分塊太小,則會產生大量記錄,占據NameNode空間,使得實際DataNode集群可存放數據大小降低!!!

dfs.namenode.name.dir:指定hdfs中namenode的存儲位置 dfs.datanode.data.dir:指定hdfs中datanode的存儲位置
Hadoop hdfs有NameNode和DataNode兩種節點(兩種不同進程),DataNode進程負責管理我們傳送的文件塊,存放在linux文件目錄下, 同樣NameNode也需要文件目錄存放數據,我們可以分別指定,
 <!--指定hdfs中namenode的存儲位置--> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/App/hadoop-2.7.1/data/name</value> </property> <!--指定hdfs中datanode的存儲位置--> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/App/hadoop-2.7.1/data/data</value> </property>

4.修改mapred-site.xml文件

先將mapred-site.xml.template(Hadoop不可讀)變為mapred-site.xml文件(Hadoop可讀)

mv mapred-site.xml.template mapred-site.xml
mapreduce.framework.name:指定mapreduce程序應該放入哪一個資源調度集群上使用,否則在本地運行,而不是在集群中使用
        <!--告訴hadoop以后MR(Map/Reduce)運行在YARN上-->
 <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>

5.修改yarn-site.xml文件

yarn.resourcemanager.hostname:指定Yarn主節點ResourceManager地址 yarn.nodemanager.aux-services:指定nodeManager節點獲取數據的方式 yarn.log-aggregation-enable:是否開啟工作日志
 <!--nomenodeManager獲取數據的方式是shuffle--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--指定Yarn的老大(ResourceManager)的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoopH1</value> </property> <!--Yarn打印工作日志--> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property>

 

(四)開啟Hadoop

1.關閉防火牆(Hadoop一般在內網使用,所以關掉影響不大)

sudo firewall-cmd --state    查看防火牆狀態
systemctl stop firewalld.service            #停止firewall
systemctl disable firewalld.service        #禁止firewall開機啟動

2.初始化hdfs文件系統

hadoop namenode -format

可以看到,格式化namenode之后,會在我們指定的配置項所指目錄中,生成一些文件

其中fsimage是元數據,.md5是校驗文件
而整個文件系統命名空間(包括塊到文件和文件系統屬性的映射)存儲在名為 FsImage 的文件中。 
FsImage 也作為文件存儲在 NameNode 的本地文件系統中。

3.啟動Hadoop

 進入sbin目錄(存放系統啟動腳本)

cd ~/App/hadoop-2.7.1/sbin/

(1)先啟動hdfs

start-dfs.sh

需要選擇是否連接主機,並且每啟動一次進程,需要輸入一次密碼!!!

注意:我們在core-site.xml中只配置了NameNode,並沒有配置DataNode。但是為什么依舊啟動了DataNode??

0.0.0.0廣播地址,用於查看集群中有幾台機器。

查看進程:jps,用於檢查hdfs是否啟動成功

hdfs正常運行,需要上面3種進程

NameNode只有一個,DataNode則有多個,DataNode設置需要在配置文件

查看slave文件內容:

內容為localhost,故在本機中啟動DataNode。我們可以設置多個集群節點,設置主機名即可

(2)啟動yarn

start-yarn.sh

我們本機為主節點,直接開啟resourcenamager,不需要輸入密碼。而nodemanager需要在其他主機中啟動,故需要輸入密碼才可以啟動nodemanager進程

故:啟動集群,並不需要到每台機器中啟動。只需要配置slave文件后。便可在一台機器中啟動所有節點。

四:測試Hadoop

(一).測試Hadoop web服務

修改windows主機hosts文件 

添加映射:

使用網頁訪問Hadoop:

http://hadooph1:50070  注意:https可能無法訪問

(二)測試hdfs

1.上傳文件到hdfs文件系統中

hadoop fs -put jdk-7u80-linux-x64.tar.gz hdfs://hadoopH1:9000/    上傳到hdfs文件系統根目錄下

2.查看hdfs文件系統中文件

 (1)在web中查看,可進行下載

 (2)使用命令行下載文件到當前目錄

hadoop fs -get hdfs://hadoopH1:9000/jdk-7u80-linux-x64.tar.gz

3.查看hdfs文件分塊信息

其中.meta文件,是校驗和文件。 

(三)測試mapreduce 

1.使用案例程序進行測試。 

mapreduce案例程序在/home/hadoop/App/hadoop-2.7.1/share/hadoop/mapreduce,在share文件夾下

可用於計算圓周率

(四)測試mapreduce程序---統計單詞出現次數 

1.測試數據

vi test.txt
hello world
hello ketty
hello boys
hello mark
hello mark
hello doctor
hello kitty

2.上傳文件到hdfs系統中

先在hdfs系統中創建一個目錄

hadoop fs -mkdir hdfs://hadoopH1:9000/wordcount
或者
hadoop fs -mkdir /wordcount
hadoop fs -mkdir /wordcount/input    創建二級目錄

上傳文件到input文件目錄中 

hadoop fs -put test.txt /wordcount/input

 3.調用案例程序統計數據

hadoop jar hadoop-mapreduce-examples-2.7.1.jar wordcount /wordcount/input /wordcount/output

調用jar案例包,使用wordcount類進行單詞字數統計,輸入數據在/worddcount/input目錄下,輸出數據應該放入/wordcout/output目錄下

注:指定數據輸入目錄下的所有文件都會讀取!!!

4.查看輸出文件目錄 

hadoop fs -ls /wordcount/output

其中_SUCCESS大小為0,為空文件。part-r-00000存放結果。

5.查看輸出結果文件

hadoop fs -cat /wordcount/output/part-r-00000

五:Hadoop shell命令

https://blog.csdn.net/hll19950830/article/details/79810540

六:Hadoop集群搭建的無密登陸配置

(一)ssh協議

推文:https://www.jianshu.com/p/33461b619d53

(二)集群密碼輸入時機

當啟動hdfs文件系統時,start-dfs.sh。 其中start-dfs.sh會去調用core-site.xml獲取NameNode信息,本地登陸NamdNode節點,調用slaves文件獲取DataNode信息,遠程登陸DataNode節點(需要輸入密碼)。

(三)SSH實踐

1.生成密鑰

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

-t:指定生成密鑰類型(rsa、dsa、ecdsa等)
-P:指定passphrase,用於確保私鑰的安全
-f:指定存放密鑰的文件(公鑰文件默認和私鑰同目錄下,不同的是,存放公鑰的文件名需要加上后綴.pub)
ssh-keygen -t rsa

文件存放在用戶主目錄下.ssh目錄下: 

其實id_rsa 為密鑰,id_rsa.pub為公鑰

2.客戶端將公鑰發送到服務器端,可使得客戶端可以登陸該服務器(無需密碼)

scp id_rsa.pub hadoopH1:/home/hadoop/

其中scp為遠程拷貝操作,拷貝到遠程主機(主機名hadoopH1,拷貝目錄/home/hadoop/下),需要輸入遠程主機的密碼

查看遠程服務器主目錄(存在該公鑰):

查看遠程服務器.ssh是否存在authorized_keys文件,若不存在則創建,並賦權限600 

3. 將獲取的公鑰追加如authorized_keys文件中

cat ../id_rsa.pub >> ./authorized_keys

注:>是寫入,>>是追加

是hadoop@hadoopH1的公鑰

4.客戶端再次登陸服務器。發現並不用輸入密碼

(四)實踐Hadoop無密登陸

1.開啟hdfs文件系統,不需要密碼登陸

2.啟動yarn,不需要密碼登錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM