2021-05-19
作者:互联网
。
图 8 比赛已结束
大数据竞赛本地源介绍
本次比赛提供相应的软件压缩包以及相关的 xml 配置文件、数据集,其地址为
http://10.10.30.2:8000/bigdata/。具体如下:
相关安装软件、xml 配置文件 Bigdata_Conf.tar.gz 的路径为
http://10.10.30.2:8000/bigdata/bigdata_tar/,如下:
注意:配置文件需要自己修改。
MySQL Server 的 yum 源路径为 http://10.10.30.2:8000/bigdata/repofile,这里直接提供 repo
文件为 bigdata.repo,直接将其下载至/etc/yum/repos.d/即可,然后就可以下载 MySQL Server。
1、基础搭建
本次集群搭建共有三个节点,包括一个主节点 master,和两个从节点 slave1 和 slave2。具体操作如下:
1.1 使用连接工具连接比赛节点,更改本地源
1. 使用本地Windows 操作机提供的 Xshell 或 MobaXterm 连接比赛平台所提供的 master, slave1,slave2 三台机器,并按照比赛平台提供的 linux 用户和密码进行登录,登录成功后开始进行接下来的比赛。
注意连接工具没有在桌面上,点击(或者键入)左下角“windows”,即可看到连接工具。同时可以使用以下命令进行修改主机名:
⚫ 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 文件(三台机器都执行)
可以通过 ifconfig 命令进行查看机器的 ip 地址或者直接输入比赛平台提供的 ip 地址。查看节点地址之后将三个节点的 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
修改后注意保存退出。
重启 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 执行) 添加内容如下:
⚫ 生效环境变量: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
修改如下:
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
⚫ 生效环境变量: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
添加如下内容:
使用以下命令使 profile 生效:
⚫ source /etc/profile
4.2 配置 hadoop 各组件
hadoop 的各个组件的都是使用 XML 进行配置,这些文件存放在 hadoop 的etc/hadoop 目录下。
Common组件 | core-site.xml |
HDFS组件 | hdfs-site.xml |
MapReduce组件 | mapred-site.xml |
YARN组件 | yarn-site.xml |
1. 编辑hadoop-env.sh 环境配置文件
⚫ cd $HADOOP_HOME/etc/hadoop
⚫
vim hadoop-env.sh
输入以下内容,修改 java 环境变量:
键入“Esc”,退出编辑模式,使用命令“:wq”进行保存退出。
2. 编辑 core-site.xml 文件
⚫
vim core-site.xml
master:在主节点的 ip 或者映射名。
9000:主节点和从节点配置的端口都是 9000。
同样注意保存退出。
3. 编辑 mapred-site.xml
hadoop 是没有这个文件的,需要将 mapred-site.xml.template 样本文件复制为
mapred-site.xml,对其进行编辑:
⚫ cp mapred-site.xml.template mapred-site.xml
⚫
vim mapred-site.xml
在<configuration></configuration>中加入以下代码:
注意保存退出。
4. 修改yarn-site.xml
在<configuration></configuration>中加入以下代码:
5. 编辑 hdfs-site.xml 配置文件
在<configuration></configuration>中加入以下代码:
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/conf
⚫
vim hbase-env.sh
解释:一个分布式运行的 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 文件
解释:要想运行完全分布式模式,加一个属性 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
⚫ 生效环境变量:source /etc/profile
9. 运行和测试,在 master 上执行(保证 hadoop 和 zookeeper 已开启)
⚫
jps
6、安装hive
实验中我们选用 hive 的远程模式,slave2 安装 mysql server 用于存放元数据,slave1 作为
hive server 作为 thrift 服务器,master 作为 client 客户端进行操作。
6.1 slave2 上安装 MySQL server
1. 配置过本地源了,安装 MySQL Server
⚫
安装 MySQL:yum -y install mysql-community-server
2. 启动服务
⚫ 重载所有修改过的配置文件:systemctl daemon-reload
⚫ 开启服务:systemctl start mysqld
⚫
开机自启: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.3 slave1 中建立文件
同样 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
⚫
生效环境变量: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/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/
因为服务端需要和 Mysql 通信,所以服务端需要将 Mysql 的依赖包放在 Hive 的lib 目录下。(slave1 中进行)
⚫ cd /usr/hive/apache-hive-2.1.1-bin/lib
⚫
wget http://10.10.30.2:8000/bigdata/bigdata_tar/mysql-connector-java-5.1.47-bin.jar
6.5 Slave1 作为服务器端配置 hive
回到 slave1,修改 hive-env.sh 文件中 HADOOP_HOME 环境变量。进入 hive 配置目录, 因为hive 中已经给出配置文件的范本hive-env.sh.template,直接将其复制一个进行修改即可:
⚫ cd $HIVE_HOME/conf
⚫ ls
⚫ cp hive-env.sh.template hive-env.sh
⚫
vim hive-env.sh
hive-env.sh 文件中修改 HADOOP_HOME 环境变量。
3.修改hive-site.xml 文件
6.6 Master 作为客户端配置 hive
和 slave1 中配置方式类似,直接进入
1.
修改hive-site.xml
2.
修改hive-env.sh 中 HADOOP_HOME 环境变量:
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;
提高部分
7、Spark 安装
7.1 安装scala 环境
任务要求如下:(三台机器)
1. 从本地源下载相应安装包,创建对应工作目录/usr/scala,并将工具解压至工作目录。
2. 配置 scala 的环境变量并生效:
3. 查看 scala 是否安装成功:
7.2 安装Spark
任务要求如下:
1. 从本地源下载相应安装包,创建对应工作目录/usr/spark,将工具解压至工作目录; 2.配置 conf/spark-env.sh 文件,设置要求如下;
3.
配置 spark 从节点,修改 slaves 文件;
4.
向所有子节点发送 spark 配置好的安装包;
5. 设置 SPARK_HOME 环境变量,将$SPARK_HOME/bin 加入到 PATH; 6.开启 spark 服务;
8、数据爬取
8.1 Python 环境配置
环境中已经安装 Python3.6.8,支持的库为:
beautifulsoup | 4 4.8.0 |
bs4 | 0.0.1 |
certifi | 2019.6.16 |
chardet | 3.0.4 |
html5lib | 1.0.1 |
idna | 2.8 |
lxml | 4.4.1 |
pip | 18.1 |
requests | 2.22.0 |
setuptools | 40.6.2 |
six | 1.12.0 |
soupsieve | 1.9.3 |
urllib3 | 1.25.3 |
webencodings | 0.5.1 |
8.2 爬虫设计
访问比赛平台提供的 discuzserver(爬虫环境)对应 ip 的网站(比赛平台左上部分,具体参考“大数据竞赛选手使用手册”中 2.2 小节),网站类型为 discuz 论坛,分析网站结构,并针对后续题目要求设计爬虫代码,爬取网站内容。
8.3 数据爬取
要求爬取的数据至少包括帖子 ID,标题,作者 ID。
提示:网站内所有的注册用户,均至少发了一个帖子,可以根据此条件得出网站的全量用户列表。
8.4 设计数据表
根据分析题目要求,表 crawl_discuz(hive_db 库中)需要包含以下字段: 帖子唯一 id :tid
帖子标题 :title 帖子作者 id :uid
爬取后的数据如下图所示:
将爬虫结果输出到文件 discuz_result.txt 中,用于导入数据表
8.5 数据保存
任务要求如下:
1)创建 crawl_discuz 表,要求字段包括 tid ,title,uid。(分隔符格式自定义); 2)将 discuz_result.txt 导入 hive_db 数据库的的 crawl_discuz 表中;
标签:05,19,zookeeper,hadoop,hive,master,usr,slave1,2021 来源: https://blog.csdn.net/LinYise/article/details/117048862