ITPub博客

首页 > 大数据 > Hadoop > 搭建Hadoop环境

搭建Hadoop环境

Hadoop 作者:zhangqian0401 时间:2013-04-18 11:45:41 0 删除 编辑

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

一、配置 SSH 

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

  1. sudo apt-get install ssh  

安装完成后要保证防火墙对ssh的端口放行,如果仅是学习可以直接把防火墙关闭:

1)重启后永久性生效:

开启: chkconfig iptables on

关闭: chkconfig iptables off

2)即时生效,重启后失效:

开启: service iptables start

关闭: service iptables stop

 

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

  1. su hadoop  
  2. ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
  3. cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys  

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

ssh localhost //若不需要密码ssh配置好 

二、配置Hadoop

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

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

Thejava implementation to use. Required.  

export JAVA_HOME=/usr/lib/j2sdk1.5-sun  

即使在环境变量里面已经配置了JAVA_HOME,这里也不可以用JAVA_HOME=${JAVA_HOME},一定要写成绝对路径

修改为:

Thejava implementation to use.  Required.  

  export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_27  

 

接着修改HADOOP_PID_DIR的值,将

# The directory where pid files are stored. /tmp by default.

# export HADOOP_PID_DIR=/var/hadoop/pids

改为:

# The directory where pid files are stored. /tmp by default.

export HADOOP_PID_DIR=/opt/hadoop-0.20.2/pids(hadoop目录的下的pids文件夹)

这个值主要是用来存放HADOOP进程的pid文件,由于linux会定时清理/tmp下的文件,所以用默认值的话可能会导致找不到pid文件,使得hadoop进程无法正常运行

 

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

<!-- Put site-specific property overrides in thisfile. -->

 

   fs.default.name

  hdfs://localhost:9000

<!--默认的namenode的端口为8020 -->

 

 

   hadoop.tmp.dir

   /home/hadoop/program/tmp-${user.name}

<!--路径中可以使用用${变量名},但路径名不可以用${...}以及~/...,一定要写成绝对路径-->

 

  

 

(3)修改conf/hdfs-site.xml为

version="1.0"?>  

type="text/xsl"href="configuration.xsl"?>  

  

      

        dfs.replication  

        1  

      

  

设置复本数,默认是3

(4)修改conf/mapred-site.xml为:

version="1.0"?>  

type="text/xsl"href="configuration.xsl"?>  

  

        

         mapred.job.tracker  

         localhost:9001  

        

jobtracker的ip和端口 

 

三、运行Hadoop(当前用户为hadoop)

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

./hadoop namenode –format  

若报 

/opt/jdk1.6.0_25/bin/java: cannot execute binary file

证明jdk与系统的位数不合(jdk为64位,系统为32位),换一个32位的jdk就可

启动单节点集群:

./start-all.sh  

这个操作会在本机上启动Namenode,SecondaryNameNode,Datanode,JobTracker和TaskTracker共计5个JVM进程,可以通过java自带的jps命令查看。

jps  

通过jps命令可以查看到进程如下:

TaskTracker  

SecondaryNameNode  

JobTracker  

NameNode  

TaskTracker

 

停止单节点集群:

./stop-all.sh  

另外可以通过以下网址查看节点的运行情况:
http://localhost:50030/ - Hadoop 管理介面
http://localhost:50060/ - Hadoop Task Tracker 状态
http://localhost:50070/ - Hadoop DFS 状态

 

四、在多节点(分布式)环境下运行Hadoop

搭建多节点集群的思想主要是在每一台机器上分别搭建好单机环境,再将几台机器整合成一个集群。因此,在此之前,请确保每一台机器都如前所述搭建好了单机环境,最好是相同的结构。这里说的相同结构是指hadoop安装在相同的目录下,然后多个节点都使用相同的用户名操作hadoop集群。否则在ssh的时候也会出现问题。

(1) 设置/etc/hosts文件

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

vi /etc/hosts  

添加以下内容:

  1. /etc/hosts (for master AND slave)  
  2. 192.168.8.2 master  
  3. 192.168.8.3 slave  

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

这里要求master上的用户hadoop必须能够无密码登录到master和slave两台机器上。经过上面的配置,已经可以在单机上进行密码SSH登录,这里只需设置由master无密码登录到slave,采用如下命令即可:

在master上运行:

ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@slave  

如果没有ssh-copy-id,使用如下命令代替:

cat ~/.ssh/id_dsa.pub | ssh hadoop@slave "umask 077; mkdir -p .ssh ; cat >> .ssh/authorized_keys" , umask 077是要保证.ssh目录为drwx------,即保证只有所有者有权限,否则不管用

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

如下命令可以测试SSH连接成功与否:

ssh master  

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文件,添加如下内容:

  1. master  

   在master节点上修改conf/slaves文件,添加如下内容(这表明master节点具有双重角色,即做master,又做slave):

  1. master  
  2. slave  

  如果需要添加更多slave,则可以在conf/slaves中将其他节点的名称添加进去,如下所示:

  1. master  
  2. slave  
  3. anotherslave01  
  4. anotherslave02  

在所有节点上修改conf/core-site.xml,更改fs.default.name的值为hdfs://master:9000,具体为:

  1.   
  2.     fs.default.name  
  3.     hdfs://master:9000  
  4.   

在所有节点上修改conf/mapred-site.xml,将JobTracker的地址改为master具体为:

  1.   
  2.     mapred.job.tracker  
  3.     hdfs://master:9001  
  4.   

在所有节点上修改conf/hdfs-site.xml,将更改dfs.replication的值,这个参数决定了集群中一个文件需要保存为多少个拷贝。其默认值为3,因本次试验节点数为2,故更改为2。具体为:

  1.   
  2.       dfs.replication  
  3.       2  
  4.   

(4) 格式化HDFS

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

  1. ./hadoop namenode -format  

(5) 启动和停止集群

在master节点上首先启动HDFS,其命令为:

  1. ./start-dfs.sh  

其结果是在master节点上启动NameNode,SecondaryNameNode和DataNode,在所有slave节点上启动DataNode,通过jps命令可以查看master上启动的服务列表:

NameNode  

DataNode  

SecondaryNameNode  

此时slave上的进程列表如下:

DataNode  

其次,在master节点上启动MapReduce,其命令为:

./start-mapred.sh  

这样将会在master 节点上启动JobTracker 和TaskTracker , 在所有slave 节点上启动TaskTracker,通过jps命令可以查看master上启动的服务列表:

NameNode  

DataNode  

SecondaryNameNode  

TaskTracker  

JobTracker  

此时slave上的进程列表如下:

DataNode  

TaskTracker  

如要停止集群,则需要将上述步骤反过来运行,首先在master上运行

./stop-mapred.sh  

其次在master上运行以下命令停止HDFS:

./stop-dfs.sh  

这个过程也可通过jps命令来查看是否完成。 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8944063/viewspace-1119773/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论