iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 6
0
Data Technology

Data Science 到底是什麼 - 從一個完全外行角度來看系列 第 6

[Data Science 到底是什麼從一個完全外行角度來看][06]建立Hadoop環境 -下篇

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://pixabay.com/en/math-blackboard-education-classroom-1547018/

上一篇([06]建立Hadoop環境 -下篇)透過VMWare Player把Ubuntu裝好並且一些相關環境設定到,等於把hadoop的基礎環境建立好了。

這篇將延續上篇的環境,把Hadoop建立上去,並且讓Hadoop跑一個hello world的範例。

同步發表於我的部落格:http://blog.alantsai.net/2017/12/data-science-series-05-install-and-test-hadoop-part1.html (部落格的格式會漂亮一些,ithome不支援html好不方便)

環境準備

整個操作會是在VM(虛擬機器)上面執行,並且因為Hadoop在linux世界比在Windows來的穩定,因此,會建立一個Ubuntu的環境,並且把Hadoop架設在裡面。

在接下來的lab將會用到以下幾個軟體/環境:

主機環境

接下來使用到的機器規格如下:

  • OS - Windows 10 1703
  • CPU - i7-6500U 雙核
  • Memory - 16GB

VMWare Player 14

任何虛擬機器軟體都可以,只是剛好用的是VMWare Player 14。

下載頁面
檔案大小約 90MB

Ubuntu 16.04.3

其他版本的Ubuntu也沒問題 - 如果用的是Ubuntu 14,那麼只有等一下安裝openjdk的部分會有問題,其他都一樣。

下載頁面
直接下載(約1.4GB)

Hadoop v2.7.4

基本上 v2.x 的都沒有問題,只是剛好手上有2.7.4所以沒有在下載新的。如果是v3.0那麼設定會不同

下載頁面
直接下載(約254 MB)

MapReduce的Hello World程式 - WordCount

這個是用來測試map reduce的hello world程式:

WordCount2.jar
jane_austen.txt - pride and prejudice 前三章 - 測試算字數用

建立Hadoop測試環境

基本上整個的環境建立大概可以分幾個部分:

  1. 安裝Ubuntu VM
  2. 設定Ubuntu環境
  3. 安裝和設定Hadoop
  4. 測試Hadoop

這篇會介紹第三步和第四部的部分

安裝和設定Hadoop

下載和解壓縮Hadoop

先用firefox下載(直接下載)hadoop到Downloads資料夾

image
下載最後位置
在Terminal(快速鍵 Ctrl + Alt + t)裡面執行以下指令:

cd Downloads
sudo tar -zxvf ./hadoop-2.7.4.tar.gz -C /usr/local
cd /usr/local
sudo mv ./hadoop-2.7.4/ ./hadoop
sudo addgroup hadoop
sudo chown -R hduser:hadoop hadoop

這個的作用是把它解壓縮出來,放到/usr/local/hadoop的位置,並且設定執行權限
image
解壓縮完成看到hadoop資料夾
設定 hadoop/etc/hadoop/core-site.xml
用Terminal執行:gedit /usr/local/hadoop/etc/hadoop/core-site.xml

在 Configuration裡面輸入:

<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>

這個是在設定NameNode位置在哪裡 - NameNode之後會介紹,但是基本上就是主控HDFS的Master。

image
修改core-site.xml的截圖
修改hadoop-env.sh
這邊要把${JAVA_HOME}的值寫進去(理論上應該不需要才對,因為我們之前有設定參數,但是好像吃不進去,所以要寫死進去)

在Terminal執行:gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh

找到:export JAVA_HOME=${JAVA_HOME}然後把它改成export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

image
修改之後的結果
設定hdfs-site.xml
這邊設定的是:

每一個在HDFS的檔案要replicate幾份 - 預設都是3
NameNode儲存位置
DataNode儲存位置
在Terminal執行:gedit /usr/local/hadoop/etc/hadoop/hdfs-site.xml,然後在Configuration裡面加入:

<property>
 <name>dfs.replication</name>
 <value>3</value>
</property>
<property>
 <name>dfs.namenode.name.dir</name>
 <value> file:/usr/local/hadoop/hadoop_data/hdfs/namenode</value>
</property>
<property>
 <name>dfs.datanode.data.dir</name>
 <value> file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value>
</property

image
修改畫面
修改yarn-site.xml
這邊修改的是yarn的設定,在Terminal執行gedit /usr/local/hadoop/etc/hadoop/yarn-site.xml,在Configuration裡面加入:

<property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
</property>
<property>
 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
 <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
 <name>yarn.nodemanager.resource.cpu-vcores</name>
 <value>1</value>
</property>
<property>
 <name>yarn.nodemanager.resource.memory-mb</name>
 <value>2048</value>
</property>

這邊後面兩個,yarn.nodemanager.resource.cpu-vcores 和 yarn.nodemanager.resource.memory-mb 是設定使用到的資源,如果後面執行不太起來要注意這個值和VM給的資源。

image
修改完的畫面
修改marped-site.xml
這個檔案預設不存在,所以要從template把它先復製出來。

在Terminal輸入:

cd /usr/local/hadoop/etc/hadoop
sudo cp mapred-site.xml.template mapred-site.xml
cd ~
sudo gedit /usr/local/hadoop/etc/hadoop/mapred-site.xml

打開了之後,把configuration改成:

<property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
</property>

image
完成設定
建立HDFS用到的目錄
在Terminal輸入:

sudo rm -rf /usr/local/hadoop/hadoop_data/hdfs
mkdir -p /usr/local/hadoop/hadoop_data/hdfs/namenode
mkdir -p /usr/local/hadoop/hadoop_data/hdfs/datanode
sudo chown -R hduser:hduser /usr/local/hadoop

這個將會建立hdfs的相關資料夾

測試Hadoop

以上就是hadoop的安裝和設定,接下來只需要把它run起來即可。

格式化HDFS
在Terminal執行:

hadoop namenode -format
hadoop datanode -format

中間可能會問是否確定繼續執行,記得要輸入yes
啟動yarn和hdfs
在Terminal輸入:

start-yarn.sh
start-dfs.sh

這個是在Master上面執行,會自動透過ssh的方式把所有Slave也一起啟動。

還有兩種啟動方式:
start-all.sh 和 stop-all.sh - 這個已經被deprecated 不過同等於上面兩個在一起執行
hadoop-daemon.sh namenode/datanode 和 yarn-deamon.sh resourcemanager - 這個是手動在各個節點裡面手動啟動對應服務
確認啟動process是否正常
在Terminal上面執行:jps

image
檢查執行的服務
這邊會看到5個服務:

  1. NameNode
  2. SecondaryNameNode
  3. ResourceManager
  4. NodeManager
  5. DataNode

在真的分散式架構,前3個只會在Master出現,後面兩個只會在Slave出現

確認Web UI是否正常

服務啟動成功之後可以在Firefox輸入:

http://localhost:8088 - 這個是ResourceManager的web界面
http://localhost:50070- 這個是NameNode的web界面 - 換句話說是hdfs的畫面
image
ResourceManager的畫面
image
NameNode的畫面
執行Hadoop的Hello World - WordCount
首先先把 WordCount2.jar和jane_austen.txt下載到Downloads裡面。

image
下載完的畫面
把檔案複製到 hadoop的HDFS裡面,在Terminal輸入:

cd ~/Downloads
hadoop fs -mkdir -p /user/hduser/input
hadoop fs -copyFromLocal jane_austen.txt /user/hduser/input

可以用hadoop fs -ls /user/hduser/inpu檢查複製進去的檔案。
執行WordCount的程式,hadoop jar wordcount2.jar WordCount /user/hduser/input/jane_austen.txt /user/hduser/output

image
執行WordCount
檢查執行結果:hadoop fs -cat /user/hduser/output/part-r-00000

image
看到最後計算結果
如果要在執行一次計算,需要先把hdfs裡面的output砍掉,要不然會執行不了。指令是:hadoop fs -rm -r /user/hduser/output
如果執行有問題,或者run不起來,可以試試重開機,然後從測試Hadoop裡面的格式化HDFS開始重新做一次。

結語

在這篇把整個Hadoop建立完成,並且執行了一個map reduce的word count程式計算出pride and prejudice前3章的字數計算。

在這篇建立出來的hadoop是所謂的pseudo-distributed mode,換句話說Master和Slave在同一台機器,但是實際運作上會有Master對上多個Slave。

不過在進入這種分散式模式之前,需要在了解一些hadoop細節。

在下一篇,將會在針對hadoop裡面的分散式模式在做更詳細一點介紹,包含yarn和hdfs裡面對應的process。


工商服務

小小介紹我們團隊成員

今年的團隊機制不知不覺就集合了10位隊(坑)友 - 大家幫忙多多關注別不小心我們就gg了 XD

** 一群技術愛好者與一名物理治療師的故事 提醒著我們 千萬不要放棄治療 **

小小的自我介紹

沉浸於.Net世界的後端工程師,樂於分享,現任台中Study4成員之一。除了程式以外,就愛看小說。

歡迎有任何問題或者建議都可以告訴我,可以再以下找到我:

部落格:Alan Tsai的學習筆記
我的Linkedin
我的粉絲頁
我的github
我的Slideshare
我的Twitter


上一篇
[Data Science 到底是什麼從一個完全外行角度來看][05]建立Hadoop環境 -上篇
下一篇
[Data Science 到底是什麼從一個完全外行角度來看][07]更深入看看Hadoop裡面的YARN和HDFS
系列文
Data Science 到底是什麼 - 從一個完全外行角度來看30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言