代码改变世界

hadoop伪分布式模式的搭建

2015-08-11 16:51  想打架的蜜蜂  阅读(476)  评论(0编辑  收藏  举报

首先介绍下hadoop的部署方式:

本地模式:只启动一个map,一个reduce

伪分布式模式:一台机器模拟分布式环境

集群模式:真正的生产环境

本文将介绍伪分布式环境的搭建

伪分布式模式安装步骤:

1、关闭防火墙

2、修改ip地址

3、修改hostname

4、设置ssh自动登录

5、安装jdk

6、安装hadoop

 

首先关闭防火墙,我安装的linux系统是ubuntu,注意linux系统不同,命令也将不同。

我先看看防火墙是否已经安装,

sudo ufw version防火墙版本:
ufw 0.29-4ubuntu1
Copyright 2008-2009 Canonical Ltd.

ubuntu 系统默认已安装ufw。如果没有安装则先安装,

1.安装

sudo apt-get install ufw

查看防火墙的状态用命令:sudo ufw status

我的返回的是:inactive,说明防火墙就是关闭的

开启/关闭防火墙 命令(默认设置是’disable’)

sudo ufw enable|disable

下面修改ip

这里用hostonly方式(仅主机模式),为了是在不联网的情况下,windows和linux能够通信。

1、选中虚拟机图标,右击,打开文件位置,找到vmnetcfg,打开,用来配置网络

打开后,点击hostonly,在name那一列发现时vmnet1网卡,如果想用此hostonly模式,得在windows下面的网络与共享中心中的更改设备器设置中将VMnet1启动,再回到刚出现的虚拟机网络设置那个界面,发现网段是47网段,从最后面的Subnet Address一列192.168.47.0可以看出来.现在我不喜欢47网段,我喜欢8网段,将47改成8既可以,在下面改,后面的子网掩码就别管了,此时发现Subnet Address那一列已经改变。

下面在windows下面设置wmnet1的属性,ipv4 发现ip变成了192.168.8.1,如果不喜欢,可以改成192.168.8.100等,此时100就是windows的ip,是虚拟机与windows通信走的ip。

下面修改linux的ip,这边介绍图形界面的方式,这个设置方式多,图形界面也很可能不一样

1、找到ubuntu右上角的图标,右击选中System Setting打开

2、选择NetWork,打开

3、选择Wired,右边选择Options..

4、选择IPv4 Settiongs ,默认是DHCP即动态获取ip,这种情况下,如果机器重启,ip地址会变

选择Manual,即手动配置。在Addresses中选择Add,然后添加配置,如

ip:192.168.8.88,这是linux的ip,注意与windows在一个网段并且不能一样

Netmask:子网掩码255.255.255.0

Gateway网关,192.168.8.1  然后save

下面修改主机名:命令vi /etc/hostname

下面设置主机名与ip的映射关系

vim /etc/hosts

然后添加192.168.8.88   我刚才设置的主机名hostname 如果有多个  一行一个

重启linux ,然后检查是否主机名,ip地址都已经修改,防火墙是否关闭,然后在windows下面ping 192.168.8.88

看看主机是否能够ping通linux,发现没有ping通,首先检查虚拟机设置是否是用了hostonly模式,虚拟机打开,在master右击,Setting里面,选择Network Adapter,右边选择hostonly模式。然后ok.

稍等一下,现在在从外网ping,发现ping成功了

现在其实是从外网ping通的,因为我的电脑虚拟机和主机都是联网的,只要把本地连接禁用,然后在ping就是测试在hostonly模式是否成功。

下面安装jdk,hadoop要求jdk1.6之上,不要用1.8,这里我下载了1.7版本

这里做统一管理,放在指定地方,首先在usr下面创建文件夹:mkdir /usr/java

然后将刚才解压后的jdk移动进去,命令mv jdk1.7.0_79 /usr/java

看看是否移动进去,命令cd /usr/java

ls

发现移动成功

在cd到jdk里面,再ls发现文件夹下面是一些如bin等文件夹。

下面添加环境变量,先pwd,将目录复制

打开配置文件,添加环境变量,vim /etc/profile

在最后添加

export JAVA_HOME=/usr/java/jdk1.7.0_79

export PATH=$PATH:$JAVA_HOME/bin

在使刚才的环境变量生效

source /etc/profile  即可

现在java -version  将显示版本

 

我在安装时还碰到一个问题是我系统安装时自动安装了openjdk,并且上面的过程显示了系统以前安装的jdk,我卸载步骤如下:

上面环境变量已经配置好,保留,先关闭终端,重新打开

然后两条命令,注意后面是我自己的目录,跟你的可能不一样要修改
sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.0.7—79/bin/java 300  
sudo update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.0.7—79/bin/javac 300  

update-alternatives --config java 

显示:

  选择       路径                                    优先级  状态 

------------------------------------------------------------ 

* 0            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      自动模式 

  1            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      手动模式 

  2            /usr/java/jdk1.7.0_79/jre/bin/java       63        手动模式 

 

键入选择的编号:2   

回车

4.验证下java -version发现已经改为我刚安装的

 

配置hadooP,我下载的版本是hadoop2.6.0,你最好下载稳定版本,我这还不是稳定版本

下载,解压

修改5个配置文件

我解压后的文件夹直接放在home目录下了,大概文件结构为:/home/master/itcast/hadoop-2.6.0

首先到:/home/master/itcast/hadoop-2.6.0/etc/hadoop目录

先修改hadoop的环境变量 vim hadoop-env.sh

找到设置java_home的地方,就是在#the java implementation to use下面一行

改为:export JAVA_HOME=/usr/java/jdk1.7.0_79

保存  退出

下面修改core-site.xml,这是一个配置文件,命令是

vim core-site.xml

打开后找到<configuration>标签,在这个标签之间添加标签如下:

<property>//第一个属性用来指定hdfs的老大namenode的地址

       <name>fs.defaultFS</name>

        <value>hdfs://192.168.8.88:9000</value>//主机名加上端口

</property>

<property>//第二个属性用来指定hadoop运行时产生文件的存放目录(linux下面具体的目录)

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

        <value>/home/master/itcast/hadoop-2.6.0/tmp</value>

</property>

 下面修改第三个配置文件hdfs-site.xml

打开vim hdfs-site.xml

根上面一样,

<property>//指定hdfs保存数据副本的数量

<name>dfs.replication</name>

<value>1</value>//在伪分布式环境下保存一份,默认在集群环境剩下是1份

</property>

第四个配置文件是mapred-site.xml

首先ls下面发现没有mapred-site.xml,只有以template结尾的文件

这时候,得重命名

命令:mv mapred-site.xml.template mapred-site.xml

这时再ls发现重命名成功

这时打开配置文件:vim mapred-site.xml

跟上面一样,添加

<property>//告诉hadoop以后Mapreduce运行在yarn上

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

修改第五个配置文件yarn-site.xml

跟上面一样

<property>//获取数据的方式是shuffle的方式

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

 

<property>//指定yarn的老大ResourceManager的地址

<name>yarn.resourcemanager.hostname</name>

<value>master</value>

</property>

 

下面将hadoop添加到环境变量,并且格式化hadoop

vim /etc/profile

export HADOOP_HOME=/home/master/itcast/hadoop-2.6.0

修改PATH 后面添加:HADOOP_HOME/bin

然后生效配置文件source /etc/profile

下面初始化HDFS(格式化文件系统)

用命令hadoop namenode -format(过时了)

我们用新的命令,先找命令在哪里,用命令which hadoop

我们将看到hadoop所在的目录

用which hdfs

看到hdfs的路径,在bin目录下

下面打开到bin目录下面,我们看到有很多脚本,如hadoop、yarn、hdfs等

下面进行格式化

打开到上一层目录,就是bin前的那一层目录

用命令hdfs 看跟什么参数

看到有个namenode -format 就是格式化这个分布式文件系统

故用命令hdfs namenode -format

看到接近最后有一句话successfully formatted  就是已经配成功格式化了

这时候在hadoop-2.6.0文件夹下面ls,发现了生成了tmp文件夹,这时hadoop运行时保存重要文件的目录

下面启动hadoop ,hadoop有两个核心一个是hdfs一个是yarn,我们先cd 到sbin下面

发现sbin 下面很多start,stop 如start-all就是把所有的都启动起来,启动所有其实就是启动hdfs和yarn,也可以单独启动

整体启动命令   ./start-all.sh

期间可能遇到的问题可能有:1、http://www.linuxidc.com/Linux/2015-01/112045.htm

http://shisiyou.blog.51cto.com/9864147/1608060 

 

  启动./start-all.sh有个小问题就是要不断的输入密码,下面ssh免密码登录

下面先验证配置是否正确:

http://192.168.8.88:50070 (HDFS管理界面)
  http://192.168.8.88:8088 (MR管理界面)

下面验证hdfs,如上传文件

首先cd ~ 到主目录home下面,我这个下面有个hadoop-2.6.0.tar.gz包

敲命令hadoop ,但是居然提示找不到hadoop命令,于是我就把hadoop的sbin目录加入到path中,依然在配置文件/etc/profile,这时再执行source命令,生效后即能识别hadoop命令

再敲hadoop命令出现一些命令,下面我们选用这个fs,再敲hadoop fs这个时候看到copyFromLocal和put都是将本地文件上传上去。

我们把hdfs看成是一个文盘,网盘也是一个文件系统。你要上传的文件在本地linux文件系统上,我要上传到hdfs文件系统

敲命令hadoop fs -put hadoop-2.6.0.tar.gz hdfs://192.168.8.88:9000/hadoop,这时候在http://192.168.8.88:50070 (HDFS管理界面)的browser the file system中将看到,已经成功上传

下面通过命令下载,依然hadoop fs发现get  就是从hdfs文件系统拿到本地文件系统

hadoop fs -get hdfs://192.168.8.88:9000/hadoop /home/hhh  这样就下载到/home/hhh这个目录下了

测试mapreduce 和yarn

首先打开到目录/home/master/itcast/hadoop-2.6.0/share/hadoop,然后可以看到mapreduce

cd mapreduce 在ls之后,你会看到很多包,其中examples等就是例子

vim words创建文件,添加内容

hello tom
hello jerry
hello kitty
hello word
hello tom

这时wc words将统计出来行数字数等等

more words 将显示出刚才的内容

统计刚才完成的内容

由上面的内容知道,hello 出现了5次,tom出现了2次,jerry出现了1次,kitty出现了1次,word次出现了1次

先which hadoop ,看hadoop的目录

运行包,hadoop jar hadoop-mapreduce-examples-2.6.0.jar 回车之后你将看到有很多的例子,如排序。。。。

我现在想要wordcount 这时hadoop的入门基础级别程序,wordcount后跟两个参数,一个是输入,一个是输出,这些目录是计算海量数据,这些海量数据存放于什么地方,数据的输入时hdfs,数据的输出也是hdfs,因为这些文件可能非常非常的大,所以应该先上传

hadoop fs -put words hdfs://itcast01:9000/words

查看是否已经上传成功hadoop fs -ls hdfs://itcast01:9000/发现已经有words目录,上传成功

现在命令hadoop jar hadoop-mapreduce-examples-2.6.0.jar wordcount hdfs://itcast01:9000/words hdfs://itcast01:9000/wcout

现在查看是否完成 先看看是否存在hadoop fs -ls /  (注意写法)可以看到这里面出现了wcout

再看看浏览器中点开结果文件发现已经计算好了

hello  5

jerry 1

kitty 1

tom 2

word 1

 如果在这过程中有错误,在日志文件中以log结尾的文件,如果以yarn开始的文件就看以yarn开始的文件,如果是root用户则看以yarn-root开始的文件

上面已经完全配置好了hadoop伪分布式集群,现在美中不足的就是开始或者结束过程中药输入很多次密码,也就是

./start-all.sh   和./stop-all.sh  都要输入密码,

假如通过ssh  登录到itcast01上面,ssh itcast01,回车之后发现也要密码

也就是自己登录自己也要密码,ssh的机制就是要用密码

这时得再在虚拟机上装一个ubuntu,跟原先的在一个网段上面,设置hostonly,并且ip  192.168.8.99

这时两台互相ping能ping通,这时再8.88上面,向8.99发送一个命令  ssh 192.168.8.99 mkdir /itcast0106

这个时候得输入yes,和99的密码然后99上将创建一个目录

一台向另一台发送命令,如果走的是ssh指令,必须输入密码,这时协议规定的,如果以后有很多机器,要输入密码非常麻烦

下面配置ssh免登陆,ls -la,将当前目录下所有文件以详细形式都显示出来

可以看到有个.ssh文件夹,进入文件夹  cd .ssh

ls 后发现只有一个文件 known_hosts,这里面存放的是我知道的主机名

生成一对密钥,一个公钥一个私钥 用linux给出的命令 ssh-keygen -t rsa //-t是指定加密的类型 rsa加密算法,即使计算机破解也将破解很多年

四次回车之后生成了类似于二维码的东西

这是新生成了两个文件,我的在、root/.ssh目录下面,所以转到此目录cd /root/.ssh

more id_rsa.pub 发现一堆字符串,是公钥,有字母有数字,下面看一看私钥more id_rsa,特别多的字符串

现在免登陆自己,要把公钥拷给自己cp id_rsa.pub authorized_keys  //把公钥拷贝到已经认证里面,这个地方是一定的

回车后再ls 发现又多了一个文件,以前ssh itcast01 需要输密码,现在已经不要输入密码

现在./start-all.sh就不需要输入密码了,哈哈,爽

下面介绍一个命令  ssh-copy-id itcast01将我当前的公钥发送给itcast01

现在我想用8.88免登陆到8.99,只要把8.88的公钥发送给8.99就能免登陆

在8.88 下面输入命令ssh-copy-id 192.168.8.99//把我当前机器的公钥拷贝到8.99上面,回车后先输入99的密码,这时候99下面.ssh下面有一个文件是authorized_keys,里面是8.88的公钥,用more authorized_keys可以查看

现在就可以8.88上面免登陆8.99,在8.88上面输入ssh 192.168.8.99

这样就进入了8.99,还不用输密码。