一直想编写一系列有关大数据开发、数据挖掘、云计算等相关课程的学习资料,为零基础又想从事大数据行业的小伙伴提供一些参考。今天第一篇《Hadoop分布式集群环境构建(1)》终于和大家见面了。
一
集群主机规划
二
软件安装包准备
会将软件所有安装包放入百度云盘,以供大家方便下载。链接:http://pan.baidu.com/s/1i5CdjI9 密码:f7rn
三
安装环境准备
3.1
创建用户
为每台机子创建一个不是root的用户,该集群是以hadoop来创建的。并且每台机子的用户以及密码都要相同。
操作命令:
每台服务器用root账户下:
useradd hadoop
echo "hadoop" | passwd --stdin Hadoop
3.2
配置hosts文件以及network
集群中的所有机器的 /etc/hosts 文件内容均一致,都要将集群中的各 IP 和 主机名对应起来,而且都能互相ping通。如下:
修改集群所有机子的/etc/sysconfig/network文件,HOSTNAME要改成对应的主机名。如下:
四
安装jdk
首先解压该安装包:
tar -xvzf jdk-7u67-linux-x64.tar.gz -C /
对解压的安装包重新命名
mv jdk1.7.0_67 jdk
将jdk文件复制到/home/hadoop/目录下并赋予相应权限
cp /jdk /home/hadoop/
chown -R hadoop:hadoop /home/hadoop/jdk
配置jdk的环境变量:
vi /etc/profile
使以上配置环境变量生效:
Source /etc/profile
以上步骤其余机子都需要操作一遍
五
ssh免密码通信
通过云盘中提供的一个脚本文件来实现,名称是zeno_ssh_update.sh。
首先需要创建一个目录:/home/zeno_programpag
然后将下载的脚本文件放入到这个目录下。
加入如下内容:
执行脚本文件(root用户下执行)
./zeno_ssh_update.sh hadoop hadoop
脚本后面跟的是用户名及用户密码
检查SSH免密码登录是否完成。
想系统学习大数据的话,可以加入大数据技术学习扣扣君羊:522189307
六
安装zookeeper
6.1
解压zookeeper
将该安装包解压到/home/hadoop/下
tar -zxvf zookeeper-3.4.5-cdh5.4.0.tar.gz –C /home/hadoop/
6.2
修改配置文件
在/home/hadoop/zookeeper/conf目录下,复制一各名为zoo.cfg的文件
cp zoo_sample.cfg zoo.cfg
修改zoo.cfg中的文件内容
加入如下标注的内容
创建/tmp/zookeeper/目录,并赋予hadoop的所有组及所有者权限
mkdir -p /tmp/zookeeper/
并创建myid文件,加入zoo.cfg中对应的数
将/home/Hadoop/zookeeper 复制到其他机子。
scp -r /home/Hadoop/zookeeper/ hadoop@hadoop3:/home/hadoop/
scp -r /home/Hadoop/zookeeper/ hadoop@hadoop5:/home/hadoop/
注意每台机子都需要创建myid这个文件,并修改对应的数字。
6.3
启动zookeeper服务(三台机子)
/home/hadoop/zookeeper/sbin/ zkServer.sh start
6.4
查看zookeeper服务状态
出现以下的状态就说明zookeeper成功了
七
安装hadoop集群
7.1
解压hadoop安装包
tar -zxvf hadoop-2.6.0-cdh5.4.0.tar.gz –C /home/hadoop/
chown -R hadoop:hadoop /home/hadoop/hadoop
7.2
修改配置文件
01
hadoop-env.sh文件
向其中添加如下两行:
export JAVA_HOME=/home/hadoop/jdk
export HADOOP_HOME=/home/hadoop/Hadoop
02
配置core-site.xml
#vi core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<!--填写hdfs集群名,因为是HA,两个namenode-->
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<!-- hadoop很多路径都依赖他,namenode节点该目录不可以删除,否则要重新格式化-->
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/data/hadoop/tmp</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/path/to/journal/node/local/data</value>
</property>
<property>
<!--zookeeper集群的地址-->
<name>ha.zookeeper.quorum</name>
<value>hadoop5:2181,hadoop4:2181,hadoop3:2181</value>
</property>
</configuration>
需要手动创建:/home/hadoop/hadoop/data/hadoop/tmp目录
mkdir –p /home/hadoop/hadoop/data/hadoop/tmp
03
配置hdfs-site.xml
#vi hdfs-site.xml
<configuration>
<property>
<!—journalnode对namenode进行共享设置-->
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hadoop/ha/journal</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop3:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop4:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop3:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop4:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop5:8485;hadoop4:8485;hadoop3:8485/mycluster</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</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/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
04
配置mapred-env.sh
加入
export JAVA_HOME=/home/hadoop/jdk
05
配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
06
配置yarn-env.sh
export JAVA_HOME=/home/hadoop/jdk
07
配置yarn-site.xml
# vi yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop4</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop5:2181,hadoop4:2181,hadoop3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
08
配置slaves
以上hadoop的配置就算完成了。
将/home/Hadoop/Hadoop/ 拷贝到其他机子上
scp –r /home/Hadoop/Hadoop/ hadoop@hadoop3:/home/Hadoop/
scp –r /home/Hadoop/Hadoop/ hadoop@hadoop5:/home/Hadoop/
八
启动集群
8.1
格式换命名空间(hadoop4)
/home/hadoop/hadoop/bin/hdfs zkfc -formatZK
8.2
启动journalnode(三台)
/home/hadoop/hadoop /sbin/hadoop-daemon.sh start journalnode
通过jps查看一下出现journalnode说明成功
8.3
格式化master节点并启动hadoop服务
/home/hadoop/hadoop/bin/hadoop namenode -format mycluster
启动hadoop服务
/home/hadoop/hadoop /sbin/hadoop-daemon.sh start namenode
将hadoop4这台机子格式化的文件拷贝到hadoop3上
格式化后的文件是放在/home/hadoop/hadoop/dfs/name这个目录下的。
scp /home/hadoop/hadoop/dfs/name hadoop@hadoop3:/home/hadoop/hadoop/dfs/name/
在hadoop3上启动hadoop服务
/home/hadoop/hadoop /sbin/hadoop-daemon.sh start namenode
8.4
hadoop4和hadoop3节点上启动zkfs
/home/hadoop/hadoop /sbin/hadoop-daemon.sh start zkfc
8.5
启动DataNode(三台)
/home/hadoop/hadoop /sbin/hadoop-daemon.sh start datanode
8.6
启动yarn(一台master)
/home/hadoop/hadoop /sbin/start-yarn.sh
Ok,所有的进程都已启动完成了。
网页通过端口访问hadoop:http://192.168.211.88:50070/
以下的效果说明已经完全构建了一个HA高可用的hadoop大数据集群环境。
集群环境mapreduce测试:
执行hadoop自带的mapreduce是否能够成功?
/home/hadoop/hadoop/bin/hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.4.0.jar wordcount /wangyd/ /output/wordcount1
发现mapreduce执行也是没有问题了,说明整个集群搭建ok了。