首页 > 代码库 > hadoop和hdfs环境搭建

hadoop和hdfs环境搭建

参考链接:http://blog.csdn.net/zolalad/article/details/11470449

环境:ubuntu14.04 hadoop1.0.1

下面以3台机器为例,讲解安装过程

1) 准备3台机器,一台作为nameNode,命名为master,两台作为dataNode,命名为slave01, slave02。强调命名是为了方便管理,其实命名无所谓。如果已命名为其它名称,可通过编辑/etc/hostname进行更改。

2) 为所有主从节点配置静态ip,因为主从节点间需要相互访问,如果ip地址动态变化可能造成无法访问的错误。当然,如果在同一局域网中也可以通过主机名以及主机名和ip地址的动态映射服务相互访问。但还是建议设置静态ip

3) 在3台机器上都设置hadoop用户,并且给这一用户管理员权限,我出于学习目的直接使用了root用户。添加用户命令:adduser hadoop,之后按提示输入和确认密码。增加管理员权限可修改/etc/sudoers 文件,找到下面一行:root ALL=(ALL) ALL,在该行下增加一行:hadoop ALL=(ALL) ALL。也可以将hadoop用户加入具有管理员权限的组中。另外,还可以修改/etc/passwd 文件,找到如下行:hadoop:x:1001:1001:hadoop:/home/hadoop:/bin/bash把用户ID修改为 0,则修改后该行变为:hadoop:x:0:1001:hadoop:/home/hadoop:/bin/bash。这样做,hadoop用户就完全变为root用户了,虽简单,但不建议这么改。

4) 安装SSH并配置免密码SSH访问机制(重要)Ubuntu系统可通过sudo apt-get install ssh进行安装,其它系统请自行查阅相关资料。配置ssh无密码直接访问:首先查看hadoop用户的home目录中是否包含名称为.ssh的文件夹,可用命令ls -a,如果没有,则可以自己建一个,可用命令mkdir .ssh,之后执行命令ssh-keygen -t rsa,接下来一般一路回车即可(当然你也可以仔细看一下每一步都是干什么的),接下进入.ssh目录,执行命令:cat id_rsa.pub >> authorized_keys,注意,在所有节点执行以上操作,并将所有节点的authorized_keys文件合并成一个,并且在所有节点间共享这一文件(至于所有节点的.ssh目录下),至此,所有节点之间都可以通过ssh无密码访问了,ssh远程登陆可用命令ssh ip -l username,设置完后可通过该命令进行测试。之所以要设置ssh无密码访问机制,是因为hadoop使用ssh协议,无密码访问更加方便(话说我还不是特别清楚hadoop支不支持有密码访问)。

5) Jdk安装。可使用官方jdk,也可以使用openjdkopenjdk建议使用版本7,官方jdk建议使用版本6以上。我使用的是官方jdk,版本1.7.0_51,可通过命令java -version查看jdk版本。以我的版本为例,首先下载jdk-7u51-linux-x64.tar.gz,解压到你自己选择的安装路径,我选的是/usr/java,之后配置一下环境变量,可修改/etc/profile文件,该修改对整个系统生效,也可以修改/home/username/.bashrc,该修改仅对相应用户生效,修改完后,可执行source /etc/profile使修改生效。如我在/etc/profile文件中增加如下几行:

export  JAVA_HOME=/usr/java/jdk1.7.0_51

export  JRE_HOME=$JAVA_HOME/jre

export  PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

6) 在主节点上解压安装Hadoop。到Hadoop官网下载hadoop-1.0.1.tar.gz(本人使用的是此版本!),我所选择的安装目录是用户的home目录,所以将其直接解压到root用户的home目录下。

7) 配置hadoop环境变量。同样是配置/etc/profile文件,以我为例添加以下内容:

export  HADOOP_HOME=/root/hadoop-1.0.1

export  PATH=$PATH:$HADOOP_HOME/bin

export   HADOOP_CLASSPATH=$HADOOP_HOME/lib/commons-lang-2.4.jar:$HADOOP_HOME/lib/commons-logging-api-1.0.4.jar:$HADOOP_HOME/lib/commons-configuration-1.6.jar:$HADOOP_HOME/hadoop-core-1.0.1.jar:$HADOOP_HOME/contrib/streaming/hadoop-streaming-1.0.1.jar

export   CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$HADOOP_CLASSPATH。同 样需要使用source命令使配置生效。

8) 在主节点上修改hadoop配置文件。 Hadoop的配置文件存放在hadoop安装目录下的conf目录中,主要有以下几个配置文件要修改:

conf/hadoop-env.shHadoop环境变量设置

conf/core-site.xml:主要完成NameNodeIP和端口设置

conf/hdfs-site.xml:主要完成HDFS的数据块副本等参数设置

conf/mapred-site.xml:主要完成JobTracker IP和端口设置

conf/masters:完成master节点IP设置

配置hadoop-env.sh文件

添加 # set java environment

export JAVA_HOME=/usr/java/jdk1.7.0_51

配置core-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="http://www.mamicode.com/configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

   <property>

     <name>fs.default.name</name>

     <value>hdfs://Master:9000/</value>//Master为主节点主机名

   </property>

   <property> 

      <name>hadoop.tmp.dir</name> 

      <value>/tmp</value> 

   </property>

</configuration>

说明:hadoop分布式文件系统的两个重要的目录结构,一个是namenode上名字 空间的存放地方,一个是datanode数据块的存放地方,还有一些其他的文件存 放地方,这些存放地方都是基于hadoop.tmp.dir目录的,比如namenode的名字 空间存放地方就是 ${hadoop.tmp.dir}/dfs/name, datanode数据块的存放地方就是  ${hadoop.tmp.dir}/dfs/data,所以设置好hadoop.tmp.dir目录后,其他的重要目录 都是在这个目录下面,这是一个根目录。在此设置的是 /tmp,当然这个目录必须 是存在的。

配置hdfs-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="http://www.mamicode.com/configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

  <property>

     <name>dfs.replication</name>

     <value>3</value>

  </property>

</configuration> 

配置mapred-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="http://www.mamicode.com/configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

  <property>

     <name>mapred.job.tracker</name>

     <value>Master:9001</value>

  </property>

</configuration>

配置masters文件和slaves文件

将主机名填进去就行了

9) 之后,就可以将配置好好的主节点拷贝到其他各节点上。可使用命令scp。如我的是scp -r /root/hadoop-1.0.1/ root@ip:/root。即将主节点root目录下的hadoop目录拷贝到其他节点的root目录下。完成之后,需要修改各节点的/etc/hosts文件,以完成主机名到ip地址的映射。

10) 格式化NameNode。执行Hadoopbin文件夹中的格式化命令:hadoop namenode -format,如果格式化成功,会返回一堆有关NameNode的启动信息,其中会有一句“…. has been successfully formatted.

11) 启动HDFSMapReduce。执行命令start-all.sh。用JPS命令检查一下是否正常启动:jsp显示以下各进程信息则说明HDFSMapReduce都已正常启动:

4706 JobTracker

4582 SecondaryNameNode

4278 NameNode

4413 DataNode

4853 TaskTracker

4889 Jps 

12)进行测试,使用hadoop自带的测试用例wordcount程序,执行命令:hadoop jar hadoop-1.0.1-examples.jar wordcount input output。其中input文件夹是位于hadoop文件系统/user/root/目录下,可查看该目录下的文件,使用命令:hadoop fs -ls /user/root/input,其中ls可以换成其他linux命令。将待计数的文本文件至于该目录下,使用命令:hadoop fs -put file /user/root/input。输出结果将置于output目录下。如没有input目录可以建一个。