反向代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
    "net/http"
    "net/http/httputil"
    "net/url"
)

func main() {
    //【[one line code] 一行代码http反向代理】
    //127.0.0.1:8900 转发到 10.0.12.110:6335
    //测试: curl http://127.0.0.1:8900

    u, _ := url.Parse("http://10.0.12.110:6335") //反向代理的目的地址
    http.ListenAndServe(":8900", httputil.NewSingleHostReverseProxy(u))

}

静态服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
    "net/http"
)

func main() {

    //【[one line code] 一行代码静态web服务】
    //测试: curl http://127.0.0.1:8901/a.txt

    // 静态web服务:
    http.ListenAndServe(":8901", http.FileServer(http.Dir("/tmp")))

    //【[one line code] 一行代码静态web服务带路径转发】
    // curl 127.0.0.1:8902/tmpfiles/a.txt
    // url路径/tmpfile 映射到/tmp
    /*
        http.Handle("/tmpfiles/", http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp"))))
        http.ListenAndServe(":8902", nil)
    */


}

当前比较好的sql格式化工具

以下在网上搜集了一些比较好的sql格式化工具,各有利弊。但对hive sql 来说目前还没有比较好的工具可以直接拿过来用。
1. ApexSQL Refactor SQL formatter
2. SQL Pretty Printer
         Instant SQL Formatter (在线免费版本 ) http://www.dpriver.com/pp/sqlformat.htm
         SQL Pretty Printer (桌面应用收费版本) http://www.dpriver.com/products/sqlpp/desktop_index.php
3. druid
         https://github.com/alibaba/druid 开源免费

sql格式化之druid

      druid(alibaba)实现了sql语法的分析(和antlr生成的parse非常像),目前已经支持大部分常用的sql语法。查看其代码发现Terence Parr(antlr的作者)说的挺对的,词法和语法分析十分的枯燥,而且容易出现错误。可维护性特别差。
      druid内部实现了一个format方法并支持很多种sql语法,虽然druid的主要方向并不在此,有些大柴小用但是如果可用也是极好的。目前看druid在hive的语法实现上不完全,有些语法还未支持(比如定义个es的外表)。但是要实现具体的语法,门槛还是有的,相较antlr还是有点复杂、而且学习该技能通用型较差。实地勘探发现druid在sql格式化方法中的两个问题,当然在格式化这个问题上这个还存在另外一个更大的问题就是注释(这个它并没有关注,只是保留了两个listener):

继续阅读

利用pyspark ,如何把key value 转换成我们自定义的一个string进行输出到hdfs。有些时候是不需要输出key只需要输出value; 有的时候是把key和value合并成一个字符串中间不需要tab分割。
看官方的这个文档很多参数不知道要写什么。
这个是要写入到hdfs,配置是hadoop的jobconf配置。需要看hadoop的jobconf配置。经查验conf 输入为dict类型
mapreduce.output.textoutputformat.separator 即可配置TextOutputFormat的分隔符,这个配置是在org.apache.hadoop.mapred.TextOutputFormat中。
1
tf.map(extracmap).saveAsHadoopFile("/tmp/test",outputFormatClass="org.apache.hadoop.mapred.TextOutputFormat",conf={'mapreduce.output.textoutputformat.separator':''})

完整实例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/python
# -*- coding: UTF-8 -*-

'''
命令
/home/mg/spark-2.2.0/bin/spark-submit --master yarn --num-executors 100 --name pathfilter --queue default good.py 20180128
测试
/home/mg/spark-2.2.0/bin/spark2-submit --master local good.py 20181009
'''

from __future__ import  print_function
from pyspark.sql.types import *
from pyspark import *
from pyspark.sql import Row
from pyspark.sql import SparkSession
import sys
import re
import json
import time

reload(sys)
sys.setdefaultencoding('utf-8')


#日志处理
def extracmap(line):
    try:
        line_list = line.split(' - {')
        line_json = '{'+line_list[1]
        date_time =  line_list[0].split('|')[0].split('.')
        mobj = json.loads(line_json)
        if mobj:
            tarobj = {}
            tarobj['distinct_id']=mobj.has_key('uid') and mobj['uid'] or '000001'
            tarobj['time'] = mobj.has_key('logTime') and int(time.mktime(time.strptime(mobj['logTime'],'%Y-%m-%d %H:%M:%S'))) or 0
            return (json.dumps(tarobj),"")
    except Exception, e:
        pass

def filtermap(line):
    if line :
        return True
    return False


def mymain(date):
    spark = SparkSession \
        .builder \
        .appName("goodoutput") \
        .config("spark.some.config.option", "some-value") \
        .getOrCreate()
    sc = spark.sparkContext

    tf = sc.textFile("/tmp/mylogs/"+date+"/")
    tf.map(extracmap).filter(filtermap).saveAsHadoopFile("/tmp/logs/"+date+"/",outputFormatClass="org.apache.hadoop.mapred.TextOutputFormat",conf={'mapreduce.output.textoutputformat.separator':''})

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print("Usage: good.py <date>", file=sys.stderr)
        exit(-1)
    mymain(sys.argv[1])

    1. 圆的定义 https://zh.wikipedia.org/zh-hans/%E5%9C%86
    2. 圆周率 https://zh.wikipedia.org/zh-hans/%E5%9C%93%E5%91%A8%E7%8E%87
    3. 圆的面积 https://zh.wikipedia.org/zh-hans/%E5%9C%86%E7%9A%84%E9%9D%A2%E7%A7%AF
  1. 圆的面积计算
    1. 逼近
      1. 上下界(这个方向研究者主要是优化逼近的速度)
        1. 割圆法
          1. 阿基米德
          2. 威理博·斯涅尔(Cyclometricus,1962年[来源请求])
          3. 惠更斯(De Circuli Magnitudine Inventa,1654年)
      2. 无限逼近
        1. 高斯格点
        2. 数值逼近(最容易操作的方法)
          1. 蒙特卡罗(掷飞镖:如果随机样本一致地散布于一个包含圆的正方形中,样本击中圆的比例趋近于圆和正方形的面积比)
    2. 拼图
      1. 圆分为很大但有限块然后重拼成一个相同面积的正方形
    3. 微积分
      1. 积分&无穷级数展开
  2. 参考文章:
    1. https://zh.m.wikihow.com/%E8%AE%A1%E7%AE%97%E5%9C%86%E5%91%A8%E7%8E%87-Pi
    2. π论 https://web.math.sinica.edu.tw/math_media/d282/28208.pdf

  1. 历史
    1. 原始SVM算法是由弗拉基米尔·万普尼克和亚历克塞·泽范兰杰斯于1963年发明的。
    2. 1992年,Bernhard E. Boser,Isabelle M. Guyon和弗拉基米尔·万普尼克提出了解一种通过将核技巧应用于最大间隔超平面来创建非线性分​​类器的方法。
      1. 由拉格朗日对偶简化原始问题,引入核方法。
    3. 当前标准的前身(软间隔)由Corinna Cortes和Vapnik于1993年提出,并于1995年发表 Support-Vector Networks https://dl.acm.org/citation.cfm?id=218929
    4. SMO 算法是由 Microsoft Research 的 John C. Platt 在 1998 年发表的一篇论 文《SequentialMinimalOptimizationAFastAlgorithmforTrainingSupportVectorMachines》
  2. wiki:
    1. https://zh.wikipedia.org/zh-cn/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA
    2. https://en.wikipedia.org/wiki/Support_vector_machine
  3. 支持向量机通俗导论(理解SVM的三层境界)https://blog.csdn.net/macyang/article/details/38782399/
  4. 线性代数-向量内积 http://dec3.jlu.edu.cn/webcourse/t000022/teach/chapter5/5_1.htm
  5. 老冯经典之作:纯白板手推SVM http://www.julyedu.com/video/play/18/429
  6. SVM Tutorial: Classification, Regression, and Ranking
    1. https://x-algo.cn/wp-content/uploads/2016/08/SVM-Tutorial-Classification-Regression-and-Ranking.pdf
  7. 核函数
    1. 讲解非常好的教程(里面有讲解 sigmod 函数和多项式的具体展开 。):
      1. ML Lecture 20: Support Vector Machine (SVM) 李弘毅 https://www.youtube.com/watch?v=QSEPStBgwRQ
      2. svm 两个重要的点都有讲解(hinge loss, max margin)
    2. 数据挖掘十大算法 – 核函数 https://wizardforcel.gitbooks.io/dm-algo-top10/content/svm-4.html
  8. libsvm
    1. https://www.csie.ntu.edu.tw/~cjlin/libsvm/
      1. 各种对svm的扩展案例: https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/
    2. svm 可用数据集合:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/
      1. rank
          1. 开源实现
            1. Large-scale rankSVM 
            2. http://www.cs.cornell.edu/people/tj/svm_light/svm_rank.html
          2. ranksvm原理 https://x-algo.cn/index.php/2016/08/09/ranksvm/
          3. RankSvm-基于点击数据的搜索排序算法 http://kubicode.me/2016/03/30/Machine%20Learning/RankSvm-Optimizing-Search-Engines-using-Clickthrough-Data/
          4. 应用场景
            1. 爱奇艺推荐系统架构与实践 王敏 2015 https://doc.mbalib.com/view/0fa428227a455b044575fec09310453a.html
            2. 机器学习在搜索排序中的应用 一淘及搜索事业部-搜索技术 仁重 http://topic.it168.com/factory/adc2013/doc/zenganxiang.pptx
            3. Learning To Rank在个性化电商搜索中的应用 吴晨(搜索BG) https://myslide.cn/slides/958
          5. 相关论文:
            1. Adapting Ranking SVM to Document Retrieval http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.136.9218&rep=rep1&type=pdf
      2. 点击转化率预测
        1. https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary.html#avazu
      3. 多分类:
        1. poker(德州扑克手牌的分类) https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass.html
        2. 来源: https://archive.ics.uci.edu/ml/datasets/Poker+Hand
        3. 相关论文:
          1. https://www.seas.upenn.edu/~cse400/CSE400_2006_2007/Pfund/PfundPaper.pdf Support Vector Machines in the Machine Learning Classifier for a Texas Hold’em Poker Bot
          2. http://www.wseas.us/e-library/conferences/crete2002/papers/444-494.pdf Evolutionary Data Mining With Automatic Rule Generalization
          3. https://pdfs.semanticscholar.org/905a/0f27e520b3f2627863f9fa94a87fda7060cd.pdf NN-based Poker Hand Classification and Game Playing
          4. https://eembdersler.files.wordpress.com/2010/09/2014913024-gokaydisken-project.pdf PREDICTING POKER HAND’S STRENGTH WITH ARTIFICIAL NEURAL NETWORKS
        4. 自己处理 https://github.com/whomm/pokerhand
          1. 把花色 和 大小映射到 1 – 52 之间 直接使用 svm -t 2 -c 100
            1. ../libsvm-3.23/svm-train -t 2 -c 100 ./poker.t
            2. awk -f mpre.awk poker >mp
            3. awk -f mpre.awk poker.t >mp.t
            4. 训练数据准确率Accuracy = 92.527% (23141/25010) (classification)
            5. 随机10000条测试数据 Accuracy = 28.06% (2806/10000) (classification)
          2. mlp 方法
            1. hidden_layer_sizes=(260,156,52), =’tanh’, solver=’lbfgs’, 正确率 98.92%,这个是对于测试集合的一个随机的样本,但是对于特定分类的准确率没有意义。
            2. 特定分类的准确率会很低 , 9 分类的数据就几条训练不出好的模型。

1)废弃oss批量删除bucket文件

对于非空的oss后台没有比较便捷的方式直接删除只能删除全部item然后再删除bucket

ossutil config 配置完成之后

    ./ossutil ls oss://bucketname/ | awk ‘{print $8}’ | xargs -I {} ./ossutil rm {}
参考资料:
     https://help.aliyun.com/document_detail/50452.html?spm=5176.87240.585413.1.KlUVHk
 2)用sslfofree 免费快速实现 slb https
https://www.sslforfree.com/ 提供免费的90天的证书,快过期renew需要重新申请一个新的证书。
申请完成后
格式转换
openssl x509 -in ca_bundle.crt -out ca_bundle.pem
openssl x509 -in certificate.crt -out certificate.pem
openssl rsa -in private.key -out private.key.pem
slb 创建服务器证书
证书内容: certificate.pem + “\n” + ca_bundle.pem
私钥: private.key.pem
然后添加监听 433接口即可

如果header头定义两个变量,
需要优先采取header1 均衡到后端服务器
如果header2存在就用header2均衡到后端服务器

主要应用场景在websocket的链接分发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#map section
map $http_header2 $selectone {
~_    $http_header2;     #header2 内容是***_***匹配是否有内容
''    $http_header1;        #header2 没有内容用header1
default $http_header1;
}
#split section
split_clients "$selectone" $bkservice {
50% webserv1;
*  webserv2;
}

server {
listen 80;
server_name www.test.com;

.......

location ~ ^/balanceservice {
proxy_pass http://$bkservice;
}
......

}

两个模块前后顺序没有关系,不影响最终使用(map 指令。这些不与处理阶段相关联的配置指令基本上都是“声明性的”(declarative),即不直接产生某种动作或者过程。Nginx 的作者 Igor Sysoev 在公开场合曾不止一次地强调,Nginx 配置文件所使用的语言本质上是“声明性的”,而非“过程性的”(procedural)。)
nginx/1.15.0 的代码和实际调试运行来看 只有真正使用变量的时候才会去调用具体的变量解析逻辑。

参考资料:
agentzh的nginx教程
nginx开发从入门到精通
nginx源码分析 3张图看懂
map模块详解
split_client 模块

  1. 压测工具
    1. https://github.com/rakyll/hey
  2. 域名支持
    1. 非www跳转www
  3. 文件系统优化
    1. 关闭 accesstime
      1. done
    2. 修改ulimit
      1. done ulimt -n 65535
  4. nginx
    1. rsync 主动同步同时解决 data目录单点问题
      1. https://rsync.samba.org/
      2. https://rsync.samba.org/how-rsync-works.html
      3. https://xdays.me/rsync%E6%96%87%E4%BB%B6%E5%90%8C%E6%AD%A5%E6%9C%8D%E5%8A%A1.html
    2. 图片反向代理缓存
      1. http://phl.iteye.com/blog/2256356
      2. http://labs.frickle.com/nginx_ngx_cache_purge/
    3. 进程数
  5.  php
    1. 升级php7
      1. 这个还是必须的:性能提升非常大
      2. https://blog.csdn.net/xiao_zhui/article/details/72556781
    2. php7性能优化
      1. http://www.laruence.com/2015/12/04/3086.html
      2. 开启opcache
        1. 软连发布需要特别注意:
          1. 建议参考:https://github.com/meolu/walle-web/issues/109
            1. opcache.validate_timestamps = 0,即关闭 opcache 文件更新检查;发布代码,高级任务里,发布完成后执行 curl 调用 web(php-fpm) 下的php, opcache_reset(); 不要使用 文件session、文件缓存之类的。
            2. php cli的opcache和 fpm的是分离的。
      3. 开启hugepage
      4. [root@good work]# sysctl vm.nr_hugepages=512[root@good work]# cat /proc/meminfo | grep Huge[root@good work]#
    3. laravel 性能优化
      1. https://segmentfault.com/a/1190000011569012
    4. 进程数目
  6.  缓存
    1. 优化核心入口缓存 效率提升2/3
    2. redis缓存链接数优化 多次变一次
    3. apc缓存
    4. 走本地redis
  7. 服务器升级cpu
  8. 日志保留时间 和 磁盘监控
  9. 机器端口策略
  10.  其他
    1. 邮件发送服务申请公共账号
  11. 数据库安全

 

#查看当前挂载了的磁盘
[root@good ~]# fdisk -l
磁盘 /dev/vda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0008d73a

设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 83884031 41940992 83 Linux

继续阅读