Ubuntu_10.04下Hadoop-0.20.2集群配置手册

一、软硬件环境的准备

下面的文章来自hadoopor.com,我先交待一下我自己的环境: 两台机器,每台机器上面两个虚机(vmware 均以桥接方式,也就是说4个虚机都有各自独立的内网IP)都是ubuntu10.04,宿主机都是windowsxp,用SecureCRT(严重推荐,好使)连接各个副机。最后按下文配置,成功运行~另:机器之间的文件用SCP命令吧,好使~~~

////////////////////////////////////////////////////////////////////////////////

集群包含三个节点:1个namenode,3个datanode,节点之间局域网连接,可以相互ping通。操作系统ubuntu 10.04节点IP地址分布如下:

hadoop-namenode:

hadoop-datanode1:

hadoop-datanode2:

hadoop-datanode3:

修改/etc/hosts文件如下:

192.168.7.132  hadoop-namenode

192.168.8.2    hadoop-datanode1

192.168.7.123  hadoop-datanode2

192.168.7.179  hadoop-datanode3

把namenode上面的hosts文件覆盖所有datanode上面的hosts,是他们内容一致。

安装JDK环境:

下载JDK安装包jdk-6u20-linux-i586.bin,进行安装,然后把安装目录移到/usr/lib/ jdk1.6.0_20,

然后ln –s /usr/lib/jdk1.6.0_20/bin/java /usr/bin/java

在/etc/profile下面设置JDK_HOME变量

export JDK_HOME=/usr/lib/jdk1.6.0_20

JDK环境的操作需要在所有的namenode和datanode上面进行操作。

SSH无密码验证配置

Hadoop需要使用SSH协议,namenode将使用SSH协议启动namenode和datanode进程,(datanode向namenode传递心跳信息可能也是使用SSH协议,这是我认为的,还没有做深入了解)。许多教程上介绍Hadoop集群配置时只说明了namenode上SSH无密码登录所有datanode,我在配置时发现必须使datanode上也能SSH无密码登录到namenode,Hadoop集群才能正常启动(也许这不是必须的,只是我的一个失误,但是这样能够正常启动Hadoop集群)。

*配置Namenode无密码登录所有Datanode

(0)原理

Namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。namenode收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端namenode公钥复制到datanode上。

(1)所有机器上生成密码对

所有节点上执行以下命令:

root@hadoop-namenode# ssh-keygen

然后一路回车就可以了。

这将在/root/.ssh/目录下生成一个私钥id_rsa和一个公钥id_rsa.pub。

把namenode节点上面的id_rsa.pub 复制到所有datanode节点/root/.ssh/位置。

(注意:原文没有细说,这是指把id_rsa.pub先拷贝成authorized_keys,再将authorized_keys复制到其它datanode上的)

root@hadoop-namenode# cp id_rsa.pub authorized_keys

namenode的公钥

root@hadoop-namenode# chmod 644 authorized_keys

使用SSH协议将namenode的公钥信息authorized_keys复制到所有DataNode的.ssh目录下(.ssh下最初没有authorized_keys,如果有,则需要复制追加,后面会讲到如何追加)。

root@hadoop-namenode# scp authorized_keys data节点ip地址:/root/.ssh

这样配置过后,namenode可以无密码登录所有datanode,可以通过命令

“ssh 节点ip地址”来验证。有些手册上介绍的配置方法与此不一致,但是这种方法是成功的。很多手册到此步SSH配置就完成了,但是我实验时发现不能正常启动hadoop,所以我还继续做了配置。

*配置每个Datanode无密码登录Namenode

(0)原理

Namenode连接datanode时namenode是客户端,需要将namenode上的公钥复制到datanode上,那么,如果datanode主动连接namenode,datanode是客户端,此时需要将datanode上的公钥信息追加到namenode中的authorized_keys之中。(此时,由于namenode中已经存在authorized_keys文件,所以这里是追加)。

如果进一步需要datanode之间实现公钥无密码验证,则同样需要相互之间追加公钥信息

(1)将各个datanode上的id_rsa.pub追加到namenode的authorized_keys

在所有datanode上依次执行如下命令:

root@hadoop-datanode1# scp id_rsa.pub namenode ip地址:/root/.ssh/datanode ip地址.id_rsa.pub

这将datanode上之前产生的公钥id_rsa.pub复制到namenode上的.ssh目录中,并重命名为datanode ip地址.id_rsa.pub,这是为了区分从各个datanode上传过来的公钥。

复制完毕,在namenode上执行以下命令,将每个datanode的公钥信息追加:

root@hadoop-namenode# cat datanode ip地址.id_rsa.pub >> authorized_keys

这样,namenode和datanode之间便可以相互ssh上并不需要密码......

注意:整个过程中只涉及到创建密钥,复制公钥,添加公钥内容,没有更改配置文件,实际上配置文件/etc/ssh/sshd_config中开启了公钥验证

{

RSAAuthentication yes

PubkeyAuthentication yes

}

(2)SSH配置完毕

至此,namenode能无密码验证登陆每个datanode。每个datanode也能无密码验证SSH登陆到namenode。

二、hadoop配置

1.安装

下载hadoop发行版,地址:http://apache.freelamp.com/hadoop/core/stable/

安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。并且安装路径要一致,如果我们用HADOOP_HOME指代安装的根路径,通常,集群里的所有机器的HADOOP_HOME路径相同。

通常,集群里的一台机器被指定为NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。

下载安装包后,直接解压安装即可:

$tar –zxvf hadoop-0.20.2.tar.gz

$cd hadoop-0.20.2

注:如果集群内机器的环境完全一样,可以在一台机器上把Hadoop0.20.2集群配置好,然后把配置好的软件即hadoop-0.20.2整个文件夹拷贝到其他机器的相同位置即可。

2.配置

编辑conf/hadoop-env.sh文件,至少需要将JAVA_HOME设置为Java安装根路径。

配置core-site.xml

<configuration>

<property>

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

<value>/opt/hadoop/tmp</value>

(注意,请先在hadoop目录下建立tmp文件夹)

<description>A base for other temporary directories.</description>

</property>

<!-- file system properties -->

<property>

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

<value>hdfs://hadoop-namenode:9000</value>

</property>

</configuration>

dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。

dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。

dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。

注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。

(c)配置hdfs-site.xml

<configuration>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/hadoopfs/name1,/opt/hadoop/hadoopfs/name2</value> #hadoop的name目录路径 
<description>  </description>
</property>

<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/hadoopfs/data1,/opt/hadoop/hadoopfs/data2</value>
<description> </description>
</property>

<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。 
dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。

dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。

(d)配置mapred-site.xml

<configuration>

<property>

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

<value> hadoop-namenode[j1]:9001</value>

</property>

</configuration>

配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。

(e)配置masters文件,加入namenode的ip地址

hadoop-namenode

(f)配置slaves文件, 加入所有datanode的ip地址

hadoop-datanode1

hadoop-datanode2

hadoop-datanode3

将namenode上配置好的hadoop所在文件夹hadoop复制到所有datanode的 /opt目录下(实际上masters,slavers文件时不必要的,复制了也没问题)。

三、Hadoop集群启动

IP地址分布:

NameNode:210.77.9.204

DataNode1: 210.77.9.199

DataNode2: 210.77.9.216

Namenode执行:

格式化hadoop,

root@hadoop-namenode:/opt/hadoop/hadoop-0.20.2/bin# ./hadoop namenode –format

启动hadoop,

root@hadoop-namenode:/opt/hadoop/hadoop-0.20.2/bin#./start-all.sh

可以通过以下启动日志看出,首先启动namenode,然后启动datanode1,datanode2,datanode3,

启动hadoop成功后,在namenode中的tmp文件夹中生成了dfs文件夹,在datanode中的tmp文件夹中均生成了dfs文件夹和mapred文件夹。

在namenode上查看集群状态

root@hadoop-namenode:/opt/hadoop/hadoop-0.20.2/bin# ./hadoop dfsadmin -report

Configured Capacity: 22339694592 (20.81 GB)

Present Capacity: 10691964928 (9.96 GB)

DFS Remaining: 10691891200 (9.96 GB)

DFS Used: 73728 (72 KB)

DFS Used%: 0%

Under replicated blocks: 0

Blocks with corrupt replicas: 0

Missing blocks: 0

-------------------------------------------------

Datanodes available: 3 (3 total, 0 dead)

Name: 192.168.7.179:50010

Decommission Status : Normal

Configured Capacity: 7446564864 (6.94 GB)

DFS Used: 24576 (24 KB)

Non DFS Used: 3950833664 (3.68 GB)

DFS Remaining: 3495706624(3.26 GB)

DFS Used%: 0%

DFS Remaining%: 46.94%

Last contact: Thu Jul 15 14:03:33 CST 2010

Name: 192.168.8.2:50010

Decommission Status : Normal

Configured Capacity: 7446564864 (6.94 GB)

DFS Used: 24576 (24 KB)

Non DFS Used: 3746869248 (3.49 GB)

DFS Remaining: 3699671040(3.45 GB)

DFS Used%: 0%

DFS Remaining%: 49.68%

Last contact: Thu Jul 15 14:03:33 CST 2010

Name: 192.168.7.123:50010

Decommission Status : Normal

Configured Capacity: 7446564864 (6.94 GB)

DFS Used: 24576 (24 KB)

Non DFS Used: 3950026752 (3.68 GB)

DFS Remaining: 3496513536(3.26 GB)

DFS Used%: 0%

DFS Remaining%: 46.95%

Last contact: Thu Jul 15 14:03:33 CST 2010

web 方式查看:http:// namenode ip地址:50070 例如:http://192.168.7.132:50070

ERROR:

[root@localhost ~]# hadoop fs -ls #会出现如下情况
09/04/27 01:23:28 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 0 time(s).   这里为什么连接不上呢?
09/04/27 01:23:29 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 1 time(s).
09/04/27 01:23:30 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 2 time(s).
09/04/27 01:23:31 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 3 time(s).
09/04/27 01:23:32 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 4 time(s).
09/04/27 01:23:33 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 5 time(s).
09/04/27 01:23:34 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 6 time(s).
09/04/27 01:23:35 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 7 time(s).
09/04/27 01:23:36 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 8 time(s).
09/04/27 01:23:37 INFO ipc.Client: Retrying connect to server: /192.168.13.129:9000. Already tried 9 time(s).

查看log 日志vim logs/hadoop-root-namenode-cwb.com.log

ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-root/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.

问题解决方法hadoop namenode -format

不过这个要注意,如果hdfs里面有数据,那么这么做之后,数据会丢失。


[j1]

必須是主控端ip名字

Ubuntu_10.04下Hadoop-0.20.2集群配置手册的更多相关文章

  1. Linux系统下安装Redis和Redis集群配置

    Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...

  2. Nginx+Tomcat+MemCached 集群配置手册

    系统实施文档 Nginx+Tomcat+MemCached 集群配置手册 目    录 第1章   概述 1.1   目标 互联网的快速发展带来了互联网系统的高负载和高可用性, 这要求我们在设计系统架 ...

  3. Hadoop(25)-高可用集群配置,HDFS-HA和YARN-HA

    一. HA概述 1. 所谓HA(High Available),即高可用(7*24小时不中断服务). 2. 实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA ...

  4. hadoop-2.3.0-cdh5.1.0完全分布式集群配置HA配置

    一.安装前准备: 操作系统:CentOS 6.5 64位操作系统 环境:jdk1.7.0_45以上,本次采用jdk-7u55-linux-x64.tar.gz master01 10.10.2.57  ...

  5. hadoop-2.3.0-cdh5.1.0完全分布式集群配置及HA配置(待)

    一.安装前准备: 操作系统:CentOS 6.5 64位操作系统 环境:jdk1.7.0_45以上,本次采用jdk-7u55-linux-x64.tar.gz master01 10.10.2.57  ...

  6. hadoop之完全分布式集群配置(centos7)

    一.基础环境 现在我们有两台虚拟机了,再克隆两台: 克隆好之后需要做三件事:1.更改主机名称 2.修改ip地址 3.将ip地址和对应的主机号加入到/etc/hosts文件中 1.永久修改主机名 hos ...

  7. Ubuntu 16.04下使用docker部署ceph集群

    ceph集群docker部署 通过docker可以快速部署小规模Ceph集群的流程,可用于开发测试. 以下的安装流程是通过linux shell来执行的:假设你只有一台机器,装了linux(如Ubun ...

  8. CentOS系统下Hadoop 2.4.1集群安装配置(简易版)

    安装配置 1.软件下载 JDK下载:jdk-7u65-linux-i586.tar.gz http://www.oracle.com/technetwork/java/javase/downloads ...

  9. hadoop(四): 本地 hbase 集群配置 Azure Blob Storage

    基于 HDP2.4安装(五):集群及组件安装 创建的hadoop集群,修改默认配置,将hbase 存储配置为 Azure Blob Storage 目录: 简述 配置 验证 FAQ 简述: hadoo ...

随机推荐

  1. OpenCV 2.4.9

    2014.4.25 感谢那些參加开发.发送错误报告以及通过其它方式帮助我们的全部人和公司. 源代码如今已经可以从SourceForge和Github上下载了. 2.4.9版本号的帮助文章也更新到如今的 ...

  2. js控件位置

    function ShowSettingDiv() { var div = document.getElementById('ShowDiv'); //将要弹出的层 div.style.display ...

  3. Android如何创建背景透明的Dialog

    一:控制Dialog 的背景方法:1.定义一个无背景主题主题<!--去掉背景Dialog--> <style name="NobackDialog" parent ...

  4. CentOS 通过yum来升级php到php5.6,yum upgrade php 没有更新包怎么办?

    在文章中,我们将展示在centOS系统下如何将php升级到5.6,之前通过yum来安装lamp环境,直接升级的话,提示没有更新包,也就是说默认情况下php5.3.3是最新 1.查看已经安装的php版本 ...

  5. js的MVC结构设计

    基于jquery的Deferred,设计出如下MVC架构. 模型model interface.js interface: function(userid){ var dtd = $.Deferred ...

  6. 程序从高版本降到2.0,数据集报错 TypedTableBase

    错误  命名空间“System.Data”中不存在类型或命名空间名称“TypedTableBase”(是缺少程序集引用吗?) 解决: 该错误出现在自动生成的XXX.Designer.cs里. .NET ...

  7. android EventBus 的使用

    今天简单的介绍 一下啊 android  EventBus 的使用 EventBus 在官方介绍中是订阅......什么的 一大堆  ,  在我android 菜鸟眼里 就是用来代替android 广 ...

  8. IOS-UI-UILable

    //用于文本展示 UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 200, 300)]; //使用测色器自选颜色 ...

  9. iOS定位问题解决方案

    在需要用到定位服务时,需在info文件中加入: 1.NSLocationWhenInUseUsageDescription(类型为:string,值为:”我们需要通过您的地理位置信息获取您周边的相关数 ...

  10. Java设计模式(学习整理)----装饰模式

    1.概念: (在我看来,模式就像是是一种思想,在这种思想的指引下,对代码和结构的一番加工和整合而已!都是套路!) 装饰模式又称包装(Wrapper)模式,是以对客户端透明的方式扩展对象的功能,是继承关 ...