码迷,mamicode.com
首页 > 其他好文 > 详细

hadoop 2.6全分布安装

时间:2015-02-12 22:35:04      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:

环境:centos 6.6 + hadoop2.6

虚拟机:(vmware fusion 7.0.0)

虚拟机hostname      /    IP地址

master / 192.168.187.102

slave01 / 192.168.187.103

slave02 / 192.168.187.104

注:前三个步骤都是准备工作,如果已经完成,可直接进入步骤四

步骤一: 先在3台虚拟机上,设置hostname及修改hosts文件

1.1 先正确设置各虚拟机的hostname 

sudo vi /etc/sysconfig/network

将HOSTNAME=后的内容,改成想要的机器名

1.2 修改hosts文件

sudo vi /etc/hosts

192.168.187.102 master

192.168.187.103 slave01

192.168.187.104 slave02

这样,就不用记IP了

这一步完成后,最好重启一次系统,以便生效。然后可以用ping master(或slave01、slave02)试下,正常的话,应该能ping通

注:hostname不要命名为“xxx.01,xxx.02”之类以“.数字”结尾,否则到最后hadoop的NameNode服务将启动失败。

 

步骤二:在3台虚拟机上安装jdk

yum install java

注:hadoop是java写的,jdk是必须的。上述命令,会安装openjdk最基本的运行时,没有源码和javac等其它工具。如果要安装javac等编译工具及源码

yum install java-1.7.0-openjdk-devel

yum install java-1.7.0-openjdk-src

另外openjdk安装后,不会默许设置JAVA_HOME环境变量,要查看安装后的目录,可以用命令

sudo update-alternatives --config java 看到

默认jre目录为:/usr/lib/java/jvm/jre-1.7.0-openjdk.x86_64

如要设置环境变量,可用命令 sudo vi /etc/profile

在最后添加

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

注:如果不喜欢openjdk,想安装oracle官方的jdk,可按下面步骤操作

a) rpm -qa | grep java

即:查看当前已经安装的跟java相关的包,如果显示有openjdk在其中

b) yum -y remove java

一般这样就会卸载干净,执行完以后,再运行 a)中的rpm -qa | grep java看看,如果还有残留,可运行

rpm -e --nodeps tzdata-java-2015a-1.el6.noarch (最后的部分为要删除的包名,即刚才查出来的结果)

重新安装sun jdk,先从官网下载安装文件

a) 上传rpm安装文件到虚拟机,参考下面的命令

scp jdk-7u51-linux-x64.rpm root@master:/home/hadoop/

b) 到虚拟机上,执行安装

rpm -ivh jdk-7u51-linux-x64.rpm

c) 然后修改环境变量 sudo vi /etc/profile,在最后加下面三行

export JAVA_HOME=/usr/java/jdk1.7.0_51
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

保存退出,然后输入 source /etc/profile 以便让新环境变量生效

 

步骤三:在3台虚拟机上创建专门用户hadoop

useradd hadoop (创建用户)

passwd hadoop (设置密码,为简单起见,3台机器上的hadoop密码最好设置成一样,比如hadoop123)

 

步骤四:配置ssh免密码登录

hadoop工作时,各节点要相互通讯,正常情况下linux之间通讯要提供用户名、密码(目的是保证通讯安全),如果需要人工干预输入密码,显然不方便,做这一步的目的,是让各节点能自动通过安全认证,不影响正常通讯。

4.1 先在master上,生成公钥、私钥对

以hadoop身份登录到系统

cd (进入个人主目录,默认为/home/hadoop)

ssh-keygen -t rsa -P ‘‘ (注:最后是二个单引号)

即:以rsa算法,生成公钥、私钥对,-P ‘‘表示空密码。该命令运行完后,会在个人主目录下生成.ssh目录,里面会有二个文件id_rsa(私钥) ,id_rsa.pub(公钥)

4.2 导入公钥

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

执行完以后,可以在本机上测试下,用ssh连接自己,即:ssh localhost (或ssh master),如果不幸还是提示要输入密码,说明还没起作用,还有一个关键的操作

chmod 600 .ssh/authorized_keys (修改文件权限,否则不起作用)

然后再测试下 ssh localhost ,如果不需要输入密码,就连接成功,表示ok,一台机器已经搞定了。

4.3 在其它机器上生成公钥、密钥,并将公钥文件复制到master

a) 以hadoop身份登录其它二台机器 slave01、slave02,执行 ssh-keygen -t rsa -P ‘‘ 生成公钥、密钥

b) 然后用scp命令,把公钥文件发放给master(即:刚才已经搞定的那台机器)

slave01上:

scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_01.pub

slave02上:

scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_02.pub

这二行执行完后,回到master中,查看下/home/hadoop目录,应该有二个新文件id_rsa_01.pub、id_rsa_02.pub,然后在master上,导入这二个公钥

cat id_rsa_01.pub >> .ssh/authorized_keys

cat id_rsa_02.pub >> .ssh/authorized_keys

这样,master这台机器上,就有所有3台机器的公钥了。

4.4 将master上的“最全”公钥,复制到其它机器

a) 继续保持在master上,

scp .ssh/authorized_keys hadoop@slave01:/home/hadoop/.ssh/authorized_keys

scp .ssh/authorized_keys hadoop@slave02:/home/hadoop/.ssh/authorized_keys

b) 修改其它机器上authorized_keys文件的权限

slave01以及slave02机器上,均执行命令

chmod 600 .ssh/authorized_keys

4.5 验证

在每个虚拟机上,均用 ssh 其它机器的hostname 验证下,如果能正常无密码连接成功,表示ok

小结:该步骤非常重要,主要思路是在各节点上生成公钥、私钥,然后将公钥发放其它所有节点。RSA算法是非对称加密算法,仅公布“公钥”,只要私钥不外泄,还是不能解密的,所以安全性依然有保障。

 

步骤五:上传并解压hadoop2.6

a)在本机上,用scp命令上传hadoop2.6到master

scp hadoop-2.6.0.tar.gz hadoop@master:/home/hadoop/

b) 以hadoop身份登录到master,运行以下命令解压

tar -zxvf hadoop-2.6.0.tar.gz

 

步骤六:修改配置

一共有7个文件要修改:

$HADOOP_HOME/etc/hadoop/hadoop-env.sh

$HADOOP_HOME/etc/hadoop/yarn-env.sh

$HADOOP_HOME/etc/hadoop/core-site.xml

$HADOOP_HOME/etc/hadoop/hdfs-site.xml

$HADOOP_HOME/etc/hadoop/mapred-site.xml

$HADOOP_HOME/etc/hadoop/yarn-site.xml

$HADOOP_HOME/etc/hadoop/slaves

其中$HADOOP_HOME表示hadoop根目录,本文中默认为/home/hadoop/hadoop-2.6.0

a) hadoop-env.sh 、yarn-env.sh

这二个文件主要是修改JAVA_HOME后的目录,改成实际本机jdk所在目录位置

vi etc/hadoop/hadoop-env.sh (及 vi etc/hadoop/yarn-env.sh)

找到下面这行的位置,改成(jdk目录位置,大家根据实际情况修改)

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

b) core-site.xml 参考下面的内容修改:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 3 <configuration>
 4   <property>
 5     <name>hadoop.tmp.dir</name>
 6     <value>/home/hadoop/tmp</value>
 7   </property>
 8   <property>
 9     <name>fs.default.name</name>
10     <value>hdfs://master:9000</value>
11   </property>
12 </configuration>

 注:/home/hadoop/tmp 目录如不存在,则先mkdir手动创建

c) hdfs-site.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 3 <configuration>
 4   <property>
 5     <name>dfs.http.address</name>
 6     <value>master:50070</value>
 7   </property>
 8   <property>
 9     <name>dfs.namenode.rpc-address</name>
10     <value>master:9001</value>
11   </property>
12   <property>
13     <name>dfs.namenode.secondary.http-address</name>
14     <value>master:50090</value>
15   </property>
16   <property>
17     <name>dfs.replication</name>
18     <value>2</value>
19   </property>
20   <property>
21     <name>dfs.datanode.data.dir</name>
22     <value>/home/hadoop/data</value>
23   </property>
24 </configuration>

 类似的:/home/hadoop/data目录如果不存在,也需要先手动创建。dfs.replication表示数据副本数,一般不大于datanode的节点数。

d) mapred-site.xml

 1 <?xml version="1.0"?>
 2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 3 <configuration>
 4   <property>
 5     <name>mapred.job.tracker</name>
 6     <value>master:9001</value>
 7   </property>
 8   <property>
 9     <name>mapred.map.tasks</name>
10     <value>20</value>
11   </property>
12   <property>
13     <name>mapred.reduce.tasks</name>
14     <value>4</value>
15   </property>
16   <property>
17     <name>mapreduce.framework.name</name>
18     <value>yarn</value>
19   </property>
20   <property>
21     <name>mapreduce.jobtracker.http.address</name>
22     <value>master:50030</value>
23   </property>
24   <property>
25     <name>mapreduce.jobhistory.address</name>
26     <value>master:10020</value>
27   </property>
28   <property>
29     <name>mapreduce.jobhistory.webapp.address</name>
30     <value>master:19888</value>
31   </property>
32 </configuration>

 e)yarn-site.xml

 1 <?xml version="1.0"?>
 2 <configuration>
 3   <property>
 4     <name>yarn.resourcemanager.address</name>
 5     <value>master:8032</value>
 6   </property>
 7 
 8   <property>
 9     <name>yarn.resourcemanager.scheduler.address</name>
10     <value>master:8030</value>
11   </property>
12 
13   <property>
14     <name>yarn.resourcemanager.webapp.address</name>
15     <value>master:8088</value>
16   </property>
17 
18   <property>
19     <name>yarn.resourcemanager.resource-tracker.address</name>
20     <value>master:8031</value>
21   </property>
22 
23   <property>
24     <name>yarn.resourcemanager.admin.address</name>
25     <value>master:8033</value>
26   </property>
27 
28   <property>
29     <name>yarn.nodemanager.aux-services</name>
30     <value>mapreduce_shuffle</value>
31   </property>
32 
33   <property>
34     <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
35     <value>org.apache.hadoop.mapred.ShuffleHandler</value>
36   </property>
37 </configuration>

 最后一个文件slaves暂时不管(可以先用mv slaves slaves.bak 将它改名),上述配置弄好后,就可以在master上启用 NameNode测试了,方法:

$HADOOP_HOME/bin/hdfs namenode –format 先格式化

15/02/12 21:29:53 INFO namenode.FSImage: Allocated new BlockPoolId: BP-85825581-192.168.187.102-1423747793784

15/02/12 21:29:53 INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfully formatted.

等看到这个时,表示格式化ok

$HADOOP_HOME/sbin/start-dfs.sh 

启动完成后,输入jps查看进程,如果看到以下二个进程:

5161 SecondaryNameNode

4989 NameNode

表示master节点基本ok了

再输入$HADOOP_HOME/sbin/start-yarn.sh ,完成后,再输入jps查看进程 

5161 SecondaryNameNode

5320 ResourceManager

4989 NameNode

如果看到这3个进程,表示yarn也ok了

f) 修改slaves

如果刚才用mv slaves slaves.bak对该文件重命名过,先运行 mv slaves.bak slaves 把名字改回来,再

vi slaves 编辑该文件,输入

slave01

slave02

保存退出,最后运行

$HADOOP_HOME/sbin/stop-dfs.sh 

$HADOOP_HOME/sbin/stop-yarn.sh 

停掉刚才启动的服务

 

步骤七:将master上的hadoop目录复制到slave01,slave02

仍然保持在master机器上

cd 先进入主目录

scp -r hadoop-2.6.0 hadoop@slave01:/home/hadoop/

scp -r hadoop-2.6.0 hadoop@slave02:/home/hadoop/

注:slave01、slave02上的hadoop临时目录(tmp)及数据目录(data),仍然要先手动创建。

 

步骤八:验证

master节点上,重新启动

$HADOOP_HOME/sbin/start-dfs.sh

$HADOOP_HOME/sbin/start-yarn.sh

顺利的话,master节点上有几下3个进程:

7482 ResourceManager

7335 SecondaryNameNode

7159 NameNode

slave01、slave02上有几下2个进程:

2296 DataNode

2398 NodeManager

同时可浏览:

http://master:50070/

http://master:8088/

查看状态

 

其它注意事项:

a) master(即:namenode节点)若要重新格式化,请先清空各datanode上的data目录(最好连tmp目录也一起清空),否则格式化完成后,启动dfs时,datanode会启动失败

b) 为了方便操作,可修改/etc/profile,把hadoop所需的lib目录,先加到CLASSPATH环境变量中,同时把hadoop/bin,hadoop/sbin目录也加入到PATH变量中,可参考下面的内容:

 export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
 export JAVA_HOME=/usr/java/jdk1.7.0_51
 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar
 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

 

hadoop 2.6全分布安装

标签:

原文地址:http://www.cnblogs.com/yjmyzz/p/hadoop-2_6_0-deploy-tutorial.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!