Hadoop第一步:部署分布式服务

原创文章:转载请注明出处
最近有幸开始接触云。哈哈,先从hadoop入手
部署hadoop的文档很多,但是还是遇到了不少问题,下面和大家分享一下我的部署全过程吧

版本号:hadoop 0.21.0
下载地址:[url]http://www.apache.org/dyn/closer.cgi/hadoop/core/ [/url]
系统环境:红帽linux

1.硬件配置
准备3-4台机器,为他们配置上IP,保证相互可以ping通

至少有3台作为NameNode因为hadoop默认作为备份的机器数量为3
NameNode也可以作为DataNode
hadoop1:192.168.1.144(NameNode)
hadoop2:192.168.1.145(DataNode)
hadoop3:192.168.1.146(DataNode)
hadoop4:192.168.1.146(DataNode)

修改/etc/hosts文件 如果是144
就加上一下信息
192.168.1.144 hadoop1
192.168.1.145 hadoop2
192.168.1.146 hadoop3
192.168.1.147 hadoop4
145则写
192.168.1.144 hadoop1
192.168.1.145 hadoop2
146则写
192.168.1.144 hadoop1
192.168.1.146 hadoop3
147则写
192.168.1.144 hadoop1
192.168.1.147 hadoop4

2.配置SSH
1.在hadoop1中生成密匙对:ssh-keygen -t -P '' -f ~/.ssh/id_dsa
命令执行后将会在/home/.ssh中生成id_dsa和id_dsa.pub
2.cat ~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys
拷贝id_dsa.pub命名为authorized_keys
3.为hadoop2-hadoop4的home目录下创建.ssh文件夹
mkdir .ssh
4.scp authorized_keys hadoop2:/home/.ssh
把authorized_keys拷贝到hadoop2-hadoop4的.ssh目录下
5.为每台机器执行chmod 640 authorized_keys
必须保证authorized_keys的所有者有读写权限,其他人只有读的权限
6.修改每台机器的/etc/ssh/sshd_config
AuthorizedKeysFile 指向authorized_keys
例如 AuthorizedKeysFile /home/authorized_keys
用于去除密码认证

这里必须注意:hadoop1-hadoop4的每台机器必须可以相互连接。此例只是hadoop1连接其他机器,其他机器并不能连接到hadoop1。所以要按上面方法为hadoop2-hadoop4配置ssh连接
配置完成:在hadoop1中执行 ssh hadoop2
如果能连接上表示配置成功:退出链接用exit命令

3.hadoop配置
首先下载hadoop,系统java环境变量已经配置完成
目录结构
由于Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户。
我的三台机器上是这样的:都有一个hadoop的帐户,主目录是/home/hadoop。
解压:[hadoop@ hadoop1:~]$tar  -zxvf  hadoop-0.21.0.tar.gz
Hadoop部署目录结构如下:/home/hadoop/hadoop0.21.0,所有的hadoop版本放在这个目录中。
将hadoop0.21.0压缩包解压至hadoop0.21.0中,为了方便以后升级,建议建立一个链接指向要使用的hadoop版本,不妨设为hadoop,
[hadoop@ hadoop1:~]$ln  -s  hadoop0.21.0  hadoop
这样一来,所有的配置文件都在/home/hadoop/hadoop/conf/目录中,所有执行程序都在/home/hadoop/hadoop/bin目录中。但是由于上述目录中hadoop的配置文件和hadoop的安装目录是放在一起的,这样一旦日后升级hadoop版本的时候所有的配置文件都会被覆盖,因此建议将配置文件与安装目录分离,一种比较好的方法就是建立一个存放配置文件的目录,/home/hadoop/hadoop/hadoop-config,然后将/home/hadoop/hadoop/conf/目录中的masters,slaves,hadoop_env.sh三个文件拷贝到hadoop-config目录中,并指定环境变量$HADOOP_CONF_DIR指向该目录。环境变量在/home/hadoop/.bashrc和/etc/profile中设定。
如:
HADOOP_CONF_DIR=/home/hadoop/hadoop/hadoop-config
export HADOOP_CONF_DIR
综上所述,为了方便以后升级版本,我们需要做到配置文件与安装目录分离,并通过设定一个指向我们要使用的版本的hadoop的链接,这样可以减少我们对配置文件的维护。

Hadoop环境变量
在/home/hadoop/hadoop/hadoop-config目录下的hadoop_env.sh中设置Hadoop需要的环境变量,其中JAVA_HOME是必须设定的变量。HADOOP_HOME变量可以设定也可以不设定,如果不设定,HADOOP_HOME默认的是bin目录的父目录,即本文中的/home/hadoop/hadoop。我的是这样设置的:
export  HADOOP_HOME=/home/hadoop/hadoop
export  JAVA_HOME=/usr/java/jdk1.6.0

重点:env.sh还要加一句
export HADOOP_PID_DIR=/home/hadoop/hadoop/tmp

Hadoop配置文件

修改slaves文件
如前所述,在hadoop1(NameNode)的hadoop-config/目录下,打开slaves文件,该文件用来指定所有的DataNode,一行指定一个主机名。即本文中的hadoop2、hadoop3,因此slaves文件看起来应该是这样的:
hadoop2
hadoop3
hadoop4

修改masters文件
打开masters文件,该文件用来指定NameNode,内容如下:
localhost
hadoop1

修改core-site.xml
1.<?xml version="1.0"?>  
2.<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
3.<!-- Put site-specific property overrides in this file. -->  
4.<configuration>  
5.    <property>  
6.        <name>fs.default.name</name>  
7.        <value>hdfs://master:9000</value>  
8.        <description>  
9.            The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation.   
10.        </description>  
11.    </property>  
12.</configuration> 


修改mapred-site.xml
1.<?xml version="1.0"?>  
2.<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
3.<!-- Put site-specific property overrides in this file. -->  
4.<configuration>  
5.    <property>  
6.        <name>mapred.job.tracker</name>  
7.        <value>master:9001</value>        
8.        <description>The host and port that the MapReduce job tracker runsat.</description>  
9.   </property>  
10.</configuration>  

修改hdfs-site.xml 
1.<?xml version="1.0"?>  
2.<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
3.<!-- Put site-specific property overrides in this file. -->  
4.<configuration>  
5.    <property>  
6.            <name>dfs.replication</name>  
7.            <value>3</value>          
8.            <description>  
9.                  The actual number of replications can be specified when the file is created.   
10.            </description>  
11.      </property>  
12.</configuration>  



4.启动Hadoop
启动之前,我们先要格式化namenode,先进入~/hadoop/目录,执行下面的命令:
[hadoop@hadoop1 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守护
在这里,简单启动所有守护:
[hadoop@hadoop1:hadoop]$bin/start-all.sh
同样,如果要停止hadoop,则
[hadoop@hadoop1:hadoop]$bin/stop-all.sh

HDFS操作
运行bin/目录的hadoop命令,可以查看Haoop所有支持的操作及其用法,这里以几个简单的操作为例。建立目录:
[hadoop@hadoop1 hadoop]$bin/hadoop  dfs  -mkdir  testdir
在HDFS中建立一个名为testdir的目录,复制文件:
[hadoop@hadoop1 hadoop]$bin/hadoop dfs -put /home/large.zip  testfile.zip
把本地文件large.zip拷贝到HDFS的根目录/user/hadoop/下,文件名为testfile.zip,查看现有文件:
[hadoop@hadoop1 hadoop]$bin/hadoop dfs -ls
用http://localhost:50070查看信息

你可能感兴趣的:(mapreduce,hadoop,xml,ssh,XSL)