本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,博主為石山園,博客地址為 http://www.cnblogs.com/shishanyuan 。該系列課程是應邀實驗樓整理編寫的,這里需要贊一下實驗樓提供了學習的新方式,可以邊看博客邊上機實驗,課程地址為 https://www.shiyanlou.com/courses/237
【注】該系列所使用到安裝包、測試文件和代碼可以在百度網盤下載,具體地址為 http://pan.baidu.com/s/10PnDs ,下載該PDF文件
1、Hadoop介紹
1.1Hadoop簡介
Apache Hadoop軟件庫是一個框架,允許在集群服務器上使用簡單的編程模型對大數據集進行分布式處理。Hadoop被設計成能夠從單台服務器擴展到數以千計的服務器,每台服務器都有本地的計算和存儲資源。Hadoop的高可用性並不依賴硬件,其代碼庫自身就能在應用層偵測並處理硬件故障,因此能基於服務器集群提供高可用性的服務。
1.2Hadoop生態系統
經過多年的發展形成了Hadoop1.X生態系統,其結構如下圖所示:
lHDFS--Hadoop生態圈的基本組成部分是Hadoop分布式文件系統(HDFS)。HDFS是一種數據分布式保存機制,數據被保存在計算機集群上,HDFS為HBase等工具提供了基礎。
lMapReduce--Hadoop的主要執行框架是MapReduce,它是一個分布式、並行處理的編程模型,MapReduce把任務分為map(映射)階段和reduce(化簡)。由於MapReduce工作原理的特性, Hadoop能以並行的方式訪問數據,從而實現快速訪問數據。
lHbase--HBase是一個建立在HDFS之上,面向列的NoSQL數據庫,用於快速讀/寫大量數據。HBase使用Zookeeper進行管理,確保所有組件都正常運行。
lZookeeper--用於Hadoop的分布式協調服務。Hadoop的許多組件依賴於Zookeeper,它運行在計算機集群上面,用於管理Hadoop操作。
lPig--它是MapReduce編程的復雜性的抽象。Pig平台包括運行環境和用於分析Hadoop數據集的腳本語言(Pig Latin)。其編譯器將Pig Latin翻譯成MapReduce程序序列。
lHive--Hive類似於SQL高級語言,用於運行存儲在Hadoop上的查詢語句,Hive讓不熟悉MapReduce開發人員也能編寫數據查詢語句,然后這些語句被翻譯為Hadoop上面的MapReduce任務。像Pig一樣,Hive作為一個抽象層工具,吸引了很多熟悉SQL而不是Java編程的數據分析師。
lSqoop是一個連接工具,用於在關系數據庫、數據倉庫和Hadoop之間轉移數據。Sqoop利用數據庫技術描述架構,進行數據的導入/導出;利用MapReduce實現並行化運行和容錯技術。
lFlume提供了分布式、可靠、高效的服務,用於收集、匯總大數據,並將單台計算機的大量數據轉移到HDFS。它基於一個簡單而靈活的架構,並提供了數據流的流。它利用簡單的可擴展的數據模型,將企業中多台計算機上的數據轉移到Hadoop
1.3Apache版本衍化
Apache Hadoop版本分為兩代,我們將第一代Hadoop稱為Hadoop 1.0,第二代Hadoop稱為Hadoop 2.0。第一代Hadoop包含三個大版本,分別是0.20.x,0.21.x和0.22.x,其中,0.20.x最后演化成1.0.x,變成了穩定版,而0.21.x和0.22.x包含NameNode HA等新的重大特性。第二代Hadoop包含兩個版本,分別是0.23.x和2.x,它們完全不同於Hadoop 1.0,是一套全新的架構,均包含HDFS Federation和YARN兩個系統,相比於0.23.x,2.x增加了NameNode HA和Wire-compatibility兩個重大特性。
2、Hadoop1.X偽分布安裝
Hadoop安裝有如下三種方式
l單機模式:安裝簡單,幾乎不用作任何配置,但僅限於調試用途;
l偽分布模式:在單節點上同時啟動NameNode、DataNode、JobTracker、TaskTracker、Secondary Namenode等5個進程,模擬分布式運行的各個節點;
l完全分布式模式:正常的Hadoop集群,由多個各司其職的節點構成
由於實驗環境的限制,本節課程將講解偽分布模式安裝,並在隨后的課程中以該環境為基礎進行其他組件部署實驗。以下為偽分布式環境下在CentOS6中配置Hadoop-1.1.2,該配置可以作為其他Linux系統和其他版本的Hadoop部署參考。
2.1軟硬件環境說明
所有節點均是CentOS系統,防火牆和SElinux禁用,所有節點上均創建了一個shiyanlou用戶,並在系統根目錄下創建/app目錄,用於存放Hadoop等組件運行包。因為該目錄用於安裝hadoop等組件程序,用戶對shiyanlou必須賦予rwx權限(一般做法是root用戶在根目錄下創建/app目錄,並修改該目錄擁有者為shiyanlou(chown –R shiyanlou:shiyanlou /app)。
Hadoop搭建環境:
l 虛擬機操作系統: CentOS6.6 64位,單核,1G內存
l JDK:1.7.0_55 64位
l Hadoop:1.1.2
2.2環境搭建(實驗樓虛擬機已設置,以下提供參考)
實驗環境的虛擬機已經完成的安裝環境的配置,其他環境部署時可以參考該章節進行環境搭建。
2.2.1配置本地環境
該部分對服務器的配置需要在服務器本地進行配置,配置完畢后需要重啟服務器確認配置是否生效,特別是遠程訪問服務器需要設置固定IP地址。
2.2.1.1設置IP地址
1. 點擊System-->Preferences-->Network Connections,如下圖所示:
2. 修改或重建網絡連接,設置該連接為手工方式,設置如下網絡信息:
IP地址: 192.168.42.11
子網掩碼: 255.255.255.0
網關: 192.168.42.1
DNS: 221.12.1.227 (需要根據所在地設置DNS服務器)
Domain: 221.12.33.227
注意:網關、DNS等根據所在網絡實際情況進行設置,並設置連接方式為"Available to all users",否則通過遠程連接時會在服務器重啟后無法連接服務器
3.在命令行中,使用ifconfig命令查看設置IP地址信息,如果修改IP不生效,需要重啟機器再進行設置(如果該機器在設置后需要通過遠程訪問,建議重啟機器,確認機器IP是否生效)
2.2.1.2設置機器名
使用sudo vi /etc/sysconfig/network 打開配置文件,根據實際情況設置該服務器的機器名,新機器名在重啟后生效
2.2.1.3設置Host映射文件
1. 設置IP地址與機器名的映射,設置信息如下:
sudo vi /etc/hosts
l 192.168.42.8 b393a04554e1 hadoop
2.使用如下命令對網絡設置進行重啟
sudo /etc/init.d/network restart
3.使用ping命令驗證設置是否成功
2.2.2設置操作系統環境
2.2.2.1關閉防火牆
在Hadoop安裝過程中需要關閉防火牆和SElinux,否則會出現異常
1.使用sudo service iptables status 查看防火牆狀態,如下所示表示iptables已經開啟
2.以root用戶使用如下命令關閉iptables
chkconfig iptables off
2.2.2.2關閉SElinux
1.使用sudo getenforce命令查看是否關閉,如果顯示Enforcing表示沒有關閉
2. 修改/etc/selinux/config 文件
將SELINUX=enforcing改為SELINUX=disabled,執行該命令后重啟機器
2.2.2.3JDK安裝及配置
1.下載JDK1.7 64bit安裝包
打開JDK1.7 64bit安裝包下載鏈接為:
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
打開界面之后,先選中 Accept License Agreement ,然后下載 jdk-7u55-linux-x64.tar.gz,如下圖所示:
2.創建/app目錄,把該目錄的所有者修改為shiyanlou
sudo mkdir /app
sudo chown -R shiyanlou:shiyanlou /app
3. 創建/app/lib目錄,使用命令如下:
mkdir /app/lib
4.把下載的安裝包解壓並遷移到/app/lib目錄下
cd /home/shiyanlou/install-pack
tar -zxf jdk-7u55-linux-x64.tar.gz
mv jdk1.7.0_55/ /app/lib
ll /app/lib
5.使用sudo vi /etc/profile命令打開配置文件,設置JDK路徑
export JAVA_HOME=/app/lib/jdk1.7.0_55
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
6.編譯並驗證
source /etc/profile
java -version
2.2.2.4更新OpenSSL
CentOS自帶的OpenSSL存在bug,如果不更新OpenSSL在Ambari部署過程會出現無法通過SSH連接節點,使用如下命令進行更新:
yum update openssl
2.2.2.5SSH無密碼驗證配置
1.使用sudo vi /etc/ssh/sshd_config打開sshd_config配置文件,開放三個配置,如下圖所示:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
2.配置后重啟服務
sudo service sshd restart
3.使用shiyanlou用戶登錄使用如下命令生成私鑰和公鑰;
ssh-keygen -t rsa
4.進入/home/shiyanlou/.ssh目錄把公鑰命名為authorized_keys,使用命令如下:
cp id_rsa.pub authorized_keys
5.使用如下設置authorized_keys讀寫權限
chmod 400 authorized_keys
6.測試ssh免密碼登錄是否生效
2.3 Hadoop變量配置
2.3.1解壓並移動hadoop安裝包
在Apache的歸檔目錄中下載hadoop-1.1.2-bin.tar.gz安裝包,也可以在/home/shiyanlou/install-pack目錄中找到該安裝包,解壓該安裝包並把該安裝包復制到/app目錄中
cd /home/shiyanlou/install-pack
tar -xzf hadoop-1.1.2-bin.tar.gz
mv hadoop-1.1.2 /app
2.3.2在hadoop-1.1.2目錄下創建子目錄
cd /app/hadoop-1.1.2
mkdir tmp
mkdir hdfs
mkdir hdfs/name
mkdir hdfs/data
ls
把hdfs/data設置為755,否則DataNode會啟動失敗
2.3.3配置hadoop-env.sh
1.進入hadoop-1.1.2/conf目錄,打開配置文件hadoop-env.sh
cd /app/hadoop-1.1.2/conf
vi hadoop-env.sh
2.加入配置內容,設置了hadoop中jdk和hadoop/bin路徑
export JAVA_HOME=/app/lib/jdk1.7.0_55
export PATH=$PATH:/app/hadoop-1.1.2/bin
3.編譯配置文件hadoop-env.sh並確認生效
source hadoop-env.sh
hadoop version
2.3.4配置core-site.xml
1.使用如下命令打開core-site.xml配置文件
cd /app/hadoop-1.1.2/conf
sudo vi core-site.xml
2.在配置文件中,按照如下內容進行配置
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop-1.1.2/tmp</value>
</property>
</configuration>
2.3.5配置hdfs-site.xml
1.使用如下命令打開hdfs-site.xml配置文件
cd /app/hadoop-1.1.2/conf
sudo vi hdfs-site.xml
2.在配置文件中,按照如下內容進行配置
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/app/hadoop-1.1.2/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/app/hadoop-1.1.2/hdfs/data</value>
</property>
</configuration>
2.3.6配置mapred-site.xml
1.使用如下命令打開mapred-site.xml配置文件
cd /app/hadoop-1.1.2/conf
sudo vi mapred-site.xml
2.在配置文件中,按照如下內容進行配置
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop:9001</value>
</property>
</configuration>
2.3.7配置masters和slaves文件
1.設子主節點
cd /app/hadoop-1.1.2/conf
vi masters
設置hadoop機器為master節點
2.設置從節點
cd /app/hadoop-1.1.2/conf
vi slaves
設置hadoop機器為slaves節點,即本身即是master也是slaves節點
2.3.8格式化namenode
在hadoop機器上使用如下命令進行格式化namenode
cd /app/hadoop-1.1.2/bin
./hadoop namenode -format
2.3.9啟動hadoop
cd /app/hadoop-1.1.2/bin
./start-all.sh
2.3.10 用jps檢驗各后台進程是否成功啟動
使用jps命令查看hadoop相關進程是否啟動
這時我們發現少了一個DataNode進程,到$HADOOP_HOME/logs目下,使用cat hadoop-shiyanlou-datanode-5****.log(***表示所在機器名)查看日志文件,可以看到在日志中提示:Invalid directory in dfs.data.dir:Incorrect permission for /app/hadoop-1.1.2/hdfs/data, expected:rwxr-xr-x, while actual: rwxrwxr-x
sudo chmod 755 /app/hadoop-1.1.2/hdfs/data
重新啟動hadoop集群,可以看到DataNode進程