一、集群情况介绍
集群节点: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 manager
、datanode
和mapreduce
:
pdsh -w dev[17-21] yum -y install hadoop-yarn-nodemanager hadoop-hdfs-datanode hadoop-mapreduce
在dev17
节点安装historyserver
和proxyserver
:
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