1引言
hadoop如今已經成為大數據處理中不可缺少的關鍵技術,在如今大數據爆炸的時代,hadoop給我們處理海量數據提供了強有力的技術支撐。因此,了解hadoop的原理與應用方法是必要的技術知識。
hadoop的基礎原理可參考如下的三篇論文:
2 hadoop在WMware虛擬機上的配置
2.1 准備工作
2.1.1 軟件整理
首先,我們需要先確定好配置hadoop所需的所有軟件工具,它們分別是:
- VMware軟件 -- *VMware® Workstation 10.0.1
- Linux操作系統 -- CentOS-6.3-x86_64 (下載地址:http://ftp.stu.edu.tw/)
- JDK -- Java SE Development Kit 7u40 (早期jdk版本的下載地址:http://www.oracle.com/technetwork/java/javase/archive-139210.html)
- Hadoop -- hadoop-1.2.1x8664(下載地址:http://www-eu.apache.org/dist/hadoop/common/)
- 最好再安裝上Xmanager,方便后續操作
2.1.2 思路整理
由於hadoop的配置不像其他某些庫或者包那樣簡單,因此,有必要在實際展開配置之前梳理一下整體hadoop的配置思路。
- 在虛擬機中安裝一台CentOS系統;
- 主機名、ip、hosts、防火牆等基礎配置;
- 配置jdk;
- 克隆虛擬機,得到三台相同機器,並修改各自的基礎配置信息;
- 配置hadoop;
- 配置ssh免密碼登錄;
- hadoop初始准備工作;
- 運行hadoop
2.2 Hadoop的配置過程
2.2.1 安裝CentOS虛擬機
這里不做詳細的虛擬機安裝介紹,網上可查到很多相關資料。需要注意的有幾點:
- 虛擬機的內存設置最好大於512MB,否則無法開啟GUI,我這里設定的是1024MB
- 虛擬機網絡模式設置為橋接模式,並設定主機上的 VMnet8 的 IP 地址與子網掩碼,我這里分別設置為
192.168.66.1
和255.255.255.0
2.2.2 主機名、ip、防火牆的配置
- 主機名
當前的主機名可通過 hostname
命令進行查看,為了后續多台機器名稱的統一,在此筆者將第一台主機設置為 node1,以后克隆的主機可依次命名為 node2, node3, node4 ... 主機名的配置文件位於 /etc/sysconfig/network
文件中,打開該文件,更改為如下內容:
NETWORKING=yes
HOSTNAME=node1
同時,可預先設置主機名與IP的映射關系,修改 /etc/hosts
文件為如下內容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.66.100 node1
192.168.66.101 node2
192.168.66.102 node3
192.168.66.103 node4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
這里我們預先將其余的幾個節點的ip地址設定到hosts文件中,以便后續可直接通過名稱訪問。
- IP設置
我們需要將此台機器的IP設定為靜態的,且與我們最開始在主機的VMnet8上設置的IP在同一個網段內,此處筆者設置的為 IP號:192.168.66.100
,子網掩碼:255.255.255.0
,網關:192.168.66.1
(該IP為NameNode使用,后續的多個DataNode分別設置為: .101; .102; .103...)。修改方法可直接在系統可視化界面的右上角點擊網絡設置進行交互式設定,或直接對配置文件:/etc/sysconfig/network-scripts/ifcfg-eth0
進行修改,修改內容如下:
DEVICE="eth0"
BOOTPROTO=static
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="797cd6db-9499-4d45-85e8-b3e841bbcad5"
IPADDR=192.168.66.100
PREFIX=24
GATEWAY=192.168.66.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
HWADDR=00:0C:29:44:24:87
LAST_CONNECT=1500978980
- 防火牆
為了今后各節點之間通信不會受到防火牆的限制,暫且先將防火牆關閉,相關命令如下:
service iptables status # 查看當前防火牆的狀態
service iptables stop # 關閉防火牆
service iptables start # 開啟防火牆
最后可測試一下從Windows主機上是否能夠與Linux虛擬機通信,可直接在主機的控制台輸入 ping 192.168.66.100
,查看結果。
2.2.3 配置JDK
關於jdk的安裝配置網上教程很多,這里簡單做一下介紹,筆者將下載后的 jdk-7u40-linux-x64.tar.gz 文件解壓,並放置在/opt/dev/java/目錄下(*筆者的開發包目錄統一設定為 /opt/dev/
目錄下).
// 解壓與移動代碼:
tar -zxvf 文件名
mv 解壓后的文件名 jdk
mv jdk /opt/dev/java/
接下來進行java環境變量的配置,打開 /etc/profile
配置文件,該文件是專門用來管理系統環境變量,配置之后對所有的用戶均有效。
// 在文件末尾追加以下內容:
#set java environment
export JAVA_HOME=/opt/dev/java/jdk
export CLASSPATH=".:$JAVA_HOME/lib:$CLASSPATH"
export PATH="$JAVA_HOME/bin:$PATH"
保存退出之后,可用 source /etc/profile
來重新加載配置文件,但由於該種操作存在弊端,因此可以通過 logout
命令重新登錄較為穩妥。
最后可在控制台中輸入 java -version
來檢查是否配置成功。配置成功后可看到如下信息:
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
2.2.4 克隆多台主機
該步驟較為簡單,直接通過VMware自帶的克隆功能進行克隆即可(需選擇完全克隆)。此處筆者克隆了另外兩台,分別設置名為 node2 和 node3,並設定了相應的IP地址。
2.2.5 配置hadoop
到了最關鍵的hadoop配置,首先將下載的 hadoop-1.2.1-bin.tar.gz 文件進行解壓,同樣放置在 /opt/dev/hadoop
目錄下。接下來開始分別對幾個關鍵的配置文件進行修改。
- 配置hadoop-env.sh
打開hadoop-env.sh文件,找到JAVA_HOME關鍵字所在的行,去掉最前面的#號,然后修改成本機的JAVA_HOME地址:
export JAVA_HOME=/opt/dev/java/jdk
- 配置core-site.xml
打開hadoop目錄中的conf文件夾,打開其中的core-site.xml文件,在其中的configuration標簽中加入以下內容:
<!—fs.default.name:用來配置namenode,指定HDFS文件系統的URL,通過該URL我們可以訪問文件系統的內容,也可以把localhost換成本機IP地址;如果是完全分布模式,則必須把localhost改為實際namenode機器的IP地址;如果不寫端口,則使用默認端口8020。 -->
<property>
<name>fs.default.name</name>
<value>hdfs://node1:9000</value>
</propety>
<!-- hadoop.tmp.dir:Hadoop的默認臨時路徑,這個最好需要配置一下,如果在新增節點或者其他情況下莫名其妙的DataNode啟動不了,就刪除此文件中的tmp目錄即可。不過如果刪除了NameNode機器的此目錄,那么就需要重新執行NameNode格式化的命令。該目錄必須預先手工創建。-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/hadoop-1.2.1/</value>
</property>
- 配置hdfs-site.xml
打開hdfs-site.xml文件,修改內容如下:
<!—用來設置文件系統冗余備份數量,因為只有2個節點,所以設置為2,系統默認數量為3-->
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
- 配置mapred-site.xml
在該文件中的修改內容如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>node1:9001</value>
</property>
</configuration>
2.2.6 配置SSH免密碼登錄
2.2.6.1 SSH的相關概念
首先需要介紹一下SSH是什么,很多人在初次接觸hadoop時,只是簡單的按照說明進行了一步步的模仿,但並不懂得其本質的道理,因此造成很多人在配置過程中出現錯誤,無法繼續前進,所以有必要先對SSH的基本概念做一些闡述,在理解的基礎上進行配置。
我們知道,在同一個局域網內(相同的網關),兩台機器可以相互訪問,但是我們通常需要輸入用戶名和密碼才能登陸從A機器登陸到另B機器上,此時,我們A機器的使用者需要知曉B機器的用戶名和密碼。那么SSH的作用就在於,當A想登陸到B時,如何設定一種協議,使得其無需提供密碼就能完成登陸。
SSH(Security Shell)免密碼登陸的設計思想是:在A機器上生成一個公鑰(在id_dsa.pub文件中)如果B機器也擁有這個公鑰(放置在authorized_keys文件中),那么就可以認為A登陸到B是安全的,或者說B機器許可了A機器來登陸。
2.2.6.2 Hadoop中的SSH免密碼登陸設置
由於hadoop整個集群系統至少需要NameNode節點可以免密碼登陸到所有其他DataNode節點,因此,結合上述概念,我們可以知道,這里我們需要完成的主要配置任務包含如下兩點:
- 讓每台機器生成自己的公鑰(id_dsa.pub文件),並實現本地可免密碼登陸,即每台機器自己的 authorized_keys 文件中包含自己的公鑰。
- 讓每個DataNode節點擁有NameNode節點的公鑰,集每個DataNode的 authorized_keys 文件中還包含了NameNode的公鑰。
具體的配置操作如下:
本地完成SSH免密碼登陸的配置:
-
生成公鑰:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
-
將公匙添加到authorized_keys文件中:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
此時可測試本地是否可以免密碼登陸:
ssh localhost #ssh登陸,若不詢問輸入密碼,則配置成功
exit #退出ssh登陸
同理,將公匙復制到 node2 和 node3 的 authorized_keys 文件中,就可以讓 node1 免密碼登錄到 node2 和 node3:
-
在node1上輸入遠程復制命令:
scp ~/.ssh/id_dsa.pub root@node2:~/
scp ~/.ssh/id_dsa.pub root@node3:~/
-
分別到 node2 和 node3 機器上,添加 node1 的公匙信息到 authorized_keys 文件中:
cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
此時,可到node1上進行登陸測試。
同理,在node2生成公匙,然后復制到node1和node3的authorized_keys文件中,這樣node2就可以無密碼登錄node1和node3, node3也可做相同的操作。
以上就是三台虛擬機的SSH免密碼登錄配置方法,當然,可以根據實際的使用情況來設置,hadoop並不一定非要三台都支持雙向的免密碼登錄。
2.2.7 啟動hadoop
最后就是hadoop的啟動環節了,具體操作可按如下順序進行。
2.2.7.1 配置hadoop環境變量
為方便今后的使用,可在環境變量中加入hadoop的bin目錄,打開 /etc/profile
文件,添加如下內容:
# set hadoop environment
export HADOOP_INSTALL=/opt/dev/hadoop/hadoop-1.2.1
export PATH=${HADOOP_INSTALL}/bin:$PATH
配置完成后,使用logout登出,再重新登錄,輸入 hadoop version
,若配置成功,可查看到如下內容:
[root@node1 ~]# hadoop version
Hadoop 1.2.1
Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152
Compiled by mattf on Mon Jul 22 15:23:09 PDT 2013
From source with checksum 6923c86528809c4e7e6f493b6b413a9a
This command was run using /opt/dev/hadoop/hadoop-1.2.1/hadoop-core-1.2.1.jar
2.2.7.2 格式化NameNode
輸入如下命令即可:
hadoop namenode –format
2.2.7.3 啟動hadoop進程
輸入 start-all.sh
,若只想先啟動分布式文件系統,可輸入 start-dfs.sh
。
2.2.7.4 查看相關信息
我們可以從Windows主機或者虛擬機中的瀏覽器訪問hadoop。
首先需要設置Windows主機上的host文件,目錄位置: C:\Windows\System32\drivers\etc\hosts
,添加虛擬機的三個節點的主機名與IP的映射關系:
#hadoop-cluster
192.168.66.100 node1
192.168.66.101 node2
192.168.66.102 node3
192.168.66.103 node4
-
查看NameNode提供的DFS信息:
-
查看jobtracker信息:
----- 至此,Hadoop的基本配置就已基本完成。-----
2017/7/25 22:02:26