昨天发了第一篇博客,今天如约来更新啦.在这里,我们将从0开始一步一步搭建Hadoop完全分布式环境并在eclipse上运行hadoop的"helloword"程序:worldcount
这一篇先说说完全分布式的环境搭建.转载请注明出处!本文地址:http://www.cnblogs.com/XianChenBlog/p/5648636.html
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 , 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,从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 当然,依据自己的理解也可以放在其他路径.
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
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 ... ...
然后就可以开心的克隆虚拟机啦!
原理:
登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。 上面是用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 即可直接登录
自己曾经走了很多弯路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 空格
3,下面进入/usr/local/hadoop/etc/hadoop中, 1 cd /usr/local/hadoop/etc/hadoop
使用ls,你会发现所有的配置文件都在这啦
(a)用vim(或gedit , 不再赘述)修改hadoop-env.sh yarn-env.sh
1 vim hadoop-env.sh
在配置文件里面找到JAVA_HOME值,并修改为刚刚在环境变量中配置的值.
yarn-env.sh做同样操作
(b)修改配置文件laves:
1 vim slaves
将内容修改为:
slave1
slave2
(c)修改配置文件: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>
(d)修改配置文件: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>
(e)修改配置文件: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>(f)修改配置文件: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>(g)将hadoop传输到slave1和slave2根目录
1 scp -r /usr/local/hadoop slave1:/usr/local/; 2 scp -r /usr/local/hadoop slave2:/usr/local/;
如权限不足记得加sudo
(h)修改环境变量
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
马上要启动集群啦,想想还有点激动呢
1,格式化数据节点:
hadoop namenode -format
!!!!!!虽然是最后一步仍需注意,只在这里格式化这么一次,以后不要再格式化,否则会报异常!什么?问我为什么知道这个??呵呵
2,点火发射:
start-all.sh
3,查看启动进程 命令行敲入jps,回车, 看到 说明一切测控正常! 你也可以在浏览器输入http://你的主节点IP地址:8088/cluster来检测节点状态
到此,hadoop完全分布式环境搭建完毕!01:56:31 赶紧睡觉!!!
-->