生而有涯而學無涯
最近使用VMWare搭建了一個虛擬的Hadoop集羣環境,搭建的過程中參考了很多網上大神的資料,在這裏記錄下本人實踐的全過程,用於以後的查詢參考使用,參考的資料會在文末貼出對應的鏈接。
集羣配置詳情
hostname | ip address | os(Centos7mini) |
---|---|---|
master | 192.168.224.100 | Centos7(mini) |
slave1 | 192.168.224.201 | Centos7(mini) |
slave2 | 192.168.224.202 | Centos7(mini) |
其中,master爲name node和job tracker結點,slaveN爲data node和task tracker
集羣機器安裝步驟
1.配置虛擬網絡
在這裏主要是配置虛擬集羣的網段及網關。
2.創建虛擬機
網上關於安裝虛擬機的教程有很多,按照教程安裝即可。我在安裝的過程中選擇內存1G,1個處理器,20G磁盤,NAT網絡方式,使用root登錄,沒有創建其他用戶。
3.配置網絡
3.1關閉SELINUX:
vi /etc/selinux/config
SELINUX=disabled
:wq
3.2關閉防火牆:CentOS默認使用firewall作爲防火牆。
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動
firewall-cmd --state #查看默認防火牆狀態
3.3修改IP地址爲靜態地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33(ens33--是虛擬機上的網卡名稱)
我的master機器上的配置如下,需要注意的是,HWADDR是網卡的MAC地址,DEVICE是網卡的名字,可以使用命令ip addr
查看具體信息。
3.4修改主機名稱
vi /etc/sysconfig/network
3.5修改master機器上hosts映射
vi /etc/hosts
最後最重要的:service network restart
4.安裝Xshell訪問虛擬機
注意:目前已經把虛擬機的網絡設置成了靜態ip,除非再配置實現靜態IP上網,否則是不能使用該配置的開發機訪問網絡的,因爲後續還要在虛擬機上安裝java,hadoop。不能訪問網絡也不能安裝vim(Centos上默認安裝的是Vi) ,也不能安裝linux和windows互傳文件的命令lrzsz。
在安裝完Xshell後配置虛擬機的IP和用戶名以及密碼,就可以通過Xshell連接虛擬機。如果要實現windows和linux傳輸文件,Xshell中需要安裝軟件xftp。
傳輸文件的時候點擊圖片中的按鈕,就可以拖動文件實現文件在windows和linux之間的傳輸了。
集羣開發環境安裝步驟
1.JDK環境安裝
具體安裝參考網絡上的教程。
修改環境變量:
vi ~/.bash_profile 最後添加
export JAVA_HOME=/usr/java/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
:wq
保存退出後,執行source ~/.bash_profile
使配置生效
2.HADOOP環境安裝
本人選擇安裝的Hadoop版本爲hadoop-2.6.5.tar.gz。
2.1 添加環境變量
vi /usr/hadoop-2.6.5/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_144
然後添加環境變量vi ~/.bash_profile
export JAVA_HOME=/usr/java/jdk1.8.0_144
export HADOOP_HOME=/usr/hadoop-2.6.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
執行source ~/.bash_profile
使配置生效
2.2 Hadoop配置,配置文件目錄:/usr/hadoop-2.6.5/etc/hadoop
core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>Hadoop.tmp.dir</name>
<value>/tmp/hadoop-root</value>
</property>
</configuration>
hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
slaves
slave1
slave2
3.複製虛擬機
使用VMWare中clone功能,複製出另外兩臺虛擬機,分別命名爲slave1和slave2。因爲clone出的虛擬機的網卡MAC地址已經改變,所以要分別在複製出的兩臺虛擬機中執行以下操作:
rm -f /etc/udev/rules.d/70-presistent-net.rules
reboot
vi /etc/sysconfig/network-scripts/ifcfg-ens33,將其中的HWADDR修改爲新虛擬機的MAC地址,將靜態IP改爲設置的IP地址
:wq
4.設置SSH
開啓三臺虛擬機,登錄到master中,執行如下的命令:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh slave1 "mkdir ~/.ssh"
scp ~/.ssh/id_dsa.pub slave1:~/.ssh/authorized_keys
ssh slave2 "mkdir ~/.ssh"
scp ~/.ssh/id_dsa.pub slave2:~/.ssh/authorized_keys
中間需要輸入用戶的密碼
然後分別執行下列命令,不用輸入密碼就表示成功了。
ssh localhost
ssh slave1
ssh slave2
5.啓動Hadoop
執行HDFS格式化命令:hadoop namenode-format
在master虛擬機中:/usr/hadoop-2.6.5/sbin目錄,執行./start-all.sh
然後在宿主機中打開瀏覽器,指向192.168.224.100:50070,就可以查看HDFS的信息。
6.在HDFS中建文件夾
(我搭建的Hadoop集羣上HDFS默認的文件更目錄是 /)
新建文件夾:hdfs dfs -mkdir /hdfs_in(“/”後邊的文件目錄名稱根據自己需要定義)
查看HDFS的文件目錄:hdfs dfs -ls /
拷貝本地文件到HDFS文件系統:hdfs dfs -copyFromLocal 本地文件目錄 HDFS文件目錄
eg:hdfs dfs -copyFromLocal /usr/local/hadoop/data /hdfs_in
7.在Hadoop上運行使用python實現的mapreduce任務
bin/hadoop jar ./share/hadoop/tools/lib/hadoop-streaming-2.6.5.jar -mapper /usr/local/hadoop/mapper.py -reducer /usr/local/hadoop/reducer.py -input /hdfs_in/data -output /hdfs_out