您的位置:首页 > 运维架构

hadoop-3.0.0-beta1运维手册(005):hdfs3.0.0分布式构建-hdfs配置、无密码登录

2017-12-04 13:00 615 查看

写在前面的话

Hdfs采用分布式架构,为上层的应用和用户提供可扩展、高吞吐、高可靠的数据存储服务。在整个Hadoop生态系统中,hdfs处于最底层,也是最无可替代的一个基础设施。从2008年hadoop-0.10.1版本开始到现在的hadoop-3.0.0-beta1,hdfs已经走过了近10个年头,其架构和功能特性也发生了巨大的变化。特别是hdfs3.0.0系列,和hdfs2.x相比,增加了基于纠删码(erasure
encoding)的容错方式,与传统的副本方式相比,在同等可用性的情况下, 能大幅节省一半以上的空间,这也是自hdfs诞生近这十年来,数据可靠性机制上的一个重大变化(之前一直都是副本容错方式)。此外hdfs3.0.0还增加了其它的一些特性,例如在Namenode
HA中支持3个Namenode,可以容忍2个Namenode失效,而hdfs2.x只能容忍1个Namenode失效。
本文以连载的方式,在“大数据学习网”上记录自己使用hadoop-3.0.0-beta1的hdfs的点点滴滴,包括从零开始搭建分布式hdfs3.0,如何动态扩展hdfs节点、如何使用hdfs3.0的纠删码容错等等。不当之处,请大家发邮件aishuc@126com给艾叔,谢谢!
 
 

3.7 上传、解压Hadoop相关软件

我们将在nn1上配置1个namenode和1个datanode,构建一个最简的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.sh的JAVA_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。
<property>
  <name>dfs.namenode.rpc-address</name>
  <value>nn1:9001</value>
  <description>
    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.
  </description>
</property>
B. 设置namenode的存储目录
找到下面的部分,添加绿色的内容
<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:///home/user/dfs/share/namenode/</value>
  <description>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. </description>
</property>
上面绿色的部分,是一个本地路径,用于namenode存储HDFS的相关信息,如元数据。
我们要手动创建此目录。
[user@nn1 ~]$ mkdir -p ~/dfs/share/namenode
C. 设置datanode的存储目录
找到下面的部分,添加绿色的内容
<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:///home/user/dfs/share/datanode/</value>
  <description>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.
  </description>
</property>
同样,要手动创建目录
[user@nn1 hadoop-3.0.0-beta1]$ mkdir -p ~/dfs/share/datanode
 
4. 配置worker
这里我们最简化安装,只配置1个datanode,就是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     . .|
|                 |
|                 |
|                 |
|                 |
+-----------------+
注意:

.ssh不要自己创建
-P后面的’’,是两个单引号,不是双引号
会生成id_dsa和id_dsa.pub两个文件,其中,id_dsa保存身份信息,而id_dsa.pub则保留公钥。此公钥可以用来标识本机身份,因为,如果用公钥能解密,说明是用本机私钥加密的,据此,可以判断对方身份。
将A公钥加入到B的authorized_keys中,这样,如果B可以用A的公钥来解密请求,则说明,此请求来自于A,就可以放行,让其无密码登陆。反之,其它机器因为没有A的私钥,也就无法无密码登陆。

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

[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
 
上一篇:《hadoop-3.0.0-beta1运维手册(004):安装分布式hdfs3.0.0-配置JDK、设置主机名》
原创文章,转载请注明: 转载自大数据学习网,作者:艾叔
本文链接地址: http://www.bigdatastudy.net/show.aspx?id=451&cid=8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐