红联Linux门户
Linux帮助

CentOS 6.6安装HDFS 2.7.1

发布时间:2015-10-03 15:20:19来源:linux网站作者:csfreebird

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

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


集群架构

1.3.1 HDFS cluster

IP installed binary hardware info usage admin data folder gcc/g++
×.152 /data/slot0/hadoop   NN1 lisa   4.9.1
×.153     NN2      
×.154     DN1/JN1      
×.155     DN2/JN2      
×.156     DN3/JN3      
×.157     DN4      
×.158     DN5      
×.159     DN6      
×.160     DN7      
×.161     DN8      


下载

首先下载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


Ubuntu上使用Hadoop 2.x+HDFS Federation:http://www.linuxdiyf.com/linux/10740.html