Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31034
  • 博文数量: 11
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-10 14:34
文章分类

全部博文(11)

文章存档

2017年(11)

我的朋友

分类: 大数据

2017-12-04 12:51:25

写在前面的话

Hdfs采用分布式架构,为上层的应用和用户提供可扩展、高吞吐、高可靠的数据存储服务。在整个Hadoop生态系统中,hdfs处于最底层,也是最无可替代的一个基础设施。从2008hadoop-0.10.1版本开始到现在的hadoop-3.0.0-beta1hdfs已经走过了近10个年头,其架构和功能特性也发生了巨大的变化。特别是hdfs3.0.0系列,和hdfs2.x相比,增加了基于纠删码(erasure encoding)的容错方式,与传统的副本方式相比,在同等可用性的情况下, 能大幅节省一半以上的空间,这也是自hdfs诞生近这十年来,数据可靠性机制上的一个重大变化(之前一直都是副本容错方式)。此外hdfs3.0.0还增加了其它的一些特性,例如在Namenode HA中支持3Namenode,可以容忍2Namenode失效,而hdfs2.x只能容忍1Namenode失效。

本文以连载的方式,在“”上记录自己使用hadoop-3.0.0-beta1hdfs的点点滴滴,包括从零开始搭建分布式hdfs3.0,如何动态扩展hdfs节点、如何使用hdfs3.0的纠删码容错等等。不当之处,请大家发邮件aishuc@126com给艾叔,谢谢!

 

 

3.7 上传、解压Hadoop相关软件

我们将在nn1上配置1namenode1datanode,构建一个最简的HDFS,成功后,再扩展datanode节点。

1. 切换到user,并进入/home/user

Ls应该能看到下面的文件和目录

3-50 hadoop存储目录

2. 解压hadoop

解压命令为:tar xf hadoop-3.0.0-beta1.tar.gz

解压后,应该能看到红圈内的目录

3-51 hadoop解压???????果

3.8 配置Hadoop

1. 添加JDK环境变量

切换到root用户,使用vi打开/etc/profile,在最后一行添加

JAVA_HOME=/home/user/jdk1.8.0_152

export PATH=$PATH:$JAVA_HOME/bin

这样做可以将/home/user/jdk1.8.0_152/bin添加到PATH环境变量,直接运行java命令。

验证

切换到普通用户,打印PATH环境变量

[user@nn1 ~]$ echo $PATH

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/jdk1.8.0_152/bin:/home/user/.local/bin:/home/user/bin

如果我们可以看到绿色的部分,则说明设置成功,如果没有,可以执行source命令,再验证。

[user@nn1 ~]$ source /etc/profile

输入java,看能否直接运行

[user@nn1 ~]$ java

Usage: java [-options] class [args...]

.....

 

2. 配置hadoop-env.sh

切换到普通用户,vi打开

[user@nn1 hadoop]$ cd ~/hadoop-3.0.0-beta1/etc/hadoop/

[user@nn1 hadoop]$ vi hadoop-env.sh

在第55行添加红线部分内容

3-52 hadoop-env.shJAVA_HOME设置

3. 配置hdfs-site.sh

普通用户下,进入hadoop目录

[user@nn1 hadoop-3.0.0-beta1]$ cd ~/hadoop-3.0.0-beta1

[user@nn1 hadoop-3.0.0-beta1]$ pwd

复制hdfs-site.xml的默认文件

[user@nn1 hadoop-3.0.0-beta1]$ cp share/doc/hadoop/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml etc/hadoop/hdfs-site.xml

注意:源端是hdfs-default.xml,目的文件是hdfs-site.xml

打开hdfs-site.xml

A. 设置namenode对外服务的主机名和端口。客户端将以此来连接namenode

找到下面的部分,添加绿色部分内容,此处设置了namenode对外提供服务的主机名和端口,其中nn1是主机名,9001是端口,默认值是9820

  dfs.namenode.rpc-address

  nn1:9001

 

    RPC address that handles all clients requests. In the case of HA/Federation where multiple namenodes exist,

    the name service id is added to the name e.g. dfs.namenode.rpc-address.ns1

    dfs.namenode.rpc-address.EXAMPLENAMESERVICE

    The value of this property will take the form of nn-host1:rpc-port. The NameNode's default RPC port is 9820.

 

B. 设置namenode的存储目录

找到下面的部分,添加绿色的内容

  dfs.namenode.name.dir

  file:///home/user/dfs/share/namenode/

  Determines where on the local filesystem the DFS name node

      should store the name table(fsimage).  If this is a comma-delimited list

      of directories then the name table is replicated in all of the

      directories, for redundancy.

上面绿色的部分,是一个本地路径,用于namenode存储HDFS的相关信息,如元数据。

我们要手动创建此目录。

[user@nn1 ~]$ mkdir -p ~/dfs/share/namenode

C. 设置datanode的存储目录

找到下面的部分,添加绿色的内容

  dfs.datanode.data.dir

  file:///home/user/dfs/share/datanode/

  Determines where on the local filesystem an DFS data node

  should store its blocks.  If this is a comma-delimited

  list of directories, then data will be stored in all named

  directories, typically on different devices. The directories should be tagged

  with corresponding storage types ([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) for HDFS

  storage policies. The default storage type will be DISK if the directory does

  not have a storage type tagged explicitly. Directories that do not exist will

  be created if local filesystem permission allows.

 

同样,要手动创建目录

[user@nn1 hadoop-3.0.0-beta1]$ mkdir -p ~/dfs/share/datanode

 

4. 配置worker

这里我们最简化安装,只配置1datanode,就是nn1本身。

编辑workers文件

[user@nn1 hadoop-3.0.0-beta1]$ vi etc/hadoop/workers

内容如下

localhost

修改为

nn1

 

3.9 nn1无密码登录nn1

下面设置nn1无密码登录nn1,因为启动datanode,需要用ssh远程登录。Hdfs3.0必须要做无密码登录,否则start-dfs.sh时,会报错退出。Hdfs2.x可以不做无密码登录,启动每个datanode时,需要输入密码,麻烦。

运行下面的命令

[user@nn1 hadoop-3.0.0-beta1]$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

Generating public/private dsa key pair.

Your identification has been saved in /home/user/.ssh/id_dsa.

Your public key has been saved in /home/user/.ssh/id_dsa.pub.

The key fingerprint is:

d4:d7:39:4c:6f:51:5e:77:70:f7:8e:41:2c:bc:80:d8 user@nn1

The key's randomart image is:

+--[ DSA 1024]----+

|       o . . .+oO|

|      . E.. o=.=B|

|        . ...o* =|

|       .   ..  * |

|        S     . .|

|                 |

|                 |

|                 |

|                 |

+-----------------+

注意

  1. .ssh不要自己创建
  2. -P后面的’’,是两个单引号,不是双引号
  3. 会生成id_dsaid_dsa.pub两个文件,其中,id_dsa保存身份信息,而id_dsa.pub则保留公钥。此公钥可以用来标识本机身份,因为,如果用公钥能解密,说明是用本机私钥加密的,据此,可以判断对方身份。

A公钥加入到Bauthorized_keys中,这样,如果B可以用A的公钥来解密请求,则说明,此请求来自于A,就可以放行,让其无密码登陆。反之,其它机器因为没有A的私钥,也就无法无密码登陆。

此处,AB都是同一主机,实现的是自己无密码登陆自己

[user@nn1 hadoop-3.0.0-beta1]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

[user@nn1 hadoop-3.0.0-beta1]$ ls -l ~/.ssh/

total 16

-rw-rw-r--. 1 user user 598 Nov 27 14:10 authorized_keys

-rw-------. 1 user user 668 Nov 27 14:08 id_dsa

-rw-r--r--. 1 user user 598 Nov 27 14:08 id_dsa.pub

-rw-r--r--. 1 user user 180 Nov 27 14:03 known_hosts

修改authorized_keys权限

 $chmod 600 ~/.ssh/authorized_keys

验证,直接登陆

[user@nn1 hadoop-3.0.0-beta1]$ ssh nn1

Last login: Mon Nov 27 13:32:59 2017 from 192.168.182.1

 

上一篇:《

原创文章,转载请注明: 转载自

本文链接地址

阅读(1377) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~