您的位置:首页 > 运维架构

Hadoop完全分布式安装实战

2016-01-03 21:29 197 查看
1、hadoop按照主要步骤

1)安装虚拟机和jdk

2)配置hosts文件

3)建立hadoop运行账号

4)配置ssh免密码连接

5)下载解压hadoop安装包

6)修改配置文件

7)各节点分发复制hadoop文件

8)格式namenode节点

9)启动hadoop

10)检查hadoop启动是否成功

2、我安装环境为centos7虚拟机,安装三个节点,一个节点为namenode,另外两个节点为datanode。我在笔记本开两个虚拟机,另外台式机开一个虚拟机。安装好centos7和java,java安装路径为:/usr/java/jdk1.7.0_17。

3、配置hosts文件

[root@localhost etc]# vim etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.105 h1
192.168.1.110 h2
192.168.1.111 h3


3、新增hadoop用户

useradd hadoop
passwd  hadoop


4、SSL免密码连接配置

比较多的问题出现在这一步

用新建的hadoop用户登录,在hadoop用户目录下(/home/hadoop),执行以下命令:

ssh-keygen -t rsa


此时,在当前目录下生产隐藏的.ssh文件夹。此时文件有两个文件,

id_rsa ,id_rsa.pub,分别为私钥文件和公钥文件。

cd .ssh

ls

id_rsa id_rsa.pub

该操作在每台节点的机器都执行一遍,然后把每个节点公钥(id_rsa.pub)都合到authorized_keys文件中,然后分发到每一个节点的.ssh目录。

这里特别注意,是所有节点的公钥合到authorized_keys文件,不仅仅复制本节点的公钥。

另外也要注意权限,.ssh至少有700权限,authorized_keys至少有600权限,authorized_keys的所有者为hadoop用户,确保hadoop用户能访问。

如果配置成功,至少执行

ssh 本机器域名


即可免密码登陆(第一次要密码,之后直接密码登陆)

5、下载Hadoop,解压

本人下载的是Hadoop0.20.2,每个版本配置差别都比较大

下载到 /home/hadoop/ 目录下(存放哪个目录随意),解压

tar -zxvf hadoop-0.20.2.tar.gz

6、修改配置文件

1)修改hadoop-env.sh

主要设置Java_Home的位置

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

2)修改core-site.xml

fs.default.name

hdfs://h1:9000

3)修改hdfs-site.xml

dfs.data.dir

/home/hadoop/hadoop-0.20.2/data

dfs.replication

2

4)修改mapred-site.xml

mapred.job.tracker

h1:9001

5)修改master和slave文件

Master

h1

Slave

h2

h3

7、把Hadoop复制到各个节点

可以通过scp命令把hadoop命令复制到各个节点

scp -r ./hadoop-0.20.2 h2:/home/hadoop
scp -r ./hadoop-0.20.2 h3:/home/hadoop


h2,h3分别是另外两台机器的域名,主要看host配置。当然虚拟机可以做好第一台虚拟机后,然后再clone虚拟机也可以,主要要注意ssl免密码登陆处理就可以。

7、格式化文件系统

在namenode节点执行

[root@h1 hadoop-0.20.2]# bin/hadoop namenode -format
16/01/02 21:16:36 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = h1/192.168.1.105
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.20.2
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
16/01/02 21:16:36 INFO namenode.FSNamesystem: fsOwner=root,root
16/01/02 21:16:36 INFO namenode.FSNamesystem: supergroup=supergroup
16/01/02 21:16:36 INFO namenode.FSNamesystem: isPermissionEnabled=true
16/01/02 21:16:36 INFO common.Storage: Image file of size 94 saved in 0 seconds.
16/01/02 21:16:36 INFO common.Storage: Storage directory /tmp/hadoop-root/dfs/name has been successfully formatted.
16/01/02 21:16:36 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at h1/192.168.1.105
************************************************************/


显示success则就成功。


8、启动

在namenode节点,hadoop安装目录下执行

Bin/start-all

9、查看节点启动是否成功

通过jps查看节点启动是否成功

在namenode节点,显示namenode进程,datanode节点则有datanode进程,另外熟悉java也可以通过每个节点的log日志查看是否有错误日志产生。

安装主要碰到的问题:

1、hadoop文件解压,要使用hadoop用户解压,使用root解压,导致无法hadoop用户没有访问hadoop目录的权限,需要进行很多权限处理麻烦。

2、注意authorized_keys权限, 我是在Windows做好这个文件,然后用WinSCP程序复制到.SSH目录,登陆的是root,导致authorized_keys拥有者为root,hadoop用户没权限访问,开始没注意,发现每次启动hadoop,访问其他节点都提示需要输入密码。修改权限后就OK。

3、启动时datanode出现的错误:

查看datanode的log时,发现datanode出现错误:

2016-01-03 01:46:44,924 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting DataNode
STARTUP_MSG:   host = h2/192.168.1.110
STARTUP_MSG:   args = []
STARTUP_MSG:   version = 0.20.2
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
2016-01-03 01:46:45,502 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io
c21e
.IOException: Incompatible namespaceIDs in /home/hadoop/hadoop-0.20.2/data: namenode namespaceID = 1339975414; datanode namespaceID = 795678612
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:233)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:148)
at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:298)
at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:216)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1283)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1238)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1246)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1368)

2016-01-03 01:46:45,503 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at h2/192.168.1.110
************************************************************/


该问题是datanode的namespaceID 和namenode的namespaceID 不一致,修改hdfs-site.xml配置文件下dfs.data.dir配置的目录下的tmp目录,的VERSION,(如按照本文配置为:/home/hadoop/hadoop-0.20.2/data/tmp 的VERSION文件),修改namespaceID,值可以看log错误信息的提示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop