webservice1-1
很简单,不上代码了
1-2 springcloud
创建项目
配置文件,启动心脏节点
访问心脏节点
配置文件,写代码,启动1个服务节点
服务节点代码
、观察心脏节点信息
在局域网中 手机 再次访问 服务节点
2-1搭建hadoop
搭建hadoop3.2.1平台
在hadoop3.2.1基础上,使用了nginx 作为请求hadoop的转发代理,进一步增加负载能力
主要配置文件
Cd /cloudcomput/hadoop-3.2.1/etc/hadoop /cloudcomput/hadoop-3.2.1/etc/hadoop/core-site.xml /cloudcomput/hadoop-3.2.1/etc/hadoop/mapred-site.xml /cloudcomput/hadoop-3.2.1/etc/hadoop/hdfs-site.xml /cloudcomput/hadoop-3.2.1/etc/hadoop/yarn-site.xml
#一键重置本地免密登陆 (chattr -i /root/.ssh/authorized_keys) && (rm -rf /root/.ssh) && (mkdir /root/.ssh) && (ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa) && (cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys) && (chmod 700 ~/.ssh) && (chmod 644 ~/.ssh/authorized_keys) && (ssh localhost -o StrictHostKeyChecking=no) ##一键重新配置hadoop,并启动 (/cloudcomput/hadoop-3.2.1/sbin/stop-all.sh)&&(rm -rf /cloudcomput/hadoop-3.2.1/tmp) && (mkdir /cloudcomput/hadoop-3.2.1/tmp)&&(hadoop namenode -format)&&(/cloudcomput/hadoop-3.2.1/sbin/start-all.sh)
#一键重置本地免密登陆 (chattr -i /root/.ssh/authorized_keys) && (rm -rf /root/.ssh) && (mkdir /root/.ssh) && (ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa) && (cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys) && (chmod 700 ~/.ssh) && (chmod 644 ~/.ssh/authorized_keys) && (ssh localhost -o StrictHostKeyChecking=no) ##重新配置hadoop (/cloudcomput/hadoop-3.2.1/sbin/stop-all.sh)&&(rm -rf /cloudcomput/hadoop-3.2.1/tmp) && (mkdir /cloudcomput/hadoop-3.2.1/tmp)&&(hadoop namenode -format)&&(/cloudcomput/hadoop-3.2.1/sbin/start-all.sh)
访问hadoop 服务
搭建完成
查看日志
查看文件系统
🧪实验2-2 haoop 编程
本实验在 搭建好的 hadoop 平台上进行操作
hadoop平台
我借鉴类编程,面向对象的思想,封装了,pyhdfs 中的一些方法,进一步简化了hadoop编程,在java中可能进行hadoop编程需要导入很多包,但是python中只需要import 我编写的hadoop访问接口即可
二次封装hadoop访问
一行代码即可操作hadoop
导入我实现的 pyhdfs 的二次封装包
#导入我编写的hadoop访问类
import cloudcomput.hadoop_file_oprate as hdfs根据url ,为了简化实验,没有设置密码,获得连接
先创建一个本地文件 temp_file1.txt
上传文件之前先查看haoop已有的文件,即文件夹
创建文件夹
检查文件夹内部为空
上传文件
查看某个文件内容
实验2-3 mapreduce求最高气温
部分原始数据 2014010114 2014010216 2014010317 2014010410
#!/usr/local/python3/bin/python3 import sys for line in sys.stdin: fields = line.split() for item in fields: print(item[:4], ' ', item[-2:])
#!/usr/local/python3/bin/python3 import sys result={} for line in sys.stdin: kvs=line.strip().split(’ ') k=kvs[0] v=kvs[3] if k in result: if int(result[k])< int(v): result[k]=str(v) else: result[k]=str(v) for k,v in result.items(): print(’%s\t%s’ %(k,v))
脚本 run.sh 内容
# 配置 hadoop 的 执行命令 在安装路径的bin 文件中 HADOOP_CMD="/cloudcomput/hadoop-3.2.1/bin/hadoop" # 配置 配置 streaming jar包的 路径 STREAM_JAR_PATH="/cloudcomput/hadoop-3.2.1/share/hadoop/tools/lib/hadoop-streaming-3.2.1.jar" #配置 需要 计算的 输入文件的路径 #如果有 多个文件可以书写为 /{文件夹名称}/*.txt 或者其他格式 INPUT_FILE_PATH_1="/shiyan2/input.txt" #配置 输出文件的 文件夹目录 OUTPUT_PATH="/output" # 在执行之前如果 存在 输出文件夹 原本会报错 , #所以执行之前先删除 output 文件夹 , 再 导出文件 $HADOOP_CMD fs -rm -r skipTrash $OUTPUT_PATH # Step 1. # hadoop jar streaming.jar $HADOOP_CMD jar $STREAM_JAR_PATH \ -input $INPUT_FILE_PATH_1 \ -output $OUTPUT_PATH \ -mapper ./map.py \ -reducer ./reduce.py \ -file ./map.py \ -file ./reduce.py \ #配置 mapper 步骤的 算法py文件 #即 可以在 子节点进行的计算 #配置 reducer 步骤的 算法py文件 #需要 汇总计算 的文件
最后结果
2001 29
2007 99
2008 37
2010 17
2012 32
2013 29
2014 17
2015 99
2-4 日志分析
实验目的:统计不同ip登陆我服务器的次数
日志原料: 某django项目的近期日志,一共78.6mb
单行数据类型为 uwsgi标准日志输出
66.249.64.220 - - [03/Dec/2019:07:46:30 +0800] “GET /static/js/bootstrap-select.min.js HTTP/1.1” 200 33387 “https://www.limengkai.work/” “Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Safari/537.36”
编写 maplog程序
#!/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 #指定编译环境 import sys for line in sys.stdin: fields = line.split() print(fields[0],’ ‘,fields[3]) 编写reducelog #!/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 #指定编译环境 import sys result={} for line in sys.stdin: kvs=line.strip().split(’ ') # print(kvs) # 切分后格式[‘121.28.69.77’, ‘’, ‘’, ‘[16/Oct/2019:10:35:15’] # 代表ip k=kvs[0]
#代表访问时间 v=kvs[3] #访问次数 c=0 if k in result: # print(k,v) result[k]=str(int(result[k])+1) else: result[k]=str(1)
for k,v in result.items():
print(’%s\t%s’ %(k,v))
本地运行部分数据检测脚本正确性
101.132.100.6 1 101.132.102.45 1 101.132.104.157 5 101.132.110.72 4 101.132.114.23 5 101.132.144.145 1 101.132.156.172 2 101.132.159.51 5 101.132.166.245 9 101.132.177.14 1 101.132.182.68 1 101.132.188.111 1 101.132.191.83 4 101.132.193.68 2 101.132.69.5 1 101.132.78.36 4 101.132.97.53 1 101.198.186.223 25 101.228.126.192 1
检查脚本无误后,编写run.sh 脚本
# 配置 hadoop 的 执行命令 在安装路径的bin 文件中 HADOOP_CMD="/cloudcomput/hadoop-3.2.1/bin/hadoop" # 配置 配置 streaming jar包的 路径 STREAM_JAR_PATH="/cloudcomput/hadoop-3.2.1/share/hadoop/tools/lib/hadoop-streaming-3.2.1.jar" #配置 需要 计算的 输入文件的路径 #如果有 多个文件可以书写为 /{文件夹名称}/*.txt 或者其他格式 INPUT_FILE_PATH_1="/sy3/temp_file1.txt" #配置 输出文件的 文件夹目录 OUTPUT_PATH="/sy3output" # 在执行之前如果 存在 输出文件夹 原本会报错 , #所以执行之前先删除 output 文件夹 , 再 导出文件 $HADOOP_CMD fs -rm -r skipTrash $OUTPUT_PATH # Step 1. # hadoop jar streaming.jar $HADOOP_CMD jar $STREAM_JAR_PATH \ -input $INPUT_FILE_PATH_1 \ -output $OUTPUT_PATH \ -mapper ./maplog.py \ -reducer ./reducelog.py \ -file ./maplog.py \ -file ./reducelog.py \
#配置 mapper 步骤的 算法py文件
#即 可以在 子节点进行的计算
#配置 reducer 步骤的 算法py文件
#需要 汇总计算 的文件
目录结构
定linux 定期执行 crontab
#查看当前电脑上的所有定时任务
crontab -l
0 7 */1 * * /amyscript/sendemail.sh
20 5 1,2,3,4,5 * * /amyscript/sendtoxxx1.sh
20 5 6,7 * * /amyscript/sendtoxxx2.sh
#更改服务器上的定时任务
crontab -e
#更改成功的提示
crontab: installing new crontab
添加 该脚本 定期执行即可
查看hadoop 运算的日志计算 job
http://xxxxx:8088/cluster/app/application_1575331470326_0002
Finish job还没有结束
已经计算了 5分9秒
由于日志文件较大,服务器2g 运行,所以会等待一段时间
等待运行结束后
运行日志
部分结果,结果很长有上千 ip,其中我本人用得最多的,几个ip高达10万次
120.78.231.236 4 121.224.7.5 1 121.28.69.77 182393 121.28.69.79 1 121.28.69.82 7 121.28.69.83 8744 121.28.69.87 1 121.28.69.88 2656 61.157.96.12 5 61.157.96.14 134 61.182.207.142 37189 61.219.11.153 22 62.138.6.176 3 63.32.131.24 1 63.33.200.193 39
日志分析结果很有趣,发现还有来自德国 A类 的ip访问
199.102.164.164 1
2.56.8.17 1
200.19.156.22 1
经过ip查询
2.56.8.17来自德国法兰克福
实验3 ec2操作
实验四
Centos 安装docker
yum install docker
由于国内 pull 镜像很慢,所以我在阿里云做了自己的仓库来提高速度
访问我的镜像仓库
查看一个我的nginx
运行90个nginx 容器服务
在 58810到58899
/直接复制粘贴到终端,如果出现半角错误,请现在记事本纠正
for (( i = 10; i <= 15; i++ )) do (docker run -tdi --name mynginx$i -p 588$i:80 registry.cn-hangzhou.aliyuncs.com/mkmk/nginx:v1 'bash') && (docker exec -d mynginx$i 'bash' -c "nginx" ) done
请随意访问 (极少的端口可能已经被其他程序占用)
到
他们都是相互独立的nginx 镜像
docker启动我制作的jupyter镜像
操作hadoop
密码 zhaozhihong
连接hadoop, 进行python hadoop编程
Hadoop 创建文件夹 python实现
5-1 openstack 实验