Hadoop2.6.0(2.4~2.7)完全分布式搭建-入门向 新手向 详细流程
前言
在这里,我们将从0开始一步一步搭建Hadoop完全分布式环境并在eclipse上运行hadoop的"helloword"程序:worldcount
这一篇先说说完全分布式的环境搭建. 2.4以上3.0以下的版本参照搭建步骤通用。转载请注明出处!本文地址:http://www.cnblogs.com/XianChenBlog/p/5648636.html
0,一些准备工作
if(!富二代){
准备自己的虚拟机软件,并根据自己的喜好选择一个Linux发行版安装虚拟机。一个版本的Eclipse和Eclipse的hadoop插件
}else{
买三台(或更多)电脑。
}虚拟机软件的选择和Linux发行版的选择无所谓,仁者见仁智者见智,关键是要选择自己最熟悉的软件和系统
我选择的是:
虚拟机 : Parallels Desktop,
Linux : Ubuntu14.04
可能更多人更加熟悉VMWare,使用Mac的同学们不用担心,VMWare也提供了相应Mac版可供下载,不过推荐大家试一下ParallelsDesktop, OS下发热明显比VMWare小,虚拟机更佳流畅,体验很不错.正版购买虽然有点高,不过有某宝存在,这些都不是问题.
虚拟机网络模式:
虚拟机三种网络模式:NAT,HOST-ONLY,桥接
这里我选择桥接模式.处于桥接模式的虚拟机,分配静态的IP,在子网中相当于一台独立的主机,对于搭建hadoop来将更能模拟真实性吧.下 面是我的ipv4设置
hostname IPV4地址 子网掩码 网关 宿主机 192.168.43.79 255.255.255.0 192.168.43.1 主节点 master 192.168.43.89 255.255.255.0 192.168.43.1 从节点1 slave1 192.168.43.90 255.255.255.0 192.168.43.1 从节点2 slave2 192.168.43.91 255.255.255.0 192.168.43.1
关于如何修改IPV4的ip地址,不同版本的Linux,命令行各有不同,盆友们根据自己的版本自己搜索一下.不清楚这三种虚拟机的网络模式的盆友们请点击这里.看小炒花生米的博客
1,关于配置的顺序
这里说一下所有需要我们进行的操作以及操作的顺序
我们需要进行的下载有:
1 , vim
2 , ssh
3 , jdk
4 , Eclipse
5 , hadoop-2.6.0.tar.gz(或其他版本)
6 , hadoop-eclipse-plugin-2.6.0.jar(版本与hadoop相同即可)
过一段时间我会将我的上述资源上传到百度云后我会在这里给出网盘链接.
我们需要进行的配置有:
1 , 每台虚拟机:配置主机名以及Hosts文件
2 , 每台虚拟机:安装vim和ssh工具
3 , 每台虚拟机:配置java环境变量
4 , 每台虚拟机:配置hadoop
5 , 配置ssh实现节点之间的免密码登陆
我会发现,每台虚拟机有好多重复的操作,例如都需要配置Hosts文件以及主机名,都需要安装vim和ssh都需要下载jdk并配置环境变量 都需要配置hadoop但是ssh的配置每台机器却不太一样.于是我们采用这样的方法减少工程量:先在一台机器上配置好所有相同的操作,然后克隆虚拟机(克隆的虚拟机与原虚拟机的内容和设置会一摸一样),最后配置每台机器不一样的操作.但是这样做也有问题.因为如果没有vim 那么就很难完成环境变量的配置(这个时候Ubuntu预装的gedit就显得有些方便了).所以我们最先装vim.没有进行java环境变量的配置 就无法配置hadoop,所以配置java在hadoop之前,没有进行过ssh安装和节点之间的免密码登陆,hadoop就无法与另外两个节点沟通,所以ssh安装和配置在hadoop之前 ,又因为ssh的安装在三台虚拟机上是一样的,而ssh的免密码的配置在每台机器上是不一样的,所以我们先安装ssh,在克隆虚拟机之后配置ssh免密码登陆最后配置hadoop
所以我认为的比较科学的安装和配置顺序是:
1 , 安装vim
2 , 安装ssh
3 , 配置java环境变量
4 , 配置主机名以及Hosts文件
5 , 克隆虚拟机
6 , 修改主机名
7 , 配置ssh免密码登陆
8 , 配置hadoop
如果对自己比较有把握的话,使用下面的顺序也可以:1 , 安装vim
2 , 安装ssh
3 , 配置java环境变量
4 , 配置主机名以及Hosts文件
5 , 修改主机名
6 , 配置ssh免密码登陆
7 ,配置hadoop
8 , 克隆虚拟机下面正式进入配置
3,安装vim , ssh
1 sudo apt-get install vim 2 sudo apt-get install ssh如果无法安装,检查一下软件包的安装源,
Ubuntu下:
如果这个选项是被选中的,那么取消选择这个选项.Ubuntu默认是选中的.
4,配置Java环境变量
1,从oracle或国内网盘下载jdk安装包到虚拟机
2,用cd命令进入jdk的当前目录,利用下面的命令解压缩:
tar -zxvf jdk......(你的jdk压缩包名称)
或
tar -xzf jdk......(你的jdk压缩包名称)
其中v参数是指定是否在终端回显显示解压的详细过程更多的参数及其作用参见: http://www.2cto.com/os/201207/143935.html 3,利用如下命令将解压后的文件夹剪切到 /usr/local 目录下
sudo mv jdk...(你的jdk压缩包名称) /usr/local
关于为什么是移到/usr/local 目录下,你需要了解Linux系统的文件系统的目录结构及其作用,参见 http://blog.sina.com.cn/s/blog_662234020101ebfd.html 当然,依据自己的理解也可以放在其他路径,例如/opt下也是可以的.
4,配置环境变量
配置环境变量一共有三种方式,我选择"最狠"的一种.修改profile文件
sudo vim /etc/profile
在文件末尾加入下面语句(注意将JAVA_HOME后面的路径改为刚才盆友们自己存放jdk解压后的文件夹的位置)
JAVA_HOME=/usr/local/jdk CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME export CLASSPATH export PATH
最后执行配置文件使配置立即生效
source /ect/profile
其他两种配置环境变量的方式参见:http://www.cnblogs.com/yjhrem/articles/2227680.html
5,配置主机名和Host文件
1 , 编辑hosts文件
1 sudo vim /etc/hosts
文件中将127.0.1.1这一项注释掉(#)并写入:
192.168.43.89 master
192.168.43.90 slave1
192.168.43.91 slave2
这里是我在开始的时候自己配置的三台虚拟机的IP地址,大家根据自己的IP地址,更改为自己的ip地址写入Host
命令
1 sudo vim /etc/hostname
文件中写入本机名:master
一般主节点名习惯命名为master,从节点习惯命名为Slave+节点的编号,例如slave1 slave2 ... ...
然后就可以开心的克隆虚拟机啦!
6,配置ssh,实现节点间无密码登陆
原理:
登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。 上面是用rsa算法的公钥/私钥对,当然也可以用dsa(对应的文件是id_dsa,id_dsa.pub)
步骤:
1 [主/从],主节点和从节点下均在命令行执行 1 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
参数rsa指定加密算法,也可以用dsa参数,如果用dsa,就把下面所有写rsa的地方改成dsa.
参数-p是指定密码 -p ''表示空密码
参数-f是指定路径,可以不用指定,因为默认的路径即是~/.ssh/id_dsa
如果不加-p和-f参数,那么需要在执行命令的过程中需要根据提示多按两次回车,来确认是否默认空密码和默认路径
2 [主],主节点进入.ssh文件夹 1 cd ~/.ssh
cd ~/.ssh 将生成的公钥id_rsa.pub 内容追加到authorized_keys
1 cat id_rsa.pub >> authorized_keys
3 [从],从节点:
在slave1中执行命令: 1 scp id_rsa.pub master:~/.ssh/id_rsa.pub.s1
在slvae2中执行命令: 1 scp id_rsa.pub master:~/.ssh/id_rsa.pub.s2
4 [主],主节点: 1 cat id_rsa.pub.s1 >> authorized_keys; 2 cat id_rsa.pub.s2 >> authorized_keys;
5 [主],主节点: 1 scp authorized_keys slave1:~/.ssh/; 2 scp authorized_keys slave2:~/.ssh/;
验证:
验证ssh免密码登录:
输入命令ssh slave1 根据提示输入“yes” 第一次登陆仍然需要输入密码
输入命令exit注销(Logout)
再次输入命令ssh salve1 即可直接登录
7,配置Hadoop
自己曾经走了很多弯路T_T.终于走到了这一步了-_-.现在第二次配置很顺利走到这感觉熟练很多^_^
策略:
我们需要在主节点和从节点上做一样的配置.我们可以在主节点上配置好了之后,再将整个hadoop文件夹远程发送给从节点.
步骤:
1,与jdk一样,首先要进入jdk的所在目录,tar命令解压,并移动到/usr/local
2,在/usr/local/hadoop目录下新建如下目录
1 mkdir /dfs 2 mkdir /dfs/name 3 mkdir /dfs/data 4 mkdir /tmp如果权限不足的话记得在mkdir前面加sodu 空格
注意:讲道理的话,只要是Linux的系统,把Hadoop放在/usr/local下面确实是没问题的。但是博主我在Ubuntu的环境下却遇到了个问题,想不太明白。使用centOS RedHat Debian的同学,你们就仍然按照这个步骤来应该是没有问题的。使用Ubuntu的同学如果你发现你遇到了问题,请看这里:
--如果在步骤(7)使用scp -r命令传输Hadoop文件夹的时候,提示权限不足,我们在scp命令前加上sudo。于是终端提示输入root@master的密码,那么输入你的Linux密码。随后终端会提示你输入远程机器的密码,输入密码,如果通过,那么继续看下面的步骤3,如果大家发现输入了正确的Linux密码,确总是提示重新输入,那么请在远程需要接收文件夹的虚拟机修改Unix密码:在终端输入passwd,回车输入新的密码,确认输入新的密码。然后切换回Master,重新scp,然后输入root@master密码,在输入root@slave的密码。如果发现更改了密码之后,输入正确的slave密码,依然不断的提示重新输入。那么恭喜你遇到了和我一样的问题。如果哪位大侠能找到合理的解释,请赐教啊。不过虽然不能解释,但是我们可以避开这个问题,在hadoop解压之后,不要移动到/usr/local这样具有如此高权限的文件件,放在你当前用户文件夹下的根目录或任意子目录都是没问题的。然后在(7)使用scp命令远程复制的时候,采用相同的路径,当前用户文件夹下的根目录或任意子目录。问题就应该解决了。3,下面进入/usr/local/hadoop/etc/hadoop中, 1 cd /usr/local/hadoop/etc/hadoop
使用ls,你会发现所有的配置文件都在这啦
(1)用vim(或gedit , 不再赘述)修改hadoop-env.sh yarn-env.sh
1 vim hadoop-env.sh
在配置文件里面找到JAVA_HOME值,并修改为刚刚在环境变量中配置的值.
yarn-env.sh做同样操作
(2)修改配置文件slaves:
1 vim slaves
将内容修改为:
slave1
slave2
(3)修改配置文件:core-site.xml1 <configuration> 2 <property> 3 <name>fs.defaultFS</name> 4 <value>hdfs://master:8020</value> 5 </property> 6 <property> 7 <name>io.file.buffer.size</name> 8 <value>131072</value> 9 </property> 10 <property> 11 <name>hadoop.tmp.dir</name> 12 <value>file:/usr/hadoop/tmp</value> 13 <description>Abase for other temporary directories.</description> 14 </property> 15 <property> 16 <name>hadoop.proxyuser.dust(这里应该将dust替换为你自己的用户名).hosts</name> 17 <value>*</value> 18 </property> 19 <property> 20 <name>hadoop.proxyuser.dust(这里应该将dust替换为你自己的用户名).groups</name> 21 <value>*</value> 22 </property> 23</configuration>
(4)修改配置文件:hdfs-site.xml1 <configuration> 2 <property> 3 <name>dfs.namenode.secondary.http-address</name> 4 <value>master:9001</value> 5 </property> 6 <property> 7 <name>dfs.namenode.name.dir</name> 8 <value>file:/usr/hadoop/dfs/name</value> 9 </property> 10 <property> 11 <name>dfs.datanode.data.dir</name> 12 <value>file:/usr/hadoop/dfs/data</value> 13 </property> 14 <property> 15 <name>dfs.replication</name> 16 <value>3</value> 17 </property> 18 <property> 19 <name>dfs.webhdfs.enabled</name> 20 <value>true</value> 21 </property> 22 </configuration>
(5)修改配置文件:mapred-site.xml
你会发现你是找不到mapred-site.xml的,但是会找打一个mapred-site.xml.template 于是我们要复制该文件,并命名为mapred.xml,该文件用于指定MapReduce使用的框架。
执行 1 cp mapred-site.xml.template mapred-site.xml 然后编辑mapred-site.xml1 <configuration> 2 <property> 3 <name>mapreduce.framework.name</name> 4 <value>yarn</value> 5 </property> 6 <property> 7 <name>mapreduce.jobhistory.address</name> 8 <value>master:10020</value> 9 </property> 10 <property> 11 <name>mapreduce.jobhistory.webapp.address</name> 12 <value>master:19888</value> 13 </property> 14 </configuration>(6)修改配置文件:yarn-site.xml
1 <configuration> 2 <property> 3 <name>yarn.nodemanager.aux-services</name> 4 <value>mapreduce_shuffle</value> 5 </property> 6 <property> 7 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> 8 <value>org.apache.hadoop.mapred.ShuffleHandler</value> 9 </property> 10 <property> 11 <name>yarn.resourcemanager.address</name> 12 <value>master:8032</value> 13 </property> 14 <property> 15 <name>yarn.resourcemanager.scheduler.address</name> 16 <value>master:8030</value> 17 </property> 18 <property> 19 <name>yarn.resourcemanager.resource-tracker.address</name> 20 <value>master:8031</value> 21 </property> 22 <property> 23 <name>yarn.resourcemanager.admin.address</name> 24 <value>master:8033</value> 25 </property> 26 <property> 27 <name>yarn.resourcemanager.webapp.address</name> 28 <value>master:8088</value> 29 </property> 30 </configuration>(7)将hadoop传输到slave1和slave2根目录
1 scp -r /usr/local/hadoop slave1:/usr/local/; 2 scp -r /usr/local/hadoop slave2:/usr/local/;
如权限不足记得加sudo
(8)修改环境变量
1 sudo vim /etc/profile
将刚才我们配置java时的环境变量改为:
1 JAVA_HOME=/usr/local/jdk 2 CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 3 HADOOP_HOME=/usr/local/hadoop 4 PATH=$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH 5 export JAVA_HOME 6 export CLASSPATH 7 export HADOOP_HOME 8 export PATH注意顺序,一定要先定义和export JAVA_HOME和CLASSPATH 后定义和export HADOOP
8,大功告成
马上要启动集群啦,想想还有点激动呢
1,格式化数据节点:
hadoop namenode -format
注意这里只需格式化一次,如果重新格式化会因为namenodeid/datanodeid不一致的问题而产生异常。如有需求(例如在slave机器上使用jps查看进程时,发现datanode没有正常启动)需要重新格式化,那么请删除master和每个slave中,hadoop下tmp目录,以及/dfs/name和/dfs/data的子目录中的所有内容,然后再重新执行格式化命令。
2,点火发射:
start-all.sh
3,查看启动进程 命令行敲入jps,回车, 看到
说明一切测控正常! 你也可以在浏览器输入http://你的主节点IP地址:8088/cluster来检测节点状态
注意:如果看不到TaskTracker,童鞋们也不要惊慌。hadoop2.6下输入jps时看不到TaskTracker的。由于Hadoop2.x采用和hadoop1不同的架构,输入jps,在master看到如上图四个进程,slave中看到三个进程,即证明配置正确。
到此,hadoop完全分布式环境搭建完毕!01:56:31 赶紧睡觉!!!
-->