Hadoop,分布式的大資料存放區和計算, 免費開源!有Linux基礎的同學安裝起來比較順風順水,寫幾個設定檔就可以啟動了,本人菜鳥,所以寫的比較詳細。為了方便,本人使用三台的虛擬機器系統是Ubuntu-12。設定虛擬機器的網路連接使用橋接方式,這樣在一個區域網路方便調試。單機和叢集安裝相差不多,先說單機然後補充叢集的幾點配置。
第一步,先安裝工具軟體
編輯器:vim
複製代碼 代碼如下:
sudo apt-get install vim
ssh伺服器: openssh,先安裝ssh是為了使用遠程終端工具(putty或xshell等),這樣管理虛擬機器就方便多了。
複製代碼 代碼如下:
sudo apt-get install openssh-server
第二步,一些基本設定
最好給虛擬機器設定固定IP
複製代碼 代碼如下:
sudo vim /etc/network/interfaces
加入以下內容:
iface eth0 inet static
address 192.168.0.211
gateway 192.168.0.222
netmask 255.255.255.0
修改機器名,我這裡指定的名字是:hadoopmaster ,以後用它做namenode
複製代碼 代碼如下:
sudo vim /etc/hostname
修改hosts,方便應對IP變更,也方便記憶和識別
複製代碼 代碼如下:
sudo vim /etc/hosts
加入內容:
192.168.0.211 hadoopmaster
第三步,添加一個專門為hadoop使用的使用者
複製代碼 代碼如下:
sudo addgroup hadoop
sudo adduser -ingroup hadoop hadoop
設定hadoop使用者的sudo許可權
複製代碼 代碼如下:
sudo vim /etc/sudoers
在 root ALL=(ALL:ALL)
下面加一行 hadoop ALL=(ALL:ALL)
切換到hadoop使用者 su hadoop
第四步,解壓安裝JDK,HADOOP,PIG(順便把PIG也安裝了)
複製代碼 代碼如下:
sudo tar zxvf ./jdk-7-linux-i586.tar.gz -C /usr/local/jvm/
sudo tar zxvf ./hadoop-1.0.4.tar.gz -C /usr/local/hadoop
sudo tar zxvf ./pig-0.11.1.tar.gz -C /usr/local/pig
修改解壓後的目錄名並且最終路徑為:
複製代碼 代碼如下:
jvm: /usr/local/jvm/jdk7
hadoop: /usr/local/hadoop/hadoop (注意:hadoop所有節點的安裝路徑必須相同)
pig: /usr/local/pig
設定目錄所屬使用者
複製代碼 代碼如下:
sudo chown -R hadoop:hadoop jdk7
sudo chown -R hadoop:hadoop hadoop
sudo chown -R hadoop:hadoop pig
設定環境變數, 編輯~/.bashrc 或 ~/.profile 檔案加入
複製代碼 代碼如下:
export JAVA_HOME=/usr/local/jvm/jdk7
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export HADOOP_INSTALL=/usr/local/hadoop/hadoop
export PATH=${HADOOP_INSTALL}/bin:$PATH
source ~/.profile 生效
第五步,.ssh無密碼登入本機,也就是說ssh到本機不要求輸入密碼
複製代碼 代碼如下:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
如果不起作用請修改許可權:
複製代碼 代碼如下:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
authorized_keys相當於白名單,id_rsa.pub是公開金鑰,凡是在authorized_keys有要求者機器的公開金鑰時ssh伺服器直接允許存取,無需密碼!
第六步,Hadoop必要設定
所有設定檔案在hadoop/conf目錄下
1、hadoop-env.sh 找到 #export JAVA_HOME 去掉注釋#,並設定實際jdk路徑
2、core-site.xml
複製代碼 代碼如下:
<property>
<name>fs.default.name</name>
<value>hdfs://hadoopmaster:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
3、mapred-site.xml
複製代碼 代碼如下:
<property>
<name>mapred.job.tracker</name>
<value>hadoopmaster:9001</value>
</property>
4、hdfs-site.xml
複製代碼 代碼如下:
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/datalog1,/usr/local/hadoop/datalog2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/data1,/usr/local/hadoop/data2</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
5、檔案masters 和 檔案slaves, 單機寫 localhost 即可
第七步,啟動Hadoop
格式化Hadoop的HDFS檔案系統
複製代碼 代碼如下:
hadoop namenode -format
執行Hadoop啟動指令碼,如果是叢集的話在master上執行,其他slave節點Hadoop會通過ssh執行:
複製代碼 代碼如下:
start-all.sh
執行命令 jps 如果顯示有: Namenode,SecondaryNameNode,TaskTracker,DataNode,JobTracker等五個進程表示啟動成功了!
第八步,叢集的配置
所有其他單機的安裝跟上面相同,下面只增加叢集的額外配置!
最好先配置好一台單機,其他的可以通過scp直接複製,路徑也最好相同包括java!
本例的主機列表(設定hosts):
設定ssh,讓master能夠不要密碼登入到其他slaves上,主要用來啟動slaves
複製代碼 代碼如下:
複製hadoopmaster下id_rsa.pub到子結點:
scp ./ssh/id_rsa.pub hadoopnode1:/home/hadoop/.ssh/id_master
scp ./ssh/id_rsa.pub hadoopnode2:/home/hadoop/.ssh/id_master
分別在子結點~/.ssh/目錄下執行:
cat ./id_master >> authorized_keys
masters檔案,添加作為secondarynamenode或namenode的主機名稱,一行一個。
叢集寫master名如:hadoopmaster
slaves檔案,添加作為slave的主機名稱,一行一個。
叢集寫子結點名:如 hadoopnode1、hadoopnode2
Hadoop管理
hadoop啟動後會啟動一個任務管理服務和一個檔案系統管理服務,是兩個基於JETTY的WEB服務,所以可線上通過WEB的方式查看運行情況。
任務管理服務運行在50030連接埠,如 http://127.0.0.1:50030檔案系統管理服務運行在50070連接埠。
參數說明:
1、dfs.name.dir:是NameNode持久儲存名字空間及交易記錄的本地檔案系統路徑。 當這個值是一個逗號分割的目錄列表時,nametable資料將會被複製到所有目錄中做冗餘備份。
2、dfs.data.dir:是DataNode存放塊資料的本地檔案系統路徑,逗號分割的列表。 當這個值是逗號分割的目錄列表時,資料將被儲存在所有目錄下,通常分布在不同裝置上。
3、dfs.replication:是資料需要備份的數量,預設是3,如果此數大於叢集的機器數會出錯。