我选择了amazon ec2作为了体验平台,总体来讲对于免费一年的试用产品来说真的很好用~账户注册和使用方面的就不在这里说了,网上应该资料很多,如果有需要也可以PM我,我可以另外再写一个详细的amzon aws使用攻略。这里就先从创建完所有的AMI的状态开始讲,下图是我建好的5个AMI,这里有一点要注意,就是AMI必须处于同一个Security Group中,名字就不要在意了,刚开始对这些概念都不熟,别被我误导了
然后你还需要确认你的security group的网络通讯策略,点击左侧的Security Groups到下图所示页面
点击右下的inbound标签页设置网络路由策略,对于hadoop来说,所有的TCP端口通讯就可以,SSH的22端口通讯是默认存在的不用管他,好了,系统环境就这样搞定了,下面开始hadoop运行环境的部署:
1.安装jdk,hadoop1.0.0要求1.5及以上版本,我用的是1.6.0_29,linux的jdk安装文件其实就是一个解压缩而已,纯绿色,一般会解压到你运行安装文件的目录,然后用sudo vim /etc/profile 这里的sudo表示以root权限运行程序,需要你输入当前用户的密码,不过AMI这里不需要所以不用理会,在profile文件里添加以下语句
export JAVA_HOME=YOUR_JDK_DIR
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
然后保存退出,source /etc/profile 使配置生效,可以使用如下命令验证配置是否生效 java -version 来查看jdk版本;
2.配置namenode到其他所有节点的ssh证书登陆
运行如下命令 ssh-keygen -t rsa 接下来的选项全部保持默认直接回车,然后cd /home/ec2-user/.ssh目录会看到id_rsa id_rsa.pub authorized_keys这三个文件authorized_key这个文件没有的话就自己创建,然后将id_rsa.pub文件中的内容复制添加到authorized_key文件的末尾,同时把id_rsa.pub文件的内容添加到所有其他节点机器的authorized_key文件中,然后测试下namenode到其他所有node的ssh登陆 ssh ip-10-194-23-155(这个是我的机器名,换成相应的机器名就行) ,ec2上的AMI内网都有完善的DNS所以省去了我们手动去配置hosts文件的麻烦途中ec2-user为默认的AMI登陆用户,@后面的就是相应的机器名称了,我们之后配置hadoop全部采用这个名字。
3.下载 安装hadoop
下载就不多说了,apache官方项目页随便找个镜像下下来就行hadoop1.0.0.tar.gz
安装,说是安装,其实就是解压缩……tar -xf hadoop1.0.0.tar.gz 当前目录下就会多出一个hadoop1.0.0的目录,好了,安装完成 /被打晕拖走
4.配置hadoop
下面就是正题了,hadoop分布式集群的搭建:
根据第一张图我们可以看到集群中包含5个AMI,今天我们暂时只用其中四个,分别命名为
namenode tasktracker01 tasktracker02 tasktracker03
首先开始配置namenode
cd ~/hadoop/hadoop1.0.0/conf 进入hadoop配置文件文件夹,对于最基本集群配置也就是 apache官方所说的hadoop-deamon(这种基本配置是无法真正应用于大型分布式运算平台的),我们只需要修改其中4个文件
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://namenode:9000</value><!-- 此处namenode为主节点的hostname 9000为端口,可以自由选择 -->
</property>
</configuration>
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>namenode:9001</value> <!-- 此处namenode为jobtracker的hostname,可以选择使用独立的服务器作为jobtracker 9001为端口,可以自由选择 -->
</property>
</configuration>
masters
#配置hadoop的主节点,可以为IP或者hostname,一行一条记录
namenode
slaves
#配置hadoop的从节点,即datanodes和tasktracker,和masters的配置方法一样
tasktracker01
tasktracker02
tasktracker03
最后修改hadoop-env.sh,找到export JAVA_HOME这一行,去掉顶部的#注释,将值改为你相应的JAVA_HOME根目录,保存
到此为止hadoop的配置完成,将整个hadoop1.0.0文件夹分别拷贝到所有的子节点上,目录结构没有关系,但是鉴于维护方面考虑最好采用全部相同的目录结构,如果你各节点上的jdk安装目录不同,则hadoop-env.sh文件中JAVA_HOME的值需要改为i各节点上相应正确的值
回到namenode 到hadoop1.0.0目录下,先运行bin/hadoop namenode -format 格式化hdfs文件系统,然后运行bin/start-all.sh 启动所有的hadoop节点,启动以后可以用jps命令查看当前节点的进程,如果配置正确,那么namenode应该运行有namenode jobtracker SecondaryNameNode这三个进程,而三个从节点应该都运行有tasktracker datanode两个进程,返回namenode 使用 bin/hadoop dfsadmin -report可以查看整个hdfs系统的报告,正常情况下按照前面的配置应该有三个datanode在运行,如果少了,请查看相应datanode节点的日志文件,各节点日志文件在hadoop1.0.0/logs目录下,各进程pid文件和hdfs文件系统目录都在/tmp目录下。
配置完成以后我们就可以来测试一下hadoop的工作了,
bin/hadoop dfs -mkdir test-in 在hdfs下创建test-in文件夹
bin/hadoop dfs -copyFromLocal README.txt LICENSE.txt CHANGE.txt NOTICE.txt test-in 拷贝四个文件到test-in目录下
bin/hadoop jar hadoop-example-1.0.0.jar wordcount test-in test-out 对test-in目录下所有文件进行字数统计,然后将结果输出到test-out目录
bin/hadoop dfs -cat 可以用来查看某一个文件的内容,内容多时使用 |more 参数来分页浏览
呼,文字果然不是我强项,写东西比自己研究的时候还累,初体验就暂时到这结束啦,后面再陆续写一些深入的真实大型集群配置和配置文件的详细解读,上面的文字如有什么疏漏请PM~谢谢~