廈門大學林子雨老師課程 —— 大資料技術原理與應用 學習筆記
參考資料:http://dblab.xmu.edu.cn/post/bigdata-online-course/#lesson0
1. Hadoop的核心是分布式檔案系統HDFS(Hadoop Distributed File System)和MapReduce
2. Hadoop在企業中的應用架構
3. Hive會把送出的sql轉換為一系列MapReduce作業後再去執行。
4. 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指派的任務