天天看點

大資料技術原理與應用 第二章 大資料處理架構Hadoop

廈門大學林子雨老師課程 —— 大資料技術原理與應用 學習筆記

參考資料:http://dblab.xmu.edu.cn/post/bigdata-online-course/#lesson0

1. Hadoop的核心是分布式檔案系統HDFS(Hadoop Distributed File System)和MapReduce

2. Hadoop在企業中的應用架構

大資料技術原理與應用 第二章 大資料處理架構Hadoop

3. Hive會把送出的sql轉換為一系列MapReduce作業後再去執行。

4. Hadoop項目結構

大資料技術原理與應用 第二章 大資料處理架構Hadoop
大資料技術原理與應用 第二章 大資料處理架構Hadoop

5. 在Mac上安裝僞分布式Hadoop

此處參考部落格:

https://blog.csdn.net/fox64194167/article/details/80617527

https://blog.csdn.net/qfikh/article/details/75041190

(1)更新Java:Mac自帶jdk是1.7,Hadoop 3.0需要1.8以上版本。用brew cask install java很慢,建議從官網上下載下傳jdk-8u172,再手動安裝。網址為http://www.oracle.com/technetwork/java/javase/downloads/index.html。

(2)安裝Hadoop:

$ brew install Hadoop

(3)SSH登入權限設定

配置SSH的原因:

Hadoop名稱節點(NameNode)需要啟動叢集中所有機器的Hadoop守護程序,這個過程需要通過SSH登入來實作。Hadoop并沒有提供SSH輸入密碼登入的形式,是以,為了能夠順利登入每台機器,需要将所有機器配置為名稱節點可以無密碼登入它們。

用dsa密鑰認證來生成一對公鑰和私鑰:

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

将生成的公鑰加入到用于認證的公鑰檔案中:

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

接下來測試一下是否配置成功:

$ ssh localhost

如果遇到connection refused之類的錯誤,檢查一下mac是否開啟遠端登入功能,在系統偏好設定中可以設定。

(4)配置Hadoop檔案

需要配置的檔案主要都在這個目錄下:/usr/local/Cellar/hadoop/3.1.0/libexec/etc/hadoop  

a) hadoop-env.sh

輸入以下代碼看看你把 Java 裝到哪裡了:

$ /usr/libexec/java_home
           

你會看到類似這樣的結果:

/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
           

打開 hadoop-env.sh 檔案(位置 etc/hadoop/),找到 # export JAVA_HOME=,改參數如下:

export JAVA_HOME={your java home directory}
           

把 {your java home directory} 改成你上面查到的 Java 路徑,記得去掉注釋 #。比如

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
           

b) core-site.xml

打開 core-site.xml 檔案(位置 etc/hadoop/),改參數如下:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/Cellar/hadoop/3.1.0/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
           

hadoop.tmp.dir表示存放臨時資料的目錄,即包括NameNode的資料,也包括DataNode的資料。該路徑任意指定,隻要實際存在該檔案夾即可。

name為fs.defaultFS的值,表示hdfs路徑的邏輯名稱。fs.default.name 儲存了NameNode的位置,HDFS和MapReduce元件都需要用到它,這就是它出現在core-site.xml 檔案中而不是 hdfs-site.xml檔案中的原因

c) hdfs-site.xml

打開 hdfs-site.xml 檔案(位置 etc/hadoop/),改參數如下:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/Cellar/hadoop/3.1.0/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
       <value>file:/usr/local/Cellar/hadoop/3.1.0/tmp/dfs/data</value>
    </property>
</configuration>
           

變量dfs.replication指定了每個HDFS資料庫的複制次數。 通常為3, 由于我們隻有一台主機和一個僞分布式模式的DataNode,将此值修改為1。

dfs.namenode.name.dir表示本地磁盤目錄,是存儲fsimage檔案的地方

dfs.datanode.data.dir表示本地磁盤目錄,HDFS資料存放block的地方

d) mapred-site.xml

打開 mapred-site.xml 檔案(位置 etc/hadoop/),改參數如下:

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

e) yarn-site.xml

打開 yarn-site.xml 檔案(位置 etc/hadoop/),改參數如下:

<configuration> 
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property> 
    <property> 
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> 
    </property> 
</configuration>
           

(5)運作

a) 進入Hadoop的目錄,以mac系統為例目錄為

/usr/local/Cellar/hadoop/3.1.0/libexec
           

b) 格式化檔案系統:

$ bin/hdfs namenode -format
           

c) 啟動NameNode和DataNode的守護程序:

$ sbin/start-dfs.sh
           

d) 啟動ResourceManager和NodeManager的守護程序:

$ sbin/start-yarn.sh
           

e) 在浏覽器中通路以下連結,測試是否正常:

NameNode - http://localhost:9870

ResourceManager - http://localhost:8088

6. Hadoop叢集的節點

HDFS:

NameNode:負責協調叢集中的資料存儲,類似于目錄,通路資料時先去通路namenode,獲得需要通路的資料具體存儲在哪幾個datanode中,然後再去相應的datanode中取資料。

DataNode:存儲被拆分的資料塊

SecondaryNameNode:幫助NameNode收集檔案系統運作的狀态資訊

MapReduce:

JobTracker:協調資料計算任務,相當于作業管家,會把一個大的作業拆分成很多個小作業,分發到不同的機器上去執行。

TaskTracker:負責執行由JobTracker指派的任務