今天给大家介绍下HDFS服务器配置,前文参考:

FTP文件服务器配置介绍

https://www.gbase.cn/community/post/4391

HTTP文件服务器配置介绍

https://www.gbase.cn/community/post/4397

使用Apache Hadoop 2.6.0搭建HDFS服务器

1)Hadoop集群环境准备

操作系统用户:gbase
集群各节点间的ssh互信已建立。
集群已配置C3工具。
开源产品版本:
Apache Hadoop 2.6.0
JVM 1.6或1.7版本
示例:

IP

主机名

功能

192.168.10.114

ch-10-114

NameNode, DataNode

192.168.10.115

ch-10-115

DataNode

192.168.10.116

ch-10-116

DataNode

2)主机名配置

各节点的主机名需要正确配置,以192.168.10.114节点示例如下,其他节点直接拷贝该配置即可。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.114 ch-10-114
192.168.10.115 ch-10-115
192.168.10.116 ch-10-116

注意:第一行如果配置成如下形式是错误的,安装完成后会出现Hadoop的Datanode无法连接Namenode的情况。
127.0.0.1   ch-10-114 localhost localhost.localdomain localhost4 localhost4.localdomain4

如果集群中没有DNS服务器可以解析Hadoop的Namenode和Datanode的主机名,则需要在每个执行加载任务的coordinator节点,以及集群中的每个data节点上,都要配置/etc/hosts文件,在其中加入如上Hadoop的Namenode和Datanode的IP地址和主机名映射。如未配置/etc/hosts文件,执行加载HDFS服务器上文件时,会报类似“Couldn't resolve host name”字样的错误。

检查方法:

  • 通过jps查看,发现DataNode已经启动,但是检查DataNode上的日志,发现DataNode在不断尝试连接NameNode节点的9000端口(HDFS的RPC端口)。
  • 在NameNode节点执行netstat -an,看到如下信息:
$ netstat -an | grep 9000
tcp  0  0 127.0.0.1:9000    0.0.0.0:*        LISTEN

错误原因:TCP监听的IP是127.0.0.1,导致只有本机能够连接到9000端口。原因是NameNode的/etc/hosts文件配置错误。
解决办法:去掉第一行的红色字体(ch-10-114),或者将第一行内容后置均可。

192.168.10.114 ch-10-114
192.168.10.115 ch-10-115
192.168.10.116 ch-10-116
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost localhost.localdomain localhost6 localhost6.localdomain6

重启HDFS,再次用netstat -an | grep 9000查看,端口和IP正确。

$ netstat -an | grep 9000
tcp  0  0 192.168.10.114:9000    0.0.0.0:*        LISTEN

3)目录规划

目录

用途

/home/gbase/bin

放置Hadoop生态系统,包括Hadoop等

/home/gbase/hdfs

放置HDFS文件,包括tmp、name、data

 添加环境变量${HADOOP_HOME}

$ echo “export HADOOP_HOME=/home/gbase/bin/Hadoop-2.6.0”>> ~/.bashrc
$. ~/.bashrc

注意:下文中的${HADOOP_HOME}指/home/gbase/bin/Hadoop-2.6.0

4)准备Hadoop 2.6.0

把hadoop-2.6.0.tar.gz解压到各节点的/home/gbase/bin。

$ tar xfz hadoop-2.6.0.tar.gz -C /home/gbase/bin

5)配置hadoop-env.sh

文件路径:

${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
$ cd ${HADOOP_HOME}
$ vi etc/hadoop/hadoop-env.sh

Name node和Data node均按如下配置。
把export JAVA_HOME=$JAVA_HOME修改为:

export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64

把export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}修改为:

export HADOOP_CONF_DIR=/home/gbase/bin/hadoop-2.6.0/etc/hadoop

6)配置core-site.xml文件

文件路径:${HADOOP_HOME}/etc/hadoop/core-site.xml

$ cd ${HADOOP_HOME}
$ vi etc/hadoop/core-site.xml

Name node和Data node均按如下配置

<configuration>
   <property>
       <name>fs.default.name</name>
       <value>hdfs://ch-10-114:9000</value>
   </property>
   <property>
       <name>hadoop.tmp.dir</name>
       <value>file:/home/gbase/hdfs/tmp</value>
   </property>
</configuration>

7)配置hdfs-site.xml

文件路径:
${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

$ cd ${HADOOP_HOME}
$ vi etc/hadoop/hdfs-site.xml

Name node配置

<configuration>
   <property>
       <name>dfs.replication</name>
       <value>2</value>
   </property>
   <property>
       <name>dfs.name.dir</name>
       <value>file:/home/gbase/hdfs/name</value>
       <description>name node dir </description>
   </property>
   <property>
       <name>dfs.permissions</name>
       <value>false</value>
   </property>
</configuration>

Data Node配置

<configuration>
   <property>
       <name>dfs.data.dir</name>
       <value>file:/home/gbase/hdfs/data</value>
       <description>data node dir</description>
   </property>
</configuration>

8)配置Masters和Slaves

文件路径:    

${HADOOP_HOME}/etc/hadoop/masters
${HADOOP_HOME}/etc/hadoop/slaves

只需要在NameNode节点配置即可。

$ cd ${HADOOP_HOME}
$ vi etc/hadoop/masters

${HADOOP_HOME}/etc/hadoop/masters文件内容

ch-10-114
$ cd ${HADOOP_HOME}
$ vi etc/hadoop/slaves

${HADOOP_HOME}/etc/hadoop/slaves文件内容

ch-10-114
ch-10-115
ch-10-116

9)格式化NameNode

NameNode的格式化需要在启动HDFS之前进行。

$ cexec rm -fr /home/gbase/hdfs/*
$ cd ${HADOOP_HOME}
$ bin/hdfs namenode -format

10)启动HDFS

$ cd ${HADOOP_HOME}
$ sbin/start-dfs.sh

启动完毕后,通过jps检查各节点的进程,如下即为正确启动了。

$ cexec jps
************************* test *************************
--------- 192.168.10.114---------
31318 SecondaryNameNode
31133 NameNode
31554 Jps
--------- 192.168.10.115---------
10835 DataNode
11000 Jps
--------- 192.168.10.116---------
10145 DataNode
10317 Jps

11)停止HDFS

$ cd ${HADOOP_HOME}
$ sbin/stop-dfs.sh