一共三臺測試機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 (在每臺機器執行) 拷貝分發祕鑰
下載Hadoop:http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz安全
若是想下載最新版的二進制包,到官網下載。bash
一、安裝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-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