【實戰演練】大數據系列01-Hadoop安裝&使用MapReduce實現單詞統計

一、環境準備java

1.一、安裝CentOS7node

1.二、安裝JDK7linux

tar -zxvf jdk-8u211-linux-x64.tar.gzmkdir /usr/java/
mv jdk1.8.0_211/ /usr/java/jdk18
alternatives --install /usr/bin/java java /usr/java/jdk18/bin/java 2

#配置JAVA環境變量(因爲openjdk會自動安裝一個java,使得咱們手動安裝的不生效,須要先手動修改)算法

 alternatives --config java

而後輸入數字按回車,能夠選擇相應的java版本apache

vi /etc/profile

大寫G跳到文本最後,$能夠跳至本行的結尾,增長編程

export JAVA_8_HOME=/usr/java/jdk18
export JAVA_HOME=$JAVA_8_HOME
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar上面三行爲添加java8的安裝路徑

:wq保存退出bash

source /etc/profile

#從新加載服務器

而後java -version與javac -version查看,兩個都能正常反饋,而且版本信息一致,就是java安裝成功了。網絡

1.三、配置免密訪問app

ssh-keygen  //一路回車默認便可
ssh-copy-id   {其餘機器的ip}

遠程其餘機器的時候,提示Are you sure you want to continue connecting (yes/no)?

按yes繼續,而後提示輸入目標主機的密碼。

而後ssh 其餘機器IP測試,若是沒有提示輸入密碼便可遠程登陸,操做完成。

1.四、編輯hosts表

vi /etc/hosts

(三臺都須要操做)

10.1.30.52 bigdata52
10.1.30.53 bigdata53
10.1.30.54 bigdata54

1.五、修改hostname

直接輸入hostname命令修改

hostname bigdata52
hostname bigdata53
hostname bigdata54
vi /etc/hostsname

(3臺分別設置爲5二、5三、54)

hostname bigdata52
hostname bigdata53
hostname bigdata54

重啓機器生效

二、安裝Hadoop

2.一、安裝Hadoop2.7.3

單臺初始化設置,設置完再拷貝到其餘機器,下載hadoop

wget http://apache.claz.org/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz
mv hadoop2.7.6 hadoop
mv hadoop/ /usr/local/hadoop
vi /etc/profile
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH

保存(最後那行也須要,由於舊版本配置文件在hadoop/conf下,新版都在hadoop/etc/hadoop下面了,不少舊教程沒有這條,開啓會報錯。)

source /etc/profile

2.二、Hadoop配置文件修改

建議當一臺配置好以後,再將hadoop整個文件傳輸到另外2臺.

vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh

將export JAVA_HOME=$JAVA_HOME   修改成

export JAVA_HOME=/usr/java/jdk18

而後修改4個配置文件

cd /usr/local/hadoop/etc/hadoop
vi   core-site.xml
<configuration>
<!--配置HDFS主節點,namenode的地址,9000是RPC通訊端口-->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://bigdata52:9000</value>
</property>
<!--配置HDFS數據塊和元數據保存的目錄,必定要修改-->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
vi hdfs-site.xml
<property>               
             <name>dfs.replication</name>                
             <value>1</value>            
</property>
<property>
         <name>dfs.namenode.secondary.http-address</name>
         <value>bigdata53:50090</value>
</property>

#配置了備用的namenode爲30.53

cp  mapred-site.xml.template  mapred-site.xml  
vi mapred-site.xml
<property>  
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
vi yarn-site.xml
<property>                       
          <name>yarn.resourcemanager.hostname</name> 
          <value>bigdata52</value> 
</property>              
<property>       
          <name>yarn.nodemanager.aux-services</name> 
          <value>mapreduce_shuffle</value> 
</property>

2.三、拷貝到其餘節點

scp -r hadoop root@10.1.30.53:/usr/local/hadoop 
scp -r hadoop root@10.1.30.54:/usr/local/hadoop

2.四、配置slave

vi /usr/local/hadoop/etc/hadoop/slaves
bigdata52
bigdata53
bigdata54

2.五、初始化命名

hdfs namenode -format

若是不是第一次格式化,格式化以前先刪除/usr/local/hadoop/下面的tmp、logs兩個目錄

2.六、啓動Hadoop

cd /usr/local/hadoop/sbin

啓動程序。

sh start-all.sh

使用jps能夠查看運行狀況。

10.1.30.52-namenode(master)+datanode

1001.jpg

10.1.30.53-secondary-namenode+datanode

1002.jpg

10.1.30.54-datanode

1003.jpg

三、使用MapReduce進行wordcount

3.1wordcount(單詞統計)

測試僅使用Hadoop自帶的wordcount來進行測試。

hadoop fs -mkdir -p /usr/local/hadoop/input

 #fs方式建立文件夾input,這個是集羣文件夾,直接操做系統ls看不到。注意後面都要使用全路徑,不然會報錯

cd /software
vi test.txt

而後隨便往裏面輸入寫內容,例如Hello World,Hello Hadoop,Hello Mapreduce三行內容

hadoop fs -put /software/test.txt /usr/local/hadoop/input

#把本地test.txt傳到集羣input文件夾

hadoop fs -ls /usr/local/hadoop/input

#查看input目錄結構

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount  /usr/local/hadoop/input output

#運行wordcount,版本根據實際替換,output也是個文件夾

hadoop fs -ls output

#查看output目錄下面的文件

1005.jpg

hadoop fs -cat output/part-r-00000

#查看輸出文件裏面保存的結果

1006.jpg

3.2其餘例子(計算圓周率

在mapreduce文件夾裏面還有不少例子能夠試用,例如圓周率計算。

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar pi 10 10

#計算圓周率,第一個10是運行10次map任務,第二個10是每一個map任務投擲次數,因此總投擲次數是10×10=100。

刪除提示已經存在的輸出文件夾

hadoop fs -rmr output


四、總結

4.1Hadoop與MapReduce的本質

按照個人理解,Hadoop是個軟件,本質上是一個分佈式計算的軟件,MapReduce只是Hadoop裏面的框架與方法論。

與負載均衡不一樣,負載均衡是對於不少個訪問請求,分攤到不一樣的服務器來處理/響應。而分佈式計算,是將一個很複雜的任務(可能須要很大量的CPU與內存計算資源)拆分(Map)成多個任務,每一個任務分別分攤到1臺服務器進行處理/計算,而後將全部服務器的計算結果彙總/合併(Reduce)成最終的結果,而後輸出。

由於能夠分佈式(並行)計算,因此計算節點能夠橫向擴容(scale out),理論上能夠無限節點橫向擴容,提供足夠多的計算資源去並行處理足夠複雜的任務,能夠大大提高計算性能與處理速度,減小計算等待時長。

4.2Hadoop的使用

與上面淺嘗則止的直接調用現成example案例不一樣。真正須要使用MapReduce,去完成個性化的任務,是須要編程的。

MapReduce只是個框架而已,具體須要實現的業務邏輯,是須要調用Map與Reduce裏面的類與方法,自行進行編寫的。

至少要編寫Mapper類、Reducer類,main函數,使用eclipse打包爲一個jar包,再使用hadoop執行的。

具體還須要學習java的編程語言與面向對象的編程方法,並非安裝以後,即插即用的。

4.3關於大數據的一些思考

隨着大數據的興起,不管懂仍是不懂的人,都喜歡著書立論說大數據如何厲害,如何神奇,有什麼做用。可是市面上的8~9成的書籍,都是告訴你什麼是大數據、大數據有什麼做用,而且喜歡將大數據的做用神化。可是書裏面歷來都不會涉及,如何使用大數據,採用什麼方法才能達到它說的做用,可能由於他們根本不知道。

書籍上面動不動就扯,你天天微博、朋友圈、淘寶、拼多多留下了好多數據,你的消費習慣、購買能力、飲食偏好、出入行蹤,造成了好多數據,而後經過大數據分析(又來了,來來去去就那麼一句,到底hadoop?mapreduce?spark?Hive?仍是咋的?你說啊,怎麼你不說了),就能畫出你的用戶畫像,你是怎麼樣的人,而後給你精準營銷,預測你的行動......(此處省略一萬字)

問題是,真的那麼神奇嗎?經過「大數據分析」這個黑盒子,真的可以無所不能嗎?答案固然是否認的。

若是你深刻本身動手用java寫過一個wordcount甚至更多的自定義分析實例出來,你就會發覺,使用大數據以前,你先須要:

1)你先要收集數據(可能經過寫爬蟲,從多個網站例如淘寶、京東、拼多多同時爬取商品信息過來,也可能經過其餘手段)

2)而後還須要多數據作預處理與清洗(過濾不須要的數據、去除重複的數據、按照統一的規範與格式轉換數據,如2019-07-13統一爲2019/07/13等)

要達到上面兩個目的,你須要本身最終想要什麼,須要分析什麼,什麼樣的數據與你分析的目標有關聯,可能對你最終的目標分析有幫助,即你須要知道須要什麼數據。

而不是書裏面說的,只要把亂七八糟的海量數據回來,扔進去大數據分析系統,系統就會自動像機器學習、深度學習、神經網絡那樣,幫你自動挖掘、分析、提煉,找到你要的東西分析結論,那是不可能的。

你必須知道你須要什麼,也須要寫好算法告訴系統如何去分析(這纔是重點)。

至此,數據準備完畢,你才能使用Hadoop,依照MapReduce框架:

1)編寫如何將任務拆開

2)編寫如何將計算結果整合

Hadoop只是幫你將原來1臺機器要算1000個小時的工做量,變爲並行計算,讓你能夠將1個大任務拆分爲1000個小任務,讓1000臺機器能夠同時幫你計算,1小時內算出而且彙總結果提供給你而已。只是幫你用分佈式計算,縮短整個計算週期而已。


因此大數據分析根本就不是直接將海量的數據灌進去黑盒子,而後大數據自動幫你挖掘,機器學習,自動分析,最終告訴你結果。這個是徹底的誤解。

大數據分析只是幫你在處理海量的數據的時候,將任務拆分,分佈式計算,用盡可能短的時間幫你分析出結果而已。

相關文章
相關標籤/搜索