Hadoop 入门教程(超详细)[通俗易懂](到底什么是Hadoop)
1 Hadoop 介紹
1.1 Hadoop 是什么
- Hadoop 是一個由 Apache 基金會所開發的分布式系統基礎架構。
- 主要解決,海量數據的存儲和海量數據的分析計算問題。
- 廣義上來說,Hadoop 通常是指一個更廣泛的概念 —— Hadoop 生態圈。
1.2 Hadoop 的發展歷史
- 
Lucene 框架是 Doug Cutting 開創的開源軟件,用 java 書寫代碼,實現與 Google 類似的全文搜索功能,它提供了全文檢索引擎的架構,包括完整的查詢引擎和索引引擎 。 
- 
2001年年底 Lucene 成為 apache 基金會的一個子項目。 
- 
對于海量數據的場景,Lucene 面對與 Google 同樣的困難:存儲數據困難,檢索速度慢。 
- 
學習和模仿 Google 解決這些問題的辦法 :微型版 Nutch。 
- 
可以說 Google 是 hadoop 的思想之源(Google 在大數據方面的三篇論文)。 GFS —>HDFS 
 Map-Reduce —>MR
 BigTable —>Hbase
- 
2003-2004 年,Google 公開了部分 GFS 和 Mapreduce 思想的細節,以此為基礎 Doug Cutting 等人用了 2 年業余時間實現了 DFS 和 Mapreduce機制,使 Nutch 性能飆升 。 
- 
2005 年Hadoop 作為 Lucene 的子項目 Nutch 的一部分正式引入 Apache 基金會。 
- 
2006 年 3 月份,Map-Reduce 和 Nutch Distributed File System (NDFS) 分別被納入稱為 Hadoop 的項目中。 
- 
名字來源于 Doug Cutting 兒子的玩具大象。 
 
- 
Hadoop 就此誕生并迅速發展,標志這云計算時代來臨。 
1.3 Hadoop 三大發行版本
??Apache、Cloudera、Hortonworks
- 
Apache 版本最原始(最基礎)的版本,對于入門學習最好。 
- 
Cloudera在大型互聯網企業中用的較多。 ① 2008 年成立的 Cloudera 是最早將 Hadoop 商用的公司,為合作伙伴提供 Hadoop 的商用解決方案,主要是包括支持、咨詢服務、培訓。 
 ② 2009 年 Hadoop 的創始人 Doug Cutting 也加盟 Cloudera 公司。Cloudera 產品主要為 CDH,Cloudera Manager,Cloudera Support。
 ③ CDH 是Cloudera 的 Hadoop 發行版,完全開源,比 Apache Hadoop 在兼容性,安全性,穩定性上有所增強。
 ④ Cloudera Manager 是集群的軟件分發及管理監控平臺,可以在幾個小時內部署好一個 Hadoop 集群,并對集群的節點及服務進行實時監控。Cloudera Support 即是對 Hadoop 的技術支持。
 ⑤ Cloudera 的標價為每年每個節點 4000 美元。Cloudera 開發并貢獻了可實時處理大數據的 Impala 項目。
- 
Hortonworks 文檔較好。 ① 2011 年成立的 Hortonworks 是雅虎與硅谷風投公司 Benchmark Capital 合資組建。 
 ② 公司成立之初就吸納了大約 25 名至 30 名專門研究Hadoop的雅虎工程師,上述工程師均在 2005 年開始協助雅虎開發 Hadoop,貢獻了 Hadoop 80% 的代碼。
 ③ 雅虎工程副總裁、雅虎 Hadoop 開發團隊負責人 Eric Baldeschwieler 出任 Hortonworks 的首席執行官。
 ④ Hortonworks 的主打產品是 Hortonworks Data Platform(HDP),也同樣是 100% 開源的產品,HDP 除常見的項目外還包括了 Ambari,一款開源的安裝和管理系統。
 ⑤ HCatalog,一個元數據管理系統,HCatalog 現已集成到 Facebook 開源的 Hive 中。Hortonworks 的 Stinger 開創性的極大的優化了 Hive 項目。Hortonworks 為入門提供了一個非常好的,易于使用的沙盒。
 ⑥ Hortonworks 開發了很多增強特性并提交至核心主干,這使得 Apache Hadoop 能夠在包括 Window Server 和 Windows Azure 在內的 microsoft Windows 平臺上本地運行。定價以集群為基礎,每10 個節點每年為 12500 美元。
1.4 Hadoop 的優勢
- 高可靠性: Hadoop 底層維護多個數據副本,所以即使 Hadoop 某個計算元素或存儲出現故障,也不會導致數據的丟失。
- 高擴展性: 在集群間分配任務數據,可方便的擴展數以千計的節點。
- 高效性: 在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任務處理速度。
- 高容錯性: 能夠自動將失敗的任務重新分配。
1.5 Hadoop 的組成
- 
Hadoop 1.x 和 hadoop 2.x 的區別 
 
 在 Hadoop 1.x 時代,Hadoop 中的 MapReduce 同時處理業務邏輯運算和資源調度,耦合性較大。
 在 Hadoop 2.x 時代,增加了 Yarn。Yarn 只負責資源的調度,MapReduce 只負責運算。
- 
HDFS 框架概述 ① NameNode(nn): 存儲文件的元數據,如文件名,文件目錄結構,文件屬性(生成時間、副本數、文件權限),以及每個文件的塊所在的 DataNode 等。 
 ② DataNode(dn): 在本地文件系統存儲文件塊數據,以及塊數據校驗和。
 ③ Secondary DataNode(2nn): 用來監控 HDFS 狀態的輔助后臺程序,每隔一段時間獲取 HDFS 元數據的快照。
- 
Yarn 結構概述 
 
 ① ResourceManager(RM):??(1)處理客戶端請求。 
 ??(2)監控 NodeManager。
 ??(3)啟動或監控 ApplicationMaster。
 ??(4)資源的分配與調度。② NodeManager(NM): ??(1)管理單個節點上的資源。 
 ??(2)處理來自 ResourceManager 的命令。
 ??(3)處理來自 ApplicationMaster 的命令。
 ??(4)資源的分配與調度。③ ApplicationMaster(AM): ??(1)負責數據的切分。 
 ??(2)為應用程序申請資源并分配給內部的任務。
 ??(3)任務的監控與容錯。④ Container: ??Container 是 Yarn 中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等。 
- 
MapReduce 架構概述 MapReduce 將計算過程分為兩個階段:Map 階段和 Reduce 階段。 ① Map 階段并行處理輸入的數據。 
 ② Reduce 階段對 Map 結果進行匯總。
1.6 大數據技術生態體系
2 Hadoop 環境搭建
2.1 虛擬機環境準備
- 
克隆虛擬機 
- 
修改克隆虛擬機的靜態IP ① vim /etc/sysconfig/network-scripts/ifcfg-網卡名稱 終端上輸入 ifconfig 或 ip addr,找出網卡名稱 
 ② 將 BOOTPROTO=dhcp 改成 BOOTPROTO=static、ONBOOT=no 改成 ONBOOT=yes
 ③ 并在文件尾部添加以下內容
IPADDR=192.168.217.129
NETMASK=255.255.255.0
GATEWAY=192.168.217.2
DNFS1=192.168.217.2
??
??④ 重啟網關服務
systemctl restart network
- 修改主機名
hostnamectl set-hostname lyh
- 
關閉防火墻 ① 關閉防火墻 
systemctl stop firewalld
??② 禁止防火墻開機啟動
systemctl disable firewalld
??③ 關閉 Selinux
vim /etc/sysconfig/selinux
??將 SELINUX=enforcing 改成 SELINUX=disabled
2.2 安裝 jdk
- 將 jdk-8u151-linux-x64.tar.gz 安裝包通過 xftp 傳到 CentOS 7 上
- 創建 /usr/local/java 文件夾
mkdir /usr/local/java
- 將 jdk 壓縮包解壓到 /usr/local/java 目錄下
tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local/java/  
- 配置 jdk 的環境變量
vim /etc/profile
??添加以下內容:
# JAVAHOME
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
- 讓配置文件生效
source /etc/profile
- 
輸入 java、javac、java -version 命令檢驗 jdk 是否安裝成功 注意:如果之前安裝過 jdk 或 系統自帶 jdk,我們需要卸載這些 jdk ① 查詢已安裝的 jdk 列表 
rpm -qa | grep jdk
??② 刪除已經安裝的 jdk
yum -y remove XXX(上面查詢到的 jdk 名稱)
???注意:如果終端出現以下錯誤:/var/run/yum.pid 已被鎖定,PID 為 1610 的另一個程序正在運行。則輸入以下命令:
rm -f /var/run/yum.pid
???之后再執行以上刪除 jdk 的命令
??③ 重新讓配置文件生效
source /etc/profile
??④ 輸入 java、javac、java -version 命令檢驗 jdk 是否安裝成功
2.3 安裝 Hadoop
Hadoop 官網
- 將 hadoop-2.7.7.tar.gz 安裝包通過 xftp 傳到 CentOS 7 上
- 創建 /hadoop 文件夾
mkdir /hadoop
- 將 hadoop 壓縮包解壓到 /haddop 的目錄下
tar -zxvf hadoop-2.7.7.tar.gz -C /hadoop/  
- 
配置 hadoop 環境變量 ① 在 /etc/profile 文件的尾部添加以下內容: 
#HADOOP
export HADOOP_HOME=/hadoop/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
??② 使配置文件生效
source /etc/profile
- 測試是否安裝成功
hadoop version
3 Hadoop 的運行模式
??Hadoop 的運行模式包括:本地模式、偽分布式模式、完全分布式模式。
3.1 本地運行模式
3.1.1 官方 Grep 案例
- 在 hadoop-2.7.7 文件下面創建一個 input 文件夾
mkdir input
- 將 Hadoop 的 xml 配置文件復制到 input
cp etc/hadoop/*.xml input
- 在 hadoop-2.7.7 目錄下,執行 share 目錄下的 MapReduce 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input/ output 'dfs[a-z.]+'
- 查看輸出結果
 
3.1.2 官方 WordCount 案例
- 在 hadoop-2.7.7 文件下面創建一個 wcinput 文件夾
mkdir wcinput
- 在 wcinput 文件下創建一個 wc.input 文件
vim wc.input
??在文件中輸入以下內容:
hadoop yarn
hadoop mapreduce
spark
spark
- 在 hadoop-2.7.7 目錄下,執行 share 目錄下的 MapReduce 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount wcinput/ wcoutput
- 查看結果
 
3.2 偽分布式運行模式
3.2.1 啟動 HDFS 并運行 MapReduce 程序
- 
配置集群,修改 Hadoop 的配置文件(/hadoop/hadoop-2.7.7/etc/hadoop 目錄下) ① core-site.xml 
<configuration>
  <!-- 指定HDFS中NameNode的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://lyh:9000</value>
  </property>
  <!-- 指定Hadoop運行時產生文件的存儲目錄 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop/hadoop-2.7.7/data/tmp</value>
  </property>
</configuration>
??② hadoop-env.sh
???修改 JAVA_HOME 路徑:
# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
??③ hdfs-site.xml
<configuration>
  <!-- 指定HDFS副本的數量 -->
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>
- 
啟動集群 ① 格式化 NameNode(第一次啟動時格式化,以后就不要總格式化) 
hdfs namenode -format
??② 啟動 NameNode
hadoop-daemon.sh start namenode
??③ 啟動 DataNode
hadoop-daemon.sh start datanode
- 
查看集群 ① 查看是否啟動成功 
 
 ② web 端查看 HDFS 文件系統http://192.168.217.129:50070 
 
- 
操作集群 ① 在 HDFS 文件系統上創建一個 input 文件夾 
hdfs dfs -mkdir -p /user/lyh/input
??② 將測試文件內容上傳到文件系統上
hdfs dfs -put wcinput/wc.input /user/lyh/input/
??③ 在 hadoop-2.7.7 目錄下,運行 MapReduce 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input/ /user/lyh/output
??④ 查看輸出結果
???命令行查看:
hdfs dfs -cat /user/atguigu/output/*
 ???瀏覽器頁面查看:
 
3.2.2 啟動 YARN 并運行 MapReduce 程序
- 
配置集群,修改 Hadoop 的配置文件(/hadoop/hadoop-2.7.7/etc/hadoop 目錄下) ① yarn-site.xml 
<configuration>
  <!-- Reducer獲取數據的方式 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <!-- 指定YARN的ResourceManager的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>lyh</value>
  </property>
</configuration>
??② yarn-env.sh
???修改 JAVA_HOME 路徑:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
??③ mapred-env.sh
???修改 JAVA_HOME 路徑:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
??④ 將 mapred-site.xml.template 重新命名為 mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
<configuration>
  <!-- 指定MR運行在YARN上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
- 
啟動集群 ① 啟動前必須保證 NameNode 和 DataNode 已經啟動 
 ② 啟動 ResourceManager
yarn-daemon.sh start resourcemanager
??③ 啟動NodeManager
yarn-daemon.sh start nodemanager
- 
查看集群 ① 查看是否啟動成功 
 
 ② web 端查看 YARN 頁面http://192.168.217.129:8088 
 
- 
操作集群 ① 刪除 HDFS 文件系統上的 output 文件 
hdfs dfs -rm -R /user/lyh/output
??② 在 hadoop-2.7.7 目錄下,運行 MapReduce 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input  /user/lyh/output
??③ 查看運行結果
???命令行查看:
hdfs dfs -cat /user/lyh/output/*
 ???瀏覽器頁面查看:
 
3.2.3 配置歷史服務器
??為了查看程序的歷史運行情況,需要配置一下歷史服務器。
- 
配置 mapred-site.xml 在該文件里面增加以下配置: 
  <!-- 歷史服務器端地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>lyh:10020</value>
  </property>
  <!-- 歷史服務器web端地址 -->
  <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>lyh:19888</value>
  </property>
- 啟動歷史服務器
mr-jobhistory-daemon.sh start historyserver
- 
查看歷史服務器是否啟動 
 
- 
查看 JobHistory http://192.168.217.129:19888/ 
 
3.2.4 配置日志的聚集
??日志聚集概念:應用運行完成以后,將程序運行日志信息上傳到 HDFS 系統上。
 ??日志聚集功能好處:可以方便的查看到程序運行詳情,方便開發調試。
??注意:開啟日志聚集功能,需要重新啟動 NodeManager 、ResourceManager 和 HistoryManager。
- 關閉 NodeManager 、ResourceManager 和 HistoryManager
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh stop nodemanager
mr-jobhistory-daemon.sh stop historyserver
- 
配置 yarn-site.xml 在該文件里面增加以下配置: 
  <!-- 日志聚集功能使能 -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <!-- 日志保留時間設置7天 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
  </property>
- 啟動 NodeManager 、ResourceManager 和 HistoryManager
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
mr-jobhistory-daemon.sh start historyserver
- 刪除HDFS上已經存在的輸出文件
hdfs dfs -rm -R /user/lyh/output
- 在 hadoop-2.7.7 目錄下,執行 WordCount 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input /user/lyh/output
- 查看日志
 
3.3 完全分布式運行模式
3.3.1 虛擬機準備
- 準備(克隆) 3 臺客戶機
| 主機名稱 | IP 地址 | 
|---|---|
| master | 192.168.217.130 | 
| slave1 | 192.168.217.131 | 
| slave2 | 192.168.217.132 | 
- 每臺機器分別修改 /etc/hosts 文件,將每個機器的 hostname 和 ip 對應
vim /etc/hosts
192.168.217.130 master
192.168.217.131 slave1
192.168.217.132 slave2
- 之后詳細操作查看 2.1
3.3.2 編寫集群分發腳本 xsync
- 
scp(secure copy)安全拷貝 ① scp 定義: ??scp 可以實現服務器與服務器之間的數據拷貝。 ② 基本語法: 
scp -r 要拷貝的文件路徑/名稱  目的用戶@主機:目的路徑/名稱
- 
rsync(remote synchronize)遠程同步工具 ① rsync 定義: ??rsync 主要用于備份和鏡像。具有速度快、避免復制相同內容和支持符號鏈接的優點。 ??rsync 和 scp 區別:用 rsync 做文件的復制要比 scp 的速度快,rsync 只對差異文件做更新。scp 是把所有文件都復制過去。 ② 基本語法: 
rsync -rvl 要拷貝的文件路徑/名稱  目的用戶@主機:目的路徑/名稱
??說明:-v:顯示復制過程 、-l:拷貝符號鏈接
- 
xsync 集群分發腳本 需求:循環復制文件到所有節點的相同目錄下 ① 在 /usr/local/bin 目錄下創建 xsync 文件 
vim xsync
???在文件中輸入以下內容:
#!/bin/bash
#1 獲取輸入參數個數,如果沒有參數,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 獲取文件名稱
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 獲取上級目錄到絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 獲取當前用戶名稱
user=`whoami`
#5 循環
for i in master slave1 slave2
do
echo "****************** $i *********************"
rsync -rvl $pdir/$fname $user@$i:$pdir
done
??② 修改腳本 xsync 具有執行權限
chmod 777 xsync
??③ 調用腳本形式:xsync 文件名稱
3.3.3 集群配置
- 集群部署規劃
| master | slave1 | slave2 | |
|---|---|---|---|
| HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode | 
| YARN | NodeManager | ResourceManager NodeManager | NodeManager | 
- 
配置集群 ⑴ 配置核心文件 ??配置 core-site.xml 
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 指定Hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.7.7/data/tmp</value>
</property>
</configuration>
??⑵ HDFS 配置文件
???① 配置 hadoop-env.sh
????修改 JAVA_HOME 路徑:
# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
???② 配置 hdfs-site.xml
<configuration>
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave2:50090</value>
</property>
</configuration>
??⑶ YARN 配置文件
???① 配置 yarn-env.sh
???修改 JAVA_HOME 路徑:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
???② 配置 yarn-site.xml
<configuration>
<!-- Reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留時間設置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
??⑷ MapReduce 配置文件
???① 配置 mapred-env.sh
????修改 JAVA_HOME 路徑:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
???② 配置 mapred-site.xml
<configuration>
<!-- 指定MR運行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 歷史服務器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 歷史服務器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
- 在集群上分發配置好的 Hadoop 目錄
xsync /hadoop/
3.3.4 集群單點啟動
- 如果集群是第一次啟動,需要格式化 NameNode
hadoop namenode -format
- 在 master上啟動 NameNode
hadoop-daemon.sh start namenode
- 在 master、slave1 和 slave2 上分別啟動 DataNode
hadoop-daemon.sh start datanode
3.3.5 配置 SSH 無密登錄
- 
免密登錄原理 
 
- 
生成公鑰和私鑰 在 /root 目錄下輸入: 
ssh-keygen -t rsa
??然后敲(三個回車),就會在 .ssh 目錄下生成兩個文件 id_rsa(私鑰)、id_rsa.pub(公鑰)
- 將公鑰拷貝到要免密登錄的目標機器上
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
- 在另兩臺機器上也做 2、3 操作
3.3.6 群起集群
- 
配置 slaves(/hadoop/hadoop-2.7.7/etc/hadoop/slaves) ① 在該文件中增加如下內容: 
master
slave1
slave2
??注意:該文件中添加的內容結尾不允許有空格,文件中不允許有空行。
??② 同步所有節點配置文件
xsync slaves
- 
啟動集群 ① 如果集群是第一次啟動,需要格式化 NameNode (注意格式化之前,一定要先停止上次啟動的所有 namenode 和 datanode 進程,然后再刪除 data 和 log 數據) 
hdfs namenode -format
??② 啟動 HDFS
start-dfs.sh
??③ 啟動 YARN(slave1 上)
注意:NameNode 和 ResourceManger 如果不是同一臺機器,不能在 NameNode 上啟動 YARN,應該在 ResouceManager 所在的機器上啟動 YARN。
start-yarn.sh
- 
編寫查看集群所有節點 jps 腳本 alljps ① 在 /usr/local/bin 目錄下創建文件 alljps 
vim alljps
???在文件中輸入以下內容:
#!/bin/bash
for i in master slave1 slave2
do
echo "****************** $i *********************"
ssh $i "source /etc/profile && jps"
done
??② 修改腳本 alljps 具有執行權限
chmod 777 alljps
??③ 調用腳本形式:alljps
 ??
3.3.7 集群時間同步
??時間同步的方式:找一個機器,作為時間服務器,所有的機器與這臺集群時間進行定時的同步,比如,每隔十分鐘,同步一次時間。
- 
時間服務器配置(必須 root 用戶) ① 安裝 ntp 
yum install ntp
??② 修改 ntp 配置文件
vim /etc/ntp.conf
??修改內容如下:
???⑴ 授權 192.168.1.0-192.168.1.255 網段上的所有機器可以從這臺機器上查詢和同步時間
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
???⑵ 集群在局域網中,不使用其他互聯網上的時間
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
???⑶ 當該節點丟失網絡連接,依然可以采用本地時間作為時間服務器為集群中的其他節點提供時間同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
??③ 修改/etc/sysconfig/ntpd 文件
vim /etc/sysconfig/ntpd
???添加內容如下(讓硬件時間與系統時間一起同步)
SYNC_HWCLOCK=yes
??④ 重新啟動 ntpd 服務
systemctl restart ntpd.service
??⑤ 設置 ntpd 服務開機啟動
systemctl enable ntpd.service
- 
其他機器配置(必須root用戶) 在其他機器配置10分鐘與時間服務器同步一次 
crontab -e
???編寫定時任務如下:
*/10 * * * * /usr/sbin/ntpdate master
4. Hadoop 編譯源碼
4.1 前期工作準備
- 
CentOS 聯網 配置 CentOS 能連接外網。Linux 虛擬機 ping www.baidu.com 是暢通的。 
- 
jar 包準備(hadoop 源碼、JDK8、maven、ant 、protobuf) ① hadoop-2.7.7-src.tar.gz 
 ② jdk-8u151-linux-x64.tar.gz
 ③ apache-ant-1.9.9-bin.tar.gz(build 工具,打包用的)
 ④ apache-maven-3.0.5-bin.tar.gz
 ⑤ protobuf-2.5.0.tar.gz(序列化的框架)
4.2 jar 包安裝
- 
安裝 jdk 具體詳見 2.2。 
- 
安裝 Maven ① 解壓 Maven 
tar -zxvf apache-maven-3.0.5-bin.tar.gz -C /opt/module/
??② 配置環境變量
vim /etc/profile
???添加以下內容:
#MAVEN_HOME
export MAVEN_HOME=/opt/module/apache-maven-3.0.5
export PATH=$PATH:$MAVEN_HOME/bin
???使配置文件生效:
source /etc/profile
??② 進入解壓后的 Maven 目錄,編輯配置文件(更改 Maven 鏡像)
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
?? ③ 查看 Maven 是否安裝成功
mvn -version
- 
安裝 ant ① 解壓 ant 
tar -zxvf apache-ant-1.9.9-bin.tar.gz -C /opt/module/
??② 配置環境變量
vim /etc/profile
???添加以下內容:
#ANT_HOME
export ANT_HOME=/opt/module/apache-ant-1.9.9
export PATH=$PATH:$ANT_HOME/bin
???使配置文件生效:
source /etc/profile
?? ③ 查看 ant 是否安裝成功
ant -version
- 安裝 glibc-headers 和 g++
yum install glibc-headers
yum install gcc-c++
- 安裝 make 和 cmake
 yum install make
 yum install cmake
- 
安裝 protobuf ① 解壓 protobuf 
tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/
??② 配置環境變量
vim /etc/profile
???添加以下內容:
#LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0
export PATH=$PATH:$LD_LIBRARY_PATH
???使配置文件生效:
source /etc/profile
?? ③ 進入到解壓后 protobuf 主目錄,/opt/module/protobuf-2.5.0,然后相繼執行命令
./configure 
make
make check
make install
ldconfig 
?? ③ 查看 protobuf 是否安裝成功
protoc --version
- 安裝 openssl 庫
yum install openssl-devel
- 安裝 ncurses-devel 庫
yum install ncurses-devel
4.3 編譯源碼
- 解壓源碼到 /opt/ 目錄
 tar -zxvf hadoop-2.7.7-src.tar.gz -C /opt/
- 進入到 hadoop 源碼主目錄 /opt/hadoop-2.7.2-src,通過 maven 執行編譯命令
mvn package -Pdist,native -DskipTests -Dtar
??等待時間 2 小時左右。
- 成功的 64 位 hadoop 包在 /opt/hadoop-2.7.2-src/hadoop-dist/target 下
總結
以上是生活随笔為你收集整理的Hadoop 入门教程(超详细)[通俗易懂](到底什么是Hadoop)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: flash怎么放大缩小图片并改变中心位置
- 下一篇: 文献记录(part83)--Buildi
