hadoop安装配置 ubuntu9.10 hadoop0.20.2

转载:http://delove2.iteye.com/blog/809800

 

Hadoop是一个易于安装易于使用的系统,他既适用于云计算的新人学习,也适用于对云计算已经有一定研究的人深入学习(包括网格计算,并行计算等等)。Hadoop源于nutch,hadoop的两位创始人想开发一款开源的网络搜索引擎,但是在管理大量计算机时遇到了问题。后来google发表了关于GFS与MapReduce的论文,他们把论文中的思想应用到了Nutch中。最初他们把系统应用与20台机器上,但是很快他们发现为了处理互联网上的数据,他们需要上千台机器,这个问题超出了两个人能解决的程度。这是yahoo对hadoop产生了兴趣并成立开发小组帮助他们将这部分内容从nutch中分离出来,成为一个独立的系统,取名hadoop。
Nutch也是hadoop的顶级项目之一(详见http://nutch.apache.org/) ,hadoop源于nutch,也独立于nutch。虽然两者已经互相独立,但是还有很紧密的联系。与此类似,hadoop也并不是一个单独的项目,hadoop内出了最基本的hadoop common外,还有hdfs,mapreduce,zookeeper。同时也有一些相关项目,比如avro,chukwa,hbase,hive,mahout,pig(这些项目中很多都是从hadoop的子项目升级为apache的顶级项目的,由此可见hadoop的火热)。
对于新手,我们推荐按照默认方式安装hadoop,即同时安装hadoop common,hadoop hdfs,hadoop mapreduce。
目前,Hadoop可以运行在linux,unix,windows系统上。实际上hadoop是为在linux平台上使用而开发出来的。但是hadoop在一些主流的unix版本(甚至包括Mac OS X)也运行良好。对于windows,这个问题有些复杂。如果你想在windows上运行hadoop,那么你必须先安装Cygwin以模拟linux环境,然后再安装hadoop。
安装hadoop前,你需要先安装java6与ssh,java6必须是sun公司的jdk,这是hadoop编译运行的需要,ssh推荐安装openssh(免费的~),安装ssh是因为hadoop需要通过ssh协议来启动各个节点上的守护进程。

安装hadoop
安装hadoop 的过程很简单,hadoop的使用也很简单,同时也很灵活。
Hadoop按三类分别将主机划分为两种角色,最基本的就是master和slave,主人与奴隶;按hdfs的角度,将主机划分为namenode和datanode(在分布式文件系统中,目录的管理很重要,管理目录就相当于主人,可以从这方面理解它们的关系);按mapreduce的角度,将主机划分为jobtracker和tasktracker(一个job经常被划分为多个task,从这个角度不难理解他们之间的关系)。接下来,说一下我们的搭建过程
假设我们有6台主机,同时假设这样一种场景:

某实验室想要研究hadoop,一开始只准备搭建一个有三台机器组成的小集群,搭建成功后使用时发现只有三台机器不能满足需要,因此又需要再添加三台机器。

分配给他们的ip地址为:
10.37.128.2
10.37.128.3
10.37.128.4
10.37.128.5
10.37.128.6
10.37.128.7
同时将不同角色划分给他们,并命名主机(以方便区分):
10.37.128.2—master,namonode,jobtracker—master(主机名)
10.37.128.3—slave,datanode,tasktracker—slave1(主机名)
10.37.128.4—slave,datanode,tasktracker—slave2(主机名)
10.37.128.5—slave,datanode,tasktracker—slave3(主机名)
10.37.128.6—slave,datanode,tasktracker—slave4(主机名)
10.37.128.7—slave,datanode,tasktracker—slave5(主机名)

另外所有机器上必须有一个共同的用户名,这里,这六台机器的用户名均为u。尤其注意区分用户名与主机名。

首先,需要在每台机器上安装jdk1.6和openssh
安装jdk1.6:
安装JDK是一个很简单的过程,以ubuntu为例。
第一步:
确保可以连接到互联网,输入命令:sudo apt-get install sun-java6-jdk,输入密码。
在接下来的三个确认中输入(或点击)Yes(或ok),你就可以安装java了

这里先解释一下sudo这个命令,sudo这个命令能够允许普通用户执行某些或全部root权限命令,sudo命令提供了详尽的日志,可以记录下每个用户使用它做了什么;同时sudo也提供了灵活的管理方式,可以限制用户使用的命令;他的配置文件为/etc/sudoers。
Apt全称为the Advanced Packaging Tool,是ubuntu的软件包管理软件,通过它你可以无需考虑软件依赖关系,直接安装你所需要的软件,而apt会自动下载有依赖关系的包,并按顺序安装,在ubuntu中安装有他的一个图形化界面程序synaptic(中文译名为“新立得”),有兴趣的话也可以使用这个程序来安装你所需要的软件。(如果你想了解更多可以查看一下关于debian计划的资料)

第二步,配置环境变量:
输入命令:sudo gedit /etc/profile,输入密码,打开profile文件
在最下面输入如下内容:
#set Java Environment
export JAVA_HOME= (你的java安装位置,一般为/usr/lib/jvm/java-6-sun)
export CLASSPATH=".:$JAVA_HOME/lib:$CLASSPATH"
export PATH="$JAVA_HOME/:$PATH"

这一步的意义是配置环境变量,使你的系统可以找到java。
第三步:验证java是否安装成功
新建文件Helloworld.java 输入如下内容:
public class Helloworld{
public static void main(String args[]){
System.out.println(“Hello World”);
}
}
输入命令:
javac Helloworld.java;(生成编译文件)
java Helloworld
如果出现“HelloWorld”说明java程序可以运行,也即java已经安装成功。
安装openssh:
同样的,以ubuntu为例,用户名为u:
第一步,确认已经连接上互联网,输入命令:
sudo apt-get install ssh
第二步,配置可以无密码登陆本机:
首先查看在u用户下是否存在.ssh文件夹(注意ssh前面有“.”,这是一个隐藏文件夹),输入命令:ls –a /home/u。一般来说,安装ssh时会自动在当前用户下创建这个隐藏文件夹,如果没有的,可以手动创建一个。接下来,
输入命令:
ssh-keygen -t dsa -P '' –f ~/.ssh/id_dsa
在ubuntu中,~代表当前用户文件夹,这里即/home/u。
这个命令会在.ssh文件夹下创建两个文件id_dsa及id_dsa.pub,这是ssh的一对私钥和公钥,类似于钥匙及锁,把id_da.pub(公钥)追加到授权的key里面去,
输入命令:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
至此无密码登陆本机以安装完成。

第三步,验证ssh已安装成功及无密码登陆本机
输入命令:
ssh localhost
如果可以登录,说明已经安装成功
第四步,将authorized_keys拷贝到其他主机
实际上,在hadoop的安装过程中,是否无密码登陆不是必须的,但是如果不配置无密码登陆的话,每次启动hadoop,都需要输入密码以登陆到每台daotanode,考虑到一般的hadoop集群动辄数十数百台机器,因此一般来说都会配置ssh的无密码登陆。
安装hadoop:
在安装hadoop前,我们需要先修改主机的几个配置文件:
在下面这个文件,添加你的主机需要识别的主机名及其对应的ip地址
/etc/hosts:
127.0.0.1 localhost
10.37.128.2 master
10.37.128.3 slave1
10.37.128.4 slave2

在下面这个文件修改你的主机名
/etc/hostname:
你的主机名(如master,slave1等)

同时根据需要,我们要在 /home/你的用户名 这个文件夹下创立tmp文件夹作为hdfs的存储文件夹。
安装hadoop官方发行版,你可以在以下地址获得hadoop的官方发行版
http://www.apache.org/dyn/closer.cgi/hadoop/core/

下载stable版本,目前是0.20.2。如下:

在master上,下载hadoop-0.20.2.tar.gz并将其解压,这里将其解压到用户目录下,一般为/home/[你的用户名]/,这里假设用户名为u,进入conf文件夹,修改配置文件:

conf/Hadoop-env.sh:
export JAVA_HOME=“你的java安装地址”
指定java位置

conf/core-site.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
   <name>fs.default.name</name>
   <value>hdfs://master:9000</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/u/tmp</value>
  </property>

</configuration>
这是hadoop核心的配置文件,这里配置的是hdfs(hadoop的分布式文件系统)的地址及端口号,后一项配置为hdfs的存储文件夹,这个文件夹需要你自己创建。

conf/hdfs-site.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.replication</name>
   <value>2</value>
</property>
<property>
   <name>dfs.name.dir</name>
   <value>/home/u/hdfs/name</value>
</property>
<property>
   <name>dfs.data.dir</name>
   <value>/home/u/hdfs/data</value>
</property>


</configuration>
这是hadoop中hdfs的配置,配置的备份方式,默认为3。

conf/mapred-site.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>master:9001</value>
</property>

</configuration>
这是hadoop中mapreduce的配置文件,配置的是jobtracker的地址及端口

conf/masters:
master
这个文件指明了谁是master,也可以填写ip地址,填写主机名是为了便于区分。

conf/slaves:
slave1
slave2
这个文件指明了谁是slave,同样也可以填写ip地址。

需要注意的是,如果安装的是0.20之前的版本,那么只有一个配置文件,即为hadoop-site.xml。
另一个需要注意的是hadoop的配置不仅仅这几项,hadoop在启动时,会用这几项的配置去修改默认配置,也就是说,hadoop有完整的默认配置,你在这里进行配置只是相当于修改hadoop的默认配置,这种做法既可以保证程序的安全性,不易出错,对于用户来说,这种做法也很方便。如果你想查看hadoop的默认配置,可以到docs中查看core-default.html, hdfs-default.html,和mapred-default.html这三个文件(0.20版本).

修改完这几个文件之后,通过scp命令将hadoop文件夹发送到其他节点上(slave1,slave2),用户名为u
scp –r /home/u/hadoop slave1:/home/u/
scp –r /home/u/hadoop slave2:/home/u/

至此,hadoop就可以说是安装完成了
启动hadoop前,需格式化hadoop的文件系统hdfs(这点与windows是一样的,重新分区后的卷总是需要格式化的),在master上,进入hadoop文件夹
输入命令:bin/hadoop namenode –format
格式化文件系统,接下来,启动hadoop
输入命令:
bin/start-all.sh(全部启动)
最后,验证hadoop是否安装成功
打开浏览器,分别输入网址
http://localhost:50030 (mapreduce的web页面)
http://localhost:50070 (hdfs的web页面)
如果都能查看,说明hadoop已经安装成功。

对于hadoop来说,mapreduce及hdfs都是必须的,但是如果有必要的话,你依然可以只启动hdfs(start-dfs.sh)或mapreduce(start-mapred.sh)

如果你的hadoop并没有正常工作,那你可查看log文件加下的日志内容一查看哪里出现问题。

向hadoop集群添加新的节点
Hadoop的管理机制很灵活,你可以动态的添加节点,配置新添加的三个节点,我们先给他们分配ip地址
10.37.128.5—slave,datanode,tasktracker—slave3(主机名)
10.37.128.6—slave,datanode,tasktracker—slave4(主机名)
10.37.128.7—slave,datanode,tasktracker—slave5(主机名)
同样的,在新添加的节点上安装jdk1.6及openssh。
同样进行hadoop的配置,当然你也可以直接从master拷贝,修改masters及slaves文件(经测试,如果不修改,也可以连接上,但是你下次启动时需要再次手动连入集群)。
输入以下命令:
bin/hadoop-daemon.sh --config ./conf start datanode
bin/hadoop-daemon.sh --config ./conf start tasktracker
这样就可以把新的节点联入集群中。
从上面这个你可以很明显的看出,第一步是启动datanode,第二步是启动tasktracker。

这里在介绍两个命令,就是重启坏死的节点,排除问题后,在坏死的节点上输入命令:
bin/hadoop-daemon.sh start datanode
bin/hadoop-daemon.sh start jobtracker
其实,参照上例,你可以看出,这个命令就是重启节点,也就是说,在重启的节点上输入启动命令,就可以把节点重新联入hadoop集群。
以上就是我们配置hadoop及日常使用时遇到的一些小问题。

同时我们搭建了一个用于mapreduce编程的网站,你可以在上面练习编写mapreduce程序,网站的地址是cloudcomputing.ruc.edu.cn。现在开放注册。想要学习mapreduce编程的朋友可以先到这个网站上练习一下。

 

你可能感兴趣的:(mapreduce,hadoop,配置管理,ssh,ubuntu)