Hadoop 安裝(本地、僞分佈、分佈式模式)

本地模式

環境介紹

一共三臺測試機java

master   192.168.4.91node

slave1   192.168.4.45linux

slave2   192.168.4.96web

 

操做系統配置

一、Centos7操做系統apache

二、防火牆,selinux都關閉(在學習的時候,基本都是關閉防火牆,生產環境,防火牆都是打開的,不只有Linux自帶的主機防火牆,還有其餘的物理防火牆)vim

***  如下操做須要root權限  *** (1) Centos7關閉防火牆命令    #systemctl stop firewalld    #systemctl disable firewalld Centos6關閉防火牆 #/etc/init.d/iptables stop #chkconfig iptables off (2) 關閉Selinux    #sed -i 's/enforcing/disabled/g' /etc/selinux/config 一般狀況下,設置完selinux須要重啓操做系統,若是不想重啓,能夠臨時關閉selinux。    #setenforce 0 表示臨時關閉selinux (3) 修改操做系統ulimit的限制(可使用ulimit -a參數看當前系統的ulimit限制值)    #echo "* - nofile 65535" >>  /etc/security/limits.conf 修改最大文件數。 #echo "* - nproc 65535" >> /etc/security/limits.d/20-nproc.conf 修改最大進程數 注意:修改完之後,若是想要生效,須要從新打開會話。 (4) 關閉ipv6    #echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf #echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf #sysctl -p (5)  修改/etc/hosts文件,添加主機名和ip的映射 (6) 建立管理集羣的用戶   #useradd -m -d /home/hadoop hadoop #passwd hadoop #修改密碼 (7) 建立數據目錄 #mkdir /data/hadoop #chown hadoop:hadoop /data/hadoop #su - hadoop #切換到hadoop用戶 (8) 設置主機之間免密登陸 #ssh-keygen  -t rsa -N '' -f ~/.ssh/id_rsa (在每臺機器執行) 拷貝分發祕鑰

 

  

下載軟件包

下載JDK:http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz瀏覽器

下載Hadoop:http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz安全

若是想下載最新版的二進制包,到官網下載。bash

安裝配置JDK和Hadoop

一、安裝JDK以及配置環境變量服務器

$ tar zxvf jdk-8u181-linux-x64.tar.gz -C /data/hadoop $ cd /data/hadoop $ ln -s jdk1.8.0_181/ jdk $ vim ~/.bashrc 文件最後追加 export JAVA_HOME=/data1/hadoop/jdk export PATH=${JAVA_HOME}/bin:$PATH $source /etc/profile #讓jdk生效 $java -version #查看jdk是否生效,若是輸入以下,說明配置成功。 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)

二、安裝Hadoop以及配置

解壓
$ tar zxvf tar zxvf hadoop-2.9.2.tar.gz -C /data/hadoop/
$ cd /data/hadoop
$ ln -s hadoop-2.9.2/ hadoop

配置環境變量
$ vim ~/.bashrc,追加以下配置

export HADOOP_HOME=/data1/hadoop/hadoop/

export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

$ source ~/.bashrc

三、本地模式下,各個進程運行在一臺機器上,佔用的jvm進程數爲1,在跑MapReduce時,從本地讀取文件,輸出到本地文件。

(1)、在本地系統建立一個文件

#cat test.txt

11 22 33

22 33 44

44 22 11

運行hadoop自帶的MapReduce程序

$ hadoop jar /data/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount test.txt test.out

這裏能夠看到job ID中有local字樣,說明是運行在本地模式下的。

(2)查看輸出的文件。在本地模式下,輸出文件是在本地。

# ll test.out

輸出目錄中有_SUCCESS文件說明JOB運行成功;part-r-00000是輸出結果文件,r說明是reduce產生的結果,若是是m的話,則是map階段產生的。

若是要查看具體的信息:

# cat test.out/part-r-00000

 僞分佈搭建

特色:僞分佈模式下,多個進程運行在不一樣的jvm內

如下配置只在master節點操做

Hadoop配置

一、配置hadoop-env.sh

$ cd /data/hadoop/hadoop/etc/hadoop/
$ echo "export JAVA_HOME=/data/hadoop/jdk" >> hadoop-env.sh

二、配置core-site.xml文件

在<configuration>下面添加 fs.defaultFS參數配置的是HDFS的地址。 <property>
<!-- hdfs 地址 -->
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>

<!-- 指定hadoop臨時目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/hadoop/tmp</value>
</property> hadoop.tmp.dir 是hdfs文件系統產生數據所存放的臨時目錄 建立目錄: $ mkdir /data/hadoop/hadoop/tmp

三、配置hdfs-site.xml文件

在<configuration>下面添加 <property>
<name>dfs.replication</name> #這裏指定hdfs產生數據時備份的機器數量,因爲只有一臺機器,因此爲1. <value>1</value>
</property>

<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/hadoop/name</value> #指定namenode數據存放的目錄 </property>

<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/hadoop/data</value> #指定datanode數據存放的目錄 </property> $ mkdir /data/hadoop/hadoop/name $ mkdir /data/hadoop/hadoop/data

 

四、接下來格式化hdfs

$ hadoop namenode -format

格式化是對HDFS這個分佈式文件系統中的DataNode進行分塊,統計全部分塊後的初始元數據的存儲在NameNode中。

格式化後,查看core-site.xml裏hadoop.tmp.dir(本例是/data/hadoop/hadoop/目錄)指定的目錄下是否有了dfs目錄,若是有,說明格式化成功。

 $ ll /data/hadoop/hadoop/name/current,如下圖片可能目錄不正確,我查看的是之前安裝的集羣信息

 fsimage_XXX 是namenode元數據存滿之後持久化到磁盤的文件。

fsimage*.md5 是校驗文件,校驗fsimage的完整性。

seen_txid 是hadoop的版本

$ cat VERSION

namespaceID=271252846            #namenode的惟一id
clusterID=CID-97e864b1-262d-4ce0-93d9-9dd96953ecc5          #集羣id
cTime=1533545685716
storageType=NAME_NODE             #存儲類型
blockpoolID=BP-1051333686-192.168.4.91-1533545685716
layoutVersion=-63

固然,NameNode和DataNode的集羣ID應該一致,代表這是一個集羣,datenode的id能夠到/data/hadoop/hadoop/data 這個目錄下查看。

♥   啓動namenode、datanode、SecondaryNameNode

$ hadoop-daemon.sh start namenode $ hadoop-daemon.sh start datanode $ hadoop-daemon.sh start  secondarynamenode

 

使用jps命令查看是否啓動成功

$ jps

3022 NameNode

10578 Jps

2099 DateNode

12768 SecondaryNameNode

♥ hdfs分佈式文件系統測試

在hdfs上建立目錄:

$ hadoop fs -mkdir /test

查看目錄:

上傳本地文件到hdfs:

$ ./bin/hadoop fs -put wc.input /test

 

 從hdfs分佈式文件系統上面下載文件到本地系統

$ ./bin/hadoop fs -get /test/wc.put

五、配置 mapred-site.xml

在 <configuration>下面添加

<!-- 指定mr運行在yarn框架上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

 

六、配置yarn.site.xml

在 <configuration>下面添加

<property>
<name>yarn.nodemanager.aux-services</name> #yarn默認混洗方式 <value>mapreduce_shuffle</value>
</property>

<property>
<name>yarn.resourcemanager.hostname</name> #指定resourcemanager的主機名稱 <value>master</value>
</property>

 

♥啓動resourcemanager

${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager

♥啓動nodemanager

${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager

使用jps查看是否啓動成功,若是有 resourcemanager  nodemanager 則說明成功。

♥  查看yarn的外部界面,

若是你要在Windows裏面經過主機名去訪問Linux裏面的主機,那麼你須要在Windows的hosts主機裏面添加Linux主機名和其IP地址的映射關係。

這樣才能正常從Windows瀏覽器經過主機名訪問Linux,固然,你直接輸入IP地址就不須要這一步了。

有時候你在修改Windows 下的/etc/hosts完成之後,保存時提示沒有權限,該怎麼作呢:

如圖:hosts文件右鍵——> 安全----->指定users用戶,在權限這裏,把容許下面的都勾選上。

♥   容許MapReduce

在本地系統建立測試用的文件

#cat wc.put

上傳到hdfs文件系統

# hadoop fs -put wc.put /

運行Wordcount MapReduce job

$ cd /data/hadoop/hadoop $ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wc.input /wc.output

 

查看輸出結果

$ hadoop fs -ls /wc.output/

有SUCCESS就表明這個job執行成功,這是一個空文件;part-r-00000既是輸出結果,其中r表示是reduce階段產生的結果,mapreduce程序執行時,能夠沒有reduce階段,可是確定會有map階段,若是沒有reduce階段這個地方有是-m-,一個reduce會產生一個part-r-開頭的文件。

•   查看結果

#  hadoop fs -cat /wc.output/part-r-00000

其結果能夠看出來是按照鍵值排好序的。

♥   如何中止hadoop?

(1)一個一個進程慢慢中止  

$./sbin/hadoop-daemon.sh stop namenode

$./sbin/hadoop-daemon.sh stop datenode

$ ./sbin/yarn-daemon.sh stop resourcemanager

$ ./sbin/yarn-daemon.sh stop nodemanager

(2) hadoop有一個腳本文件,能夠直接中止集羣,這個腳本文件分開來的話就是中止hdfs和yarn。啓動整個集羣也可使用 ./sbin/start-all.sh   

#./sbin/stop-all.sh   

♥   各個功能模塊的介紹

(1) yarn

這是一個資源調度框架,在hadoop2.x中,主要就是管理整個集羣資源的分配和調度,具體請查看  https://blog.csdn.net/liuwenbo0920/article/details/43304243

(2) hdfs 

hdfs分佈式文件系統主要用來將大文件分塊之後進行分佈式存儲數據的,突破了單臺機器磁盤存儲限制,這是一個相對獨立的模塊,可以爲yarn、hbase等模塊提供服務。

(3)MapReduce

MapReduce是一個計算框架,經過map、reduce階段來分佈式的對數據進行流處理,適用於對數據的流處理,對實時性要求高的應用不太適合,在hadoop1.0中,MapReduce是出於霸主級別,可是在hadoop2.0中,提供了一個更高效的處理引擎--spark。

♥   如何開啓歷史服務?

(1)   #./sbin/mr-jobhistory-daemon.sh start historyserver

開啓之後經過web界面能夠查看,點開下圖的history,能夠查看歷史信息。

歷史服務器的端口是19888.

♥  若是想在web界面查看日誌該如何作呢?那就是開啓日誌彙集,日誌彙集是在yarn框架的,因此在配置的時候是在yarn.site.xml文件裏面配置

(1)日誌彙集介紹

MapReduce是在各個機器上運行的,在運行過程當中產生的日誌存在於各個機器上,爲了可以統一查看各個機器的運行日誌,將日誌集中存放在HDFS上,這個過程就是日誌彙集。

(2)日誌彙集默認是未開啓的,經過配置yarn.site.xml來開啓。

<property>
<name>yarn.log-aggregation-enable</name> # 是否開啓日誌彙集 <value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name> #日誌保存時間,以秒爲單位。 <value>106800</value>          
</property>

 

(3)配置完之後重啓yarn進程

# stop-yarn.sh

# start-yarn.sh

(4)如今就能夠去web界面查看map、reduce階段產生的日誌。

固然,在執行這一步的時候,是由於咱們上面剛剛跑過MapReduce程序,若是你沒有跑MapReduce,則這個界面不會有這些信息。

若是是在徹底分佈式或者ha徹底分佈式集羣裏面,當配置完成之後,須要把配置文件拷貝到其餘節點在從新啓動yarn進程。

 

分佈式模式

前提是前面的JDK在三臺機器都已經安裝好。

一、中止僞分佈式模式下搭建的集羣

$ stop-all.sh

二、刪除僞分佈式模式下生成的數據

$ rm -rf /data/hadoop/hadoop/name
$ rm -ff /data/hadoop/hadoop/data

三、修改/data/hadoop/hadoop/etc/hadoop/slaves,添加須要啓動的datanode、nodemanagerjied

slave1 slave2

四、分發hadoop到其餘機器

$ scp -r /data/hadoop/hadoop slave1:/data/hadoop
$ scp -r /data/hadoop/hadoop slave2:/data/hadoop

 

五、啓動集羣

$ start-all.sh
相關文章
相關標籤/搜索