设为首页 加入收藏

TOP

CentOS 6.6 安装 HDFS 2.7.1
2018-11-29 00:15:21 】 浏览:18
Tags:CentOS 6.6 安装 HDFS 2.7.1
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sheismylife/article/details/48736145

本文尝试在CentOS上搭建10台HDFS集群,不会搭建YARN和Hive, 因为之后会采用Spark。先安装jdk 1.8, 此处不细说。

服务器有12块磁盘,因此这是一个真实场景下的集群搭建,只是规模较小。HDFS集群支持HA,因此配置略复杂一些。


集群架构

1.3.1HDFS cluster

IPinstalled binaryhardware infousageadmindata foldergcc/g++
×.152/data/slot0/hadoopNN1lisa4.9.1
×.153NN2
×.154DN1/JN1
×.155DN2/JN2
×.156DN3/JN3
×.157DN4
×.158DN5
×.159DN6
×.160DN7
×.161DN8

下载

首先下载hadoop binary包

wget http://apache.mesi.com.ar/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz

解压后放在/data/slot0/目录下,并建立软链接/data/slot0/hadoop


创建帐号

创建管理hadoop集群的帐号

useradd lisa

会出现/home/lisa目录,lisa帐号无需密码,因为不能直接用密码登录,不过可以通过ssh证书登录。

可以用批处理的方式对10台服务器都创建lisa帐号,主要通过ssh -t 这里不再细说

修改目录拥有者

chown -R lisa:lisa hadoop-2.7.1/
chown -R lisa:lisa hadoop
ll
total 8
drwxr-xr-x 3 root root 4096 Sep 25 18:02 download
lrwxrwxrwx 1 lisa lisa   13 Sep 25 17:42 hadoop -> hadoop-2.7.1/
drwxr-xr-x 9 lisa lisa  139 Jun 29 14:15 hadoop-2.7.1
lrwxrwxrwx 1 root root   24 Sep 25 16:50 java -> /data/slot0/jdk1.8.0_45/
drwxr-xr-x 8 root root 4096 Sep 25 14:01 jdk1.8.0_45


打通帐号间SSH认证

切换到hadoop系统使用的帐号,然后生成ssh key

su - lisa
ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lisa/.ssh/id_rsa): 
Created directory '/home/lisa/.ssh'.
Your identification has been saved in /home/lisa/.ssh/id_rsa.
Your public key has been saved in /home/lisa/.ssh/id_rsa.pub.
The key fingerprint is:
15:44:c6:4e:bb:cd:b9:09:e7:50:c7:ae:dd:92:56:57 lisa@10-149-11-152
The key's randomart image is:
+--[ RSA 2048]----+
|         +=      |
|         .o.     |
|         o.. .   |
|         .o . o E|
|        S  = +  .|
|          + = . o|
|           = = +.|
|            = = .|
|             . . |
+-----------------+

将公钥放入各个节点的authorized_keys文件, 目前看来这是个体力活,还没有特别好的方法批处理。

注意authorized_keys必须用于744权限。

chmod 744 ./authorized_keys


配置/etc/hosts

10台服务器的/etc/hosts要一样,便于互相通过hostname通信。

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.149.11.152 10-149-11-152
10.149.11.153 10-149-11-153
10.149.11.154 10-149-11-154
10.149.11.155 10-149-11-155
10.149.11.156 10-149-11-156
10.149.11.157 10-149-11-157
10.149.11.158 10-149-11-158
10.149.11.159 10-149-11-159
10.149.11.160 10-149-11-160
10.149.11.161 10-149-11-161

配置core-site.xml

切换到lisa帐号,编辑core-site.xml文件

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://10-149-11-152:9000</value>
  </property>
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>10.149.11.146:2181,10.149.11.147:2181,10.149.11.148:2181</value>
  </property>
</configuration>

说明:

1. fs.default.name 的值包含了两类信息:

URL Schema, 这里是hdfs://,表明实现是hdfs文件系统

authority, 这是是namenode的hostname (10-149-11-152) 和 端口号 (9000)

当使用hdfs 命令时,如果没有使用文件协议和前缀,这个hdfs://... 会自动作为前缀使用。

2. ha.zookeeper.quorum

这里启用了namenode的Quorum Journal Manager的HA方案,使用了三台zookeeper。


配置hdfs-site.xml

先创建一系列目录用于存放namenode、journalnode和datanode数据, 这些目录不需要在每台服务器上都必须创建的,为了图省事,我都建了,只是有些不用而已。

mkdir -p /data/slot0/lisa/hdfs/namenode
mkdir -p /data/slot0/lisa/hdfs/journalnode
mkdir -p /data/slot0/lisa/hdfs/datanode
mkdir -p /data/slot1/lisa/hdfs/datanode
mkdir -p /data/slot2/lisa/hdfs/datanode
mkdir -p /data/slot3/lisa/hdfs/datanode
mkdir -p /data/slot4/lisa/hdfs/datanode
mkdir -p /data/slot5/lisa/hdfs/datanode
mkdir -p /data/slot6/lisa/hdfs/datanode
mkdir -p /data/slot7/lisa/hdfs/datanode
mkdir -p /data/slot8/lisa/hdfs/datanode
mkdir -p /data/slot9/lisa/hdfs/datanode
mkdir -p /data/slot11/lisa/hdfs/datanode
mkdir -p /data/slot10/lisa/hdfs/datanode
chown -R lisa:lisa /data/slot0/lisa
chown -R lisa:lisa /data/slot1/lisa
chown -R lisa:lisa /data/slot2/lisa
chown -R lisa:lisa /data/slot3/lisa
chown -R lisa:lisa /data/slot4/lisa
chown -R lisa:lisa /data/slot5/lisa
chown -R lisa:lisa /data/slot6/lisa
chown -R lisa:lisa /data/slot7/lisa
chown -R lisa:lisa /data/slot8/lisa
chown -R lisa:lisa /data/slot9/lisa
chown -R lisa:lisa /data/slot10/lisa
chown -R lisa:lisa /data/slot11/lisa

可以用我之前的博客介绍的方法批量创建。

现在修改/data/slot0/hadoop/etc/hadoop/hdfs-site.xml

<xml version="1.0" encoding="UTF-8">
<xml-stylesheet type="text/xsl" href="configuration.xsl">
<configuration>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/data/slot0/lisa/hdfs/namenode</value>
  </property>
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/data/slot0/lisa/hdfs/journalnode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/data/slot0/lisa/hdfs/datanode,/data/slot1/lisa/hdfs/datanode,/data/slot2/lisa/hdfs/datanode,/data/slot3/lisa/hdfs/datanode,/data/slot4/lis\
a/hdfs/datanode,/data/slot5/lisa/hdfs/datanode,/data/slot6/lisa/hdfs/datanode,/data/slot7/lisa/hdfs/datanode,/data/slot8/lisa/hdfs/datanode,/data/slot\
9/lisa/hdfs/datanode,/data/slot10/lisa/hdfs/datanode,/data/slot11/lisa/hdfs/datanode</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <name>dfs.blocksize</name>
    <value>268435456</value>
  </property>
  <property>
    <name>dfs.namenode.handler.count</name>
    <value>100</value>
  </property>
  <property>
    <name>dfs.nameservices</name>
    <value>vehicle</value>
  </property>
  <property>
    <name>dfs.ha.namenodes.vehicle</name>
    <value>nn1,nn2</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.vehicle.nn1</name>
    <value>10-149-11-152:9000</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.vehicle.nn2</name>
    <value>10-149-11-153:9000</value>
  </property>
  <property>
    <name>dfs.client.failover.proxy.provider.vehicle</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/lisa/.ssh/id_rsa</value>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
  </property>
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://10-149-11-154:8485;10-149-11-155:8485;10-149-11-156:8485/vehicle</value>
  </property>
</configuration>

环境变量

/etc/profile文件中添加五行设置

export JAVA_HOME=/data/slot0/java
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/data/slot0/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH

启动

1. 先启动zookeeper, 不在本文赘述

2. 启动所有的journalnode服务154,155,156

注意,切换到lisa帐号后运行命令,

$ hadoop-daemon.sh start journalnode
starting journalnode, logging to /data/slot0/hadoop-2.7.1/logs/hadoop-lisa-journalnode-10-149-11-152.out

3. 在第一台namenode(152)上运行format命令

注意,切换到lisa帐号后运行命令,

hdfs namenode -format

4. 将namenode信息同步到journalnode服务器

hdfs namenode -initializeSharedEdits  

5. 启动namenode 服务

hadoop-daemon.sh --config $HADOOP_HOME/etc/hadoop --script hdfs start namenode

6. 将 aceive namenode的元数据同步到对应的standby namenode上

在namenode 2 (153) 上运行命令

hdfs namenode -bootstrapStandby 

7. 启动第二个namenode

hadoop-daemon.sh --config $HADOOP_HOME/etc/hadoop --script hdfs start namenode

查看下日志,一切正常。


8. 启动datanode

在154-161机器上,执行下面的命令, 可以借助之前博客中的批处理技术,前提是用lisa帐号登录,互相帐号ssh认证要打通。

su - lisa
hadoop-daemon.sh --config $HADOOP_HOME/etc/hadoop --script hdfs start datanode



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇读取hdfs文件内容导入mysql(续) 下一篇HDFS的Rebalance介绍

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目