本次搭建是在虚拟机上面进行Linux环境的搭建,版本为5.14.0,提供的虚拟机为5台。配置的主机名分别为v1,v2,v3,v4,v5
基础环境的准备
-
配置了每台虚拟机和其他虚拟机的免密登陆,使用到的linux命令为
ssh-keygen ##用法 [root@v1 ~]# ssh-keygen ssh-copy-id ##用法 [root@v1 ~]# ssh-copy-id root@v2
-
配置每台虚拟机的java环境
-
先检查当前系统是否有java相关的依赖包,如果存在那就删除
##rpm -qa|grep java 检查是否有java的依赖包 [root@v1 jdk1.8.0_221]# rpm -qa|grep java java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64 ##rpm -e 依赖包 --nodeps 删除依赖包 [root@v1 jdk1.8.0_221]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64
-
配置java环境变量
#上传jdk并且解压到指定目录中 [root@v1 ~]# tar -zxvf jdk-8u241-linux-x64.tar.gz -C /opt/cloudera/ #配置java的环境变量 [root@v1 jdk1.8.0_221]# vim /etc/profile ##JAVA_HOME export JAVA_HOME=/opt/cloudera/jdk1.8.0_221 export PATH=$PATH:$JAVA_HOME/bin ##检查java的环境变量 [root@v1 jdk1.8.0_221]# java -version java version "1.8.0_221" Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
-
配置防火墙和关闭selinux
##关闭防火墙 service iptables stop ##永久关闭防火墙 chkconfig iptables off ##关闭selinux 修改SELINUX值为disabled vim /etc/selinux/config SELINUX=disabled
-
时钟同步
##安装ntpdate服务 yum -y install ntpdate ##和NTP服务器进行时间同步 ntpdate cn.pool.ntp.org
-
配置Linux的文件以及线程的句柄数
vim /etc/security/limits.conf #添加以下内容,*号不能去掉 ##每个进程可以打开的文件数的限制,soft 是警告值,可以超过这个值,但是超过后会报警告 * soft nofile 65536 ##每个进程可以打开的文件数的限制,hard 是限定值,代表严格的限制,不可以超过这个值 * hard nofile 131072 ##每个用户可以创建的进程数的限制,soft 是警告值,可以超过这个值,但是超过后会报警告 * soft nproc 2048 ##每个用户可以创建的进程数的限制,hard 是限定值,代表严格的限制,不可以超过这个值 * hard nproc 4096 vim /etc/security/limits.d/90-nproc.conf ##找到如下内容,这个是修改除root用户的其他用户的最大进程数,并且limits.conf文件中的资源是受这个文件资源限制的 * soft nproc 1024 ##修改为 * soft nproc 4096 ##临时设置 修改一个进程可以修改的虚拟内存区域的数量 sysctl -w vm.max_map_count=262144 ##永久设置 vim /etc/sysctl.conf vm.max_map_count = 262144 ##修改生效 sysctl -p ##查看设置 sysctl -a |grep vm.max_map_count
-
搭建zookeeper集群
zookeeper集群搭建的是三台服务器的分布式结构,三台服务器的节点分别为v1,v2,v3
-
解压zookeeper的tar.gz包到指定的目录
tar -zxvf zookeeper-3.4.5-cdh5.14.0.tar.gz -C /opt/cloudera/ cd /opt/cloudera/zookeeper-3.4.5-cdh5.14.0
-
修改配置文件
##修改配置文件名为zoo.cfg mv zoo_sample.cfg zoo.cfg #zk本地数据存放的linux路径 dataDir=/opt/cloudera/zookeeper-3.4.5-cdh5.14.0/zkdata #客户端连接zk服务的端口 clientPort=2181 #指定zk机器每台机器的编号 位于主机名 心跳端口 选举端口 server.1=v1:2888:3888 server.2=v2:2888:3888 server.3=v3:2888:3888
-
创建myid文件
##该文件创建与dataDir指定的目录下 vim myid 1 ##保存
-
把zookeeper-3.4.5-cdh5.14.0安装目录发送给其他机器
cd /opt/cloudera scp -r zookeeper-3.4.5-cdh5.14.0 root@v2:$PWD scp -r zookeeper-3.4.5-cdh5.14.0 root@v3:$PWD
-
修改其他机器dataDir目录下myid文件的值和每台机器的编号对应
##v2机器 cd /opt/cloudera/zookeeper-3.4.5-cdh5.14.0/zkdata echo 2> myid ##v3机器 cd /opt/cloudera/zookeeper-3.4.5-cdh5.14.0/zkdata echo 3> myid
-
启动zookeeper集群
cd /opt/cloudera/zookeeper-3.4.5-cdh5.14.0/bin ##以此启动每台机器 ./zkServer.sh start ##停止 ./zkServer.sh stop ##查看状态 ./zkServer.sh status
-
配置一键启动和一键停止脚本
vim startZK.sh #!/bin/bash hosts=(v1 v2 v3) for host in ${hosts[*]} do ssh $host "source /etc/profile;/opt/cloudera/zookeeper-3.4.5-cdh5.14.0/bin/zkServer.sh start" done ##保存并赋予权限 chmod 744 startZK.sh vim stopZK.sh #!/bin/bash hosts=(v1 v2 v3) for host in ${hosts[*]} do ssh $host "source /etc/profile;/opt/cloudera/zookeeper-3.4.5-cdh5.14.0/bin/zkServer.sh stop" done ##保存并赋予权限 chmod 744 stopZK.sh
搭建Hadoop的HA架构集群
Hadoop搭建的集群是hdfs和yarn都是HA架构的5台分布式集群,hdfs的namenode分别部署在v1和v2上 ,yarn的HA架构分别部署在v4和v5上
-
解压hadoop的tar.gz包到指定的目录中
tar -zxvf hadoop-2.6.0-cdh5.14.0.tar.gz /opt/cloudera/ cd /opt/cloudera/hadoop-2.6.0-cdh5.14.0 ##重要目录介绍 #bin:命令,客户端操作的脚本 #etc:配置文件目录,类似于conf #lib:依赖的包 #sbin:进程的管理脚本,启动、关闭
-
修改Hadoop的环境变量
##配置所有机器的环境变量 vim /etc/profile ##HADOOP_HOME export HADOOP_HOME=/opt/cloudera/hadoop-2.6.0-cdh5.14.0 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin ##加载环境变量 source /etc/profile #检测当前的hadoop是否支持snappy压缩 hadoop checknative
-
修改配置文件
#创建hadoop的临时存储目录:存储数据块、fsimage等 mkdir datas #用于journal进程存储edits文件的目录 mkdir journalnode ##三个-env.sh的配置文件都加上JAVA_HOME vim hadoop-env.sh vim mapred.env.sh vim yarn-env.sh export JAVA_HOME=/opt/cloudera/jdk1.8.0_221 ##2.用户自定义属性配置文件 ##core-site.xml <!--用于指定namenode的地址,HA-HDFS为HA架构的逻辑名称--> <property> <name>fs.defaultFS</name> <value>hdfs://HA-HDFS</value> </property> <!--配置Hadoop的本地存储位置--> <property> <name>hadoop.tmp.dir</name> <value>/opt/cloudera/hadoop-2.6.0-cdh5.14.0/datas</value> </property> <!--设置客户端访问hdfs的缓存大小,以byte为单位,默认为4096--> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <!--用于指定hdfs回收站数据的过期时间,以分钟为单位--> <property> <name>fs.trash.interval</name> <value>10080</value> </property> <!--hadoop的HA架构要依赖于ZOOKEEPER组件,指定zookeeper的地址--> <property> <name>ha.zookeeper.quorum</name> <value>v1:2181,v2:2181,v3:2181</value> </property> ##hdfs-site.xml <!--指定一个HDFS入口的逻辑名称--> <property> <name>dfs.nameservices</name> <value>HA-HDFS</value> </property> <!--指定HDFS中每个NameNode的逻辑名称--> <property> <name>dfs.ha.namenodes.HA-HDFS</name> <value>namenodev1,namenodev2</value> </property> <!--指定的两个NameNode具体的rpc地址--> <property> <name>dfs.namenode.rpc-address.HA-HDFS.namenodev1</name> <value>v1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.HA-HDFS.namenodev2</name> <value>v2:8020</value> </property> <!--指定的两个NameNode具体的http的地址--> <property> <name>dfs.namenode.http-address.HA-HDFS.namenodev1</name> <value>v1:50070</value> </property> <property> <name>dfs.namenode.http-address.HA-HDFS.namenodev2</name> <value>v2:50070</value> </property> <!--指定五台journalnode的地址--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://v1:8485;v2:8485;v3:8485;v4:8485;v5:8485/HA-HDFS</value> </property> <!--指定edits文件具体存在journal机器的什么位置--> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/cloudera/hadoop-2.6.0-cdh5.14.0/journalnode</value> </property> <!--指定客户端实现HA切换的代理类--> <property> <name>dfs.client.failover.proxy.provider.HA-HDFS</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>/root/.ssh/id_rsa</value> </property> <!--开启自动切换--> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!--指定hdfs存储块总共存储几份--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--关闭访问权限--> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!--每个块的大小,以字节为单位,默认为128M--> <property> <name>dfs.blocksize</name> <value>134217728</value> </property> ##mapred-site.xml <!--启用uber模式,对于一些小的任务会串行在一个JVM中执行--> <property> <name>mapreduce.job.ubertask.enable</name> <value>true</value> </property> <!--配置MapReduce程序运行在yarn上--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!--配置JobHistoryServer进程的地址--> <property> <name>mapreduce.jobhistory.address</name> <value>v3:10020</value> </property> <!--配置JobHistoryServer的web访问地址--> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>v3:19888</value> </property> ##yarn-site.xml <!--配置YARN的HA:开启HA--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!--配置YARN的HA:配置统一RM服务名--> <property> <name>yarn.resourcemanager.cluster-id</name> <value>HA-YARN</value> </property> <!--配置YARN的HA:配置两台RM的id--> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>resourcemanagerv4,resourcemanagerv5</value> </property> <!--在v4上配置resourcemanagerv4,在v5上配置resourcemanagerv5--> <!--注意:这个在YARN的另一个机器上一定要修改,非RM的其他机器上不配置此项--> <property> <name>yarn.resourcemanager.ha.id</name> <value>resourcemanagerv4</value> </property> <!--配置YARN的HA:配置两台RM的具体地址--> <property> <name>yarn.resourcemanager.hostname.resourcemanagerv4</name> <value>v4</value> </property> <property> <name>yarn.resourcemanager.hostname.resourcemanagerv5</name> <value>v5</value> </property> <property> <name>yarn.resourcemanager.webapp.address.resourcemanagerv4</name> <value>v4:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.address.resourcemanagerv5</name> <value>v5:8088</value> </property> <!--配置YARN的HA:配置Zookeeper的地址--> <property> <name>yarn.resourcemanager.zk-address</name> <value>v1:2181,v2:2181,v3:2181</value> </property> <!--配置YARN的HA:启动自动故障恢复--> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!--配置YARN的HA:配置容错存储为Zookeeper,默认为文件--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <!--Yarn上运行程序的类型为MapReduce--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--内存大小,默认值为8G--> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> </property> <!--应用申请的最小内存大小--> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>1024</value> </property> <!--虚拟内存和真实物理内存的比率,默认值为2.1--> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.1</value> </property> <!--配置日志聚集的启动--> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!--配置日志聚集的自动删除--> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> ##3. 从节点的配置文件 ##slaves ## 在这个文件中配置所有hadoop从节点机器的主机名
-
分发给其他机器
cd /opt/cloudera scp -r hadoop-2.6.0-cdh5.14.0 其他机器主机名:$PWD ## 注意yarn-site.xml中resourcemanager节点特殊的参数yarn.resourcemanager.ha.id
-
格式化
##启动zookeeper集群 ./startZK.sh ##第一次启动需要初始化namenode和zookeeper,之后启动不需要 ##启动5台机器的journalnode服务 hadoop-daemon.sh start journalnode ##启动完成之后在两台namenode节点的任意一台执行初始化namenode hdfs namenode -format ##格式化成功的话会报Exiting with status 0 ##不为0的话表示格式化失败 ##执行完成后把datas目录同步到另一台namenode节点上 cd /opt/cloudera/hadoop-2.6.0-cdh5.14.0 scp -r datas root@v2:$PWD ##关联zookeeper,进行初始化 hdfs zkfc -formatZK ##关闭启动的所有journalnode服务 ./hadoop-daemon.sh stop journalnode
-
启动服务
##namenode机器启动hdfs start-dfs.sh ##resourcemanager机器启动yarn start-yarn.sh ##另一台resourcemanager机器单独启动resourcemanager进程 yarn-daemon.sh start resourcemanager ##启动JobHistoryServer mr-jobhistory-daemon.sh start historyserver ##启动在浏览器可以通过namenode那台机器的ip和端口访问hdfs http://v1:50070 http://v2:50070 ##在浏览器可以通过resourcemanager那台机器的ip和端口访问yarn资源管理和任务调度 http://v4:8088 http://v5:8088 ##在浏览器可以通过JobHistoryServer那台机器的ip和端口访问Mapreduce程序运行的日志信息 http://v3:19888
-
编写一键启动和一键停止脚本
##一键启动 vim starthadoop.sh #!/bin/bash HISTORY_SERVER=v3 RESOURCE_MANAGER1=v4 RESOURCE_MANAGER2=v5 start-dfs.sh ssh $RESOURCE_MANAGER1 "source /etc/profile;start-yarn.sh " ssh $RESOURCE_MANAGER2 "source /etc/profile;yarn-daemon.sh start resourcemanager" ssh $HISTORY_SERVER "source /etc/profile;mr-jobhistory-daemon.sh start historyserver" chmod 744 starthadoop.sh ##一键停止 vim stophadoop.sh #!/bin/bash HISTORY_SERVER=v3 RESOURCE_MANAGER1=v4 RESOURCE_MANAGER2=v5 ##关闭namenode和datanode stop-dfs.sh ssh $RESOURCE_MANAGER1 "source /etc/profile;stop-yarn.sh" ssh $RESOURCE_MANAGER2 "source /etc/profile;yarn-daemon.sh stop resourcemanager" ssh $HISTORY_SERVER "source /etc/profile; mr-jobhistory-daemon.sh stop historyserver" chmod 744 stophadoop.sh
搭建hbase的HA架构的集群
-
解压hbase的tar.gz包到指定目录中
tar -zxvf hbase-1.2.0-cdh5.14.0.tar.gz -C /opt/cloudera/ /opt/cloudera/hbase-1.2.0-cdh5.14.0
-
修改配置文件
vim conf/hbase-env.sh ##128行 export HBASE_MANAGES_ZK=false ##27行 export JAVA_HOME=/opt/cloudera/jdk1.8.0_221
-
修改hbase-site.xml文件
vim conf/hbase-site.xml <!--hbase在本地使用的一个临时目录--> <property > <name>hbase.tmp.dir</name> <value>/opt/cloudera/hbase-1.2.0-cdh5.14.0/datas</value> </property> <!--指定Hbase持久化的数据存储在HDFS的什么位置--> <property > <name>hbase.rootdir</name> <value>hdfs://HA-HDFS/hbase</value> </property> <!-- hbase底层如果使用hdfs作为文件系统,这里是指默认在文件系统的临时存储目录用来存储临时数据 --> <property > <name>hbase.fs.tmp.dir</name> <value>/user/${user.name}/hbase-staging</value> </property> <!-- hdfs里面批量装载的目录 --> <property > <name>hbase.bulkload.staging.dir</name> <value>${hbase.fs.tmp.dir}</value> </property> <!--指定Hbase是一个分布式集群--> <property > <name>hbase.cluster.distributed</name> <value>true</value> </property> <!--配置Hbase连接的zookeeper的地址的--> <property> <name>hbase.zookeeper.quorum</name> <value>v1:2181,v2:2181,v3:2181</value> </property> <!-- 退出保存并创建hbase的本地存储目录--> mkdir datas
-
修改regionservers文件。配置所有从节点的机器地址,相当于hadoop的salves
vim conf/regionservers v1 v2 v3 v4 v5 ##退出保存
-
配置主节点的备份
vim conf/backup-masters v3 ##退出保存
-
因为前面hadoop搭建的HA架构的,所以需要把hadoop的core-site.xml和hdfs-site.xml文件通过软连接放入hbase的配置文件目录中,后进行分发。
ln -s /opt/cloudera/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml conf/hdfs-site.xml ln -s /opt/cloudera/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml conf/core-site.xml cd /opt/cloudera scp -r hbase-1.2.0-cdh5.14.0 root@其他主机名:$PWD
-
配置hbase的环境变量
vim /etc/profile ##HBASE_HOME export HBASE_HOME=/opt/cloudera/hbase-1.2.0-cdh5.14.0 export PATH=$PATH:$HBASE_HOME/bin ##加载配置文件 source /etc/profile
-
启动hbase集群
##先要启动ZK和Hadoop,因为hbase依赖zk进行集群的管理,依赖hadoop进行数据的存储 ##在第一台机器上启动 start-hbase.sh ##停止 stop-hbase.sh
搭建elasticsearch分布式集群
本次搭建的为elasticsearch分布式集群,选用的主机节点为v1、v2、v3
-
先使用root用户在三台机器上创建es使用到的用户
useradd es passwd es
-
三台机器上分别配置es用户的sudo权限
visudo 92左右添加: es ALL=(ALL) NOPASSWD: ALL
-
创建三台机器的es文件目录并且使用root权限更改目录的权限为es
cd /opt/cloudera mkdir elasticsearch chgrp es elasticsearch chown es elasticsearch
-
使用es用户登陆Linux环境并配置免密登陆
-
上传es对应的tar.gz包进行解压到创建的/opt/cloudera/elasticsearch目录中
tar -zxvf elasticsearch-6.0.0.tar.gz -C /opt/cloudera/elasticsearch/ cd /opt/cloudera/elasticsearch/elasticsearch-6.0.0 ##创建es的数据目录和日志目录 mkdir datas mkdir logs
-
修改配置文件config/elasticsearch.yml
vim config/elasticsearch.yml #集群名字 cluster.name: myes #集群中当前的节点 node.name: v1 #数据目录 path.data: /opt/cloudera/elasticsearch/elasticsearch-6.0.0/datas #日志目录 path.logs: /opt/cloudera/elasticsearch/elasticsearch-6.0.0/logs #当前主机的ip地址及ES服务端口 network.host: 192.168.6.3 http.port: 9200 #集群上的节点信息 discovery.zen.ping.unicast.hosts: ["v1","v2","v3"] #linux安装es的一个bug解决的配置 bootstrap.system_call_filter: false bootstrap.memory_lock: false #是否支持跨域 http.cors.enabled: true #*表示支持所有域名 http.cors.allow-origin: "*"
-
修改jvm.options配置文件
#根据自己虚拟机的实际大小调节启动和运行内存,如果虚拟机分配了2G,可以使用默认1G,如果分配了1G内存,这里可以该成512M -Xms1536m -Xmx1536m
-
分发给其他机器并修改其他两台的配置参数
cd /opt/cloudera/elasticsearch scp -r elasticsearch-6.0.0 es@v2:$PWD ##v2 cd /opt/cloudera/elasticsearch/elasticsearch-6.0.0/config/ vim elasticsearch.yml #修改如下内容 node.name: v2 network.host: 192.168.6.4 ##v3 cd /opt/cloudera/elasticsearch/elasticsearch-6.0.0/config/ vim elasticsearch.yml #修改如下内容 node.name: v3 network.host: 192.168.6.5
-
配置三台机器的elasticsearch环境
sudo vim /etc/profile ##ELASTICSEARCH_HOME export ELASTICSEARCH_HOME=/opt/cloudera/elasticsearch/elasticsearch-6.0.0 export PATH=$PATH:$ELASTICSEARCH_HOME/bin source /etc/profile
-
启动三台机器的elasticsearch
elasticsearch >> /dev/null 2>&1 &