赞
踩
使用Centos7来进行完全分布式的集群搭建,一般我们用伪分布式的集群就可以了,不需要配置完全分布式的集群
和我们搭建伪分布式集群一样,我们首先要现在好安装包,以及我们需要配置配置JDK,SSH免秘钥登陆,以及Zookeeper分布式的搭建等,下面就开始我们的搭建过程
我们配置集群环境的时候,设置固定的主机名和主机映射能够方便的让我我们使用
修改主机名的时候,Centos6和Centos7完全不一样。下面是Centos7为例来修改我们的主机名
vim /etc/hostname
删除原来的主机名,修改为我们自己的要配置的,在这里我修改的主机名为zj01,zj02,zj03,一般我们都是设置的master,slave1,slave2。按照个人喜好修改主机名
注意:修改主机名后我们需要重启虚拟机才会生效,使用reboot命令重启虚拟机
reboot
补充:Centos6修改主机名
vim /etc/sysconfig/network
将里面原来信息修改为如下信息:
NETWORKING=yes
HOSTNAME=zj01
修改完成后重启虚拟机
修改配置文件hosts
vim /etc/hosts
根据自己的ip信息,添加如下信息:
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.130 zj01
192.168.8.131 zj02
192.168.8.132 zj03
再修改我们的主机映射的时候,我们可以通过ifconfig来查看我们自己的ip信息,进行配置
ifconfig
主机映射配置完毕
Centos7系统默认防火墙不是iptables,而是firewall,那就得使用以下方式关闭防火墙了。
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
此时Centos7的防火墙就关闭了。
补充:Centos6关闭防火墙
service iptables status #查看防火墙状态
service iptables stop #关闭防火墙,但是重启后会恢复原来状态
chkconfig iptables --list #查看系统中防火墙的自动
chkconfig iptables off #关闭防火墙自启动
chkconfig iptables --list #再次查看防火墙自启动的情况,所有启动状态都变成额off
常时间没有用过Centos6了,应该是–list,如果不是直接关闭就行了,不用纠结这个命令
执行以下命令来生成相应得秘钥
ssh-keygen -t rsa
一路回车,生成私有秘钥
cd /root/.ssh
ls
一般在第一次执行的时候,只有id_rsa、id_rsa.pub这两个文件,但是id_rsa.pub文件存的是私有秘钥,要想让其他节点来连接本台机器我们需要生成公钥,执行ssh-copy-id可以将秘钥转成公钥,在三台节点上执行以下命令:
ssh-copy-id zj01
ssh-copy-id zj02
ssh-copy-id zj03
执行过次语句后,每台节点上都会生成以下两个文件authorized_keys,known_hosts,查看两个文件的内容,执行此语句的时候需要我们先输入yes统一连接,再输入要连接节点的密码就可以了。
cat authorized_keys
此文件里面存储的是三台节点的秘钥。
查看known_hosts文件
cat known_hosts
此文件主要记录的是我们使用ssh连接过的主机名。
相对而言authorized_keys文件是最重要的,有了这个文件我们再使用ssh连接的时候直接就连接了,不用我们再输入密码。
自此SSH免秘钥设置完毕。我们可以继续下面组件的安装配置。
创建一个目录,用来存放所有的安装目录。在这里我创建的是目录是/apps/,我们可以将所有的安装包上传到这个文件中,解压后再将安装包删除。
注意:jdk三台都需要配置
rpm -qa | grep java
使用rpm进行卸载
rpm -e java-xxx
rpm -e --nodeps java-xxx #强制卸载
在官网上进行下载jdk的安装包
官网路径:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
我这里面使用的XShell连接的虚拟机,在XShell连接的时候,执行以下语句就可以实验windows和虚拟机之间的文件传输
yum install lrzsz -y
执行完成后就可以将文拖到虚拟机终端里面进行文件的上传。
注意:这只是其中的一种解决方案,我们还可以下载winscp来实现文件的上传下载。
解压并重新命令
tar -zxvf jdk-8u162-linux-x64.tar.gz ./
mv jdk-1.8.0_162 jdk
rm -rf jdk-8u162-linux-x64.tar.gz
修改环境变量(三个节点都配置)
vim /etc/profile
配置如下:
#JDK 1.8
export JAVA_HOME=/apps/jdk
export PATH=$PATH:$JAVA_HOME/bin
刷新环境变量
source /etc/profile
验证jdk是否安装成功
java -version
输出如下:
我们可以通过以下命令将jdk文件上传到其余的节点中
scp -r /apps/jdk zj02:/apps/
scp -r /apps/jdk zj03:/apps/
这样我们就可以在02,03节点上/apps/目录下查看我们上传的jdk文件,需要我们配置环境变量就可以了。
要配置完全分布式的Hadoop集群,Zookeeper的主要作用就是协调集群的运行,在Hadoop生态圈中zookeeper的作用是至关重要的。
首先我们要先下载zookeeper的安装包,在管网上下载安装包就可以了
管网路径:https://archive.apache.org/dist/zookeeper/
这里面有好多版本,我们可以选择自己版本进行下载。
将下载后的安装包,上传到zj01的/apps目录下。
解压zookeeper的安装包并重名为zookeeper
tar -zxvf zookeeper-3.4.12.tar.gz
mv zookeeper-3.4.12 zookeeper
rm -rf zookeeper-3.4.12.tar.gz
修改环境变量(三个节点都配置)
vim /etc/profile
在文件末尾添加一下信息
#zookeeper
export ZOOKEEPER_HOME=/apps/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
配置到文件后我们要刷新一下环境变量,让我们的配置信息生效
source /etc/profile
进入zookeeper的conf目录下,将zoo_example.cfg复制出来一个为zoo.cfg
cp zoo_example.cfg zoo.cfg
修改zoo.cfg文件
vim zoo.cfg
配置信息如下
server.0=zj01:2888:3888
server.1=zj02:2888:3888
server.2=zj03:2888:3888
其中0、1、2分别代表的是zj01、zj02、zj03的标识符。
创建标识符
进入dataDir设置的目录/apps/zookeeper/tmp,在此目录下创建一个myid文件,用来存放我们设置的标识符
cd /apps/zookeeper/tmp
echo 1 > myid
查看标识符
分发文件到其余的两个节点
scp -r /apps/zookeeper slave2:/apps/zookeeper
scp -r /apps/zookeeper slave3:/apps/zookeeper
记得修改zj02,zj03的标识符为1和2
启动zookeeper
zkServer.sh stat
查看每台zookeeper的状态,会出现一个leader,两个flower。此时zookeeper的集群搭建完毕
我们可以在官网上进行下载安装包
官网:https://archive.apache.org/dist/hadoop/common/
进入官网选择自己想要下载的安装包进行下载,切记下载64位的tar.gz安装包
将下载好的安装包上传到zj01的/apps/目录下。
解压并重命名为hadoop
tar -zxvf hadoop-2.7.5.tar.gz
mv hadoop-2.7.5 hadoop
rm -rf hadoop-2.7.5.tar.gz
修改环境变量(三个节点都配置)
vim /etc/profile
在文件末尾添加一下信息
#hadoop
export HADOOP_HOME=/apps/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
配置到文件后我们要刷新一下环境变量,让我们的配置信息生效
source /etc/profile
进入hadoop配置文件所在目录
cd /apps/hadoop/etc/hadoop
我们在此目录下需要修改5个配置文件
需要我们指定jdk的版本信息
export JAVA_HOME=/apps/jdk
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--指定文件系统的主节点--> <property> <name>fs.defaultFS</name> <value>hdfs://bigdata</value> </property> <!--hadoop的日志路径--> <property> <name>hadoop.tmp.dir</name> <value>/apps/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <!--指定可以在任何 IP 访问--> <property> <name>hadoop.proxyuser.hduser.hosts</name> <value>*</value> </property> <!--指定所有用户可以访问--> <property> <name>hadoop.proxyuser.hduser.groups</name> <value>*</value> </property> <!--这里是 ZooKeeper 集群的地址和端口。注意,数量一定是奇数,且不少于三个节点--> <property> <name>ha.zookeeper.quorum</name> <value>zj01:2181,zj02:2181,zj03:2181</value> </property> </configuration>
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--指定 hdfs 的集群名为 bigdata --> <property> <name>dfs.nameservices</name> <value>bigdata</value> </property> <!-- ns1 下面有两个 NameNode,分别是 nn1,nn2 --> <property> <name>dfs.ha.namenodes.bigdata</name> <value>nn1, nn2</value> </property> <!-- nn1 的 RPC 通信地址 --> <property> <name>dfs.namenode.rpc-address.bigdata.nn1</name> <value>zj01:9000</value> </property> <!-- nn2 的 RPC 通信地址 --> <property> <name>dfs.namenode.rpc-address.bigdata.nn2</name> <value>zj02:9000</value> </property> <!-- nn1 的 http 通信地址 --> <property> <name>dfs.namenode.http-address.bigdata.nn1</name> <value>zj01:50070</value> </property> <!-- nn2 的 http 通信地址 --> <property> <name>dfs.namenode.http-address.bigdata.nn2</name> <value>zj02:50070</value> </property> <!--指定 JournalNode 集群在对 NameNode 的目录进行共享时,自己存储数据的磁盘路径--> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/hadoop/hadoop/journaldata</value> </property> <!-- 指定 cluster1 的两个 NameNode 共享 edits 文件目录时,使用的JournalNode 集群信息--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://zj01:8485;zj02:8485;zj03:8485/bigdata</value> </property> <!-- qj 方式共享 edits。使用此方式--> <property> <name>dfs.namenode.edits.journal-plugin.qjournal </name> <value>org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager</value> </property> <!--开启 NameNode 失败自动切换--> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!--设置为 true,允许 NN 尝试恢复之前失败的 dfs.namenode.name.dir 目录。在创建 checkpoint 是做此尝试。如果设置多个磁盘,建议允许--> <property> <name>dfs.namenode.name.dir.restore</name> <value>true</value> </property> <!--指定出故障时,哪个实现类负责执行故障切换--> <property> <name>dfs.client.failover.proxy.provider.bigdata</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!--一旦需要 NameNode 切换,使用 ssh 方式进行操作--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!--如果使用 ssh 进行故障切换,使用 ssh 通信时用的密钥存储的位置--> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!--指定 namenode 名称空间的存储地址, 可以是按逗号分隔的目录列表--> <property> <name>dfs.namenode.name.dir</name> <value>file:///apps/hadoop/dfsdata/name</value> </property> <property> <name>dfs.blocksize</name> <value>67108864</value> </property> <!--指定 datanode 数据存储地址, 可以是按逗号分隔的目录列表--> <property> <name>dfs.datanode.data.dir</name> <value>file:///apps/hadoop/dfsdata/data</value> </property> <!--指定数据冗余份数,不超过机器数即可--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--指定可以通过 web 访问 hdfs 目录--> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
复制mapred-site.xml.template为mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
具体配置信息如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定运行 mapreduce 的环境是 yarn -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--rm 失联后重新链接的时间--> <property> <name>yarn.resourcemanager.connect.retry-interval.ms</name> <value>2000</value> </property> <!--开启 resource manager HA,默认为 false--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!--配置 resource manager 命名--> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>zj01</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>zj02</value> </property> <!--开启 resourcemanager 故障自动切换,指定机器--> <property> <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> <value>true</value> </property> <!--在 zj01 上配置 rm1,在 zj02 上配置 rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在 YARN 的另一个机器上一定要修改,其他机器上不配置此项--> <property> <name>yarn.resourcemanager.ha.id</name> <value>rm1</value> </property> <!--开启 resourcemanager 自动恢复功能--> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!--用于持久存储的类。尝试开启--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <!--连接zookeeper地址--> <property> <name>yarn.resourcemanager.zk-address</name> <value>zj01:2181,zj02:2181,zj03:2181</value> </property> <!--失联等待连接时间--> <property> <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name> <value>5000</value> </property> <!-- 集群的 Id,使用该值确保 RM 不会做为其它集群的 active --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>bigdata</value> </property> <!--配置 rm1--> <property> <name>yarn.resourcemanager.address.rm1</name> <value>zj01:8132</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm1</name> <value>zj01:8130</value> </property> <!-- RM 的网页接口地址:端口--> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>zj01:8088</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm1</name> <value>zj01:8131</value> </property> <!-- RM 管理接口地址:端口--> <property> <name>yarn.resourcemanager.admin.address.rm1</name> <value>zj01:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm1</name> <value>zj01:23142</value> </property> <!--配置 rm2--> <property> <name>yarn.resourcemanager.address.rm2</name> <value>zj02:8132</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm2</name> <value>zj02:8130</value> </property> <!-- RM 的网页接口地址:端口--> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>zj02:8088</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm2</name> <value>zj02:8131</value> </property> <!-- RM 管理接口地址:端口--> <property> <name>yarn.resourcemanager.admin.address.rm2</name> <value>zj02:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm2</name> <value>zj02:23142</value> </property> <!--请配置为:mapreduce_shuffle,在 Yarn 上开启 MR 的必须项--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <!-- nodemanager 本地文件存储目录--> <property> <name>yarn.nodemanager.local-dirs</name> <value>/apps/hadoop/dfsdata/yarn/local</value> </property> <!--存储 container 日志的地方--> <property> <name>yarn.nodemanager.log-dirs</name> <value>/apps/hadoop/dfsdata/logs</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1024</value> <discription>每个节点可用内存,单位 MB</discription> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>258</value> <discription>单个任务可申请最少内存,默认 1024MB</discription> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>512</value> <discription>单个任务可申请最大内存,默认 8192MB</discription> </property> <property> <name>yarn.nodemanager.webapp.address</name> <value>0.0.0.0:8042</value> </property> </configuration>
zj01
zj02
zj03
scp -r /apps/hadoop slave2:/apps/
scp -r /apps/hadoop slave3:/apps/
在执行格式化的时候开启一个进程:
hadoop-daemon.sh start journalnode
格式化之后将name文件拷贝到zj02中,按理说应该是自动生成的,我的没有自动生成,是自己拷贝进去的
hadoop namennode -format
#先启动zookeeper,再启动hadoop集群
start-all.sh
启动情况如下:
查看虚拟机的各个进程:
访问zj01:50070端口和zj02:50070端口
http://zj01:50070
http://zj02:50070
访问zj01:8088端口
http://zj01:8088
hadoop集安装成功,如果安装有什么问题,可以随时提哟,希望能帮助您。
如果你在安装碰见了什么样问题,或者我的文档写的有不合理之处,欢迎指出谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。