1实验环境
1.1本次实验采用python、flask、hadoop分布式集群。需要搭建的环境包括:Python、flask、MySql和hadoop分布式集群。编程主要在 Visual studio Code中进行。
1.2主要环境包括
1.2.1Flask环境配置
首先搭建flask,创建文件夹,在虚拟环境中运行。
virtualenv是一个虚拟的Python环境构建器。 帮助用户并行创建多个Python环境。 因此,它可以避免不同版本的库之间的兼容性问题。这里使用虚拟环境在开发和生产中管理项目的依赖关系。虚拟环境是独立的Python库组,每个项目一个环境。一个项目安装的软件包不会影响其他项目或操作系统的软件包,安装virtualenv。
pip install virtualenv //安装Flask命令
venv\scripts\activate //要激活相应的环境
app.route(rule, options):rule 参数表示与该函数绑定的URL。options 是要转发给底层Rule对象的参数列表。
通过flak连接数据库和前端,结合python读取数据库数据,对数据进行分析和统计,将数值的结果反馈到前端。引入ECharts它是一个使用 JavaScript 实现的开源可视化库,使用它将数据动态展示出来。
下载:echarts.min.js
数据库:https://echarts.apache.org/examples/zh/index.html#chart-type-bar
1.2.2搭建hadoop分布式集群
集群的部署集群可以采用分布式集群或者伪分布式集群,我这里采用的是分布式集群原理和伪分布式集群一样。
主要实现的步骤如下:
- 静态ip的设置
将虚拟机IP设为静态,并进行配置
[root@ljc100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改为如下
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="e59bb0ad-2918-4de6-93fa-46bd94c0a474"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.87.100
GATEWAY=192.168.87.2
DNS1=192.168.87.2
- 主机名的设置
- hosts文件修改(ip和主机名的映射关系)
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@hadoop100 ~]# hostname //查看主机名
hadoop100
[root@hadoop100 ~]# more /etc/hosts //查看映射文件,查看部署的主机
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.87.100 hadoop100 //作为主节点
192.168.87.101 hadoop101
192.168.87.102 hadoop102
192.168.87.110 hadoop110
- 关闭防火墙(临时和永久)
关闭防火墙,关闭防火墙开机自启
[root@ljc100 ~]# systemctl stop firewalld
[root@ljc100 ~]# systemctl disable firewalld.service
- ssh免密码登录
实现在集群中免密码登录
主节点能免密码登录其他的从节点
cd /data
cd soft/hadoop-3.2.2
ssh-copy-id -i hadoop101 //实现秘钥从主节点传送给101
yes
Password:123456
ssh hadoop101 //测试可以免密码
- JDK的安装(jdk1.8)
- hadoop伪分布式的安装,4个配置文件的配置
- 将配置文件拷贝到另两个从节点(hadoop101、hadoop102)
……配置文件过程忽略
将配置拷贝到其他
[root@hadoop100 hadoop-3.2.2]# cd ..
[root@hadoop100 soft]# scp -rq hadoop-3.2.2 hadoop101:/data/soft/
[root@hadoop100 soft]# scp -rq hadoop-3.2.2 hadoop102:/data/soft/
//hadoop100实现效果
[root@hadoop100 hadoop-3.2.2]# jps
33072 SecondaryNameNode
33712 Jps
33353 ResourceManager
32827 NameNode
- 启动和关闭hadoop集群
这里注意我们可以简化工程量,只要做到主节点对两个从节点的免密码登录,下载hadoop后对文件进行配置完成后,需要对hadoop进行初始化一次,以后就不需要初始化,命令启动集群。
//初始化一次
[root@hadoop100 hadoop-3.2.2]# bin/hdfs namenode -format
启动和关闭集群。搭建成功后可以通过浏览器查看集群实现的效果,我这里通过8088和9870两个端口可以查看。
启动:sbin/start-all.sh
关闭:sbin/stop-all.sh
2数据集选用及爬取
2.1数据集来源1
数据来源:http://xxfb.mwr.cn/sq_djdh.html,对“全国大江大河实时水情”进行动态的爬(real-time_rep.py),该网站的数据每一日都是变化的,也就是每日更新数据,过去的数据不展示,通过“任务计划程序”每日定时执行代码进行爬取。
(该网页信息爬取有专门的一个博客介绍,可自行查找)
//对全国大江大河实时水情进行数据爬取
attributes = {
"poiAddv": "行政区",
"poiBsnm": "流域",
"ql": "流量",
"rvnm": "河名",
"stcd": "站点代码",
"stnm": "站名",
"tm": "时间",
"webStlc": "站址",
"wrz": "警戒水位",
"zl": "水位",
"dateTime": "日期"
}
requests.packages.urllib3.disable_warnings()
html = requests.get('http://xxfb.mwr.cn/hydroSearch/greatRiver',verify=False)
if html.status_code == 200:
resour = html.json()
rivers = dict(resour)["result"]["data"]#转数组了
river_table = pd.DataFrame(rivers[0], index=[0])
for i in range(1, len(rivers)):
river_table = pd.concat([river_table, pd.DataFrame(rivers[i], index=[0])])
for str_col_name in ["poiAddv"