hadoop部署安装

参考博文http://www.cnblogs.com/wayne1017/archive/2007/03/20/678724.html html

硬件环境java

共有2台机器,均使用的centos5.7系统,Java使用的是jdk1.7.0。IP配置以下:
centos1:10.0.9.101
centos2:10.0.9.102
这里有一点须要强调的就是,务必要确保每台机器的主机名和IP地址之间能正确解析node

一个很简单的测试办法就是ping一下主机名,好比在centos1上ping centos2,若是能ping通就OK!若不能正确解析,能够修改/etc/hosts文件,若是该台机器做Namenode用,则须要在hosts文件中加上集群中全部机器的IP地址及其对应的主机名;若是该台机器做Datanode用,则只须要在hosts文件中加上本机IP地址和Namenode机器的IP地址。linux

以本文为例,centos1中的/etc/hosts文件看起来就应该是这样的:
127.0.0.0         localhost    
10.0.9.101     centos1       
10.0.9.102     centos2       
centos2中的/etc/hosts文件看起来就应该是这样的:
127.0.0.0         localhost    
10.0.9.101     centos1      
10.0.9.102     centos2       shell

对于Hadoop来讲,在HDFS看来,节点分为Namenode和Datanode,其中Namenode只有一个,Datanode能够是不少;在MapReduce看来,节点又分为Jobtracker和Tasktracker,其中Jobtracker只有一个,Tasktracker能够是不少。
我是将namenode和jobtracker部署在centos1上,centos1和centos2做为datanode和tasktracker。固然你也能够将namenode,datanode,jobtracker,tasktracker所有部署在一台机器上(就像centos1)。vim

jdk环境配置centos

官网下载适合本身的jdkbash

http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.htmloracle

为了简单下载一个rpm包ssh

 

jdk-7-linux-x64.rpm

rpm -ivh  jdk-7-linux-x64.rpm
查看/usr/目录就有java目录了
配置环境变量
#vim /etc/profile

在profile文件下面追加写入下面信息:

export JAVA_HOME=/usr/java/jdk1.7.0
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

目录结构

这里务必以新建用户grid登录,保证hadoop目录及子目录属主为grid一我的(若是既有root又有grid之后会出现不少错误)
因为Hadoop要求全部机器上hadoop的部署目录结构要相同,而且都有一个相同的用户名的账户
个人三台机器上是这样的:都有一个grid的账户,主目录是/home/grid
Hadoop部署目录结构以下:/home/grid/HadoopInstall,全部的hadoop版本放在这个目录中。
将hadoop0.20.204压缩包解压至HadoopInstall中,为了方便之后升级,建议创建一个连接指向要使用的hadoop版本,不妨设为hadoop
[grid@centos1:HadoopInstall]$ln  -s  hadoop0.20.204 hadoop
这样一来,全部的配置文件都在/home/grid/HadoopInstall/hadoop/conf/目录中,全部执行程序都在hadoop/bin目录中。
可是因为上述目录中hadoop的配置文件和hadoop的安装目录是放在一块儿的,这样一旦往后升级hadoop版本的时候全部的配置文件都会被覆盖,所以建议将配置文件与安装目录分离,一种比较好的方法就是创建一个存放配置文件的目录,/home/grid/HadoopInstall/hadoop-conf/,而后将hadoop/conf/目录中的core-site.xml,hdfs-site.xml,mapred-site.xml,master,slaves,hadoop_env.sh六个文件拷贝到hadoop-conf/目录中,并指定环境变量$HADOOP_CONF_DIR指向该目录。环境变量在/home/grid/.bashrc或/etc/profile中设定。

export $HADOOP_CONF_DIR=/home/grid/HadoopInstall/hadoop/hadoop-conf
综上所述,为了方便之后升级版本,咱们须要作到配置文件与安装目录分离,并经过设定一个指向咱们要使用的版本的hadoop的连接,这样能够减小咱们对配置文件的维护。在下面的部分,你就会体会到这样分离以及连接的好处了。

这里的目录和连接结构比较乱,我在说明一下

家目录/home/grid

下面有一个放hadoop各版本的目录HadoopInstall,好比示例版本hadoop0.20.204即

/home/grid/HadoopInstall/hadoop0.20.204

目录HadoopInstall下新建一个指向最新hadoop版本的连接hadoop/home/grid/HadoopInstall/hadoop---->hadoop0.20.204

 

目录HadoopInstall还有一个分离的配置文档文件夹hadoop-conf

其中存放着不变的配置文档
SSH设置
在Hadoop启动之后,Namenode是经过SSH(Secure Shell)来启动和中止各个节点上的各类守护进程的,这就须要在节点之间执行指令的时候是不须要输入密码的方式,故咱们须要配置SSH使用无密码公钥认证的方式。
详见http://singlegod.blog.51cto.com/1909710/680182

Hadoop环境变量
在/home/grid/HadoopInstall/hadoop-conf目录下的hadoop_env.sh中设置Hadoop须要的环境变量,其中JAVA_HOME是必须设定的变量。HADOOP_HOME变量能够设定也能够不设定,若是不设定,HADOOP_HOME默认的是bin目录的父目录,即本文中的/home/grid/Hadoop0.20.204/hadoop。个人是这样设置的

export  HADOOP_HOME=/home/dbrg/HadoopInstall/hadoop
export  JAVA_HOME=/usr/java/jdk1.7.0

从这个地方就能够看出前面所述的建立hadoop0.20.204的连接hadoop的优势了,当之后更新hadoop的版本的时候,就不须要在改配置文件,只须要更改连接就能够了。


Hadoop配置文件
如前所述,在hadoop-conf/目录下,打开slaves文件,该文件用来指定全部的从节点,一行指定一个主机名。即本文中的centos2,centos1,所以slaves文件看起来应该是这样的
centos2
centos1
Hadoop0.20.2版本之前的配置文件是conf/hadoop-default.xml,可是hadoop0.20.2以及之后版本中,该配置文件拆分位core-site.xml  hdfs-site.xml和mapred-site.xml其中core和hdfs是站在HDFS的角度上的配置文件,core和mapred是站在Mapreduce角度上的配置文件

(只配置configuration间的jiuha)

core-site.xml配置以下

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://centos1:9000</value>

</property>

</configuration>    

hdfs-site.xml(配置以下)

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration> 

mapred-site.xml配置以下

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>centos1:9001</value>

</property>

</configuration> 

部署Hadoop
前面讲的这么多Hadoop的环境变量和配置文件都是在centos1这台机器上的,如今须要将hadoop部署到其余的机器上,保证目录结构一致
[grid@centos1:~]$scp  -r  /home/grid/HadoopInstall  centos2:/home/grid/
至此,能够说,Hadoop已经在各个机器上部署完毕了下面就让咱们开始启动Hadoop吧


启动Hadoop
启动以前,咱们先要格式化namenode,先进入~/HadoopInstall/hadoop目录,执行下面的命令
[grid@centos1:hadoop]$bin/hadoop  namenode  -format
不出意外,应该会提示格式化成功。若是不成功,就去hadoop/logs/目录下去查看日志文件
下面就该正式启动hadoop啦,在bin/下面有不少启动脚本,能够根据本身的须要来启动。
* start-all.sh 启动全部的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack
* stop-all.sh 中止全部的Hadoop
* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack
* stop-mapred.sh 中止Map/Reduce守护
* start-dfs.sh 启动Hadoop DFS守护.Namenode和Datanode
* stop-dfs.sh 中止DFS守护

在这里,简单启动全部守护
[grid@centos1:hadoop]$bin/start-all.sh

一样,若是要中止hadoop,则
[grid@centos1:hadoop]$bin/stop-all.sh

查看是否启动成功

/usr/java/jdk1.7.0/jps(若是配置成功java环境变量直接输入jps命令)

若是成功应该会在centos1上显示相似如下结果

1885    SecondNamenode

2085     JPS

1707     NameNode

1945     Jobtracker

28891    DataNode

28881    Tasktracker

centos2  

1566    JPS

2891    DataNode

2881    Tasktracker

访问http://centos1:50070能够看到NameNode以及整个分布式文件系统的状态,浏览分布式文件系统中的文件以及日志等

访问http://centos1:50030能够查看JobTracker的运行状态

HDFS操做
运行bin/目录的hadoop命令,能够查看Haoop全部支持的操做及其用法,这里以几个简单的操做为例。

创建目录
[grid@centos1:hadoop]$bin/hadoop  dfs  -mkdir  testdir
在HDFS中创建一个名为testdir的目录

复制文件
[grid@centos1:hadoop]$bin/hadoop  dfs  -put  /home/grid/large.zip  testfile.zip
把本地文件large.zip拷贝到HDFS的根目录/user/grid/下,文件名为testfile.zip

查看现有文件
[grid@centos1:hadoop]$bin/hadoop  dfs  -ls

遇到的错误及解决办法

 

1,在格式化namenode时,提示(Y/N)的时候我输的y,因此没有成功,好怪~

2,在启动hdfs时分布在centos2节点上的datanode没有启动,查看日志看不懂,估计是之前用root用户配置乱了,因此一不作二不休

rm -rf /tmp/hadoop*

从新格式化,启动,成功

 

3,若是期间用root去查看hadoop的日志文件,也会出错,由于会把某个日志文件的属主变为root

相关文章
相关标签/搜索