原创文章:转载请注明出处
最近有幸开始接触云。哈哈,先从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查看信息