hadoop2.8.0的搭建
hadoop2.8.0环境搭建介绍
我们使用最新的hadoop版本2.8.0来进行hadoop环境的搭建。操作系统环境如下:
Ubuntu | 14.04 |
---|---|
CPU | Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz 8核 |
内存 | 16G |
我们使用Virtual Box进行虚拟环境的搭建。
在这里我们创建了三个虚拟机,一个主机Master,两个从机Slave,在此之前,我们需要转杯如下材料:
- ubuntu-14.04.5-desktop-amd64.iso(Ubuntu安装镜像)
- jdk-8u65-Linux-x64.gz(Jave环境包)
- hadoop-2.8.0(Hadoop环境包)
hadoop搭建过程详细介绍
1:Virtual Box创建虚拟机
根据Hadoop的调度规则,我们创建三个虚拟机,使用典型安装即可,下面是虚拟机的一些信息:
虚拟机1:Master Ubuntu 14.04 64bit
虚拟机2:Slave1 Ubuntu 14.04 64bit
虚拟机3:Slave2 Ubuntu 14.04 64bit
注意,在虚拟机创建并安装ubuntu14.04的过程中,在创建用户的时候,我设置的用户名和密码都是master,也就是说三台虚拟机的系统镜像的用户名和密码都是master,因为我第一次设置的时候,两台从机的用户名和密码设置不一样的名称,后面在启动hadoop的时候导致ssh免密登陆不成功,从而导致两个从机的DataNode启动不成功。
当创建完成三个相应的虚拟机之后,我们便在相应的机器上进行设置操作。首先这里需要一点是为了方便环境进行搭建,通过Virtual Box提供的功能,我们设置了一个共享目录,便于进行数据的共享。
2:配置JDK环境变量
这个操作需要在三个虚拟机上都要进行DJK环境变量的设置,因为Hadoop的有些计算是通过jar包进行分布式计算的。
将jdk-8u131-linux-x64.tar.gz进行解压,解压完成之后,我们使用下列命令在/usr/lib/中创建一个jvm文件夹。
Sudo mkdir /usr/lib/jvm
创建完成之后,使用cp命令将刚刚解压后的文件夹复制到刚刚创建的目录中。
sudo cp -R jdk1.8.0_131/ /usr/lib/jvm/
当复制完成之后,为了后期使用方便,我们使用mv命令对复制后的文件夹修改一下名称:
mv /usr/lib/jvm/jdk1.8.0_131 /usr/lib/jvm/jdk1.8.0
这样,我们使用cd命令回到用户主目录。
打开.bashrc进行环境变量的配置,
gedit .bashrc
将下列内容复制的.bashrc的最后面。
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
编辑完成之后,我们保存退出即可。接着使用source命令来是刚刚配置的环境变量生效。
source .bashrc
这样我们使用命令测试环境变量是否配置成功。
java -version
这样,便说明我们配置的环境变量生效了。至此,我们的JDK环境变量便配置好了。
3:SSH安装及配置(三个虚拟机都需要进行操作)
在Hadoop的运行过程中,主从机之间是通过ssh进行通信的,所以,这里需要对三个虚拟机都要进行SSH的安装和配置工作。
首先,我们需要更新apt。
sudo apt-get update
使用下面的命令安装ssh:
sudo apt-get install openssh-server
安装完成之后,我们使用下面的命令来查看ssh是否安装成功。
ps -e | grep ssh
这样就表示ssh安装成了,可以使用如下命令也就是ssh登陆本地机器来测试一下。
ssh localhost
下面的配置很重要,这个是三个主从机之间进行免密登陆的重要环节。
生成密钥对
ssh-keygen -t rsa
输入后一直回车选择默认即可。
在三个虚拟机上都进行同样的操作,同时将两个从机的公玥复制到主机的主目录中,这里便用到了之前提到的共享目录。在每个虚拟机上公玥的保存位置在~/.ssh/id_rsa.pub
复制到主机后,在这里我们分别命名为id_rsa_slave1.pub
和id_rsa_slave2.pub
。接着运行如下命令,
cat id_rsa_slave1.pub >> .ssh/authorized_keys
cat id_rsa_slave2.pub >> .ssh/authorized_keys
然后,我们使用scp命令将主机上的authorized_keys文件传送到两个从机中的.ssh目录中。
在这里需要说明一下,我们需要设置Virtual box的网络方式为桥接网卡。
通过ifconfig来查看各个从机的ip。我的从机ip分别为121.250.223.8,121.250.223.14。我们使用scp将authorized_keys传送到两个从机中。
scp .ssh/authorized_keys master@121.250.223.8:~/.ssh/
scp .ssh/authorized_keys master@121.250.223.14:~/.ssh/
这样我们便实现了三个主从机之间的免密登陆。
4:hadoop的配置(该配置仅仅在master主机上运行)
为了配置方便将解压缩好的hadoop-2.8.0文件夹复制到跟目录下面。在hadoop-2.8.0文件夹中创建文件夹:
mkdir tmp
mkdir hdfs
mkdir hdfs/name
mkdir hdfs/data
刚刚说了,使用ifconfig命令来查看三个虚拟机的ip地址,我的虚拟机的ip地址分别为:
虚拟机1:Master 121.250.223.4
虚拟机2:Slave1 121.250.223.8
虚拟机3:Slave2 121.250.223.14
使用下面的命令修改hosts:
sudo gedit /etc/hosts
具体的ip地址以自己的虚拟机的ip地址为准。接着在修改hostname。
sudo gedit /etc/hostname
master的改为master,slave1的改为slave1,slave2的改为slave2。
修改hadoop的环境变量。
cd ~/hadoop-2.8.0
(1)、hadoop.sh
gedit etc/hadoop/hadoop-env.sh
找到JAVA_HOME这一行,修改为你自己配置的java环境的路径。
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0
(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文件夹通过scp分发到slave1和slave2中。
scp -r hadoop-2.7.1 zhaoli@slave1:~/
scp -r hadoop-2.7.1 zhaoli@slave2:~/
这样,我们的hadoop算是完整的配置好了,我们来测试一下:
进入hadoop home目录,使用下面的命令格式化hdfs。
bin/hdfs namenode -format
启动集群:
sbin/start-all.sh
启动过程中,需要输入主机的密码。启动完成后,我们使用jps来查看各个主从虚拟机的进程状态。
主机master
从机slave1
从机slave2
这样,我们的集群便启动成功,我们来运行wordcount测试集群运行。
在master主机中进入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.8.0.jar wordcount /input /output
程序运行完成后,我们查看输出文件夹:
使用下面的命令查看运行结果:
bin/hadoop fs -cat /output/part-r-00000
这样,hadoop分布式集群配置完成。