通过前面的学习,我们知道了什么是大数据、分布式以及Hadoop。下面,我们就来亲自动手搭建一个Hadoop系统。
集群规划
我们计划搭建一个拥有3个节点的Hadoop分布式集群,具体规划如下:
其中NameNode、SecondryNameNode和DataNode是HDFS集群中的进程,ResourceManager和NodeManager是YARN集群的进程。NameNode与ResourceManager是主节点,而DataNode与NodeManager是从节点。
准备工作
首先,我们得准备3台Linux主机,这里是使用VMwareWorkStation创建了3台CentOS6.7的虚拟机,对于虚拟机及Linux不懂的同学请自行问度娘,这里不再科普。接下来,我们要做的事情还有很多:
1)配置普通用户sudoer权限(这里创建的普通用户叫做hadoop)
a)在root账号下使用命令:vim /etc/sudoers
b)找到 root ALL=(ALL) ALL 这一行
c)然后在它下面添加一行:hadoop ALL=(ALL) ALL,保存退出
2)修改主机名
a)在root账号下用命令:vi /etc/sysconfig/network,如果Hadoop用户配置了sudo权限,也可以在 hadoop 登录情况下使用命令: sudo vi /etc/sysconfig/network
b)修改好新名字(hadoop1、hadoop2、hadoop3)后保存退出
3)配置静态 IP(注意规划好3个节点各自的ip地址)
a)查看网络信息:ifconfig
b)编辑eth0网卡信息:sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改 BOOTPROTO 为 static
添加 IPADDR=指定 IP
添加 DNS1=指定域名解析
添加 GATEWAY= 你的网关
子网掩码 PREFIX=24
删除 HWADDR 和 UUID
保存退出重启主机
4)配置主机映射
修改配置文件:sudo vi /etc/hosts,3台都要修改
5)关闭防火墙
查看防火墙状态:service iptables status
关闭防火墙:service iptables stop
关闭防火墙开机启动:chkconfig iptables off
6)同步服务器时间(分布式集群节点间时间相差太大的话会导致服务进程起不来)
查看时间 date
同步时间 ntpdate ntp1.aliyun.com
7)配置ssh免密登录
在hadoop账户下,输入命令ssh-keygen,连按3次回车,在/home/hadoop/.ssh 目录下就生成了一对密钥
在hadoop1的hadoop用户家目录使用ssh-copy-id hadoop2,这条指令的意思是复制当前主机ssh公钥到hadoop2的 .ssh/authorized_keys文件里,即建立hadoop1到hadoop2的免密登录
在hadoop2、hadoop3分别使用ssh-copy-id hadoop2将自己公钥复制到 hadoop2的authorized_keys文件里
将hadoop2的authorized_keys发送给hadoop1、hadoop3
scp ~/.ssh/authorized_keys hadoop1:~/.ssh
注意,首次访问任然会要求输入账号和密码。
8)安装JDK(Hadoop是用Java语言写的,需要Java运行环境,3台虚拟机都要安装)
切换到root账号
上传Java安装包如:jdk-8u181-linux-x64.tar.gz ,解压到指定目录下,比如:tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local
配置环境变量
vi /etc/profile
在最后加入两行:
export JAVA_HOME=/usr/local/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
使修改的环境变量生效 :source /etc/profile
检测是否安装成功,输入命令:java –version
自此,准备工作就完成了。
集群搭建
1)获取安装包并解压到指定目录:下载传送门
2)解压到指定目录
tar -zxvf hadoop-2.7.5.tar.gz -C ~/apps/
注意:-C 的意思是指定解压路径,目标路径不存在则需要先创建:mkdir ~/apps
3)修改配置文件
hadoop的配置文件位于$HADOOP_HOME/etc/hadoop/文件夹中,需要修改的配置共有6个:
hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
# The java implementation to use.# 找到这一行,改为自己的jdk路径 export JAVA_HOME=/usr/local/jdk1.8.0_181 |
core-site.xml
vim $HADOOP_HOME/etc/hadoop/core-site.xml
在中加入以下代码
<!-- 指定 hdfs 的 namenode --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:9000</value> </property> <!-- 指定hadoop工作目录 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/data/hadoopdata/</value> </property> |
hdfs-site.xml
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
在中加入以下代码
<!-- 指定 hdfs 的数据保存目录 --> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/data/hadoopdata/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/data/hadoopdata/data</value> </property> <!-- 指定 hdfs 的 备份副本数 默认是3 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定 hdfs 的 seconarynamenode --> <property> <name>dfs.secondary.http.address</name> <value>hadoop2:50090</value> </property> |
mapred-site.xml
复制mapred-site.xml.template文件,并命名为mapred-site.xml
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template mapred-site.xml
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
在中加入以下代码
<!-- 指定 mapreduce 的运行模式 默认是local --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> |
yarn-site.xml
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
在中加入以下代码
<!-- 指定 yarn 的主节点 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop3</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> |
slaves,指定从节点有哪些
vim $HADOOP_HOME/etc/hadoop/slaves
hadoop1 hadoop2 hadoop3 |
4)配置环境变量
a)vim ~/.bashrc,在最后面加入以下语句: export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.5 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
b)source ~/.bashrc
5)将安装包和环境变量文件分发至另外2个节点,如
scp –r ~/apps hadoop2:~/
scp ~/.bashrc hadoop2:~/
别忘了, source 一下环境变量文件
6)初始化HDFS系统
在 HDFS 主节点上执行命令 hdfs namenode –format 进行初始化
7)启动集群
启动HDFS
start-dfs.sh (在集群任意节点执行 )
启动YARN
start-yarn.sh(只能在YARN的主节点启动,否则ResourceManager进程无法启动 )
8)验证集群是否安装成功
a)使用 jps 指令查看进程:查看规划的守护进程是否成功启动
b)WebUI
c)上传一个文件到HDFS:hadoop fs -put xxx /(前面 xxx 代表要上传的文件在本地的路径,/ 表示上传到 hdfs 的路径)
d)执行一个MapReduce任务,运行hadoop自带求PI demo程序并观察执行过程:
hadoop jar ~/apps/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar pi 5 5
好了,至此,相信大家已经成功搭建了分布式的hadoop集群,我们下期再会!