about云开发-活到老 学到老

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 358610|回复: 134

[实操演练] hadoop(2.x)以hadoop2.2为例完全分布式最新高可靠安装文档

  [复制链接]
发表于 2014-5-12 19:26:27 | 显示全部楼层 |阅读模式
本帖最后由 pig2 于 2017-7-3 14:54 编辑
问题导读:
1.如何配置各个节点之间无密码互通?

2.启动hadoop,看不到进程的原因是什么?
3.配置hadoop的步骤是什么?

4.有哪些配置文件需要修改?
5.如果没有配置文件,该如何找到该配置文件?
6.环境变量配置了,但是不生效的原因是什么?
7.如何查看hadoop2监控页面




首先说一下这个安装过程需要注意的地方

一、使用新建用户可能会遇到的问题
(1)权限问题:对于新手经常使用root,刚开始可以使用,但是如果想真正的学习,必须学会使用其他用户。也就是你需要学会新建用户,但是新建用户,并不是所有人都会的。具体可以参考ubuntu创建新用户并增加管理员权限,这里面使用adduser是最方便的。也就是说你需要通过这里,学会给Linux添加用户,并且赋权,上面那篇文章会对你有所帮助。

(2)使用新建用户,你遇到另外一个问题,就是文件所属权限,因为新建的文件,有的属于root用户,有的属于新建用户,例如下面情况,我们看到mv.sh是属于root用户,大部分属于aboutyun用户。所以当我们两个不同文件不能访问的时候,这个可能是原因之一。也是在这里,当你新建用户的时候,可能会遇到的新问题。

1.png

(3)上面我们只是提出了问题,但是根本没有解决方案,这里在提出解决方案,我们如何改变文件所属用户。
比如上图中,mv.sh属于root用户,那么我们怎么让他所属about云用户。可以是下面命令:
  1. sudo chown -R  aboutyun:aboutyun mv.sh
复制代码
解释一下上面命令的含义:
------------------------------------------------------------------------------------------------------------------------------------------------------
1.sudo:如果不是root用户,不带上这个命令会经常遇到麻烦,所以需要养成习惯。至于sudo详细解释可以看下面。
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。

2.chown-》change own的意思。即改变所属文件。对于他不了解的同学,可以查看:让你真正了解chmod和chown命令的用法
3.aboutyun:aboutyun代表aboutyun用户及aboutyun用户组
4.即是被授权的文件
------------------------------------------------------------------------------------------------------------------------------------------------------
上面是针对新手的一个解说,不是必须的,如果对Linux已经很熟悉,可以跳过上面步骤。下面我们开始首先要下载


百度网盘:
https://pan.baidu.com/s/1sl8WXBn



(下载包为hadoop2.2)
下载完毕,我们就需要解压
  1. tar zxvf hadoop-2.2.0_x64.tar.gz
复制代码
这里是解压到当前路径。
这里就开始动手了,下面也介绍一下整体的情况:




1、这里我们搭建一个由三台机器组成的集群:
172.16.77.15     aboutyun/123456      master
172.16.77.16     aboutyun/123456      slave1
172.16.77.17     aboutyun/123456      slave1
1.1 上面各列分别为IP、user/passwd、hostname

1.2   Hostname可以在/etc/hostname中修改,hostname,hosts的修改详细可以看ubuntu修改hostname
对于三台机器都需要修改:
下面是master的修改:通过命令
  1. vi /etc/hosts
复制代码
然后对你里面的内容修改
hosts.png

下面修改hostname
  1. vi /etc/hostname
复制代码
修改为master即可
master.png

上面hosts基本都一样,只不过hostname有所差别。


2、打通master到slave节点的SSH无密码登陆
这里面打通无密码登录,很多新手遇到了问题,这里安装的时候,具体的操作,可以查阅其他资料:
这是个人总结的哦命令,相信对你有所帮助
然后这里在展示一下,authorized_keys是什么样子的:
1.png

上面的原理,就是我把工钥放到里面,然后本台机器就可以ssh无密码登录了。如果想彼此无密码登录,那么就需要把彼此的工钥(*.pub)放到authorized_keys里面
然后我们进行下面步骤:
3.1 安装ssh
一般系统是默认安装了ssh命令的。如果没有,或者版本比较老,则可以重新安    装:
sudo apt-get install ssh
3.2设置local无密码登陆

具体步骤如下:
第一步:产生密钥
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
第二部:导入authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
第二部导入的目的是为了无密码等,这样输入如下命令:
  1. ssh localhost
复制代码
就可以无密码登录了。
下面展示一下hosts的配置,及无密码登录的效果
locahost的配置
hosts.png

无密码登录效果:
localhost.png
3.3设置远程无密码登陆

进入master的.ssh目录
scp authorized_keys [email protected]:~/.ssh/authorized_keys_from_master

进入slave1的.ssh目录
cat authorized_keys_from_master  >>  authorized_keys

至此,可以在master上面ssh slave1进行无密码登陆了。
【注意】:以上操作在每台机器上面都要进行。
这里在强调一下原理:
就是把工钥放到里面,然后本台机器就可以ssh无密码登录了。如果想彼此无密码登录,那么就需要把彼此的工钥(*.pub)放到authorized_keys里面

------------------------------------------------------------------------
根据上面的资料相信你能得到互通,这里展现一下效果:
slave1master.png
上面是slave1无密码登录master

sshslave1.png
这里是master无密码登录slave1
------------------------------------------------------------------------

4、安装jdk
安装JDK还是比较简单的,这里


4.1、下载jdk
http://yunpan.cn/QiujtEVgRTJ4S 访问密码 b488


4.2、安装jdk(这里以.tar.gz版本,64位系统为例)
这里直接解压到了/usr/jdk1.7下面:

jdk.png

上面首先第一步:

至此,jkd安装完毕,下面配置环境变量
一、PATH配置
这里提供一个简单的方法:

通过下面命令
1.export PATH=$PATH:/usr/java/jdk1.7.0_51/bin



通过cat命令,可以查看

2.为了保证生效执行下面命令

  1. source  /etc/environment
复制代码



二、CLASSTH配置
上面只是配置了PATH,还需在配置CLASSTH
export CLASSPATH=.:/usr/java/jdk1.7.0_51/jre/lib
执行配置完毕

如果不起作用,采用通过下面配置:
java.sh配置
因为重启之后,很有会被还原,下面还需要配置java.sh
这里可以通过
cd /etc/profile.d
vi java.sh
把下面两行放到java.sh
export PATH=$PATH:/usr/java/jdk1.7.0_51/bin
export CLASSPATH=.:/usr/java/jdk1.7.0_51/jre/lib
保存。这样就配置完毕了。


执行下面命令:
  1. source java.sh
复制代码
现在在执行 java -version就ok了

【注意】每台机器执行相同操作,最后将java安装在相同路径下

三、关闭每台机器的防火墙
ufw disable (重启生效)





第三部分 Hadoop 2.2安装过程

一、需要注意的问题
hadoop2.2的配置还是比较简单的,但是可能会遇到各种各样的问题。最常讲的就是看不到进程。
看不到进程大致有两个原因:
1.你的配置文件有问题。
对于配置文件,主机名,空格之类的这些都不要带上。仔细检查
2.Linux的权限不正确。
最常出问题的是core-site.xml,与hdfs-site.xml。

core-site.xml
  1.       <property>
  2.               <name>hadoop.tmp.dir</name>
  3.               <value>file:/home/aboutyun/tmp</value>
  4.                <description>Abase forother temporary directories.</description>
  5.       </property>
复制代码
说一下上面参数的含义,这里是hadoop的临时文件目录,file的含义是使用本地目录。也就是使用的是Linux的目录,一定确保下面目录
  1. /home/aboutyun/tmp
复制代码
的权限所属为你创建的用户。并且这里面我也要会变通,aboutyun,为我创建的用户名,如果你创建了zhangsan或则lisi,那么这个目录就会变为
  1. /home/zhangsan/tmp
复制代码
这里不熟悉,是因为对Linux的不熟悉的原因。这里在来张图:
注意:1和2对比。如果你所创建的tmp属于root,那么你会看不到进程。
quanxian.png

hdfs-site.xml
同样也是:要注意下面,你是需要改成自己的用户名的

  <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/home/aboutyun/dfs/name</value>
       </property>
      <property>
              <name>dfs.datanode.data.dir</name>
              <value>file:/home/aboutyun/dfs/data</value>
       </property>

上面讲完,我们开始配置





hadoop集群中每个机器上面的配置基本相同,所以我们先在master上面进行配置部署,然后再复制到其他节点。所以这里的安装过程相当于在每台机器上面都要执行。

【注意】:master和slaves安装的hadoop路径要完全一样,用户和组也要完全一致

1、 解压文件
将第一部分中下载的
  1. tar zxvf hadoop-2.2.0_x64.tar.gz
复制代码
  1. mv hadoop-2.2.0  hadoop
复制代码

解压到/usr路径下
并且重命名,效果如下

hadoop.png

2、 hadoop配置过程

配置之前,需要在master本地文件系统创建以下文件夹:
~/dfs/name
~/dfs/data
~/tmp
这里文件权限:创建完毕,你会看到红线部分,注意所属用户及用户组。如果不再新建的用户组下面,可以使用下面命令来修改:让你真正了解chmod和chown命令的用法
chuangjianwenjian.png
这里要涉及到的配置文件有7个:
~/hadoop-2.2.0/etc/hadoop/hadoop-env.sh
~/hadoop-2.2.0/etc/hadoop/yarn-env.sh
~/hadoop-2.2.0/etc/hadoop/slaves
~/hadoop-2.2.0/etc/hadoop/core-site.xml
~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml
~/hadoop-2.2.0/etc/hadoop/mapred-site.xml
~/hadoop-2.2.0/etc/hadoop/yarn-site.xml
以上文件默认不存在的,可以复制相应的template文件获得。下面举例:
temped.png


配置文件1:hadoop-env.sh
修改JAVA_HOME值(export JAVA_HOME=/usr/jdk1.7)
配置文件2:yarn-env.sh

修改JAVA_HOME值(export JAVA_HOME=/usr/jdk1.7)

配置文件3:slaves (这个文件里面保存所有slave节点)

写入以下内容:
slaveconfig.png

配置文件4:core-site.xml
  1. <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:/home/aboutyun/tmp</value>
  13.                <description>Abase for other temporary   directories.</description>
  14.        </property>
  15.         <property>
  16.                <name>hadoop.proxyuser.aboutyun.hosts</name>
  17.                <value>*</value>
  18.        </property>
  19.        <property>
  20.                <name>hadoop.proxyuser.aboutyun.groups</name>
  21.                <value>*</value>
  22.        </property>
  23. </configuration>
复制代码


配置文件5:hdfs-site.xml
  1. <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:/home/aboutyun/dfs/name</value>
  9.        </property>
  10.       <property>
  11.               <name>dfs.datanode.data.dir</name>
  12.               <value>file:/home/aboutyun/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>
复制代码


配置文件6:mapred-site.xml
  1. <configuration>
  2.           <property>                                                                  <name>mapreduce.framework.name</name>
  3.                 <value>yarn</value>
  4.            </property>
  5.           <property>
  6.                   <name>mapreduce.jobhistory.address</name>
  7.                   <value>master:10020</value>
  8.           </property>
  9.           <property>
  10.                 <name>mapreduce.jobhistory.webapp.address</name>
  11.                 <value>master:19888</value>
  12.        </property>
  13. </configuration>
复制代码



配置文件7: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>
复制代码



3、复制到其他节点
上面配置完毕,我们基本上完成了90%了剩下就是复制。我们可以把整个hadoop复制过去:使用如下命令:
  1. sudo scp -r /usr/hadoop [email protected]:~/
复制代码
这里记得先复制到home/aboutyun下面,然后在转移到/usr下面。
后面我们会经常遇到问题,经常修改配置文件,所以修改完一个配置文件后,其他节点都需要修改,这里附上脚本操作方便:
一、节点之间传递数据:
第一步:vi scp.sh
第二步:把下面内容放到里面(记得修改下面红字部分,改成自己的)
#!/bin/bash
#slave1
scp /usr/hadoop/etc/hadoop/core-site.xml [email protected]:~/
scp /usr/hadoop/etc/hadoop/hdfs-site.xml [email protected]:~/                     
#slave2
scp /usr/hadoop/etc/hadoop/core-site.xml [email protected]:~/
scp /usr/hadoop/etc/hadoop/hdfs-site.xml [email protected]:~/
第三步:保存scp.sh
第四步:bash scp.sh执行
二、移动文件夹:
可以自己写了。


4.配置环境变量
第一步:
  1. vi /etc/environment
复制代码
第二步:添加如下内容:记得如果你的路径改变了,你也许需要做相应的改变。

env.png

4、启动验证

4.1 启动hadoop
格式化namenode:
  1. hdfs namenode –format
复制代码
或则使用下面命令:
  1. hadoop namenode format
复制代码

启动hdfs:
  1. start-dfs.sh
复制代码

此时在master上面运行的进程有:
namenode
secondarynamenode

slave节点上面运行的进程有:datanode

启动yarn:
  1. start-yarn.sh
复制代码
我们看到如下效果:
master有如下进程:
jps1.png

slave1有如下进程
jpsslav1.png
此时hadoop集群已全部配置完成!!!
【注意】:而且所有的配置文件<name>和<value>节点处不要有空格,否则会报错!
然后我们输入:(这里有的同学没有配置hosts,所以输出master访问不到,如果访问不到输入ip地址即可)
  1. http://master:8088/
复制代码

如何修改hosts:
win7 进入下面路径:
  1. C:\Windows\System32\drivers\etc
复制代码
找打hosts
win7.png
然后打开,进行如下配置即可看到
winhost.png


看到下图:
zzhengtixiaoguotu.png

到此全部完毕。
使用hadoop集群,更详细内容,可以查看
hadoop2.X使用手册1:通过web端口查看主节点、slave1节点及集群运行状态
hadoop2.X使用手册2:如何运行自带wordcount
hadoop2.2运行mapreduce(wordcount)问题总结

本文链接
http://www.aboutyun.com/thread-7684-1-1.html

下一篇:
hbase 0.96整合到hadoop2.2三个节点全分布式安装高可靠文档


本帖被以下淘专辑推荐:

发表于 2014-9-6 11:48:21 | 显示全部楼层
Utor 发表于 2014-9-5 21:26
maxRetries=10, sleepTime=1 SECONDS)
2014-09-05 21:24:25,829 INFO org.apache.hadoop.ipc.Client: Retr ...
这个错误连接不上,仔细检查自己的集群是否正常。比如:集群是否正常启动,防火墙。
可以参考:
eclipse运行出现 Call From to master:8020 failed on connection exception:

38

主题

5

听众

3

收听

高级会员

Rank: 4

积分
1274

最佳新人

发表于 2014-6-4 10:40:22 | 显示全部楼层
8020是不是 就是在flume里的写的上传到hdfs的端口号啊

339

主题

113

听众

113

收听

实习版主

Rank: 7Rank: 7Rank: 7

积分
4118
发表于 2014-6-4 12:16:13 | 显示全部楼层
mjjian0 发表于 2014-6-4 10:40
8020是不是 就是在flume里的写的上传到hdfs的端口号啊
一般情况来说是的,如果你配置的是8020,那就是8020.不止flume,所有数据上传都必须经过它

你可以看看这个让你快速认识flume及安装和使用flume1.5传输数据(日志)到hadoop2.2
欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

38

主题

5

听众

3

收听

高级会员

Rank: 4

积分
1274

最佳新人

发表于 2014-6-6 08:59:17 | 显示全部楼层
sstutu 发表于 2014-6-4 12:16
一般情况来说是的,如果你配置的是8020,那就是8020.不止flume,所有数据上传都必须经过它

你可以看看 ...

我配成9000,也是一样的吗。。。。另外。。大哥。。。你又那  凤姐  出来吓人

339

主题

113

听众

113

收听

实习版主

Rank: 7Rank: 7Rank: 7

积分
4118
发表于 2014-6-6 12:45:59 | 显示全部楼层
mjjian0 发表于 2014-6-6 08:59
我配成9000,也是一样的吗。。。。另外。。大哥。。。你又那  凤姐  出来吓人

配成9000一样,凤姐不是一般人物
欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

0

主题

2

听众

0

收听

中级会员

Rank: 3Rank: 3

积分
206
发表于 2014-7-15 20:55:15 | 显示全部楼层
这个是跟配置文件走了

1

主题

2

听众

0

收听

注册会员

Rank: 2

积分
92
发表于 2014-8-13 15:21:28 | 显示全部楼层
膜拜大神,新人按照帖子配置成功了,
继续学习中

6

主题

3

听众

0

收听

高级会员

Rank: 4

积分
1834
发表于 2014-8-28 12:38:25 | 显示全部楼层
膜拜了,楼主加油啊,继续 出好的文章!

0

主题

0

听众

0

收听

新手上路

Rank: 1

积分
13
发表于 2014-9-5 21:26:52 | 显示全部楼层
maxRetries=10, sleepTime=1 SECONDS)
2014-09-05 21:24:25,829 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: masterhadoop/10.163.200.215:8020. Already tried 8 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
2014-09-05 21:24:26,830 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: masterhadoop/10.163.200.215:8020. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
2014-09-05 21:24:26,836 ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint
java.net.ConnectException: Call From masterhadoop/10.163.200.215 to masterhadoop:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:783)
        at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:730)
        at org.apache.hadoop.ipc.Client.call(Client.java:1351)
        at org.apache.hadoop.ipc.Client.call(Client.java:1300)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)
        at com.sun.proxy.$Proxy8.getTransactionId(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:186)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
        at com.sun.proxy.$Proxy8.getTransactionId(Unknown Source)
        at org.apache.hadoop.hdfs.protocolPB.NamenodeProtocolTranslatorPB.getTransactionID(NamenodeProtocolTranslatorPB.java:119)
        at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.countUncheckpointedTxns(SecondaryNameNode.java:622)
        at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.shouldCheckpointBasedOnCount(SecondaryNameNode.java:630)
        at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.doWork(SecondaryNameNode.java:378)
        at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode$2.run(SecondaryNameNode.java:346)
        at org.apache.hadoop.security.SecurityUtil.doAsLoginUserOrFatal(SecurityUtil.java:456)
        at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.run(SecondaryNameNode.java:342)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.ConnectException: Connection refused
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:599)
        at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
        at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:529)
        at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:493)
        at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:547)
        at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:642)
        at org.apache.hadoop.ipc.Client$Connection.access$2600(Client.java:314)
        at org.apache.hadoop.ipc.Client.getConnection(Client.java:1399)
        at org.apache.hadoop.ipc.Client.call(Client.java:1318)
        ... 18 more

你好,请问这个异常是怎么回事。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|about云开发-学问论坛|社区-大数据云技术学习分享平台 ( 京ICP备12023829号

GMT+8, 2018-8-20 13:02 , Processed in 0.475191 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.2 Licensed

快速回复 返回顶部 返回列表