在这里,咱们将从0开始一步一步搭建Hadoop彻底分布式环境并在eclipse上运行hadoop的"helloword"程序:worldcount
这一篇先说说彻底分布式的环境搭建. 2.4以上3.0如下的版本参照搭建步骤通用。javascript转载请注明出处!本文地址:http://www.cnblogs.com/XianChenBlog/p/5648636.htmlcss
if(!富二代){
准备本身的虚拟机软件,并根据本身的喜爱选择一个Linux发行版安装虚拟机。一个版本的Eclipse和Eclipse的hadoop插件
}else{
买三台(或更多)电脑。
}html虚拟机软件的选择和Linux发行版的选择无所谓,仁者见仁智者见智,关键是要选择本身最熟悉的软件和系统html5
我选择的是:
虚拟机 : Parallels Desktop,
Linux : Ubuntu14.04
java可能更多人更加熟悉VMWare,使用Mac的同窗们不用担忧,VMWare也提供了相应Mac版可供下载,不过推荐你们试一下ParallelsDesktop, OS下发热明显比VMWare小,虚拟机更佳流畅,体验很不错.正版购买虽然有点高,不过有某宝存在,这些都不是问题.
node虚拟机网络模式:
虚拟机三种网络模式:NAT,HOST-ONLY,桥接
这里我选择桥接模式.处于桥接模式的虚拟机,分配静态的IP,在子网中至关于一台独立的主机,对于搭建hadoop来将更能模拟真实性吧.下 面是个人ipv4设置git
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,命令行各有不一样,盆友们根据本身的版本本身搜索一下.不清楚这三种虚拟机的网络模式的盆友们请点击这里.看小炒花生米的博客 github
这里说一下全部须要咱们进行的操做以及操做的顺序
咱们须要进行的下载有:
1 , vim
2 , ssh
3 , jdk
4 , Eclipse
5 , hadoop-2.6.0.tar.gz(或其余版本)
6 , hadoop-eclipse-plugin-2.6.0.jar(版本与hadoop相同便可)
web过一段时间我会将个人上述资源上传到百度云后我会在这里给出网盘连接.
咱们须要进行的配置有:
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 , 克隆虚拟机下面正式进入配置
1 sudo apt-get install vim 2 sudo apt-get install ssh若是没法安装,检查一下软件包的安装源,
Ubuntu下:
若是这个选项是被选中的,那么取消选择这个选项.Ubuntu默认是选中的.
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
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 空格
注意:讲道理的话,只要是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
立刻要启动集群啦,想一想还有点激动呢
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 赶忙睡觉!!!
-->