您的位置:首页 > 编程语言

【分布式编程】一——基于VirtualBox的Hadoop完全分布式环境搭建

2018-02-07 11:12 555 查看

系统架构

虚拟机环境:VirtualBox

Linux系统:Ubuntu 16.04 LTS

工具包

JDK1.8

Hadoop 2.7.5

拓扑结构:如下



操作步骤

【注】本步骤以
Master
为例,其他虚拟机可以使用
克隆
功能复制,然后更改

安装常用软件

安装
vim

sudo apt-get install vim


安装工具包

设置共享文件夹

安装
VirtualBox增强功能包
,
Ubuntu
系统直接点击
设备->安装增强功能


剩余步骤看教程

安装JDK

下载JDK-8u151

剩余步骤看教程

创建用户组

创建用户组

每个主机都需要加入到同一用户组。此处创建名为
hadoop
用户组

sudo addgroup hadoop


查看当前用户

who




当前用户为
t


添加当前用户到用户组

sudo adduser t hadoop #sudo adduser user group


查看归属用户组

groups t #group user


安装Hadoop

下载Hadoop

点击链接下载

解压Hadoop

将文件复制到
/Downloads/
文件夹下进行解压

cd Downloads/
tar -zxvf hadoop-2.7.5.tar.gz


将解压后的文件夹移动到
/usr/
文件夹

sudo mv hadoop-2.7.5/ /usr/


配置文件

需要配置的文件都在解压后的
hadoop-2.7.5
usr/hadoop-2.7.5/
文件夹中的
/etc/hadoop/
文件夹中

配置
hadoop-env.sh


cd /usr/hadoop-2.7.5/etc/hadoop/
sudo vim hadoop-env.sh


添加java安装路径



配置
core-site.xml


<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<final>true</final>
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/home/t/hadoop/tmp</value>
<description>A base for other temporary   directories.</description>
</property>
</configuration>


【说明】

<name>fs.default.name</name>


此参数设置
NameNode
的URI,此处设
master
主机为
NameNode


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


此参数设置Hadoop的一个临时目录,用来存放每次运行的作业jpb的信息。

此处设置
/home/t/hadoop/tmp
为临时目录,因没有此目录,因此需要先创建

sudo mkdir /home/t/hadoop/tmp


【附】

其他部分参数,如需要更多参数,请自查

参数默认值说明
fs.default.namefile:///NameNode的URI
hadoop.tmp.dir临时目录位置
hadoop.native.libtrue是否使用hadoop的本地库
hadoop.http.filter.initializers设置Filter初始器
配置
hdfs-site.xml


<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/t/hadoop/tmp/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/t/hadoop/tmp/dfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>


【说明】

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


dfs.name.dir
存储永久性的元数据的目录列表。这个目录会创建在
master
主机上。

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


dfs.data.dir
存放数据块的目录列表,这个目录在
node1
node2
上创建

<name>dfs.replication</name>


dfs.replication
设置文件副本数,此处有两个从机,设置副本数为2

配置
mapred-site.xml


先创建
mapred-site.xml
,进入到
~/etc/hadoop/
文件夹下

cp mapred-site.xml.template mapred-site.xml


<configuration>
<property>
        <name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>


配置
slaves


把其他从机的主机名添加,有几个就添加几个,多添加会无法运行



配置环境变量

sudo vim /etc/profile


将环境变量添加即可

export HADOOP_HOME=/usr/hadoop-2.7.5
export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HADOOP_HOME/bin


更新生效

source /etc/profile


运行是否配置环境变量成功

hadoop version




【注】此步骤完成之后,可以克隆两个虚拟机分别命名为
node1
,
node2


更改网络配置

虚拟机设置

【注】所有虚拟机都需要进行此步操作

点击
控制->设置->网络
,连接方式选择
桥接网卡
,然后重启虚拟机



修改
Hostname

sudo vim /etc/hostname


【注】其他虚拟机修改其
Hostname
为相应的名称

master
为例,直接改为



修改
hosts
文件

sudo vim /etc/hosts


增加以下内容,所有虚拟机都要增加以下内容

10.10.11.191 master
10.10.11.192 node1
10.10.11.193 node2


其中
127.0.0.1    oldhostname
删掉



更改IP地址、网关

【注】此处以
master
主机为例,其他主机根据上述拓扑图做相应更改

1.更改IP

利用
ifconfig
命令查看网卡名称,然后更改设置,本虚拟机网卡为
enp0s3


sudo ifconfig  enp0s3 10.10.11.191/24


【注】此种更改IP的方法,系统重启后需要重新配置

2.更改网关

sudo route add default gw 10.10.11.1


关闭防火墙

sudo ufw disable
sudo apt-get remove iptables


【注】此步骤后即可利用
VirtualBox
克隆功能复制出其他从机

连接测试

使用
ping
命令测试是否能够连接

ping hostname


配置SSH

安装ssh

sudo apt-get install ssh


查看已安装的ssh

dpkg --list|grep ssh


如果缺少
openssh-server
,需要安装

sudo apt-get install openssh-server


配置ssh

下述步骤在不同的主机上进行,请注意区分

master
机操作


生成
master
机的一对公钥和私钥

ssh-keygen -t rsa -P ''


进入
.ssh
目录查看公钥和私钥,
id_rsa
id_rsa.pub


cd .ssh
ls


将公钥加入到已认证的key中

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


登录本机

ssh localhost


如果出现
The authenticity of host 'localhost (127.0.0.1)' can't be established.
,输入
yes
即可。



其他从机操作

master
主机上的
id_rsa.pub
复制到
node1
从机上。同理
node2
进行类似操作

scp ~/.ssh/id_rsa.pub t@node1:~/


然后再在从机执行

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


若遇到
/home/t/.ssh/node1_rsa.pub: No such file or directory
,则手动通过共享文件夹复制到其他从机相应位置。

若从机
cd .ssh
遇到
No such file or directory
,则手工创建
.ssh
文件夹。

/home/t
图形化界面按
Ctrl+H
显示隐藏文件夹,

若已经存在
.ssh
文件夹,则删除
suso rm -r /home/t/.ssh
。这里的
/home/t
是用户目录,
t
是用户名,其他用户名则需要做相应更改。

若没有
.ssh
文件夹,则创建
sudo mkdir /home/t/.ssh


更改权限
sudo chmod a+w /home/t/.ssh


通过共享文件夹把
master
中的
id_rsa.pub
复制到
/home/t/


master
主机上的密钥加入到认证中

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


master
主机上验证能否正常登陆

ssh node1


出现以下则表示登陆成功



启动集群

格式化
namenode

在主机
master
运行

hadoop namenode -format




若出现
has been successfully formatted
Exiting with status 0
表示格式化成功

若出现
hadoop:Cannot create directory /home/t/hadoop/name/current
错误即文件夹权限不足

sudo chmod -R a+w /home/t/hadoop/name/current


启动集群

start-all.sh


启动完毕后,执行命令

jps


master
主机看到四个开启的进程代表启动成功



若从机上看到启动进程



【问题解释】为什么没有
jobtracker
tasktracker


停止集群

stop-all.sh


查看运行状态

查看
Namenode
状况


通过Web界面查看
NameNode
运行状况,默认为
http://localhost:50070




查看
ResourceManager
状况


http://localhost:8088




运行测试程序

向hadoop集群系统提交第一个mapreduce任务,统计词频

进入本地hadoop目录.此处是
/usr/hadoop-2.7.5


cd /usr/hadoop-2.7.5


在虚拟分布式文件系统上创建一个目录
/data/input


hdfs dfs -mkdir -p /data/input


将当前目录下的
README.txt
复制到虚拟分布式文件系统中

hdfs dfs -put README.txt /data/input


查看虚拟分布式文件系统中是否有复制上去的文件

hdfs dfs -ls /data/input


向Hadoop提交单词统计任务

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount /data/input /data/output/result


查看结果

hdfs dfs -cat /data/output/result/part-r-00000


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: