基础部分
1、基础搭建
本次集群搭建共有三个节点,包括一个主节点master,和两个从节点slave1和slave2。具体操作如下:
1.1使用连接工具连接比赛节点,更改本地源
1.使用本地Windows操作机提供的Xshell或MobaXterm连接比赛平台所提供的master,slave1,slave2三台机器。
同时可以使用以下命令进行修改主机名:
hostnamectl set-hostname master(在master执行)
立即生效:bash
同理修改slave1和slave2的主机名。
hostnamectl set-hostname slave1(在slave1执行)
hostnamectl set-hostname slave2(在slave2执行)
2.配置本地源。通过比赛平台提供源文件下载路径,将本地源文件下载到/etc/yum.repos.d/目录下(三台机器都执行)。
发信号给yum进程:pkill -9 yum
进入yum源配置文件:cd /etc/yum.repos.d
删除所有文件:rm -rf *
下载yum源:wget http://10.10.30.2:8000/bigdata/repofile/bigdata.repo
清除YUM缓存:yum clean all
1.2配置hosts文件(三台机器都执行)
查看节点地址之后将三个节点的ip地址以及其对应的名称写进hosts文件。这里我们设置为master、slave1、slave2。注意保存退出。
vim /etc/hosts(三台机器都执行)
1.3关闭防火墙(三台机器都执行)
关闭防火墙:systemctl stop firewalld
查看状态:systemctl status firewalld
注意:当环境重置之后,防火墙会自动开启。
1.4时间同步
选择时区:tzselect(三台执行)
下载ntp(三台机器都执行)
yum install -y ntp
master作为ntp服务器,修改ntp配置文件。(master上执行,注意空格问题)
vim /etc/ntp.conf
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
#stratum设置为其它值也是可以的,其范围为0~15
修改后注意保存退出。
重启ntp服务(master上执行)
/bin/systemctl restart ntpd.service
其他机器进行同步(在slave1,slave2中执行)
ntpdate master
1.5配置ssh免密
1.在master上执行如下命令生成公私密钥:(注意master上执行)
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
2.然后将master公钥id_dsa复制到slave1进行公钥认证。
ssh-copy-id -i /root/.ssh/id_dsa.pub slave1
退出连接:exit
同理可以将master公钥复制到master、slave2进行公钥认证。
ssh-copy-id -i /root/.ssh/id_dsa.pub master
ssh-copy-id -i /root/.ssh/id_dsa.pub slave2
注意:以上只是master到slave1、slave2的免密。如果想配置其他免密,其命令类似。
2、安装JDK
以下操作为先在master上操作,然后远程复制到slave1和slave2。
首先在根目录下建立工作路径/usr/java。
mkdir -p /usr/java
进入创建的java工作路径。
cd /usr/java
下载java安装包(master上执行)。
wget http://10.10.30.2:8000/bigdata/bigdata_tar/jdk-8u171-linux-x64.tar.gz(在master执行)
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/java/(在master执行)
修改环境变量:vim /etc/profile(在master执行)
添加内容如下:
export JAVA_HOME=/usr/java/jdk1.8.0_171
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
生效环境变量:source /etc/profile(在master执行)
查看java版本:java -version(在master执行)
在master中将JDK复制到slave1和slave2中。(在master执行)
scp -r /usr/java root@slave1:/usr/
scp -r /usr/java root@slave2:/usr/
注意:此时需要去slave1和slave2上配置java的环境变量,并使环境变量生效。
3、安装zookeeper
1.创建工作路径/usr/zookeeper,下载相应软件,解压至工作路径。
在zookeeper的目录中,创建配置中所需的zkdata和zkdatalog两个文件夹。(在master执行)
cd /usr/zookeeper/zookeeper-3.4.10
mkdir zkdata
mkdir zkdatalog
2.配置文件zoo.cfg
进入zookeeper配置文件夹conf,将zoo_sample.cfg文件拷贝一份命名为zoo.cfg,Zookeeper 在启动时会找这个文件作为默认配置文件。
cd /usr/zookeeper/zookeeper-3.4.10/conf/
mv zoo_sample.cfg zoo.cfg
对zoo.cfg文件配置如下:(在master执行)
vim zoo.cfg
修改如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.10/zkdata
clientPort=2181
dataLogDir=/usr/zookeeper/zookeeper-3.4.10/zkdatalog
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
3.进入zkdata文件夹,创建文件myid,用于表示是几号服务器。master主机中,设置服务器id为1。(集群中设置master为1号服务器,slave1为2号服务器,slave2为3号服务器)
cd /usr/zookeeper/zookeeper-3.4.10/zkdata
vim myid
4.远程复制分发安装文件。
以上已经在主节点master上配置完成ZooKeeper,现在可以将该配置好的安装文件远程拷贝到集群中的各个结点对应的目录下:(在master执行)
scp -r /usr/zookeeper root@slave1:/usr/
scp -r /usr/zookeeper root@slave2:/usr/
5.设置myid。在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字。(在slave1和slave2中执行)
cd /usr/zookeeper/zookeeper-3.4.10/zkdata
vim myid
实验中设置slave1中为2;
slave2中为3:
6.修改/etc/profile文件,配置zookeeper环境变量。(三台机器都执行)
vi /etc/profile
#set zookeeper environment
exportZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10
PATH=$PATH:$ZOOKEEPER_HOME/bin
生效环境变量:source /etc/profile
7.启动ZooKeeper集群。在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本。注意在zookeeper目录下:(三台机器都执行)
回到上一层:cd ..
开启服务:bin/zkServer.sh start
查看状态:bin/zkServer.sh status
通过上面状态查询结果可见,一个节点是Leader,其余的结点是Follower。
至此,zookeeper安装成功。
4、安装hadoop
以下步骤逻辑仅供选手参考:即hadoop安装同样在主节点master上进行配置操作,然后将文件复制到到子节点slave1和slave2。
4.1解压安装包,配置环境变量
1. 创建工作路径/usr/hadoop,下载相应软件,解压至工作路径。
2.添加hadoop环境变量(三台机器执行)
vim /etc/profile
添加如下内容:
# # #HADOOP
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib
export PATH=$PATH:$HADOOP_HOME/bin
使用以下命令使profile生效:
source /etc/profile
4.2配置hadoop各组件
hadoop的各个组件的都是使用XML进行配置,这些文件存放在hadoop的etc/hadoop目录下。
1.编辑hadoop-env.sh环境配置文件
cd $HADOOP_HOME/etc/hadoopvim hadoop-env.sh
输入以下内容,修改java环境变量:
export JAVA_HOME=/usr/java/jdk1.8.0_171
键入“Esc”,退出编辑模式,使用命令“:wq”进行保存退出。
2.编辑core-site.xml文件
vim core-site.xml
<property><name>fs.default.name</name><value>hdfs://master:9000</value></property><property><name>hadoop.tmp.dir</name><value>/usr/hadoop/hadoop-2.7.3/hdfs/tmp</value><description>A base for other temporary directories.</description></property><property><name>io.file.buffer.size</name><value>131072</value></property><property><name>fs.checkpoint.period</name><value>60</value></property><property><name>fs.checkpoint.size</name><value>67108864</value></property>
master:在主节点的ip或者映射名。
9000:主节点和从节点配置的端口都是9000。
同样注意保存退出。
3. 编辑mapred-site.xml
hadoop是没有这个文件的,需要将mapred-site.xml.template样本文件复制为mapred-site.xml,对其进行编辑:
cp mapred-site.xml.template mapred-site.xmlvim mapred-site.xml
在<configuration></configuration>中加入以下代码:
<property><!--指定Mapreduce运行在yarn上--><name>mapreduce.framework.name</name><value>yarn</value></property>
注意保存退出。
4.修改yarn-site.xml
在<configuration></configuration>中加入以下代码:
<!-- 指定ResourceManager的地址--><property><name>yarn.resourcemanager.address</name><value>master:18040</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>master:18030</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>master:18088</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>master:18025</value></property><property><name>yarn.resourcemanager.admin.address</name><value>master:18141</value></property><!-- 指定reducer获取数据的方式--><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property>
5. 编辑hdfs-site.xml配置文件
在<configuration></configuration>中加入以下代码:
<property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/hadoop/hadoop-2.7.3/hdfs/name</value><final>true</final></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/hadoop/hadoop-2.7.3/hdfs/data</value><final>true</final></property><property><name>dfs.namenode.secondary.http-address</name><value>master:9001</value></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property><property><name>dfs.permissions</name><value>false</value></property>
dfs.replication:因为hadoop是具有可靠性的,它会备份多个文本,这里value就是指备份的数量(小于等于从节点的数量)。
注意保存退出。
6.编写slaves和master文件
编写slaves文件,添加子节点slave1和slave2;
编写master文件,添加主节点master。
7.分发hadoop文件到slave1、slave2两个子节点
scp -r /usr/hadoop root@slave1:/usr/scp -r /usr/hadoop root@slave2:/usr/
注意:
slave各节点上还需要配置环境变量,参考hadoop中第一个步骤。
8.格式化hadoop(仅在master中进行操作)
格式化namenode:hadoop namenode -format
当出现“Exiting with status 0”的时候,表明格式化成功。
9.开启hadoop集群
仅在master主机上开启操作命令。它会带起从节点的启动。(仅在master中进行操作)
回到hadoop目录:cd /usr/hadoop/hadoop-2.7.3主节点开启服务:sbin/start-all.sh
master主节点状态如下:
slave1节点状态如下:
slave2节点状态如下:
11.使用hadoop命令“hadoop fs”进行相关操作。
5、安装hbase
(同样先在主节点master下进行操作,然后在复制到子节点slave1和slave2)
1. 创建工作路径/usr/hbase,下载相应软件,解压至工作路径。
2.进入hbase配置目录conf,修改配置文件hbase-env.sh,添加配置变量。
cd /usr/hbase/hbase-1.2.4/confvim hbase-env.sh
export HBASE_MANAGES_ZK=falseexport JAVA_HOME=/usr/ha/jdk1.8.0_111export HBASE_CLASSPATH=/usr/hadoop/hadoop-2.7.3/etc/hadoop
解释:一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群,即Hbase默认自带一个zookeep集群。这个集群会随着Hbase的启动而启动。而在实际的商业项目中通常自己管理一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false。
3.配置conf/hbase-site.xml文件
<property><name>hbase.rootdir</name><value>hdfs://master:9000/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.master</name><value>hdfs://master:6000</value></property><property><name>hbase.zookeeper.quorum</name><value>master,slave1,slave2</value></property><property><name>hbase.zookeeper.property.dataDir</name><value>/usr/zookeeper/zookeeper-3.4.10</value></property>
解释:要想运行完全分布式模式,加一个属性 hbase.cluster.distributed 设置为 true 然后把 hbase.rootdir 设置为HDFS的NameNode的位置;
hbase.rootdir:这个目录是region server的共享目录,用来持久化Hbase。URL需要是’完全正确’的,还要包含文件系统的scheme;
hbase.cluster.distributed :Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面。在hbase-site.xml配置zookeeper,当Hbase管理zookeeper的时候,你可以通过修改zoo.cfg来配置zookeeper,对于zookeepr的配置,你至少要在 hbase-site.xml中列出zookeepr的ensemble servers,具体的字段是 hbase.zookeeper.quorum.在这里列出Zookeeper集群的地址列表,用逗号分割。
hbase.zookeeper.property.clientPort:ZooKeeper的zoo.conf中的配置,客户端连接的端口。
hbase.zookeeper.property.dataDir:ZooKeeper的zoo.conf中的配置。对于独立的Zookeeper,要指明Zookeeper的host和端口。需要在 hbase-site.xml中设置。
4. 配置conf/regionservers,添加子节点
在这里列出了希望运行的全部 HRegionServer,一行写一个host (就Hadoop里面的slaver 一样)。列在这里的server会随着集群的启动而启动,集群的停止而停止。
5.hadoop配置文件拷入hbase的目录下(当前目录为/usr/hbase/hbase-1.2.4/conf)
cp /usr/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml .cp /usr/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml .
6.分发hbase到子节点
scp -r /usr/hbase root@slave1:/usr/scp -r /usr/hbase root@slave2:/usr/
7.配置环境变量(三台机器)
vim /etc/profile
配置环境变量 Hbase
生效环境变量:source /etc/profile# set hbase environment
export HBASE_HOME=/usr/hbase/hbase-1.2.4
export PATH=$PATH:$HBASE_HOME/bin
9. 运行和测试,在master上执行(保证hadoop和zookeeper已开启)
Jps如果是启动HBase遇到的问题你就这样做:由于JDK使用的是jdk1.8.0_65注释掉以下:# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"注释的文件路径是:hbase/conf/hbase-env.sh
数据库搭建
6、安装hive
实验中我们选用hive的远程模式,slave2安装mysql server用于存放元数据,slave1作为hive server作为thrift 服务器,master作为client客户端进行操作。
6.1slave2上安装MySQL server
1.配置过本地源了,安装MySQL Server
(先不要安装,会导致后面的替代无法安装)slaves2安装MySQL:yum -y install mysql-community-server
2.启动服务
重载所有修改过的配置文件:systemctl daemon-reload开启服务:systemctl start mysqld
由于mysql在此中收费,所以不支持安装
解决方法:Failed to start mysqld.service: Unit not found_赵健乔的技术Blog-CSDN博客
其中的嵌套问题如下:
安装时提示报错解决方法:centos7 安装mysql 解决 Failed to start mariadb.service: Unit not found._Twiss的博客-CSDN博客
开机自启:systemctl enable mysqld
3.登陆MySQL
安装完毕后,MySQL会在/var/log/mysqld.log这个文件中会自动生成一个随机的密码,获取得这个随机密码,以用于登录MySQL数据库:
获取初密码: grep "temporary password" /var/log/mysqld.log登陆MySQL:mysql -uroot -p(注意中英文)
4.MySQL密码安全策略设置
设置密码强度为低级:set global validate_password_policy=0;设置密码长度:set global validate_password_length=4;修改本地密码:alter user 'root'@'localhost' identified by '123456';退出:\q
密码强度分级如下:
0为low级别,只检查长度;1为medium级别(默认),符合长度为8,且必须含有数字,大小写,特殊字符;2为strong级别,密码难度更大一些,需要包括字典文件。密码长度最低长为4,当设置长度为1、2、3时,其长度依然为4。
5. 设置远程登录
以新密码登陆MySQL:mysql -uroot -p123456创建用户:create user 'root'@'%' identified by '123456';允许远程连接:grant all privileges on *.* to 'root'@'%' with grant option;刷新权限:flush privileges;
6.创建数据库test
6.2创建工作路径,解压安装包
创建工作路径/usr/hive,下载相应软件,解压至工作路径。
环境中master作为客户端,slave1作为服务器端,因此都需要使用到hive。因为hive相关安装包存放在master中,因此我们先在master中对hive进行解压,然后将其复制到slave1中。
6.3slave1中建立文件
同样slave1上建立文件夹/usr/hive,然后master中将安装包远程复制到slave1。
mkdir -p /usr/hive
master中将hive文件复制到slave1:
scp -r /usr/hive/apache-hive-2.1.1-bin root@slave1:/usr/hive/
修改/etc/profile文件设置hive环境变量。(master和slave1都执行)
vim /etc/profile
#set hive
export HIVE_HOME=/usr/hive/apache-hive-2.1.1-bin
export PATH=$PATH:$HIVE_HOME/bin
生效环境变量:source /etc/profile
6.4解决版本冲突和jar包依赖问题
由于客户端需要和hadoop通信,所以需要更改Hadoop中jline的版本。即保留一个高版本的jline jar包,从hive的lib包中拷贝到Hadoop中lib位置为/usr/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib。(master中执行)
cp /usr/hive/apache-hive-2.1.1-bin/lib/jline-2.12.jar /usr/ha/hadoop-2.7.3/share/hadoop/yarn/lib/
因为服务端需要和Mysql通信,所以服务端需要将Mysql的依赖包放在Hive的lib目录下。(slave1中进行)
cd /usr/hive/apache-hive-2.1.1-bin/libwget http://10.10.30.2:8000/bigdata/bigdata_tar/mysql-connector-java-5.1.47-bin.jar
6.5Slave1作为服务器端配置hive
回到slave1,修改hive-env.sh文件中HADOOP_HOME环境变量。进入hive配置目录,因为hive中已经给出配置文件的范本hive-env.sh.template,直接将其复制一个进行修改即可:
cd $HIVE_HOME/conflscp hive-env.sh.template hive-env.shvim hive-env.sh
hive-env.sh文件中修改HADOOP_HOME环境变量。
HADOOP_HOME=/usr/ha/hadoop-2.7.3
3.修改hive-site.xml文件
<configuration><!-- Hive产生的元数据存放位置--><property><name>hive.metastore.warehouse.dir</name><value>/user/hive_remote/warehouse</value></property><!-- 数据库连接JDBC的URL地址--><property><name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://slave2:3306/hive?createDatabaseIfNotExist=true</value></property><!-- 数据库连接driver,即MySQL驱动--><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><!-- MySQL数据库用户名--><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><!-- MySQL数据库密码--><property><name>javax.jdo.option.ConnectionPassword</name><value>123456</value></property><property><name>hive.metastore.schema.verification</name><value>false</value></property><property><name>datanucleus.schema.autoCreateAll</name><value>true</value></property></configuration>
6.6Master作为客户端配置hive
和slave1中配置方式类似,直接进入
1.修改hive-site.xml
<configuration><!-- Hive产生的元数据存放位置--><property><name>hive.metastore.warehouse.dir</name><value>/user/hive_remote/warehouse</value></property><!--- 使用本地服务连接Hive,默认为true--><property><name>hive.metastore.local</name><value>false</value></property><!-- 连接服务器--><property><name>hive.metastore.uris</name><value>thrift://slave1:9083</value></property></configuration>
2.修改hive-env.sh中HADOOP_HOME环境变量:
HADOOP_HOME=/usr/ha/hadoop-2.7.3
6.7成功启动Hive
1.启动hive server服务(slave1上)
bin/hive --service metastore(注意空格)
2.启动hive client(master上)
bin/hive
测试hive是否启动成功
hive>show databases;
创建数据库hive_db
hive>create database hive_db;
至此环境搭建完成。