從零開始搭建Hadoop2.7.1的分布式集群

jopen 8年前發布 | 29K 次閱讀 分布式/云計算/大數據

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。之前也看了很多集群搭建的書和博客,還是遇到了很多困難,本次從零開始配置也是為了排除一些干擾,希望能夠幫助到和我一樣摸索前進的人吧。

來自: http://blog.csdn.net/zl007700/article/details/50533675

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!