菜鸟的Hadoop学习之路系列<一>:自己动手搭建Hadoop集群
2013-03-08 10:55
881 查看
最近着手学习Hadoop,于是便有了这个博文系列,记录下学习的历程顺便与他人交流学习。
所谓工欲善其事,必先利其器,作为学习的第一步,我首先用实验室的三台裸机自己搭建了一个迷你的Hadoop集群。作为一个Linux菜鸟+Hadoop菜鸟,搭建过程少不了一波三折,我把搭建过程和遇到的问题记录下来,希望能给同为新手的童鞋提供一些参考和帮助,当然如果您是大神还请绕道。
1. 系统及网络配置
三台机器统一安装了Ubuntu 12.0.4 LTS系统,创建统一的用户名deadlinehlt(当然你可以根据自己喜好随意取名),目的是为了方便之后的SSH操作等步骤。
在Hadoop集群搭建和今后的使用过程中3台机器会频繁进行数据传输,最好是所有的机器都有固定的IP地址,由于实验室IP自动分配会经常改变,我用了一个路由器建立了一个局域网将三台机器IP固定为:192.168.0.100(hadoop1),192.168.0.101(hadoop2),192.168.0.102(hadoop3),互相要能ping通。
修改所有机器的/etc/hosts文件,加入hostname配置信息,今后连接机器可以直接用主机名代替IP地址:
/etc/hosts
Hadoop核心程序就是由NameNode/DataNode 和JobTracker/TaskTracker这几个角色构成。Hadoop的DFS需要确立NameNode与DataNode角色,一般NameNode会部署到一台单独的服务器上而不与DataNode共同同一机器。另外Map/Reduce服务也需要确立JobTracker和TaskTracker的角色,一般JobTracker与NameNode共用一台机器作为Master,而TaskTracker与DataNode同属于Slave。我将hadoop1分配为Master机器,主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;2个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。更佳的方式是再配置一台备用的Master机器以防止master故障,未来学习深入之后再补上。
2. 必要软件安装
为所有机器安装ssh, rsync和 jdk, 其中jdk推荐源码安装方式,我统一安装在$JAVA_HOME=/usr/lib/jvm/jdk1.7.0,具体方法不详述,不会请google之。ssh和rsync直接命令安装:(此外推荐使用文本编辑器vim,稍微学习一下就能快速上手,效率非常高)
设置无密码ssh登陆:
在hadoop1上创建ssh密钥:
得到生成的公钥和密钥:id_rsa id_rsa.pub,将公钥复制到所有机器(包括hadoop1)的~/.ssh/authorized_keys文件中。
在hadoop1上测试ssh deadlinehlt@hadoop2, ssh deadlinehlt@hadoop3 是否能无密码登陆。
3. 集群配置
规划hadoop数据目录,在所有机器上创建如下目录:
下载最新的stable Hadoop到/opt/hadoop/(安装路径自行选择):
所谓工欲善其事,必先利其器,作为学习的第一步,我首先用实验室的三台裸机自己搭建了一个迷你的Hadoop集群。作为一个Linux菜鸟+Hadoop菜鸟,搭建过程少不了一波三折,我把搭建过程和遇到的问题记录下来,希望能给同为新手的童鞋提供一些参考和帮助,当然如果您是大神还请绕道。
1. 系统及网络配置
三台机器统一安装了Ubuntu 12.0.4 LTS系统,创建统一的用户名deadlinehlt(当然你可以根据自己喜好随意取名),目的是为了方便之后的SSH操作等步骤。
在Hadoop集群搭建和今后的使用过程中3台机器会频繁进行数据传输,最好是所有的机器都有固定的IP地址,由于实验室IP自动分配会经常改变,我用了一个路由器建立了一个局域网将三台机器IP固定为:192.168.0.100(hadoop1),192.168.0.101(hadoop2),192.168.0.102(hadoop3),互相要能ping通。
修改所有机器的/etc/hosts文件,加入hostname配置信息,今后连接机器可以直接用主机名代替IP地址:
/etc/hosts
127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.0.100 hadoop1 192.168.0.101 hadoop2 192.168.0.102 hadoop3
Hadoop核心程序就是由NameNode/DataNode 和JobTracker/TaskTracker这几个角色构成。Hadoop的DFS需要确立NameNode与DataNode角色,一般NameNode会部署到一台单独的服务器上而不与DataNode共同同一机器。另外Map/Reduce服务也需要确立JobTracker和TaskTracker的角色,一般JobTracker与NameNode共用一台机器作为Master,而TaskTracker与DataNode同属于Slave。我将hadoop1分配为Master机器,主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;2个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。更佳的方式是再配置一台备用的Master机器以防止master故障,未来学习深入之后再补上。
2. 必要软件安装
为所有机器安装ssh, rsync和 jdk, 其中jdk推荐源码安装方式,我统一安装在$JAVA_HOME=/usr/lib/jvm/jdk1.7.0,具体方法不详述,不会请google之。ssh和rsync直接命令安装:(此外推荐使用文本编辑器vim,稍微学习一下就能快速上手,效率非常高)
sudo apt-get install openssh-server sudo apt-get install rsync
设置无密码ssh登陆:
在hadoop1上创建ssh密钥:
cd ~/.ssh ssh-keygen -t rsa
得到生成的公钥和密钥:id_rsa id_rsa.pub,将公钥复制到所有机器(包括hadoop1)的~/.ssh/authorized_keys文件中。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys scp ~/.ssh/authorized_keys deadlinehlt@hadoop2:/home/deadlinehlt/.ssh scp ~/.ssh/authorized_keys deadlinehlt@hadoop3:/home/deadlinehlt/.ssh
在hadoop1上测试ssh deadlinehlt@hadoop2, ssh deadlinehlt@hadoop3 是否能无密码登陆。
3. 集群配置
规划hadoop数据目录,在所有机器上创建如下目录:
$ mkdir ~/data $ mkdir ~/data/hdfs $ mkdir ~/data/hdfs/name #namenode $ mkdir ~/data/hdfs/data #datanode $ mkdir ~/data/hdfs/tmp #临时文件夹
下载最新的stable Hadoop到/opt/hadoop/(安装路径自行选择):
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.0.4/hadoop-1.0.4-bin.tar.gz[/code]
解压:
4000tar -zxvf hadoop-1.0.4-bin.tar.gz
修改配置文件:
hadoop-1.0.4/conf/hadoop-env.sh中指定JAVA_HOME,Hadoop_home_warn_suppress项的作用是消除启动hadoop时关于HADOOP_HOME的相关警告:# The java implementation to use. Required. export JAVA_HOME=/usr/lib/jvm/jdk1.7.0 export HADOOP_HOME_WARN_SUPPRESS="TRUE"
$HADOOP_HOME/conf/core-site.xml是Hadoop的核心配置文件,对应并覆盖core-default.xml中的配置项。我们一般在这个文件中增加如下配置:<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/deadlinehlt/data/hdfs/tmp</value> </property> <property> <name>fs.default.name</name> <value>hdfs://hadoop1:9000</value> </property> </configuration>
$HADOOP_HOME/conf/hdfs-site.xml是HDFS的配置文件,对应并覆盖hdfs-default.xml中的配置项。我们一般在这个文件中增加如下配置:<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.name.dir</name> <value>/home/deadlinehlt/data/hdfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/home/deadlinehlt/data/hdfs/data</value> </property> </configuration>
$HADOOP_HOME/conf/mapred-site.xml是Map/Reduce的配置文件,对应并覆盖mapred-default.xml中的配置项。我们一般在这个文件中增加如下配置:<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapred.job.tracker</name> <value>hadoop1:9001</value> </property> <property> <name>mapreduce.jobtracker.system.dir</name> <value>/home/deadlinehlt/data/hdfs/mapred/system</value> </property> <property> <name>mapreduce.cluster.local.dir</name> <value>/home/deadlinehlt/data/hdfs/mapred/local</value> </property> </configuration>
在$HADOOP_HOME/conf目录中存在masters和slaves这两个文件,用来做Hadoop的主从配置。上面已经提到了Hadoop主要由NameNode/DataNode 和JobTracker/TaskTracker构成,在主从配置里我们一般将NameNode和JobTracker列为主机,其它的共为从机,于是对于此处的配置应该是:
hadoop-1.0.4/conf/mastershadoop1
hadoop-1.0.4/conf/slaveshadoop2 hadoop3
重要的一步到来了,同步hadoop1上的hadoop目录到所有其他的机器,我写了一个shell脚步进行同步,方便之处在于新手往往出现之前步骤的配置错误,只需要修改hadoop1上的配置在重新运行同步脚步。
创建需要同步的目标机器列表文件:/opt/hadoop/servershadoop2 hadoop3
创建同步脚本:/opt/hadoop/cp_hadoopfor host in `cat servers` do echo --------------------- echo rsync host: $host ssh $host 'rm -fr /opt/hadoop/hadoop-1.0.4' rsync -avz /opt/hadoop/hadoop-1.0.4 $host:/opt/hadoop done
执行脚本./cp_hadoop
4. 启动测试
第一次启动服务前需要格式化namenode,在hadoop1:cd /opt/hadoop/hadoop-1.0.4/bin ./hadoop namenode -format
注意:
当出现下面选项时,注意输入Y,这里区分大小写,输入y会导致格式化失败,dfs服务无法启动。13/03/08 10:40:20 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = hadoop1/192.168.0.100 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 1.0.4 STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290; compiled by 'hortonfo' on Wed Oct 3 05:13:58 UTC 2012 ************************************************************/ Re-format filesystem in /home/deadlinehlt/data/hdfs/name ? (Y or N)启动dfs和map/reduce服务:./start-all.sh
我们用如下命令验证一下是否启动成功:$HADOOP_HOME/bin/hadoop dfs -ls
如果没有错误提示或者出现文件列表,那么恭喜你,Hadoop成功启动了,另外,我们可以通过访问http://hadoop1:50070来查看hdfs的状态,访问http://hadoop1:50030来查看map/reduce的状态。如果出现错误,或Hadoop集群未启动,可以查看$HADOOP_HOME/logs/下的日志文件。
此外在hadoop1上用jps命令察看任务,如果启动成功应该有JobTracker SecondaryNameNode NameNode;
在hadoop2和hadoop3上用jps察看应该有TaskTracker DataNode。
如果发现有相关任务没有启动可以到相关机器的$HADOOP_HOME/logs/下查看日志文件看看哪里出了问题。
PS:其实在整个集群的搭建过程中本菜鸟遇到的最多的问题是用户权限的问题,有些使用的目录和文件该用户没有读写权限导致命令执行出错(比如在scp,rsync时候使用的用户没有src或者des目标的写权限),所以首先应该检查出错命令是否存在权限问题使用chmod修改相关权限。
相关文章推荐
- 菜鸟的Hadoop学习之路系列<二>:Hadoop集群构成和HDFS
- android <初级篇> 开发环境的搭建——菜鸟的学习之路
- android <初级篇> 界面布局<一> ——菜鸟的学习之路
- linux离线搭建SVN服务器系列<一>
- Hadoop学习之路(四)Hadoop集群搭建和简单应用
- Cocos2d-js 学习笔记<一> 环境搭建
- hadoop 入门学习系列七-----hadoop集群搭建
- 学习Timer类,定制自己的调度器<一>
- 大数据学习系列(7)-- hadoop集群搭建
- Hadoop学习<一>--hadoop安装和环境变量设置
- Android React-Native系列之<一>零基础搭建React-Native开发环境
- android <初级篇> 第一个工程Hello World ! ——菜鸟的学习之路
- Hadoop学习之路(五)Hadoop集群搭建模式和各模式问题
- 基于hadoop+nutch+solr的搜索引擎环境搭载<一>hadoop完全分布式环境搭建
- Hadoop 三台主机 集群搭建 详解 &lt;转&gt;
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <一>
- 自己动手写的Web服务器<一>
- IOS cocos2d学习笔记-<一>cocos2d-Box2d的环境搭建
- <转>hadoop学习之hadoop集群功能简单测试验证
- hadoop学习之路(一)hadoop集群服务搭建