Hadoop全分布式安装

快放假了,走之前想了解一下Hadoop的基础。首先呢,就得了解一下Hadoop的环境怎么搭建。网上一搜教程一大堆,新的,旧的,简直看的人毫无头绪。相信不少新人,肯定也是在搭建环境时一头雾水。正好自己也借着这次搭建Hadoop的机会,好好整理一下,也让学习Hadoop的新人少走一些弯路。

本教程主要参考教程1(http://www.w2(此处不输入)bc.com/Article/19645)和教程2(http://m.blog.csdn.net/blog/index?username=tangxinyu318),感谢原作者的付出,这两篇文章基本解决了我很多的困惑,如果本文描述不清,欢迎大家阅读原文。

学习Hadoop,首先要了解一下Hadoop的三种运行模式:

1、单机模式(standalone Mode)

单机模式是Hadoop的默认模式。当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置。在这种默认模式下所有3个XML文件均为空。当配置文件为空时,Hadoop会完全运行在本地。因为不需要与其它节点交互,单机模式就不使用HDFS,也不加载任何Hadoop地守护进程。该模式主要用于开发调试MapReduce程序地应用逻辑。

2、伪分布模式(Pseudo-Distributed Mode)

伪分布模式在“单节点集群”上运行Hadoop,其中所有地守护进程都运行在同一台机器上。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。

3、全分布模式(Fully Distributed Mode)

     Hadoop守护进程运行在一个集群上。

总结看过的所有教程,基本上都是在windows环境下使用VMvare虚拟机安装ubuntu或者Centos系统搭建Hadoop环境。

本教程是在Win10下使用Vmvare虚拟机装载ubuntu14.04稳定版搭建Hadoop的环境。

一、准备工作

1、安装虚拟机环境

     Vmware,收费产品,占内存较大。

     Oracle的VirtualBox,开源产品,占内存较小,但安装ubuntu过程中,重启会出错。

我选Vmware。

2、安装操作系统

     Centos,红帽开源版,接近于生产环境。

     Ubuntu,操作简单,方便,界面友好。

我选Ubuntu14.04稳定版. 64位

3、安装一些常用的软件

在每台linux虚拟机上,安装:vim,ssh

      sudo apt-get install vim  (注:一定要重新安装vim,Linux自带的是vi,vim是vi的升级增强版)

      sudo apt-get install ssh

在客户端,也就是win7上,安装SecureCRT,Winscp或putty,这几个程序,都是依靠ssh服务来操作的,所以前提必须安装ssh服务。

service ssh status 查看ssh状态。如果关闭使用service ssh start开启服务。

     SecureCRT,可以通过ssh远程访问linux虚拟机。

     winSCP或putty,可以从win7向linux上传文件。

三、全分布模式下hadoop的安装

(1)修改三台虚拟机的机器名

分别修改三台主机名为:master、slave1、slave2

sudo vi /etc/hostname

(2)设置IP地址

大家会发现好多教程都说要设置静态IP,设置的方式教程也有。在这我遇到的疑惑是按照教程的设置方法后,除了ping不同(虽然在同一网段),而且虚拟机无法上网。这在更新ubuntu系统软件的时候非常不方便。

最后我的处理方法是按照教程http://blog.csdn.net/u010666884/article/details/51832371,设置VMnet8,选择NAT设置,设置网段在192.168.1.0~255,还是支持本地DHCP分配IP地址。这样三个IP地址就在同一网段了,且查询IP地址,虚拟机每次重启后IP地址也没变化。所以我直接用系统分配的IP地址去配置hosts文件。

(3)修改/etc/hosts文件

hosts文件和windows上的功能是一样的。存储主机名和ip地址的映射。在三台机器的/etc/hosts的内容中添加如下内容:

192.168.1.108  master

192.168.1.129  slave1

192.168.1.128  slave2

(4)设置ssh免密输入

1)产生密钥

ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa

会产生一对,其中id_rsa是私钥,id_rsa.pub是公钥。

2)导入authorized_keys

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

3)试验看是否安装成功

#查看是否有sshd进程

ps -e | grep ssh

尝试登录本地

ssh localhost

4)远程无密码登录

#进入master的.ssh目录

scp authorized_keys hadoop@slave1:~/.ssh/authorized_keys_master #hadoop是用户名

#进入slave1、slave2的.ssh目录

cat authorized_keys_master >> authorized_keys

注意:第四步要在slave上重复,要使三者都能够无密码相互登录,重复完后可以利用如下命令试验,第一次需要输入密码绑定

注意:我的主机是连接的路由无线网络,我遇到了一个问题,就是在虚拟机网络重连后master可以登录slave2,但是过一会后就发现老是connection refused,就因为这个问题我还重新安装了几次,网络上的方法都试了也不管用,后来发现,原来是我的虚拟机ip与路由局域网中的其他机器Ip冲突,千万要保证局域网内的Ip不要和虚拟机的ip冲突

(5)安装jdk

首先进入到jdk tar.gz所在的文件目录,我的是在Downloads目录下,所以命令是

cd ~/Downloads

  然后将tar.gz文件解压到安装目录,我的jdk压缩包名是jdk-7u67-linux-x64.tar.gz,而且我希望它安装在/usr/local目录下,所以命令是

sudo tar zxvf jdk-7u67-linux-x64.tar.gz -C /usr/local

   然后进入到/usr/local目录下

cd /usr/local

   再输入

ls

   即可看到里面包含一个叫jdk1.7.0_67类似的文件(文件名与所安装的JDK版本有关)

wps4C07.tmp

   解压完毕后,就是配置环境变量了。关于环境变量的配置多种方法,我采用的是在/.bashrc文件中配置。

   利用命令:

sudo gedit ~/.bashrc

   在打开的文件的末尾添加以下信息:

export JAVA_HOME=/usr/local/jdk1.7.0_67       #这里添加的是jdk所在的安装目录
export JRE_HOME=${JAVA_HOME}/jre 
export CLASSPATH=.:JAVAHOME/lib:JAVAHOME/lib:{JRE_HOME}/lib 
export PATH=JAVAHOME/bin:JAVAHOME/bin:PATH 

   我的添加如下:

wps4C18.tmp

   保存后关闭,进入终端,source一下。

source ~/.bashrc

   接下来设置默认的JDK

sudo update-alternatives --install /usr/bin/java java /usr/local/jdk1.7.0_67/bin/java 300 
sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.7.0_67/bin/javac 300 

   设置完成后,输入java -version查看jdk信息。

wps4C28.tmp

   查看到如上信息,说明jdk安装成功。

(6)hadoop配置

Master配置hadoop,并将hadoop文件传输到slave节点。

1)解包移动

#解压hadoop包

tar -zxvf hadoop...

#将安装包移到/usr目录下

mv hadoop... /usr/hadoop

2)新建文件夹

#在/usr/hadoop目录下新建如下目录(root)

mkdir /dfs

mkdir /dfs/name

mkdir /dfs/data

mkdir /tmp

3)配置文件:hadoop-env.sh(文件都在/usr/hadoop/etc/hadoop中)

修改JAVA_HOME值(export JAVA_HOME=/usr/java)

4)配置文件:yarn-env.sh

修改JAVA_HOME值(export JAVA_HOME=/usr/java)

5)配置文件:slaves

将内容修改为:

slave1

slave2

6)配置文件:core-site.xml

<configuration>

       <property>

                <name>fs.defaultFS</name>

                <value>hdfs://master:8020</value>

       </property>

       <property>

                <name>io.file.buffer.size</name>

                <value>131072</value>

        </property>

       <property>

               <name>hadoop.tmp.dir</name>

               <value>file:/usr/hadoop/tmp</value>

               <description>Abase for other temporary   directories.</description>

       </property>

        <property>

               <name>hadoop.proxyuser.u0.hosts</name>

               <value>*</value>

       </property>

       <property>

               <name>hadoop.proxyuser.u0.groups</name>

               <value>*</value>

       </property>

</configuration>

7)配置文件:hdfs-site.xml

<configuration>

       <property>

                <name>dfs.namenode.secondary.http-address</name>

               <value>master:9001</value>

       </property>

     <property>

             <name>dfs.namenode.name.dir</name>

             <value>file:/usr/hadoop/dfs/name</value>

       </property>

      <property>

              <name>dfs.datanode.data.dir</name>

              <value>file:/usr/hadoop/dfs/data</value>

       </property>

       <property>

               <name>dfs.replication</name>

               <value>3</value>

        </property>

        <property>

                 <name>dfs.webhdfs.enabled</name>

                  <value>true</value>

         </property>

</configuration>

8)配置文件:mapred-site.xml

<configuration>

          <property>                                                                  

<name>mapreduce.framework.name</name>

                <value>yarn</value>

           </property>

          <property>

                  <name>mapreduce.jobhistory.address</name>

                  <value>master:10020</value>

          </property>

          <property>

                <name>mapreduce.jobhistory.webapp.address</name>

                <value>master:19888</value>

       </property>

</configuration>

9)配置文件:yarn-site.xml

<configuration>

        <property>

               <name>yarn.nodemanager.aux-services</name>

               <value>mapreduce_shuffle</value>

        </property>

        <property>                                                                

<name>yarn.nodemanager.aux-services.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>

</configuration>

10)将hadoop传输到slave1和slave2根目录

scp -r /usr/hadoop u0@slave1:~/

(7)配置环境变量,并启动hadoop,检查是否安装成功

1)配置环境变量

#root模式编辑/etc/profile

vim /etc/profile

#以上已经添加过java的环境变量,在后边添加就可以

export PATH=$PATH:/usr/java/bin:/usr/java/jre/bin:/usr/hadoop/bin:/usr/hadoop/sbin

2)启动hadoop(要在hadoop用户下启动)

#注意最后单词带‘-’

hadoop namenode -format

start-all.sh

3)查看启动进程

wps4C49.tmp

wps4C4A.tmp

原文地址:https://www.cnblogs.com/iwzj/p/6415482.html