知识库 : 使用CDH搭建大数据集群全记录之一(HDSF篇)


一、集群情况介绍

  

集群节点:dev16--dev21

 

二、环境准备

 

1.使用puppet管理所有节点,并初始化环境

 

2.使用Ganglia监控集群性能变化

  

dev21节点作为监控服务节点,其他节点为被监控节点。

 

3.访问Ganglia监控Web界面

  

http://dev21.yonyou.com

 

三、安装ZooKeeper

  

官方文档建议zookeeper-server应安装在奇数个节点上,最少三个

 

在每个节点执行如下命令:

 

pdsh -R ssh -w dev[16-21] yum install -y zookeeper.x86_64 zookeeper-server.x86_64

 

分别在每个节点上执行如下命令,每个节点的myid值都应该是唯一的:

 

for i in `seq 4`;do ssh root@h${i} "service zookeeper-server init --myid=${i}";done

 

在每个节点上编辑zookeeper的配置文件zoo.cfg

 

vim /etc/zookeeper/conf/zoo.cfg

 

在文件的最后添加如下内容:

 

server.1=dev17:2888:3888
server.2=dev18:2888:3888
server.3=dev19:2888:3888
server.4=dev20:2888:3888
server.5=dev21:2888:3888
server.6=dev16:2888:3888

 

启动zookeeper-server

 

pdsh -R ssh -w dev[16-21] service zookeeper-server start

 

测试zookeeper-server是否正常启动:

 

zookeeper-client -server dev18:2181

 

四、安装HDFS和YARN

  

dev16节点安装resource manager

 

yum install hadoop-yarn-resourcemanager

 

dev16节点安装name node

 

yum install hadoop-hdfs-namenode

 

resource manager节点之外的所有节点上安装node managerdatanodemapreduce

 

pdsh -w dev[17-21] yum -y install hadoop-yarn-nodemanager hadoop-hdfs-datanode hadoop-mapreduce

 

dev17节点安装historyserverproxyserver

 

pdsh -w dev17 yum -y install hadoop-mapreduce-historyserver hadoop-yarn-proxyserver

 

在所有节点上安装hadoop-client

 

pdsh -w dev[16-21] yum -y install hadoop-client

 

五、安装LZO

  

在所有节点下载lzo源文件并放到/etc/yum.repo.d目录下:

 

http://archive.cloudera.com/gplextras5/redhat/5/x86_64/gplextras/cloudera-gplextras5.repo

 

在所有节点安装hadoop-lzo

 

pdsh -w dev[16-21] yum -y install hadoop-lzo

 

六、在集群中部署HDFS

 

1.复制Hadoop配置文件

  

复制hadoop的默认配置文件到指定目录:

 

pdsh -w dev[16-21] cp -r /etc/hadoop/conf.empty /etc/hadoop/conf.dev

 

设置alternatives指向新的配置目录:

 

pdsh -w dev[16-21] alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.dev 50

 

pdsh -w dev[16-21] alternatives --set hadoop-conf /etc/hadoop/conf.dev

 

2.自定义配置文件

  

编辑core-site.xml文件,加入如下内容:

 

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://dev16:8020</value>
</property>

 

编辑hdfs-site.xml文件,加入如下内容:

 

<property>
    <name>dfs.permissions.superusergroup</name>
    <value>hadoop</value>
</property>

 

3.配置本地存储目录

  

在所有节点创建数据存储目录:

 

pdsh -w dev[16-21] mkdir -p /data/{1,2,3,4}/dfs/{nn,dn}

 

修改本地存储目录的所有者:

 

pdsh -w dev[16-21] chown -R hdfs:hdfs /data/{1,2,3,4}/dfs

 

修改本地存储目录的读写权限:

 

pdsh -w dev[16-21] chmod -R 700 /data/{1,2,3,4}/dfs

 

namenode节点编辑hdfs-site.xml文件,加入如下内容:

 

<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///data/1/dfs/nn,file:///data/2/dfs/nn,file:///data/3/dfs/nn,file:///data/4/dfs/nn</value>
</property>

 

datanode节点编辑hdfs-site.xml文件,加入如下内容:

 

<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///data/1/dfs/dn,file:///data/2/dfs/dn,file:///data/3/dfs/dn,file:///data/4/dfs/dn</value>
</property>

 

4.设置DataNode节点允许本地存储目录的读写失败

  

默认情况下,单独dfs.datanode.data.dir的失败会使HDFS的datanode进程关闭,这会造成namenode对这个datanode上的每个block创建新的副本,最终会导致大量无用的block副本被存储在没发生故障的磁盘上。

 

可以通过对datanode的dfs.datanode.failed.volumes.tolerated进行设置来防止这种情况出现。

 

在所有datanode节点编辑hdfs-site.xml文件,加入如下内容:

 

<property>
    <name>dfs.datanode.failed.volumes.tolerated</name>
    <value>3</value>
</property>

 

复制配置文件到集群中所有节点:

 

pdcp -w dev[17-21] core-site.xml /etc/hadoop/conf.dev/

 

pdcp -w dev[17-21] hdfs-site.xml /etc/hadoop/conf.dev/

 

5.格式化NameNode

  

namenode节点执行如下命令进行格式化:

 

sudo -u hdfs hdfs namenode -format

 

6.启用回收站

  

默认情况下,回收站功能是关闭的,如需打开需要单独进行设置。

 

启用后,使用Hadoop shell进行文件删除时会将文件移动到该用户的.Trash目录中

 

在HDFS服务端的core-site.xml文件中加入如下内容:

 

<property>
    <name>fs.trash.interval</name>
    <value>1440</value>
</property>

 

单位为分钟,该设置代表回收站功能启动,并且会在24小时后删除回收站的内容

 

7.为DataNode节点设置存储均衡

  

DataNode默认会按照轮询的方式来写入新block的副本,可以通过设置容量选择策略来使DataNode知道磁盘的可用容量以便决定存储位置。

 

编辑hdfs-site.xml文件,加入如下内容进行设置:

 

<property>
    <name>dfs.datanode.fsdataset.volume.choosing.policy</name>
    <value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value>
</property>
<property>
    <name>dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold</name>
    <value>10737418240</value>
</property>
<property>
    <name>dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction</name>
    <value>0.75</value>
</property>

 

8.启用WebHDFS

  

hdfs-site.xml中加入如下内容:

 

<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>

 

默认情况下,用户名的规则为:

 

^[A-Za-z_][A-Za-z0-9._-]*[$]?$

 

改为如下规则可以在WebHDFS中启用数字用户名:

 

<property>
    <name>dfs.webhdfs.user.provider.user.pattern</name>
    <value>^[A-Za-z0-9_][A-Za-z0-9._-]*[$]?$</value>
</property>

 

9.设置LZO

  

core-site.xml文件中加入如下内容:

 

<property>
    <name>io.compression.codecs</name>
    <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec, com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

 

10.启动HDFS

  

下面需要在集群中部署配置文件,在dev16上执行如下命令:

 

pdcp -w dev[17-21] -r /etc/hadoop/conf.dev /etc/hadoop/

 

在所有节点上启动HDFS:

 

pdsh -w dev[16-21] 'for i in `cd /etc/init.d; ls hadoop-hdfs-*`;do service $i start;done'

 

在HDFS中创建/tmp文件夹:

 

sudo -u hdfs hadoop fs -mkdir /tmp

 

修改/tmp目录的权限:

 

sudo -u hdfs hadoop fs -chmod -R 1777 /tmp

 

查看HDFS中文件信息:

 

hadoop fs -ls -R /

 

通过Web界面查看HDFS的详细信息:

 

http://dev16:50070