從零開始搭建Hadoop2.7.1的分布式集群
Hadoop 2.7.1 (2015-7-6更新),Hadoop的環境配置不是特別的復雜,但是確實有很多細節需要注意,不然會造成許多配置錯誤的情況。盡量保證一次配置正確防止反復修改。
網上教程有很多關于Hadoop配置的,但是每一個教程都對應了一個版本信息,有一些教程也存在很大的問題,配置環境,系統環境都沒說清楚。在此我將記錄下來從零搭建Hadoop2.7.1的過程,以及搭建過程中所遇到的一些問題。
一 操作環境說明
1.1 :操作系統: window8.1
1.2 :虛擬機版本:VMware12
二 材料準備
2.1 ubuntu-14.10-desktop-amd64.iso (Ubuntu 光盤映像)
2.2 jdk-8u65-linux-x64.gz (Java 環境包)
2.3 hadoop-2.7.1.tar.gz (Hadoop 環境包)
三 搭建開始
3.1 Vmware 創建虛擬機
根據Hadoop的調度規則,我們將使用VMware 12 加載 ubuntu….iso來創建三個Ubuntu 虛擬機。創建用典型安裝即可,以下是虛擬機的一些信息
虛擬機1:Master Ubuntu 14.10 64bit
虛擬機2:Slave1 Ubuntu 14.10 64bit
虛擬機3:Slave2 Ubuntu 14.10 64bit
以下操作將需要在所有配置機器上進行
3.2 解壓文件
將jdk-8u65-linux-x64.gz 和hadoop-2.7.1.tar.gz 拷貝到3臺虛擬機的一個文件夾中。我這里拷貝到了Home/Download文件夾中, 然后右鍵選擇 Extract Here. (當然也可以zxvf)
3.3 配置JAVA
把jdk-8u65-linux-x64 重命名為jdk-8u65-linux-x64.tar.gz 并右鍵Extract Here,生成文件jdk 1.8.0_65
打開終端輸入命令:
sudo mkdir /usr/lib/jvm
sudo cp -r Downloads/jdk1.8.0_65 /usr/lib/jvm/
添加環境變量
sudo gedit /etc/profile
在末尾加上四行:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_65 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
輸如命令使環境生效
source /etc/profile
輸如命令查看環境是否配置成功
java –version
出現如上信息說明配置成功
3.4 SSH 安裝以及配置
更新apt (由于是新系統可能會花一些時間)
sudo apt-get update
安裝ssh
sudo apt-get install openssh-server
已有ssh或者安裝成功了的輸入命令
ps -e | grep ssh
如果用的是和我相同的ubuntu版本安裝會遇到問題。安裝過程中遇到404 Not Find(如果沒有則跳過直接驗證SSH)
下載sources.list 存入Home目錄下輸入命令覆蓋原文件
sudo cp sources.list /etc/apt/sources.list
更行apt-get
sudo apt-get update
再次安裝ssh
sudo apt-get install openssh-server
如遇到版本問題則參考以下命令安裝
sudo apt-get install openssh-client=1:6.6p1-2ubuntu1
驗證SSH是否成功安裝輸入
ssh localhost
出現以下提示說明安裝成功
生成密鑰Pair
ssh-keygen –t rsa
輸入后一直回車選擇默認即可
mater主機中輸入命令復制一份公鑰到home中
cp .ssh/id_rsa.pub ~/id_rsa_master.pub
把master的home目錄下的id_rsa_master.pub拷到slave1,slave2的home下
slave1和 slave2的home目錄下分別輸入命令
cat id_rsa_master.pub >> .ssh/authorized_keys
至此實現了mater對slave1, slave2的無密碼登陸
以下配置將僅僅在master主機上進行
3.5 配置 Hadoop
(為了配置方便,將解壓縮好的hadoop-2.7.1文件夾拷貝到home根目錄下面)
在hadoop-2.7.1文件夾下創建文件,輸入
mkdir hadoop-2.7.1/tmp mkdir hadoop-2.7.1/hdfs mkdir hadoop-2.7.1/hdfs/name mkdir hadoop-2.7.1/hdfs/data
輸入命令查看ip地址
ifconfig -a
eg. 我所使用的IP地址
虛擬機1:Master 192.168.152.128 虛擬機2:Slave1 192.168.152.129 虛擬機3:Slave2 192.168.152.130
修改hosts
sudo gedit /etc/hosts
具體IP地址由上面給出,可根據自己的配置情況自行調整
為了方便修改hostname
sudo gedit /etc/hostname
master 的改為 master
slave1 的改為 slave1
slave2 的改為 slave2
修改環境變量
cd ~/hadoop-2.7.1/
(1)hadoop-env.sh
gedit etc/hadoop/hadoop-env.sh
找到JAVA_HOME=… 一行修改為JAVA HOME的路徑
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_65
(2)core-site.xml
gedit etc/hadoop/core-site.xml
在configuration標簽中添加
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/zhaoli/hadoop-2.7.1/tmp</value> </property>
(3)mapred-site.xml
創建并編輯
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml gedit etc/hadoop/mapred-site.xml
在configuration標簽中添加
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/zhaoli/hadoop-2.7.1/tmp</value> </property>
(4)hdfs-site.xml
gedit etc/hadoop/hdfs-site.xml
在configuration標簽中添加
<property> <name>dfs.namenode.name.dir</name> <value>file:/home/zhaoli/hadoop-2.7.1/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/zhaoli/hadoop-2.7.1/hdfs/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property>
(5)yarn-site.xml
gedit etc/hadoop/yarn-site.xml
在configuration標簽中添加
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property>
(6)slaves文件
gedit etc/hadoop/slaves
刪除原有內容,根據配置修改,此處為
slave1 slave2
分發配置好的hadoop文件夾到slave1, slave2
前提是設置好ssh
scp -r hadoop-2.7.1 zhaoli@slave1:~/ scp -r hadoop-2.7.1 zhaoli@slave2:~/
格式化hdfs
進入hadoop home目錄
bin/hdfs namenode-format
啟動集群
sbin/start-all.sh
啟動后分別在master, slave下輸入jps查看進程
如上則說明啟動成功
運行wordcount測試集群
進入hadoop home目錄
在hdfs(分布式文件系統)中創建一個名為input的文件夾
bin/hadoop fs –mkdir /input
查看文件是否被創建
bin/hadoop fs –ls /
hadoop home 下創建一個inputfile 文件夾,并在inputfile里創建兩個文件
in1.txt
Hello world hello hadoop
in2.txt
Hello Hadoop hello whatever
上傳兩個文件進input
bin/hadoop fs -put inputfiles/*.txt /input
查看輸入文件是否傳入
bin/hadoop fs -ls /input
用hadoop jar命令運行Hadoop自帶的wordcount
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /input /output
程序開始運行,成功后查看輸出文件夾
bin/hadoop fs -ls /output
查看結果
bin/hadoop fs -cat /output/part-r-00000
至此hadoop分布式集群配置完成!
以上是對Hadoop的配置信息,希望能夠盡可能的寫得詳細,但是終究不能概括所有的bug。之前也看了很多集群搭建的書和博客,還是遇到了很多困難,本次從零開始配置也是為了排除一些干擾,希望能夠幫助到和我一樣摸索前進的人吧。