Ubuntu搭建Hadoop的踩坑之旅(三)

以前的两篇文章介绍了如何从0开始到搭建好带有JDK的Ubuntu的过程,原本这篇文章是打算介绍搭建伪分布式集群的。可是后来想一想反正伪分布式和彻底分布式差很少,所幸直接介绍彻底分布式了。html

若是你想本身搭建伪分布式玩的话,参考:在VMware下安装Ubuntu并部署Hadoop1.2.1分布式环境 - CSDN博客node

这一篇主要参考这篇文章:Hadoop2.6.0安装 - 集群(搭建的过程当中没截图,你们能够到原博客看)linux

1、所需的环境和软件:(如下是咱们的环境,仅供参考)

1. 操做系统:Windows 10 64位web

2. 内存:4G以上(4G 能够搭建,不过虚拟机的运行可能会比较慢,这种状况能够考虑双系统)ubuntu

3. VMware Workstation 12:VMware-workstation-full-12.5.7-5813279.exe网络

4. VMware Tools:经过VMware来安装app

5. Ubuntu12.04:ubuntu-14.04.5-desktop-amd64.iso,ubuntu-16.04.3-desktop-amd64.iso(团队中两种系统都有人成功,不太高版本的比较顺利)框架

6. SSH:经过linux命令来安装dom

7. JDK1.8:jdk-8u11-linux-x64.tar.gzssh

8. Hadoop2.6.0:hadoop-2.6.0.tar.gz

2、集群的搭建(以三台机器为例子,一台master(主机),两台Slave(从机),在虚拟机的设置中将网络适配改成桥接)

1.为了使得机器间可以互相连通,咱们须要修改/etc/hosts文件。

首先咱们要知道每一台机器的IP地址:经过 ifconfig 来查看

使用ping命令来测试能不能连通其余的机器

ping IP

使用 Ctrl+c来中止

知道了每台主机的IP以后就能够去修改hosts文件了(每一台主机作一样的配置),sudo gedit /etc/hosts

修改为下面的样子

192.168.31.61 Master

192.168.31.29 Slave1

192.168.31.34 Slave2

修改完以后就能够用ping Slave1来测试可否连接。

二、配置SSH登陆

配置SSH是为了使得每台机器之间可以经过SSH实现无密码登陆

安装ssh:

apt-get install ssh

安装好后生成ssh公钥。

$cd ~/.ssh # 若是没有该目录,先执行一次ssh localhost,生成.ssh目录
$rm ./id_rsa* # 删除以前生成的公匙(若是有)
$ssh-keygen -t rsa # 一直按回车就能够
$cat ./id_rsa.pub >> ./authorized_keys #将公钥加入受权

 

将Master 上生成的公钥传到各个Slave节点

$scp ~/.ssh/id_rsa.pub hadoop@Slave0:/home/hadoop/
$scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

这里的hadoop是指用户名,若是你集群中的机器名字不同,就直接改为相应的用户名就好了。

 

Master将公钥传输到各个节点后,Slave 要将公钥加入受权,这样Master 就能经过ssh免密码登陆各台机器了。

$cd ~/.ssh

$cat /home/hadoop/id_rsa.pub >> ./authorized_keys #将Master的公钥加入受权,/home/hadoop/换成本身的目录

 

每一台Slave机器都完成上述工做后,Master可使用ssh登陆各台主机了。

$ssh Slave1 #登陆Slave1,成功的话是不须要密码的,而后$前面的提示信息会变成你登陆的那台主机的信息

$ exit #退出登陆

 

注意:若是你的从机用户名和hosts文件里面的Slave1不同的话,直接ssh Slave1可能会登录不了。因此这时能够改为:ssh 用户名@Slave1

若是没什么问题的话,就代表ssh操做就是成功了

三、集群xml文件的配置

将Hadoop解压全部机器统一放到同一个目录下。(节点启动是master经过ssh登录到每一台从机而后在相同的目录启动Hadoop)

配置文件必需要配置的有5个,还有一个可能要配置。

必要的是: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。

可能:hadoop-env.sh

先说hadoop-env.sh这个文件,为何是可能呢?由于若是每一台机子的JDK路径不一样的话须要在文件中加入JDK路径:

红框部分:你的JDK路径。

slaves文件:

将做为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,因此在伪分布式配置时,节点即做为 NameNode 也做为 DataNode。分布式配置能够保留 localhost,也能够删掉,让 Master 节点仅做为 NameNode 使用。;例如直接将 Slave1 和 Slave2 都加入其中。

core-site.xml文件

<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration> 

hdfs-site.xml文件:

<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration> 

dfs.replication是hdfs数据块的复制份数通常默认为3,可是这里只有两台机器,因此改成2.

mapred-site.xml 文件(默认文件名为 mapred-site.xml.template,须要将文件名改为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> 

yarn-site.xml文件

<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>Master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> 

ok配置完成

四、对从机的每一台主机作一样的配置

把/usr/local/hadoop文件夹拷贝到每一台从机上面能够用U盘或者远程拷贝

$cd /usr/local
$sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
$sudo rm -r ./hadoop/logs/*   # 删除日志文件
$tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
$cd ~
$scp ./hadoop.master.tar.gz Slave0:/home/hadoop

copy结束后,在Slave1和Slave2节点上直接将copy过来的目录解压便可(Master节点须要和Slave节点有相同的配置)。

$sudo rm -r /usr/local/hadoop    # 删掉旧的(若是存在)
$sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
3 $sudo chown -R hadoop /usr/local/hadoop

五、启动Hadoop集群(在Master上启动):

$cd /usr/local/hadoop               #你的Hadoop文件夹
$hdfs namenode -format             #格式化namenode
$start-dfs.sh                      #启动hdfs
$start-yarn.sh                     #启动yarn框架
$mr-jobhistory-daemon.sh start historyserver

而后用JPS查看每一个节点的守护进程:

Master节点

楼主没截图,图片取自原参考博客

Slave1

楼主没截图,图片取自原参考博客

Slave2

楼主没截图,图片取自原参考博客

这时能够上web页面查看节点状态

1. 访问 http://localhost:50070 能够查看Hadoop集群的节点数、NameNode及整个分布式系统的状态等(live node是存活几点个数,不为0则成功)。

2. 访问 http://localhost:50030 能够查看JobTracker的运行状态,如Job运行的速度、Map个数、Reduce个数等。

3.访问 http://localhost:8088 能够查看节点状态等

六、中止集群

$stop-yarn.sh
$stop-dfs.sh
$mr-jobhistory-daemon.sh stop historyserver

*备注:遇到问题查看日志文件一个很好的选择

坑:

9000端口:jps显示有datenode,可是livenode为0。9000端口真的是一个很诡异的问题,一度在这里卡了好久。查过不少方法,最后大体是这么解决的:

卸载防火墙:

sudo apt-get remove iptable

/etc/hosts文件作以下改动

127.0.0.1 localhost

127.0.1.1 localhost.localdomain localhost

0.0.0.0 Master

还有的是这样:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

10.20.77.172 hadoop-master

10.20.77.173 hadoop-slave1

10.20.77.174 hadoop-slave2

10.20.77.175 hadoop-slave3

网上各类版本,我也依旧不是很肯定,你们试着吧。

datenode未启动:

将全部机器的hadoop下的tmp文件夹内的东西删掉就好

相关文章
相关标签/搜索