因公司項目打算往hadoop方向走,也打算正式的學習一下。第一次在工作中聽到hadoop還是在4年前,當時我們公司的一個技術大拿跟我說有時間可以考慮學習一下hadoop。當時所在的是屬於爲國企提供軟件服務的小公司,其所需的技術含量和處理的數據量感覺完全跟所謂的“大數據”掛不上勾.後面從該公司來到深圳之後進入現在的公司,才正式的接觸到億級以上的數據量的處理。也正是從接觸這種億級以上的數據量的處理時才真正的對所謂的性能優化有所瞭解和學習。採用的是傳統的IOE架構,在日常工作中經常因程序運行性能問題而需分析和優化oracle的執行計劃、索引等問題。隨着公司業務量增長和前端數據結構方式變更,數據量猛增,慢慢的oracle已經表現得非常吃力。平時的運維成本也逐步增加(最主要是調優)。因此打算引入Hadoop來解決其中一部分非常耗時和重要的分析型計算。
本文采用在VMware上面安裝Redhat6.5 64位操作系統。hadoop版本爲2.7.3.此處操作系統強烈建議64位,否則需要對hadoop進行一些編譯才能使用。
在虛擬機上面創建配置好一臺,然後進行克隆。最終準備三臺虛擬機。
hadoopMaster (192.168.1.150)
hadoopSlaver01(192.168.1.151)
hadoopSlaver02(192.168.1.152)
此處IP地址剛開始設置的時候是從100開始(101、102、103),因爲在虛擬機裏面來回切換非常麻煩。打算使用xshell或者其他的工具軟件從宿主機連到虛擬機進行操作。但發現ssh會經常連不上或者連上之後經常性的斷。檢查各種配置防火牆、ssh配置等一直定位不到準確的問題。後面在一篇文章中發現有提到IP衝突,一開始檢查沒有發現(三臺虛擬機是100、101、102,宿主機104,完全沒衝突啊)。後面在另外一篇關於路由器的文章中介紹到DHCP默認是從100開始分配地址(不管文章本身是否正確,但我家裏的確實是從100開始分配)。乍一看還是沒有發現到問題,這時候我老婆突然跑過來跟我說手機上不了網了,我看着她手上的手機立馬跑到路由器查看,結果:
跟家裏的手機和Ipad地址衝突!!!!!!
主要安裝步驟:
1、安裝Redhat6.5
2、操作系統相關設置
3、安裝和配置JDK
4、配置和測試Hadoop集羣
1、安裝Redhat6.5
1、按照正常步驟安裝好Redhat6.5(選擇base server,mini後面需要手動安裝的程序包太多,Desktop安裝了太多無用的程序包)
2、安裝完只有需要配置自動掛載安裝鏡像文件,然後配置yum本地庫指向掛載目錄。具體步驟:http://jingyan.baidu.com/article/bad08e1e9900ec09c8512105.html (可解決後面程序需要安裝的軟件包,此步驟不是hadoop安裝成功的必要條件,可以在需要安裝的時候手動掛載)
3、如果需要想讓宿主機與虛擬機實現文件共享,先下載VMTools工具包,設置虛擬機共享目錄.磨刀不誤砍柴工。
4、以上操作系統的安裝請自行查詢。不再一一詳解。
5、虛擬機的網絡模式採用橋接模式,使每一臺虛擬機都成爲局域網內一臺獨立的電腦
2、操作系統相關設置
關閉防火牆和Selinux
鑑於初次安裝及屬於自己學習環境,爲了不被防火牆等各種限制。在Master和Slaver上都直接關閉防火牆和Selinux
#/etc/selinux/config 文件中的 SELINUX="" 爲 disabled ,然後重啓(永久有效)
#chkconfig iptables off 關閉防火牆 (永久有效)
配置固定IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0 #編輯配置文件,添加修改以下內容
BOOTPROTO=static #啓用靜態IP地址
ONBOOT=yes #開啓自動啓用網絡連接
IPADDR=192.168.1.150 #設置IP地址(配置信息參照宿主機)
NETMASK=255.255.255.0 #設置子網掩碼
GATEWAY=192.168.0.1 #設置網關
DNS1=8.8.8.8 #設置主DNS
DNS2=8.8.4.4 #設置備DNS
保存後 service network restart重啓網絡
修改主機名和IP映射
#修改主機名
#vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop
#修改IP映射
vim /etc/hosts
192.168.1.150 hadoopMaster
192.168.1.151 hadoopSlaver01
192.168.1.152 hadoopSlaver02
#註釋掉127.0.0.1 localhost的配置,在haoop集羣驗證的時候因爲這個配置報錯。
創建hadoop用戶
# useradd -d /home/hadoop -m hadoop
# passwd hadoop
# 設置密碼
# visudo 通過visudo命令修改/etc/sudoers文件
在root ALL=(ALL) ALL,在這行後面添加:hadoop ALL=(ALL) ALL
可以通過sudo 命令使hadoop用戶臨時獲取root權限(避免使用root用戶登錄和操作)。後續操作全部使用hadoop用戶,如果沒有權限則使用sudo.
配置ssh免密碼登錄
因爲hadoop是一個在運行在集羣只是的軟件,自然需要在多臺服務器之間進行通信和操作。怎麼讓集羣裏的各個機器之間進行安全通信而不需要用戶每次輸入授權密碼呢?這就是ssh免密碼登錄的作用所在。可以理解成它就是將訪問從對稱密碼(即傳統的用戶名和密碼)改成非對稱密碼進行訪問
在配置ssh免密碼登錄之前請自行先了解RSA非對稱加密算法相關知識。
在Master上面生成RSA私鑰和公鑰
將公鑰id_rsa.pub複製到authorized_keys文件中
將authorized_keys複製到需要免密碼登錄的主機(Slaver01和Slaver02)中(注意權限爲600,不能多不能少,少了沒法執行,多了系統會認爲不安全)
簡單來說就是將Master的公鑰分發給各個slaver中,Master使用自己的私鑰進行加密發送給Slaver。Slaver通過Master的公鑰來進行解密確認身份。因爲在RSA非對稱加密算法中用公鑰加密的內容只能用私鑰解密,用私鑰加密的內容只能 用公鑰解密。這樣Slaver就能夠確認消息一定是從Master發送過來且是沒有被篡改的。
3、安裝和配置JDK
1、JDK版本需要在1.7+,本文安裝的是JDK1.8
安裝步驟:
cd /usr
mkdir java
a)將jdk-8u60-linux-x64.tar.gz拷貝到java目錄下
b)解壓jdk到當前目錄
tar -zxvf jdk-8u60-linux-x64.tar.gz
c)安裝完畢爲他建立一個鏈接以節省目錄長度
ln -s /usr/java/jdk1.8.0_60/ /usr/jdk.8
d).編輯配置文件,配置環境變量
cat /etc/profile,會發現如下一段描述。
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
也就是profile其實會去讀取/etc/profile.d目錄下的所有配置文件,這樣也便於配置文件的維護。因此直接在/etc/profile.d目錄下創建一個jdk1.8.sh配置文件
添加如下內容:
JAVA_HOME=/usr/jdk1.8
CLASSPATH=$JAVA_HOME/lib/
HADOOP_HAOME
PATH=$PATH:$JAVA_HOME/bin:$
export PATH JAVA_HOME CLASSPATH
e)執行source profile
f) 測試java安裝是否成功 java -version。如果操作系統本身安裝的jdk,需要卸載掉原先已經存在的jdk
4、配置Hadoop集羣
參照:http://blog.csdn.net/xiaoxiangzi222/article/details/52757168
官方文檔:http://hadoop.apache.org/docs/r1.0.4/cn/cluster_setup.html
http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/ClusterSetup.html
其中1.04雖然版本很久,但是中文版的。有些翻譯會比較準確有一定的參考價值。可以對照最新的參考文檔進行一步步配置。