Hadoop 2.4.0完全分布式平台搭建、配置、安装


一:系统安装与配置

虚拟机软件:Virtualbox 4.3.10(已安装相应扩展包)

虚拟机:Ubuntu 13.04 LTS 32位(至于为什么选择13.04,是因为最新的版本装上后开机会出现错误,每个人的平台不一样,我的是Mac OS X 10.9.2。应该选择自己合适的版本)

虚拟机配置:






需要特别说明的是:在设置网络时,一定要选择“桥接网卡”,至于界面名称,我的电脑是不能选择有线网卡的,因为选择有线网卡连不上网,只能选择Wi-Fi网卡了。至于为什么不能选择NAT模式,是因为NAT模式下外网是不能访问虚拟机的,这样虚拟机之间也就不能互相访问了。关于更多,请Google虚拟机的网络连接方式的区别。

还有就是,在安装时建议先反勾选“启用网络连接”,因为如启用,在安装时会下载更新和语言包,如果你的网络质量不好,这是很耗时的。在安装完成后,重启后再启用网络连接,把“软件源”设置为系统测试的最佳软件源服务器。

在安装系统时,每个虚拟机的用户名都应尽量设置为一样的。因为,ssh默认以当前用户名去登录另外的主机,如果“另外的主机”没有“当前用户名”这样一个用户,后果可想而知!我的用户名都设置为:Hadoop,登录名是hadoop

我的主机名:master节点的主机名是Master,slaves节点的主机名分别为:Node1、Node2、Node3

安装完四台虚拟机后:

把网络的ip地址固定下来(手动添加ip地址),尽量让四台主机的ip地址相邻。

Ctrl + Alt + T 打开终端,输入:

sudo apt-get update

然后安装好系统更新,和语言支持。

安装必要的工具:

sudo apt-get install vim
sudo apt-get install openssh-server

在每台主机上,

检测系统是否开启ipv6:

cat /proc/sys/net/ipv6/conf/all/disable_ipv6

如果结果显示0表示已开启,若为1表示已关闭

关闭ipv6:

sudo vim /etc/sysctl.conf

加入如下内容:

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

net.ipv6.conf.lo.disable_ipv6 = 1

重启系统

至于为什么要关闭ipv6,后面再说。

在master节点中下载Hadoop和JDK:

http://hadoop.apache.org

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Hadoop选择下载2.4.0

JDK我用的是1.7u55

二:主机互Ping

编辑/etc/hosts文件:

在终端中输入:

sudo vim /etc/hosts

在其中以“ip地址主机名”的格式加入每个主机的信息,我的Master主机中的hosts文件内容如下:


每台主机都添加相应的主机信息后,重启,测试:

ping Node1

每台上依次都ping一下,看是否是通的。

三:主机无密码登录节点

在master节点上执行:

ssh-keygen -t rsa --p

一直回车默认,生成的密钥对保存在~/.ssh目录下

在slaves节点上执行:

mkdir ~/.ssh
生成用于保存密钥的文件夹

把公钥复制到所有Slave上(需要输入密码):

scp /home/hadoop/.ssh/ id_rsa.pub hadoop@nistest.node:~/

在Slave机上把把id_rsa.pub追加到授权的key里面去:

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

测试是否成功:

ssh Node1

依次测试一下

默认以当前用户登录,所以要求Master机和Slave机的用户名一致,

若Master机需无密码登录自己:

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

四:JAVA环境安装

从master机把JDK包依次远程复制到所有Slave机的/usr/local目录下(需要密码):

scp “JDK包名“  root@Node1:/usr/local

修改JDK包文件的文件拥有者,使用户hadoop能够使用该文件:

sudo chown hadoop:hadoop “JDK包名”

在master节点中把JDK包移动到/usr/local下:

sudo mv “JDK包名” /usr/local

切换到/usr/local/目录下:

cd /usr/local

解压JDK包:

sudo tar –zxvf “JDK包名”

删除JDK包:

sudo rm -f “JDK包名”

重命名刚解压的JDK文件夹:

sudo mv "JDK文件夹名" /usr/local/jdk

把jdk文件夹的所有者改为hadoop:

sudo chown -R hadoop:hadoop jdk/

配置环境变量:

sudo vim /etc/profile

加入:

export JAVA_HOME=/usr/local/jdk/

export JRE_HOME=/usr/local/jdk/jre

export LASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

使配置生效:

source /etc/profile

如果是系统原来安装有其他的jdk,应该把刚才安装的jdk作为系统默认的jdk:

sudo update-alternatives --install /usr/bin/java java /usr/local/jdk/bin/java 300
sudo update-alternatives --install /usr/bin/java java /usr/local/jdk/bin/java 3000
sudo update-alternatives --install /usr/bin/jar jar /usr/local/jdk/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/local/jdk/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/local/jdk/bin/javap 300

sudo update-alternatives --config java

sudo update-alternatives --config javac

在其他节点也进行上面的配置,当然也可以从master节点上把jdk文件夹复制到其他节点上,但是一定要注意在每个节点上修改环境变量。

五:Hadoop安装与配置

先在Master机上安装配置

安装和配置Hadoop需要以"root"的身份进行

把Hadoop包文件复制到/usr/local下

cp “Hadoop包文件源“ /usr/local

在/usr/local下,解压"hadoop-2.4.0.tar.gz"安装包:

tar –zxvf hadoop-2.4.0.tar.gz

将"hadoop-2.4.0"文件夹重命名"hadoop":

mv hadoop-2.4.0 hadood

将文件夹"hadoop"读写权限分配给hadoop用户:

chown –R hadoop:hadoop hadoop

删除"hadoop-2.4.0.tar.gz"安装包:

rm –rf hadoop-2.4.0.tar.gz

以hadoop在/usr/local/hadoop下创建“tmp”、“dfs”文件夹,在“dfs”下创建“name”、“data”文件夹:

mkdir /usr/local/hadoop/tmp

mkdir /usr/local/hadoop/dfs

mkdir /usr/local/hadoop/dfs/name

mkdir /usr/local/hadoop/dfs/data

再次把将文件夹"hadoop"所有权分配给hadoop用户:

chown –R hadoop:hadoop hadoop

配置"/etc/profile":

vim /etc/profile

加入:

export HADOOP_HOME=/usr/local/hadoop

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

重启"/etc/profile":

source /etc/profile

配置Hadoop

这里要涉及到的配置文件有7个:

hadoop-env.sh

yarn-env.sh

slaves

core-site.xml

hdfs-site.xml

mapred-site.xml

yarn-site.xml

都在/usr/local/hadoop/etc/hadoop目录下

以下行为以hadoop用户进行,切换到/usr/local/hadoop/etc/hadoop目录下

1.vim hadoop-env.sh

加入如下内容:

export JAVA_HOME=/usr/local/jdk
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

添加JDK的环境变量和让Hadoop优先使用ipv4,因为后面的配置文件中的网络端口号系统默认是ipv6的,而ipv6是不通的,所以之前已经关闭ipv6,否则,在进行Hadoop测试时会反复连接根本连不通的ipv6端口。

2.vim yarn-env.sh

加入如下内容:

export JAVA_HOME=/usr/local/jdk

3.vim slaves

把salve节点的主机名加入,把原来的“localhost”删掉。

4.vim core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://Master:9000</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>hadoop.proxyuser.hduser.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hduser.groups</name>
        <value>*</value>
    </property>

</configuration>

5.vim 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/local/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/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>

6.vim 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>

7.vim 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>

注意:原来文件中的<configuration></configuration>对是存在的,不要重复加入:

原来系统内的mapred-site.xml文件是mapred-site.xml.template应用下面的命令对其重命名:

mv mapred-site.xml.template mapred-site.xml

配置其余机器:

将 master节点上配置好的hadoop所在文件夹"/usr/local/hadoop"复制到所有的slave的"/usr/local"目录下(实际上Slave机器上的slavers文件是不必要的, 复制了也没问题)

scp -r /usr/local/hadoop root@Node1:/usr/local

以root用户登录"Slave

chown -R hadoop:hadoop(用户名:用户组) hadoop(文件夹)

启动及验证:

在启动前关闭集群中所有机器的防火墙

sudo ufw disable

在"Master"上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)

hadoop namenode –format

启动hadoop:

start-all.sh

查看DataNode的信息:

hadoop dfsadmin -report

查看已启用的服务:

jps

停用Hadoop:

stop-all.sh


发现了一个错误,已修改!如果您也发现了问题,请告诉我!谢谢!

相关内容

    暂无相关文章