大数据备赛
一 基础搭建
本次集群搭建共有三个节点,包括一个主节点master,和两个从节点slave1
和slave2。具体操作如下:
1.1更改主机名
使用finalshell连接平台所提供的master,slave1,slave2三台机器,并按照提供linux账号和密码登录,登录成功后进行以下操作:
- 命令:
hostnamectl set-hostname master
(在master执行) - 立即生效:
bash
同上图所示更改主机名
1.2配置hosts文件
可以通过 ifconfig 命令进行查看机器的 ip 地址或者直接输入比赛平台提供的 ip 地址。
查看节点地址之后将三个节点的内网 ip 地址以及其对应的名称写进 hosts 文件。这里我们设置为 master、slave1、slave2。注意保存退出。
vim /etc/hosts(三台机器都执行)
三台机器的操作完全相同
1.3 选择时区,将时区改为上海时区(CST+0800时区)
tzslect
选择时区
5->Asia
9->China
1->Beijing Time
echo "TZ='Asia/Shanghai';export TZ">>/etc/profile && source /etc/profile
1.4 配置时间服务器+开启NTP服务
只需要在master中操作
环境中已经安装 ntp 服务,无需重复下载。可以使用命令进行查看:rpm -qa | grep ntp
1)master 作为 ntp 服务器:
修改 ntp
配置文件,屏蔽掉默认的 server
,设置 master
作为局域网内时钟源(本地时间服务器),设置时间服务器的层级为 10
,为集群主机提供时间服务。vim /etc/ntp.conf
之后
#注释掉 server 0 ~ n
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10 #stratum 设置为其它值也是可以的,其范围为 0~15(题目选择10)
2)master 上重启 ntp 服务
systemctl restart ntpd.service
3)在 slave1,slave2 中进行同步:
ntpdate master
1.5 制作定时任务
环境中已经开启相应服务,查看 crontab 状态:service crond status
要求:从节点(slave1、slave2)在早十-晚五时间段每隔半个小时同步一次时间
crontab -e
输入 i
添加定时任务:*/30 10-17 * * * /usr/sbin/ntpdate master
查看定时任务列表:crontab -l
slave2一样的操作
1.6配置 ssh 免密(RSA)
非对称算法--RSA
在 master 上执行如下命令生成公私密钥:(注意 master 上执行,默认为 rsa 类型)
ssh-keygen
ssh-keygen -t rsa
然后将公钥文件内容添加到授权文件。
ssh-copy-id -i /root/.ssh/id_rsa.pub master
ssh-copy-id -i /root/.ssh/id_rsa.pub localhost
(或者使用 localhost 也可已完成本地免密)
可以将 master 授权文件复制到 slave1、slave2 信任授权设置。
ssh-copy-id -i slave1
ssh-copy-id -i slave2
输入机器密码,其余都enter
oryes
1.7 安装 JDK
以下操作为先在 master 上操作,然后远程复制到 slave1
和 slave2
。
首先在根目录下建立工作路径/usr/java。
mkdir -p /usr/java
进入创建的 java 工作路径。
cd /usr/java
解压 java 安装包(master 上执行)。
tar -zxvf /usr/package277/jdk-8u221-linux-x64.tar.gz -C /usr/java/
修改环境变量:vim /etc/profile
添加内容如下:
export JAVA_HOME=/usr/java/jdk1.8.0_221
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
- 生效环境变量:source /etc/profile
- 查看 java 版本:java -version
在 master 中将 JDK 复制到 slave1
和 slave2
中。(在 master
执行)
scp -r /usr/java root@slave1:/usr/
scp -r /usr/java root@slave2:/usr/
此时需要去 slave1 和 slave2 上配置 java 的环境变量,并使环境变量生效。
2.1 安装Zookeeper
三个服务器上都解压一遍
创建工作路径/usr/zookeeper
,解压软件至工作路径。
mkdir -p /usr/zookeeper && cd /usr/zookeeper
tar -zxvf /usr/package277/zookeeper-3.4.14.tar.gz -C /usr/zookeeper/
2.2 配置 zookeeper 环境变量
vim /etc/profile
#zookeeper
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.14
PATH=$PATH:$ZOOKEEPER_HOME/bin
生效环境变量:source /etc/profile
2.3配置文件 zoo.cfg
1.进入 zookeeper 配置文件夹 conf,将 zoo_sample.cfg 文件拷贝一份命名为 zoo.cfg,Zookeeper 在启动时会找这个文件作为默认配置文件。
cd /usr/zookeeper/zookeeper-3.4.14/conf/ && vim zoo.cfg
2.对 zoo.cfg
文件配置如下:
vim zoo.cfg
修改如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.14/zkdata
clientPort=2181
dataLogDir=/usr/zookeeper/zookeeper-3.4.14/zkdatalog
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
2.4 创建日志文件
在 zookeeper 的目录中,创建配置中所需的 zkdata
和 zkdatalog
两个文件夹。(在 master
执行)
cd /usr/zookeeper/zookeeper-3.4.14 && mkdir zkdata zkdatalog
在 master
中将 zookeeper
复制到 slave1
和 slave2
中。(在 master
执行)
scp -r /usr/zookeeper root@slave1:/usr/
scp -r /usr/zookeeper root@slave2:/usr/
注意修改 myid 和环境变量。
进入 zkdata 文件夹,创建文件 myid,用于表示是几号服务器,用来标识当前主机。
master 主机中,设置服务器 id 为 1。(集群中设置 master 为 1 号服务器,slave1 为 2 号服务器,slave2 为3 号服务器),在三个服务器中写入对应的标识主机服务器序号
cd /usr/zookeeper/zookeeper-3.4.14/zkdata
echo 1 >> myid
2.5 启动ZooKeeper集群
在 ZooKeeper 集群的每个结点上,执行启动 ZooKeeper 服务的脚本。注意在 zookeeper 目录下:(三台机器都执行)
开启服务:zkServer.sh start
查看状态:zkServer.sh status(稍等片刻)
2.6 Hadoop集群解压安装包,配置环境变量
即 hadoop 安装同样在主节点 master 上进行配置操作,然后将文件复制到到子节点 slave1 和 slave2。
- 创建工作路径/usr/hadoop,相应软件解压至工作路径。
mkdir -p /usr/hadoop && cd /usr/hadoop
tar -zxvf /usr/package277/hadoop-2.7.7.tar.gz -C /usr/hadoop/ 添加 hadoop 系统变量(三台机器执行)
vim /etc/profile
添加如下内容:
#hadoop
#配置 Hadoop 安装目录
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.7
#在原 PATH 基础上加入 Hadoop 的 bin 和 sbin 目录
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使用以下命令使 profile 生效:
source /etc/profile
3.1 安装 hadoop
以下步骤逻辑仅供选手参考:即 hadoop 安装同样在主节点 master 上进行配置操作,然后将文件复制到到子
节点 slave1 和 slave2。
4.1 解压安装包,配置环境变量
创建工作路径/usr/hadoop,相应软件解压至工作路径。
mkdir -p /usr/hadoop && cd /usr/hadoop
tar -zxvf /usr/package277/hadoop-2.7.7.tar.gz -C /usr/hadoop/添加 hadoop 系统变量(三台机器执行)
vim /etc/profile
添加如下内容:
#hadoop
#配置 Hadoop 安装目录
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.7
#在原 PATH 基础上加入 Hadoop 的 bin 和 sbin 目录
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使用以下命令使 profile 生效:
source /etc/profile
4.2 配置 hadoop 各组件
hadoop 的各个组件的都是使用 XML 进行配置,这些文件存放在 hadoop 的 etc/hadoop 目录下。
hadoop-env.sh 运行环境
cd $HADOOP_HOME/etc/hadoop
vim hadoop-env.sh
输入以下内容,修改 java 环境变量:
export JAVA_HOME=/usr/java/jdk1.8.0_221
也可以直接输入命令:
echo "export JAVA_HOME=/usr/java/jdk1.8.0_221" >> hadoop-env.sh
键入“Esc”,退出编辑模式,使用命令“:wq”进行保存退出。
core-site.xml 全局参数
vim core-site.xml
fs.default.name hdfs://master:9000
hadoop.tmp.dir /root/hadoopData/tmp
master:在主节点的 ip 或者映射名。
9000:主节点和从节点配置的端口都是 9000。hdfs-site.xml 配置文件
dfs.replication:因为 hadoop 是具有可靠性的,它会备份多个文本,这里 value 就是指备份的数量(小于等于从节点的数量)。vim hdfs-site.xml
在
<property>
<name>dfs.replication</name>
<!-- 数据块副本的数量,默认为 3 -->
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<!-- NameNode 在本地文件系统中持久存储命名空间和事务日志的路径 -->
<value>/root/hadoopData/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<!-- DataNode 在本地文件系统中存放块的路径 -->
<value>/root/hadoopData/data</value>
</property>
<property>
<name>dfs.permissions</name>
<!-- 关闭 hadoop 集群权限校验 -->
<value>false</value>
</property>
<property>
<name>dfs.datanode.use.datanode.hostname</name>
<!-- datanode 之间的通信也通过域名方式 -->
<value>true</value>
</property>
YARN 框架运行环境
找到 JAVA_HOME 参数位置,将前面的#去掉,将其值修改为本机安装的 JDK 的实际位置。vim yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_221
也可以直接输入命令:echo "export JAVA_HOME=/usr/java/jdk1.8.0_221" >> yarn-env.sh
YARN 框架的核心配置
YARN 框架的核心配置文件,用于配置 YARN 进程及 YARN 的相关属性。
首先需要指定 ResourceManager 守护进程所在主机,默认为 0.0.0.0,即当前设备,所以这里指定为 master,
端口为 18141;
其次需要设置 NodeManager 上运行的辅助服务,需配置成 mapreduce_shuffle 才可运行 MapReduce 程序。vim yarn-site.xml
在
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<!-- 指定 reducer 获取数据的方式-->
<!-- NodeManager 上运行的附属服务,也可以理解为 mapreduce 获取数据的方式 -->
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
编辑配置计算框架
该文件是 MapReduce 的核心配置文件,用于指定 MapReduce 运行时框架。cp mapred-site.xml.template mapred-site.xml && vim mapred-site.xml
在
<property>
<!--指定 Mapreduce 运行在 yarn 上-->
<!-- 指定使用 YARN 运行 MapReduce 程序,默认为 local -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
注意保存退出
编写 slaves 和 master 文件
编写 slaves 文件,添加子节点 slave1 和 slave2;
编写 master 文件,添加主节点 master。echo master > master && echo slave1 > slaves && echo slave2 >> slaves
在 master 中将 hadoop 复制到 slave1 和 slave2 中。(在 master 执行)
scp -r /usr/hadoop root@slave1:/usr/
scp -r /usr/hadoop root@slave2:/usr/
格式化 hadoop
格式化 namenode:hadoop namenode -format
(仅在 master 中进行操作)
当出现“Storage directory /usr/hadoop/hadoop-2.7.7/hdfs/name has been successfully formatted.”的时候,表明
格式化成功。格式化本质是进行文件系统的初始化操作,创建一些 hadoop 自己所需要的文件。
- 开启 hadoop 集群
仅在 master 主机上开启操作命令。它会带起从节点的启动。(仅在 master 中进行操作)
主节点开启服务:start-all.sh
使用 hadoop 命令“hadoop fs”进行相关操作。
查看集群状态:hdfs dfsadmin -report
4.1 slave2 上安装 MySQL server
实验中我们选用 hive 的远程模式,slave2 安装 mysql server 用于存放元数据,slave1 作为 hive server 作为 thrift服务器,master 作为 client 客户端进行操作。
配置过本地源了,环境中已经安装 MySQL Server,同时环境中已经关闭开机自启服务,本步骤无需操作。(slave2)
- 关闭开机自启:
systemctl disable mysqld
- 查看开启自启服务:
systemctl list-unit-files
- 查看是否加入开机启动项:
systemctl list-unit-files |grep mysqld.service
- 关闭开机自启:
- 关闭:
systemctl disable mysqld
- 开启:
systemctl enable mysqld
启动服务
- 开启服务:systemctl start mysqld
第一次启动后会有个初始化的过程,会产生 root 账户的随机密码
登陆 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';
密码强度分级如下:
- 0 为 low 级别,只检查长度;
- 1 为 medium 级别(默认),符合长度为 8,且必须含有数字,大小写,特殊字符;
- 2 为 strong 级别,密码难度更大一些,需要包括字典文件。
- 密码长度最低长为 4,当设置长度为 1、2、3 时,其长度依然为 4。
设置远程登录
- 创建用户:create user 'root'@'%' identified by '123456';
- 允许远程连接:grant all privileges on . to 'root'@'%' with grant option;
- 刷新权限:flush privileges;
同等命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
将 host 字段的值改为%就表示在任何客户端机器上能以 root 用户登录到 MySQL 服务器,建议在开发时设为%。
exit退出sql
4.2 数据仓库下载安装
下载解压
同样 master 上建立文件夹/usr/hive,然后 master 中将安装包远程复制到 slave1。mkdir -p /usr/hive && cd /usr/hive
tar -zxvf /usr/package277/apache-hive-2.3.4-bin.tar.gz -C /usr/hive/设置系统变量
修改/etc/profile 文件设置 hive 环境变量。(master 和 slave1 都执行)vim /etc/profile
#hive
export HIVE_HOME=/usr/hive/apache-hive-2.3.4-bin
export PATH=$PATH:$HIVE_HOME/bin
生效环境变量:source /etc/profile
设置 HIVE 运行环境
cd $HIVE_HOME/conf && vim hive-env.sh
对应设置如下:
# 配置 Hadoop 安装路径
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.7
# 配置 Hive 配置文件存放路径
export HIVE_CONF_DIR=/usr/hive/apache-hive-2.3.4-bin/conf
# 配置 Hive 运行资源库路径
export HIVE_AUX_JARS_PATH=/usr/hive/apache-hive-2.3.4-bin/lib
jline 版本冲突问题
由于客户端需要和 hadoop 通信,所以需要更改 Hadoop 中 jline 的版本,即保留一个高版本的 jline-jar 包。cp $HIVE_HOME/lib/jline-2.12.jar $HADOOP_HOME/share/hadoop/yarn/lib/
5.安装包复制到 slave1
scp -r /usr/hive root@slave1:/usr/
4.3 hive 元数据配置到 MySQL(服务器端 slave1)
驱动拷贝
因为服务端需要和 Mysql 通信,所以服务端需要将 Mysql 的依赖包放在 Hive 的 lib 目录下。
mysql-connector-java 是 MySQL 的 JDBC 驱动包,用 JDBC 连接 MySQL 数据库时必须使用该 jar 包。cp /usr/package277/mysql-connector-java-5.1.47-bin.jar /usr/hive/apache-hive-2.3.4-bin/lib/
Slave1 作为服务器端配置 hive
cd $HIVE_HOME/conf
hive 配置可以参考官方文档:
https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration
vim hive-site.xml
<configuration>
<!-- Hive 产生的元数据存放位置-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- 数据库连接 driver,即 MySQL 驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 数据库连接 JDBC 的 URL 地址-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://slave2:3306/hive?createDatabaseIfNotExist=true&useSSL=false</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>
</configuration>
4.4 Master 作为客户端配置 hive
和 slave1 中配置方式类似,直接进入 conf,进行设置。
Hive 服务和 metastore 在不同的进程内,可能是不同的机器,该模式需要将 hive.metastore.local 设置为 false。
将 hive.metastore.uris 设置 metastore 服务器 URL,端口设定为 9083。
cd $HIVE_HOME/conf
vim 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>
Hive 服务和 metastore 在不同的进程内,可能是不同的机器,该模式需要将 hive.metastore.local 设置为 false,
将 hive.metastore.uris 设置为 metastore 服务器 URL。
指向 metastore 服务的主机
4.5 成功启动 Hive
服务器端 slave1 初始化数据库
slave1 上:schematool -dbType mysql -initSchema
启动 hive server 服务(slave1)
设置成远程模式之后必须保证先启动 metastore 服务或者进程,之后才能进行开启客户端。hive --service metastore &(注意空格,后台运行)
客户端 master 启动 hive client
hive
创建数据库 hive
hive>create database hive;
二 hive分析
1 开启单节点集群环境
- 连接
发现未对主机名进行修改
- 修改主机名
hostnamectl set-hostname hadoop000
- 完成之后
bash
- 修改成功
- 修改主机名
- 改host文件
vim/etc/hosts
比赛时会提供内网IP,修改后如下 免密ssh已处理
ssh hadoop000
- hadoop namenode -format进行格式化
- 启动Hadoop集群
使用脚本命令一键启动 start-all.sh
启动完成后,我们可以用 jps
看一下
5个节点都已启动,代表启动完毕
- 开启mysql服务
这里的环境是已经安装好了的,只需要开启对应的服务即可
开启服务 systemctl start mysqld.service
8.初始化Hive元数据库(数据库类型为mysql),进入Hive客户端,创建hive数据库
schematool -dbType mysql -initSchema 回车
安装完成后跟上面图示一样 证明hive元数据库格式化完成
进入hive 客户端 hive
回车
创建hive对应数据库 create database hive;
创建成功
2 网络诈骗
- 创建project数据库
进入hive的终端
创建 create database if not exsits project;
创建成功