Hadoop完全分布式安装
在此主要介绍hadoop完全分布式的安装配置。
因为我们硬件设施有限,所以我们采用虚拟机的方式模拟hadoop集群,我们准备建立四台虚拟机,一台机器master作为管理节点,其他三台机器slave1、slave2和slave3作为子节点。
整体思路:我有两台电脑pcA(8G内存)和pcB,都是windows x64系统,且两台电脑在同一个局域网内。
首先我们在pcA上建立一台master虚拟机,在master上安装Java环境、hadoop,并进行配置,配置好之后,复制master虚拟机,得到slave1、slave2和slave3,这样就简单地配置好了四台机器,这四台虚拟机就是我们小的hadoop集群。然后用同一局域网中的pcB电脑连接这个集群,当然也可以用pcA电脑连接(pcA电脑安装太多的虚拟机之后比较卡,所以我才使用的另一台电脑进行操作)
1、安装虚拟机VMware并创建新的虚拟机
VMware安装十分简单,双击安装即可,不过多赘述。
安装完成VMware后
- 1)、点击“创建新的虚拟机”弹出创建向导,选择 自定义(高级), 点击下一步均选择默认。
- 2)、在弹出的 安装客户机操作系统界面 选择 安装程序光盘映像文件(iso),路径浏览到我们下载好的 ubuntu-14.04-desktop-amd64.iso 文件,点击下一步,输入全名 hadoop,用户名 hadoop, 密码 (自己设定)。
- 3)、一路默认之后,出现 网络类型选择,在此选择 “使用桥连网络”,因为我们最终需要用局域网中的其它电脑连接hadoop集群,所以此处要用桥接模式。(一般的教程中使用的hostonly,局域网中其它电脑不能连接)
- 4)、继续一路默认,经过漫长的等待,安装完ubuntu系统。这样一台master虚拟机就安装好了。右键点击下图红框,重命名为master。
- 5)、输入密码登陆之后,输入命令
sudo apt-get install vim
在线安装vim工具。输入sudo vim /etc/hostname
修改主机名,将hostname文件中的ubuntu改为master,重启后生效如下图
2、配置网络IP
- 1、在ubuntu中输入
ifconfig
命令,查看IP地址。
这个ip地址是自动获取的,也可以使用,如果看着不舒服想设置成自己希望的ip,可以设置为固定ip,我设置的固定ip为192.168.1.128。
我的pcA的ip地址为192.168.1.185。(自己的笔记本用的无线网)
——pcB的ip地址为192.168.1.143。(台式机用的以太网)
(windows系统中,在命令行界面输入ipconfig
可以查看IP)
- 2、现在可以尝试用同一个局域网中的其它电脑pcA和pcB ping这台master, 然后用master ping pcA和pcB,查看是否可以相互通信。
举例用master ping pcB 如下图,可以ping通
3、安装java环境
1、首先修改hosts文件,让ip和主机名master对应起来,输入命令
sudo vim /etc/hosts
,在hosts文件中添加如下
2、安装ssh,后续连接或者上传文件均需要ssh协议。Ubuntu默认已经安装了SSH client, 所以我们只安装SSH server,输入命令
sudo apt-get install openssh-server
安装完ssh,就可以通过ssh协议连接一些辅助的软件了。- 3、下载好jdk-8u152-linux-x64.gz,将jdk上传到master,我们使用FlashFXP软件。在pcA上安装该软件,打开如下图
连接成功会有下图,至此两个系统可以相互传送文件。将jdk发送到master的/home/hadoop/目录中。
- 4、安装jdk, 在/home/hadoop/目录输入命令
ls
,查看文件,此目录中有我们刚刚上传的jdk压缩包。
进入到 /home/hadoop 目录,解压jdk到 /usr/local 目录下,执行命令
sudo tar –zxf jdk-8u152-linux-x64.gz –C /usr/local
然后进入/usr/local下,查看,已经解压到该目录
修改文件夹名称sudo mv jdk1.8.0_152 jdk8u152
为jdk配置环境变量,执行命令sudo vim /etc/profile
,添加Java的路径如下图。
保存并退出,执行命令sudo source /etc/profile
使配置生效。输入命令java -version
,如果输出Java版本信息则说明安装正确。
4、hadoop安装配置
安装过程和jdk类似,简单叙述。
- 1、在windows电脑pcA上下载hadoop-2.7.4.tar.gz,利用FlashFTP上传到master的 /home/hadoop 目录下。
- 2、解压到 /usr/local,执行命令
sudo tar -zxf /usr/local/hadoop-2.7.4.tar.gz -C /usr/local
- 3、进入 /usr/local 目录,修改解压后的文件夹名称,执行命令
sudo mv hadoop-2.7.4 hadoop
- 4、修改hadoop文件所有者为hadoop用户,执行命令
sudo chown -R hadoop:hadoop hadoop
- 5、配置hadoop的环境变量,执行命令
sudo vim /etc/profile
在Java环境变量后面,添加
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
保存并退出,执行命令使配置生效
source /etc/profile
执行命令,查看hadoop是否正确安装,输出版本号则表示安装正确
hadoop version
- 6、hadoop配置,在/usr/local/hadoop/etc/hadoop中是hadoop的主要的配置文件
配置core-site.xml, 执行命令vim core-site.xml
,在文件的中间添加
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000<value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop_tmp<value>
</property>
配置hadoop-env.sh, 执行命令 vim hadoop-env.sh
,在文件中修改JAVA_HOME
export JAVA_HOME=/usr/local/jdk8u152
配置slaves, 执行命令 vim slaves
,在文件中添加子节点名slave1、slave2和slave3,使master可以识别子节点
- 7、至此,我们已经配置好了一台虚拟机master,关闭master,右键点击此虚拟机—>管理—->克隆,在克隆虚拟机向导中设置虚拟机名称为子节点名称,复制出三台分别为slave1、slave2和slave3
- 8、打开四台虚拟机,利用命令
ifconfig
查看四台虚拟机的ip地址,我的四台虚拟机地址分别为
192.168.1.128 master
192.168.1.129 slave1
192.168.1.130 slave2
192.168.1.131 slave3
下面,分别配置slave1、slave2和slave3的hostname,因为这几台虚拟机是由master复制得到的,所以他们的hostname文件需要修改为各自的名字。分别执行命令sudo vim /etc/hostname
,分别写入slave1、slave2、slave3。
然后四台虚拟机分别修改hosts文件,执行命令sudo vim /etc/hosts
,写入ip地址和主机名,如下图
- 9、配置ssh免密码登陆
因为master要经常和其它机器进行ssh连接,每次输入密码不方便,因此我们设置免密码登陆,原理比较简单,先在master上生成私钥和公钥,把公钥拷贝到其它机器上,再进行连接时,其它机器就可以直接识别master,不需要密码。
下图为使用我新建的master ssh连接另外一台机器,需要输入密码
现在我们开始配置,首先在master中输入命令ssh-keygen -t rsa
将生成的公钥发送给三个子节点,输入命令ssh-copy-id hadoop@192.168.1.129
,(换成你自己的从机ip,三台都要发送),在此举例发送给192.168.1.129这台从机。
- 10、到此,集群配置完毕,我们可以使用局域网中的任意一台电脑连接这个hadoop集群,进行相关配置和操作,我就使用我的台式机pcB(ip: 192.168.1.143)进行连接,和后续的编程工作(不用pcA的原因是,那台电脑上配置四台虚拟机后太卡了)。首先,我们需要在pcB上安装FlashFXP(用于和hadoop集群相互传送文件),还需要安装Xshell软件,用于连接hadoop集群。
启动pcA上的四台虚拟机(master、slave1、slave2和slave3)
打开Xshell连接四台虚拟机。举例连接master配置如下图
点击确定,进行连接,同理,连接其它三台机器。xshell有窗口瓷砖排列功能,结果如下图
11、启动hadoop集群,在master中输入命令
start-dfs.sh
,stop-dfs.sh
可以启动和关闭整个集群。hadoop-daemon.sh start namenode
和hadoop-daemon.sh stop namenode
可以启动和关闭单个节点(启动时master是namenode , slave 是 datanode)。输入jps命令,查看是否启动。如下图
12、通过浏览器查看
输入网址http://192.168.1.128:50070/