ubuntu下hadoop配置指南

来源:互联网 发布:苹果同步助手软件 编辑:程序博客网 时间:2024/06/05 02:51

目录

1.实验目的

2.实验内容(hadoop伪分布式与分布式集群环境配置)

3.运行wordcount词频统计程序

一 . 实验目的

通过学习和使用开源的 Apache Hadoop工具,亲身实践云计算环境下对海量数据的处理,理解并掌握分布式的编程模式 MapReduce,并能够运用MapReduce编程模式完成特定的分布式应用程序设计,用于处理实际的海量数据问题。

二 . 实验内容 

1.实验环境搭建

1.1.  前期准备

      操作系统: Linux Ubuntu 10.04

      Java开发环境:需要JDK 6及以上,Ubuntu 10.04默认安装的OpenJDK可直接使用。不过我使用的是sun的jdk,从官方网站上下载,具体可以参考博客:ubuntu下安装JDK并配置java环境

      Hadoop开发包:试过了hadoop的各种版本,包括0.20.1,0.20.203.0和0.21.0,三个版本都可以配置成功,但是只有0.20.1这个版本的eclipse插件是可用的,其他版本的eclipse插件都出现各种问题,因此当前使用版本为hadoop-0.20.1

      Eclipse:与hadoop-0.20.1的eclipse插件兼容的只有一些低版本的eclipse,这里使用eclipse-3.5.2。

1.2.  在单节点(伪分布式)环境下运行Hadoop

(1)添加 hadoop用户并赋予sudo权限(可选)

        为 hadoop应用添加一个单独的用户,这样可以把安装过程和同一台机器上的其他软件分离开来,使得逻辑更加清晰。可以参考博客:Ubuntu-10.10如何给用户添加sudo权限。

(2)配置 SSH 

无论是在单机环境还是多机环境中, Hadoop均采用SSH来访问各个节点的信息。在单机环境中,需要配置 SSH 来使用户 hadoop 能够访问 localhost 的信息。首先需要安装 openssh-server。

[sql] view plaincopy
  1. sudo apt-get install openssh-server  

其次是配置 SSH使得Hadoop应用能够实现无密码登录:

[sql] view plaincopy
  1. su - hadoop  
  2. ssh-keygen -trsa -P ""  
  3. cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys  

第一条命令将当前用户切换为hadoop(如果当前用户就是hadoop,则无需输入),第二条命令将生成一个公钥和私钥对(即id_dsa和id_dsa.pub两个文件,位于~/.ssh文件夹下),第三条命令使得hadoop用户能够无需输入密码通过SSH访问localhost。这时可通过以下命令来验证安装是否成功(如果没有提示输入密码直接登录成功,则说明安装成功):

[sql] view plaincopy
  1. ssh localhost  

(3) 配置Hadoop

Hadoop的配置文件都放在/hadoop/conf这个文件夹下面,主要是四个配置文件,分别是core-site.xml,hadoop-env.sh,hdsf-site.xml和mapred-site.xml。

修改conf/hadoop-­‐env.sh,设置JAVA_HOME,在该文件中找到如下行,去掉前面的注释。

[sql] view plaincopy
  1. # Thejava implementation to use. Required.  
  2. # export JAVA_HOME=/usr/lib/j2sdk1.5-sun  

修改为:

[sql] view plaincopy
  1. # Thejava implementation to use.  Required.  
  2. export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_27  

修改core-site.xml内容如下:

[sql] view plaincopy
  1. <?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl"href="configuration.xsl"?>  
  3. <!-- Put site-specific property overrides in thisfile. -->  
  4. <configuration>  
  5.  <property>  
  6.    <name>fs.default.name</name>  
  7.   <value>hdfs://localhost:9000</value>  
  8.  </property>  
  9.  <property>  
  10.    <name>hadoop.tmp.dir</name>  
  11.    <value>/home/hadoop/program/tmp-${user.name}</value>  
  12.   </property>  
  13. </configuration>  

修改conf/hdfs-site.xml为

[sql] view plaincopy
  1. <?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl"href="configuration.xsl"?>  
  3. <!-- Put site-specific property overrides in thisfile. -->  
  4. <configuration>  
  5.     <property>  
  6.         <name>dfs.replication</name>  
  7.         <value>1</value>  
  8.     </property>  
  9. </configuration>  

修改conf/mapred-site.xml为:

[sql] view plaincopy
  1. <?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl"href="configuration.xsl"?>  
  3. <!-- Put site-specific property overrides in thisfile. -->  
  4. <configuration>  
  5.     <property>  
  6.        <name>mapred.job.tracker</name>  
  7.        <value>localhost:9001</value>  
  8.     </property>  
  9. </configuration>  

(4) 运行Hadoop(当前用户为hadoop)

        以上操作已经完成对Hadoop的配置,接下来是运行Hadoop。第一步需要进行格式化HDFS,运行脚本主要位于HADOOP_HOME/bin目录下,注意HADOOP_HOME为解压缩之后的Hadoop根目录,此处为/home/hadoop/program/hadoop-0.20.1。格式化HDFS命令为:(假设当前目录是已经在/home/hadoop/program/hadoop-0.20.1/bin/)

[sql] view plaincopy
  1. ./hadoop namenode –format  
        启动单节点集群:
[sql] view plaincopy
  1. ./start-all.sh  
         这个操作会在本机上启动Namenode,SecondaryNameNode,Datanode,JobTracker和TaskTracker共计5个JVM进程,可以通过java自带的jps命令查看。
[sql] view plaincopy
  1. jps  
        通过jps命令可以查看到进程如下:

[sql] view plaincopy
  1. 19811 TaskTracker  
  2. 19674 SecondaryNameNode  
  3. 19735 JobTracker  
  4. 19497 NameNode  
  5. 20879 TaskTracker  
  6. 21810 Jps  
        停止单节点集群:
[sql] view plaincopy
  1. ./stop-all.sh  
        另外可以通过以下网址查看节点的运行情况:
http://localhost:50030/ - Hadoop 管理介面
http://localhost:50060/ - Hadoop Task Tracker 状态
http://localhost:50070/ - Hadoop DFS 状态

1.3. 在多节点(分布式)环境下运行Hadoop

        搭建多节点集群的思想主要是在每一台机器上分别搭建好单机环境,再将几台机器整合成一个集群。因此,在此之前,请确保每一台机器都如1.2节中所述搭建好了单机环境(最好是相同的结构)。这里说的相同结构是指hadoop安装在项目的目录下,然后多个节点使用都使用相同的用户名操作hadoop集群。比如使用用户名hadoop。这个在hadoop搭建注意事项汇总中的第一条里面有提到。我第一次部署的时候,因为第一台slave机器使用hadoop账户配置hadoop环境,而第二台master机器使用xuwei这个账户配置hadoop环境,这样在ssh的时候也会出现问题。我使用xuwei账户ssh slave,找到的不是hadoop@slave,而是xuwei@slave。 最后在slave上新建了一个hadoop账户才解决问题。 

(1) 设置/etc/hosts文件

实验中两台机器处于同一局域网中,其中一台作为master,ip地址为192.168.0.55,一台作为slave,ip地址为192.168.0.42。更新两台机器的/etc/hosts文件,使用如下命令:

[sql] view plaincopy
  1. sudo gedit /etc/hosts  

添加以下内容:

[sql] view plaincopy
  1. # /etc/hosts (for master AND slave)  
  2. 192.168.0.55 master  
  3. 192.168.0.42 slave  

(2) 设置节点之间的无密码SSH登录

这里要求master上的用户hadoop必须能够无密码登录到master和slave两台机器上。经过1.2节第(2)步的配置,已经可以在单机上进行密码SSH登录,这里只需设置由master无密码登录到slave,采用如下命令即可:在master上运行:
[sql] view plaincopy
  1. ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@slave  

这条命令的意思是将master上的公钥拷贝到slave上,这样下次ssh slave的时候slave就认识master,无需在输入密码验证。

如下命令可以测试SSH连接成功与否:
[sql] view plaincopy
  1. ssh master  
  2. ssh slave  

(3) 修改集群配置文件

        hadoop集群的架构分为两层:HDFS层和MapReduce层,在HDFS层,master将作为NameNode和DataNode,slave作为DataNode;在MapReduce层,master将作为JobTracker和TaskTracker,而slave将作为TaskTracker。值得一提的是,本次实验中master节点既作为管理节点,又担当数据节点。接下来需要修改$HADOOP_HOME/conf/下的配置文件。在master节点上修改conf/masters文件,添加如下内容:
[sql] view plaincopy
  1. master  
        在master节点上修改conf/slaves文件,添加如下内容(这表明master节点具有双重角色,即做master,又做slave):
[sql] view plaincopy
  1. master  
  2. slave  
        如果需要添加更多slave,则可以在conf/slaves中将其他节点的名称添加进去,如下所示:

[sql] view plaincopy
  1. master  
  2. slave  
  3. anotherslave01  
  4. anotherslave02  
在所有节点上修改conf/core-site.xml,更改fs.default.name的值为hdfs://master:9000,具体为:
[sql] view plaincopy
  1. <property>  
  2.     <name>fs.default.name</name>  
  3.     <value>hdfs://master:9000</value>  
  4. </property>  
在所有节点上修改conf/mapred-site.xml,将JobTracker的地址改为master具体为:

[sql] view plaincopy
  1. <property>  
  2.     <name>mapred.job.tracker</name>  
  3.     <value>hdfs://master:9001</value>  
  4. </property>  
在所有节点上修改conf/hdfs-site.xml,将更改dfs.replication的值,这个参数决定了集群中一个文件需要保存为多少个拷贝。其默认值为3,因本次试验节点数为2,故更改为2。具体为:

[sql] view plaincopy
  1. <property>  
  2.       <name>dfs.replication</name>  
  3.       <value>2</value>  
  4. </property>  

(4) 格式化HDFS

注意:如果之前单机环境下格式化过HDFS建议把之前的文件删除,否则可能会出现异常(HDFS目录即之前设置的${hadoop.tmp.dir}\dfs目录)。格式化命令和单机情况下类似,只是需要在master节点上运行。
[sql] view plaincopy
  1. ./hadoop namenode -format  

(5) 启动和停止集群

在master节点上首先启动HDFS,其命令为:
[sql] view plaincopy
  1. ./start-dfs.sh  
其结果是在master节点上启动NameNode,SecondaryNameNode和DataNode,在所有slave节点上启动DataNode,通过jps命令可以查看master上启动的服务列表:
[sql] view plaincopy
  1. hadoop@master:~$ jps  
  2. 14799 NameNode  
  3. 15314 Jps  
  4. 14880 DataNode  
  5. 14977 SecondaryNameNode  
此时slave上的进程列表如下:
[sql] view plaincopy
  1. hadoop@master:~$ jps  
  2. 15183 Jps  
  3. 15616 DataNode  
其次,在master节点上启动MapReduce,其命令为:
[sql] view plaincopy
  1. ./start-mapred.sh  
这样将会在master 节点上启动JobTracker 和TaskTracker , 在所有slave 节点上启动TaskTracker,通过jps命令可以查看master上启动的服务列表:
[sql] view plaincopy
  1. hadoop@master:~$ jps  
  2. 14799 NameNode  
  3. 15314 Jps  
  4. 14880 DataNode  
  5. 14977 SecondaryNameNode  
  6. 15686 TaskTracker  
  7. 15596 JobTracker  
此时slave上的进程列表如下:
[sql] view plaincopy
  1. hadoop@slave:~$ jps  
  2. 15183 DataNode  
  3. 15897 TaskTracker  
  4. 16284 Jps  
如要停止集群,则需要将上述步骤反过来运行,首先在master上运行

[sql] view plaincopy
  1. ./stop-mapred.sh  
其次在master上运行以下命令停止HDFS:
[sql] view plaincopy
  1. ./stop-dfs.sh  
这个过程也可通过jps命令来查看是否完成。

三.运行WordCount词频统计程序

代码参考博客:Hadoop WordCount改进实现正确识别单词以及词频降序排序。

在eclipse下运行配置参照: eclipse运行wordcount参数配置

0 0
原创粉丝点击