Hadoop学习笔记三:分布式hadoop部署

  前语:如果看官是个比较喜欢使用现成软件的,比较推荐使用quickhadoop,这个使用参照官方文档即可,是比较傻瓜式的,这里不做介绍。本文主要是针对自己部署分布式hadoop。

  1.修改机器名

[[email protected] root]# vi /etc/sysconfig/network

将HOSTNAME=*** 一栏改成适当的名称,笔者两台机器采用HOSTNAME=Hadoop00,HOSTNAME=Hadoop01这种方式。

  2.修改IP,网关,掩码等

vim /etc/sysconfig/network-scripts/ifcgf-eth0
#NETMASK 网络掩码
#IPADDR IP地址
#GATEWAY 默认网关IP地址

按照实际情况,配置两台机器的网络信息。

  3.修改hosts文件,便于通过名字发现(可以认为是本地DNS)

[[email protected] root]# vi /etc/hosts
末尾添加:
192.168.1.112 Hadoop00
192.168.1.113 Hadoop01
#IP变了,是因为回家了,家里的路由网关为192.168.1.1,所以把ip改了

每一台需要以机器名进行通讯的机器,都要在上面配置,所以一般来说,依然还是建议以IP来通讯,毕竟在有些特殊情况,机器名可能会存在失效的情况。

  

  4.创建hadoop用户组,用户 (hadoop用户最好也建个密码)

[[email protected] root]# groupadd hadoop useradd -g hadoop -G hadoop hadoop

[[email protected] root]# passwd hadoop
Changing password for user hadoop.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.

  5.SSH无密码登录(需要安装有ssh和rsync服务)

重点:在nameNode中生成公私钥对,然后把公钥发送到各个dataNode
故,在Master节点做如下内容:

[[email protected] root]# su - hadoop
[[email protected] hadoop]$ ssh-keygen -t rsa -P ‘‘

此处,密钥文件生成的默认路径为/home/hadoop/.ssh
将id_rsa.pub追加到授权的key里面

[[email protected] hadoop]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

非常重要:对authorized_keys赋权,同时,以root用户修改/etc/ssh/sshd_config

[[email protected] hadoop]$ chmod 600 ~/.ssh/authorized_keys

回到root用户

[[email protected] hadoop]$ exit;
[[email protected] hadoop]# vi /etc/ssh/sshd_config


#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile     .ssh/authorized_keys
前面注释去掉,变成
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys
重启SSH

[[email protected] hadoop]# service sshd restart

验证本机:

[[email protected] root]# su - hadoop
[[email protected] hadoop]$ ssh localhost
The authenticity of host ‘localhost (127.0.0.1)‘ can‘t be established.
RSA key fingerprint is 82:5a:c0:ab:00:be:1d:ad:92:66:29:e9:cc:81:6d:2f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘localhost‘ (RSA) to the list of known hosts.
[[email protected] hadoop]$ 

ok,本机没问题,那就把公钥传到其他dataNode机器上

scp ~/.ssh/id_rsa.pub [email protected]:~/

上面的命令是复制文件"id_rsa.pub"到服务器IP为"192.168.1.113"的用户为"hadoop"的"/home/hadoop/"下面
由于到这步依然没有无密码登录功能,故依然是需要输入密码的,用dataNode的hadoop密码登录即可

[[email protected] hadoop]$ scp ~/.ssh/id_rsa.pub [email protected]:~/
[email protected]192.168.1.113‘s password:
id_rsa.pub           100% |************************************************************|   238       00:00
[[email protected] hadoop]$

以下是对各个dataNode机器的配置,如有有多台dataNode机器的话,这里以192.168.1.113为例

[[email protected] hadoop]$ mkdir ~/.ssh
[[email protected] hadoop]$ chmod 700 ~/.ssh
[[email protected] hadoop]$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
[[email protected] hadoop]$ chmod 600 ~/.ssh/authorized_keys 

依旧以root用户修改/etc/ssh/sshd_config,参照前面对nameNode的操作,包括重启SSH

将所有dataNode配置完后,记得删掉id_rsa.pub文件

rm -r ~/id_rsa.pub

现在,从nameNode可以无密码登录到各个dataNode了,但是dataNode登录nameNode依然需要密码,有时间可以将上面的步骤再做一遍,把各个dataNode也做成无密码

登录nameNode,练手。 步骤为: 在dataNode:

su - hadoop
ssh-keygen -t rsa -P ‘‘
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub     [email protected]192.168.1.112:~/ 

在nameNode:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm -r ~/id_rsa.pub

  6.Hadoop集群安装

以nameNode为例,其余dataNode安装方法一样。
以root用户登录nameNode后,上传http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-1.2.1/
官网下载的hadoop-1.2.1.tar.gz包至/home/hadoop;

cp /home/hadoop/hadoop-1.2.1.tar.gz /usr     #把"hadoop-1.2.1.tar.gz"复制到"/usr"目录下面
cd /usr    #进入"/usr"目录
tar -zxvf hadoop-1.2.1.tar.gz    #解压"hadoop-1.0.0.tar.gz"安装包
mv hadoop-1.2.1 hadoop    #将"hadoop-1.0.0"文件夹重命名"hadoop"
chown -R hadoop:hadoop hadoop    #将文件夹"hadoop"读权限分配给hadoop用户
rm -rf hadoop-1.2.1.tar.gz     #删除"hadoop-1.0.0.tar.gz"安装包

添加hadoop环境变量 修改/etc/profile文件,在末尾添加

# set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin 

重启生效: source /etc/profile(也可以参照前面jdk安装的. /etc/profile)

mkdir /usr/hadoop/tmp chown -R hadoop:hadoop tmp
mkdir /usr/hadoop/data chmod 755 /usr/hadoop/data

  7.配置hadoop

修改/usr/hadoop/conf目录下的hadoop-env.sh文件,末尾添加:

#set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_45

如果忘了,可以通过echo $JAVA_HOME先查看

修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/hadoop/tmp</value>
        <description>A base for other temporary directories.</description>
    </property>
<!-- file system properties -->
    <property>
        <name>fs.default.name</name>
        <value>hdfs://192.168.1.112:9000</value>
    </property>
</configuration>

修改Hadoop中HDFS(hdfs-site.xml)的配置,配置的备份方式默认为3:

<configuration>
<property>
 <name>dfs.data.dir</name>
 <value>/usr/hadoop/data</value>
</property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
<configuration>

修改Hadoop中MapReduce(mapred-site.xml)的配置文件,配置的是JobTracker的地址和端口:

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>http://192.168.1.112:9001</value>
    </property>
</configuration>

配置masters文件:
vi masters
一般来说,用机器名或者ip都可以,但是推荐用ip。

[[email protected] conf]# vi masters
192.168.1.112

配置slaves文件(Master主机特有)
vi slaves
将dataNode节点的机器都加进来,一条一行。一般来说,用机器名或者ip都可以,但是推荐用ip。

[[email protected] conf]# vi slaves
192.168.1.113

将以上步骤在所有dataNode机器上装一遍,slaver的不用做。也可以直接将nameNode上的/usr/hadoop直接复制到dataNode机器上,再做配置。这里采用复制:

scp -r /usr/hadoop [email protected]:/usr/

root登录dataNode机器,更改其用户组

chown -R hadoop:hadoop hadoop

给各个dataNode添加hadoop环境变量
添加hadoop环境变量
修改/etc/profile文件,在末尾添加

# set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

重启生效
source /etc/profile(也可以参照前面jdk安装的. /etc/profile)

  8.启动验证

首先,关闭所有机器防火墙

service iptables stop

以hadoop用户登录,格式化DHFS文件系统

hadoop namenode -format
(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)

有告警:
Warning: $HADOOP_HOME is deprecated.
可以编辑/etc/profile,添加(所有机器都要添加)
export HADOOP_HOME_WARN_SUPPRESS=1
重启生效。

依然有错误:
15/01/10 14:19:52 ERROR namenode.NameNode: java.io.IOException: Cannot create directory /usr/hadoop/tmp/dfs/name/current
原来是tmp属于root用户组,更改tmp的所属用户组。
启动:
start-all.sh

停止:
stop-all.sh
修改dataNode,以下目录中的VERSION文件,将namespaceID=1505787769更改成与nameNode一致
/usr/hadoop/tmp/dfs/name/current
或者清除nameNode的tmp数据,重新format:

cd ~
rm -rf /usr/hadoop/tmp
mkdir /usr/hadoop/tmp
rm -rf /tmp/hadoop*
hadoop namenode -format
start-all.sh

jps查看是否启用,发现dataNode节点没起来,查看日志:
2015-01-10 14:59:49,121 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: Incorrect permission for /usr/hadoop/tmp/dfs/data, expected: rwxr-xr-x, while actual: rwxrwxr-x
2015-01-10 14:59:49,121 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: All directories in dfs.data.dir are inval
id.
原来是权限问题:

chmod 755 /usr/hadoop/tmp/dfs/data

重启hadoop

时间: 2024-10-29 21:10:11

Hadoop学习笔记三:分布式hadoop部署的相关文章

Hadoop学习笔记(3)——分布式环境搭建

Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里,我们采用这样的策略来模拟环境,我们使用3台ubuntu机器,1台为作主机(master),另外2台作为从机(slaver).同时,这台主机,我们就用第一章中搭建好的环境来. 我们采用与第一章中相似的步骤来操作: 运行环境搭建 在前面,我们知道,运行hadoop是在linux上运行的.所以我们单机就在

Hadoop学习笔记_7_分布式文件系统HDFS --DataNode体系结构

分布式文件系统HDFS --DataNode体系结构 1.概述 DataNode作用:提供真实文件数据的存储服务. 文件块(block):最基本的存储单位[沿用的Linux操作系统地概念].对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block. 与Linux操作系统不同的是,一旦上传了一个小于Block大小的文件,则该文件会占用实际文件大小的空间. 2.进入hdfs-default.xml <prope

Hadoop学习笔记_4_实施Hadoop集群 --伪分布式安装

实施Hadoop集群 --伪分布式安装 准备与配置安装环境 安装虚拟机和linux,虚拟机推荐使用vmware,PC可以使用workstation,服务器可以使用ESXi,在管理上比较方便.ESXi还可以通过拷贝镜像文件复制虚拟机,复制后自动修改网卡号和ip,非常快捷.如果只是实验用途,硬盘大约预留20-30G空间. 以Centos为例,分区可以选择默认[如果想要手动分区,请参考博客:http://blog.csdn.net/zjf280441589/article/details/175485

Hadoop学习笔记_8_实施Hadoop集群 --分布式安装Hadoop

实施Hadoop集群 --分布式安装Hadoop 说明: 以Ubuntu配置为例,其中与CentOS不同之处会给出详细说明 现有三台服务器:其IP与主机名对应关系为: 192.168.139.129 master #NameNode/JobTrackerr结点 192.168.139.132 slave01 #DataNode/TaskTracker结点 192.168.139.137 slave02 #DataNode/TaskTracker结点 一.配置ssh实现Hadoop节点间用户的无密

Hadoop学习笔记_5_分布式文件系统HDFS --shell操作

分布式文件系统HDFS --shell操作 分布式文件系统[Distributed File System]概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 . 分布式文件系统特点: 是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间. 通透性.让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般

Hadoop学习笔记_6_分布式文件系统HDFS --NameNode体系结构

分布式文件系统HDFS --NameNode体系结构 NameNode 是整个文件系统的管理节点. 它维护着整个文件系统的文件目录树[为了使得检索速度更快,该目录树放在内存中], 文件/目录的元信息和每个文件对应的数据块列表. 接收用户的操作请求. Hadoop确保了NameNode的健壮性,不容易死亡.文件目录树以及文件/目录的元信息等归根到底是存放在硬盘中的,但是在Hadoop运行时,需要将其加载到内存中. 文件包括: fsimage:元数据镜像文件.存储某一时段NameNode内存元数据信

Hadoop学习笔记0003——从Hadoop URL读取数据

Hadoop学习笔记0003--从Hadoop URL读取数据 从HadoopURL读取数据   要从Hadoop文件系统中读取文件,一个最简单的方法是使用java.net.URL对象来打开一个数据流,从而从中读取数据.一般的格式如下: InputStream in = null; try { in = new URL("hdfs://host/path").openStream(); // process in } finally { IOUtils.closeStream(in);

hadoop学习笔记(三)——WIN7+eclipse+hadoop2.5.2部署

折腾了大半个晚上最终部署成功了,比在Linux上面略微复杂一点,具体过程例如以下: 1)  jdk.ant.hadoop环境变量配置 2)  分别将hadoop-2.5.2.tar.gz.hadoop-2.5.2-src.tar.gz.hadoop2x-eclipse-plugin.hadoop-common-2.2.0-bin下载解压到D:\profession\hadoop文件夹下 3)  改动hadoop-eclipse-plugin-2.5.2.jar配置 改动D:\profession

Hadoop学习笔记—13.分布式集群中的动态添加与下架

开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与下架一个Hadoop节点. 一.实验环境结构 本次试验,我们构建的集群是一个主节点,三个从节点的结构,其中三个从节点的性能配置各不相同,这里我们主要在虚拟机中的内存设置这三个从节点分别为:512MB.512MB与256MB.首先,我们暂时只设置两个从节点,另外一个作为动态添加节点的时候使用.主节点与