apache hadoop初体验

来源:互联网 发布:淘宝旺铺基础班页头 编辑:程序博客网 时间:2024/06/07 11:15
apache hadoop已经正式发布1.0.0正式版本,顺应云计算的大潮也去体验了以下,大概应该东西比较新,网上资料也比较少,东搜西凑加上apache的官方文档,终于2天搞定,心情愉悦,下面就把大概的过程详细描述下,以帮助想学习hadoop的同学们简单上手。

         我选择了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~谢谢~

原创粉丝点击