实验室环境下 hadoop集群配置

一、环境说明

实验室中多台机器都属于同一局域网,主机的操作系统多为windows系统,而hadoop要在linux环境下配置,因此我们选用了hostwindows7+Vmwareubuntu)的方式进行了实验性的配置。

机器三台,分别做namenode12G内存 八核处理器  1TB硬盘)和两个datanode4G内存 双核处理器 1TB硬盘)。下面进入正式的配置过程。

 

二、虚拟机的安装及上网方式的选择

虚拟机上网方式,选择桥接。

虚拟机器上安装linux(ubuntu)系统,上网方式:选择有线网络,手动设置IP。网关。IP与主机网段相同。网关与主机相同,DNS与主机相同。

我们这次试验中 机器的配置的ip结果如下

Datanode 219.245.72.244

Namenode1:  219.245.72.242

Namenode2 219.245.72.243

这是如果网络是好的,各个linux系统之间可以ping通。

三、安装ssh服务

在安装之前把虚拟机的上网方式改成NatBridge方式不能直接上网。Linux系统设置成自动获取ip

下面安装 openssh-server ,并配置各节点的公钥私钥

对于每个节点:     

安装 openssh-server sudo apt-get install openssh-server

创建公钥私钥: ssh-keygen t rsa

期间会要求输入一些信息,直接按回车就可以。这样,在默认的路径(其中 njust 是当前用户名) /home/lilin/.ssh 目录下创建 私钥 id_rsa 和一个公钥 id_rsa.pub

对于 datanode 节点:

将自己的公钥发送到 namenode 上:

 

cp id_rsa.pub datanode1.id_rsa.pub

 

scp datanode01.id_rsa.pub namenode 节点 ip 地址(在我的配置方案中,是219.245.72.244 :/home/lilin/.ssh

 

这里需要注意,由于每个 datanode 节点都要将自己的公钥传到 namenode 的相同路径下,因此,各个 datanode 发送的公钥文件名不能相同。这里使用 cp 命令,在每台 datanode 节点上将公钥文件复制为唯一名字的文件。

 

对于 namenode 节点:

在收到所有 datanode 发送过来的公钥文件之后,要综合这些文件(包括自身),并将这些文件发送到每个节点上:

 

cp id_rsa.pub authorized_keys

 

cat datanode1.id_rsa.pub >> authorized_keys

 

cat datanode2.id_rsa.pub >> authorized_keys

 

scp authorized_keys datanodeip地址:/home/lilin/.ssh

 

这时一定要查看一下 ssh 配置是否成功,查看方式是使用 ssh 命令: ssh 其他机器 ip ,如果不需要密码就可以登录,就说明配置成功。如果还需要密码,干脆无法登录,则需要重启电脑。重启之后再次使用 ssh 命令,如果还需要密码或者无法登录,则需要重新配置一遍。

成功之后namenode可以无密码登录datanode节点。

注意:这里能否成功是工作能否继续进行的一个关键。一定要能够各个机器之间能够ssh通畅,sshlinux传递文件的保障,只有能够互相ssh我们各个机器之间传递的信息才是安全的。在这里,在我们的配置过程中出现了许多麻烦,因为以前对linux系统也没有接触过,吃了不少亏。

 四、开始集群配置

1、修改各主机的主机名,以区分不同的机器:

打开/etc/hostnamesudo gedit /etc/hostname

对于namenode节点:

将主机名改成namenodedatanode改成相应的datanode1datanode2等等,并保存关闭。如下图所示:

 

2、配置各个主机之间IP与主机名的对应关系

修改集群中各个主机的/etc/hosts文件:sudo gedit /etc/hosts

将集群中各个主机的IP与主机名都列在此处,如图所示:

注意要将第一行注释掉:#127.0.0.1 localhost.localdomain localhost

 

注意:如果是第一次接触到linux系统的人,会更改不了。这里要对文件的权限进行修改。命令如下:

Chmod  777  /etc/hosts

这样就可更改hosts的内容了 对于以后要处理的文件不在赘述,都是用这种方法更改文件权限后就可以操作

3. 安装 JDK 1.6

root用户登陆,在Namenode节点上新建文件夹/usr/program,下载JDK安装包jdk-6u13-linux-i586.bin,复制到目录/usr/ program下,在命令行进入该目录,执行命令“./ jdk-6u13-linux-i586.bin”,命令运行完毕,将在目录下生成文件夹jdk1.6.0_13,安装完毕。

    安装完成后,修改/usr/program目录拥有着为lilin用户.若果只有一个用户当然就不用修改了。

下面进行环境变量配置

       root用户登陆,命令行中执行命令sudo gedit  /etc/profile”,并加入以下内容,配置环境变量(注意/etc/profile这个文件很重要,后面Hadoop的配置还会用到)

# set java environment

export JAVA_HOME=/usr/program/jdk1.6.0_13/

export JRE_HOME=/usr/program/jdk1.6.0_13/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

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

保存并退出,执行以下命令使配置生效

chmod +x  /etc/profile

source  /etc/profile

    配置完毕,在命令行中使用命令”java -version”可以判断是否成功。在lilin用户下测试java –version,一样成功。

4Hadoop集群配置

   namenode上执行:

    Hadoop用户登录。

下载hadoop-0.21.0,将其解压到/usr/local/hadoop目录下,解压后目录形式是/usr/local/hadoop/hadoop-0.21.0。使用如下命令:

    tar zxvf hadoop-0.21.0.tar.gz

    (1)配置Hadoop的配置文件

    (a)配置hadoop-env.sh

# set java environment

export JAVA_HOME=/usr/program/jdk1.6.0_13/

(b)配置conf/hadoop-site.xml

Hadoop配置参数的含义请参考conf/Hadoop-default.xml

Hadoop-0.20之后的版本请分别配置hadoop目录下,conf目录中的core-site.xmlhdfs-site.xmlmapred-site.xml三个配置文件,配置方法即将下面hadoop-site.xml文件中的三块参数分别复制到三个文件当中。

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

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

 

<configuration>

 

<!—core-site.xml-->

<property>

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

    <value>hdfs://lilin:9000</value>

    <description>HDFSURI,文件系统://namenode标识:端口号</description>

</property>

 

<property>

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

    <value>/usr/local/hadoop/hadooptmp</value> 

    <description>namenode上本地的hadoop临时文件夹</description>

</property>

 

<!—hdfs-site.xml-->

<property>

    <name>dfs.name.dir</name>

    <value>/usr/local/hadoop/hdfs/name</value>

    <description>namenode上存储hdfs名字空间元数据 </description>

</property>

 

<property>

    <name>dfs.data.dir</name>

    <value>/usr/local/hadoop/hdfs/data</value>

    <description>datanode上数据块的物理存储位置</description>

</property>

 

<property>

    <name>dfs.replication</name> 

    <value>2</value>

    <description>副本个数,不配置默认是3,应小于datanode机器数量</description>

</property>

 

<!—mapred-site.xml-->

<property>

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

    <value>lilin:9001</value>

    <description>jobtracker标识:端口号,不是URI</description>

</property>

 

<property>

    <name>mapred.local.dir</name>

    <value>/usr/local/hadoop/mapred/local</value>

    <description>tasktracker上执行mapreduce程序时的本地目录</description>

</property>

 

<property>

    <name>mapred.system.dir</name>

    <value>/tmp/hadoop/mapred/system</value>

    <description>这个是hdfs中的目录,存储执行mr程序时的共享文件</description>

</property>

 

</configuration>

(c)配置masters文件,加入namenode的主机名

Lilin

(d)配置slaves文件, 加入所有datanode的主机名

Lilin

Lilin

 

复制配置好的各文件到所有数据节点上

    root用户下:

scp /etc/hosts    数据节点ip地址:/etc/hosts

scp /etc/profile  数据节点ip地址:/etc/profile

scp /usr/program  数据节点ip地址:/usr/program

nutch用户下:

scp /usr/local/hadoop 数据节点ip地址: /usr/local/

5Hadoop集群启动

    Namenode执行:

    格式化namenode,格式化后在namenode生成了hdfs/name文件夹

 

   cd /usr/local/hadoop/hadoop-0.21.0/bin

 

bin$ ./hadoop namenode –format

 

启动hadoop所有进程,

bin/start-all.sh(或者先后执行start-dfs.shstart-mapreduce.sh)。

可以通过以下启动日志看出,首先启动namenode,然后启动datanode1,datanode2,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,最后启动tasktracker2。下面是集群启动的结果

下面检查一下namenode上的进程。用jps工具检查就可以了

 

 

 

 

上边是namenode的进程运行情况。下边是datanode进程运行情况

 

 

 

 

 

 

 

下面检查一下集群的运行情况

命令:在bin 运行命令 hadoop dfsadmin –report

 

到此为止,我们的hadoop集群配置已经完成,集群正常运行。可以进行其他的实验了。

你可能感兴趣的:(java,hadoop,linux,虚拟机,集群,ssh)