首页 文章 精选 留言 我的

精选列表

搜索[系统工具],共10000篇文章
优秀的个人博客,低调大师

【Spark Summit East 2017】基于Elastic Spark Streaming的自动伸缩系统

更多精彩内容参见云栖社区大数据频道https://yq.aliyun.com/big-data;此外,通过Maxcompute及其配套产品,低廉的大数据分析仅需几步,详情访问https://www.aliyun.com/product/odps。 本讲义出自PhuDuc Nguyen在Spark Summit East 2017上的演讲,主要介绍了不支持开箱即用的在不中断实时Spark Streaming任务的同时能够添加或删除节点的功能。并介绍了Elastic Spark Streaming任务能够自动调整对于数据流的体积和流量的需求。

优秀的个人博客,低调大师

Search-guard在ELK Stack日志分析系统中的应用

打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处: http://blog.csdn.net/gamer_gyt 博主微博: http://weibo.com/234654758 Github: https://github.com/thinkgamer 写在前边的话 在之前的一篇文章中介绍了Shield在Elk Stack中的权限保护,但由于Shield是收费的,所以就有人给出了免费的解决方案——Search-guard 简单说明 search-guard是elastcisearch的一款插件,提供加密,身份验证和授权,基于search guard SSL,另外提供可插入的身份验证/授权模块,search-guard是shield的替代品,可免费提供所有的基本安全功能,其功能特性: 基于用户和角色的权限控制 支持SSL和TLS方式安全认证 支持LDAP认证 环境说明 Ubuntu 16.04 Elasticsearch 2.4.1 Logstash 2.4.0 Kibana 4.6.1 部署 Elasticsearch配置search-guard 进入elasticsearch的根目录 安装search-guard-ssl bin/plugin install -b com.floragunn/search-guard-ssl/2.4.1.16 这里我们需要配置密钥和证书 依旧是在es 的根目录 git clone https://github.com/floragunncom/search-guard-ssl.git cd searchguard_ssl/example-pki-scripts 执行 ./example.sh 会默认生成证书 当然这里我们可以执行clean.sh删除安装的东西 拷贝相应的文件到指定目录,后续会有需要 cp node-0-keystore.jks ../../config cp truststore.jks ../../config 编辑ec根目录下的config/elasticsearch.yml,加入 searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks searchguard.ssl.transport.keystore_password: changeit searchguard.ssl.transport.truststore_filepath: truststore.jks searchguard.ssl.transport.truststore_password: changeit searchguard.ssl.transport.enforce_hostname_verification: false web访问:http://192.168.1.193:9200/ 会看到如下信息 { "name" : "M-Twins", "cluster_name" : "elasticsearch", "cluster_uuid" : "X6U0RRiaQ4ucBXokFj30Yw", "version" : { "number" : "2.4.1", "build_hash" : "c67dc32e24162035d18d6fe1e952c4cbcbe79d16", "build_timestamp" : "2016-09-27T18:57:55Z", "build_snapshot" : false, "lucene_version" : "5.5.2" }, "tagline" : "You Know, for Search" } web访问 http://192.168.1.193:9200/_searchguard/sslinfo?pretty { "principal" : null, "peer_certificates" : "0", "ssl_protocol" : null, "ssl_cipher" : null, "ssl_openssl_available" : false, "ssl_openssl_version" : -1, "ssl_openssl_version_string" : null, "ssl_openssl_non_available_cause" : "java.lang.ClassNotFoundException: org.apache.tomcat.jni.SSL", "ssl_provider_http" : null, "ssl_provider_transport_server" : "JDK", "ssl_provider_transport_client" : "JDK" } 在config/elasticsearch.yml配置文件中加入 #configure https searchguard.ssl.http.enabled: true searchguard.ssl.http.keystore_filepath: node-0-keystore.jks searchguard.ssl.http.keystore_password: changeit searchguard.ssl.http.truststore_filepath: truststore.jks searchguard.ssl.http.truststore_password: changeit https://192.168.1.193:9200/ (会提示证书错误) { "name" : "Zero", "cluster_name" : "elasticsearch", "cluster_uuid" : "X6U0RRiaQ4ucBXokFj30Yw", "version" : { "number" : "2.4.1", "build_hash" : "c67dc32e24162035d18d6fe1e952c4cbcbe79d16", "build_timestamp" : "2016-09-27T18:57:55Z", "build_snapshot" : false, "lucene_version" : "5.5.2" }, "tagline" : "You Know, for Search" } https://192.168.1.193:9200/_searchguard/sslinfo?pretty (会提示证书错误) { "principal" : null, "peer_certificates" : "0", "ssl_protocol" : "TLSv1.2", "ssl_cipher" : "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "ssl_openssl_available" : false, "ssl_openssl_version" : -1, "ssl_openssl_version_string" : null, "ssl_openssl_non_available_cause" : "java.lang.ClassNotFoundException: org.apache.tomcat.jni.SSL", "ssl_provider_http" : "JDK", "ssl_provider_transport_server" : "JDK", "ssl_provider_transport_client" : "JDK" } 配置客户认证 searchguard.ssl.http.clientauth_mode: REQUIRE 出现web不能访问的情况,由于该配置是可选的,所以暂时不配置 这里需要解释一下: 默认执行的./example.sh 是以kiri为用户名的,这个我们可以通过vim example.sh可以看的出来,在elasticsearch.yml中的**.passwordd可以自己设置 安装search-guard bin/plugin install -b com.floragunn/search-guard-2/2.4.1.7 安装之后不做任何设置再次重启elasticsearch,web访问会出现以下状况: Search Guard not initialized (SG11) 这是提示我们没有进行初始化 编辑config/elasticsearch.yml,加入以下两行 searchguard.authcz.admin_dn: - CN=kirk,OU=client,O=client,L=test, C=DE #由于我们是采用的默认的example.sh进行密钥生成的 - cn=admin,ou=Test,ou=ou,dc=company,dc=com 此时需要重新启动elasticsearch,因为需要把我们新更改的elasticsearch.yml加载进来,否则在初始化的时候会报错 复制 kirk-keystore.jks和truststore.jks到 plugins/search-guard-2/tools目录下,然后执行初始化命令 ./sgadmin.sh -ts truststore.jks -ks kirk-keystore.jks -cd ../sgconfig -icl 然后重启启动elasticsearch,web访问会提示你输入账号和密码 Logstash配置search-guard 依旧采用rsyslog的例子,机器配置rsyslog.conf,最后两行加入 *.* @@localhost:5000 *.* @localhost:5000 重启rsyslog服务 在logstash目录下编辑一个新文件rsyslog.conf,内容如下: input { tcp{ port => 5000 type => syslog } udp{ port => 5000 type => syslog } } output { stdout { codec=> rubydebug } elasticsearch { hosts => ["localhost:9200"] ssl => true ssl_certificate_verification => true truststore => "/opt/elk/elasticsearch-2.4.1/config/truststore.jks" truststore_password => changeit user => logstash password => logstash } } 这里的logstash用户在 elasticsearch安装目录下的plugin/seach-guard-2/sgconfig/sg_roles.yml中 这里我们说一下sgconfig这几个文件: Search-guard的动态配置 sg_config.yml:配置验证器和授权后端 sg_roles.yml:定义角色和相关的权限 sg_roles_mapping.yml:将后端角色,主机和用户映射到角色 sg_internal_users.yml:用户和散列密码(使用hasher.sh哈希) sg_action_groups.yml:组权限在一起 接着我们设置logstash用户的权限,我们可以在sg_roles.yml中方看到logstash用户具有的权限 sg_logstash: cluster: - indices:admin/template/get - indices:admin/template/put indices: 'logstash-*': '*': - CRUD - CREATE_INDEX '*beat*': '*': - CRUD - CREATE_INDEX 启动配置文件,测试登录,elasticsearch便可以接收到rsyslog发送过来的日志 Kibana配置 编辑kibana.yml server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "https://localhost:9200" elasticsearch.username: "kibanaserver" elasticsearch.password: "kibanaserver" elasticsearch.ssl.ca: /opt/elk/elasticsearch-2.4.1/search-guard-ssl/example-pki-scripts/kirk-signed.pem elasticsearch.ssl.verify: false 启动kibana服务,web访问,便会提示你输入密码 验证器配置: 验证器配置: Vim plugins/search-guard-2/sgconfig/sg_config.yml searchguard: dynamic: http: ... authc: kibana_auth_domain: enabled: true order: 1 http_authenticator: type: basic challenge: true authentication_backend: type: internal authz: ... 其他的自定义角色和角色对应的权限请参考官网资料对sgconfig文件夹的几个文件进行配置即可

优秀的个人博客,低调大师

Spark-ML-基于云平台和用户日志的推荐系统

架构: 数据收集:spark stareming从Azure Queue收集数据,通过自定义的spark stareming receiver,源源不断的消费流式数据。 数据处理: spark stareming分析用户行为日志数据,通过实时的聚集,统计报表现有的应用的运营信息,,也可以通过离线的训练模型,对实现数据进行预测和标注。 结果输出:hdfs 数据收集用到了这个东西,miner是个js可以收集用户的行为日志,前端收集和回传用户行为日志。 静态数据 动态数据 代码见:https://github.com/jinhang/jquery-behavior-miner 前台收集发送给Azure spark streaming 分析日志 spark 训练ALS spark使用ALS进行推荐 协同过滤 协同过滤(Collaborative Filtering, 简称CF),wiki上的定义是:简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐使用者感兴趣的资讯,个人透过合作的机制给予资讯相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选资讯,回应不一定局限于特别感兴趣的,特别不感兴趣资讯的纪录也相当重要。 以上定义太拗口,举个简单的例子:我现在多年不看日本anime的新番了,最近突然又想看几部新番,但又不知道这么多新番中看哪些比较好,于是我就找几个同样喜欢日本动漫的朋友来咨询。我第一个想咨询的朋友是和我口味最像的,我们都特别喜欢看《虫师》、《黑之契约者》、《寒蝉》这样的小众动画;我问的第二个朋友和我口味差不多,他特别喜欢看《钢炼》《无头骑士异闻录》这样的动画,我虽然喜欢,但不像他那么喜欢;由于身边喜欢日本动画的朋友不多,剩下第三个可以咨询的是一个宅女,平常经常看腐、宅、基的动漫,完全跟我不是一路人,于是问了下她推荐的片子,并将这些片子打上的黑名单的标签。然后我就开始看第一个朋友推荐的片子了,要是时间特别多又很无聊我可能会看第二个朋友推荐的,但打死我也不会看第三个朋友推荐的。这就是协同过滤的一个简化、小众版。 如何进行相似度度量 接着上面的例子,我可以通过我和其它朋友共同喜欢某个或某类动漫来确定我们的口味是否一样,那么如何以数学或者机器的形式来表示这个“口味一样”呢?通常,是通过“距离”来表示,例如:欧几里得距离、皮尔逊相关度、曼哈顿距离、Jaccard系数等等。 欧几里得距离 欧几里德距离(Euclidean Distance),最初用于计算欧几里得空间中两个点的距离,在二维空间中,就是我们熟悉的两点间的距离,x、y表示两点,维度为n: [Math Processing Error]d(x,y)=(∑in(xi−yi)2) 相似度: [Math Processing Error]sim(x,y)=11+d(x,y) 皮尔逊相关度 皮尔逊相关度(Pearson Correlation Coefficient),用于判断两组数据与某一直线拟合程度的一种度量,取值在[-1,1]之间。当数据不是很规范的时候(如偏差较大),皮尔逊相关度会给出较好的结果。 [Math Processing Error]p(x,y)=∑xiyi−nxy¯(n−1)SxSy=n∑xiyi−∑xi∑yin∑xi2−(∑xi)2n∑yi2−(∑yi)2 曼哈顿距离 曼哈顿距离(Manhattan distance),就是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。 [Math Processing Error]d(x,y)=∑∥xi−yi∥ Jaccard系数 Jaccard系数,也称为Tanimoto系数,是Cosine相似度的扩展,也多用于计算文档数据的相似度。通常应用于x为布尔向量,即各分量只取0或1的时候。此时,表示的是x,y的公共特征的占x,y所占有的特征的比例: [Math Processing Error]T(x,y)=x∙y∥x∥2+∥y∥2−x∙y=∑xiyi∑xi2+∑yi2−∑xiyi 计算推荐 根据上述“距离”的算法,我们可以找出与自己“口味一样”的人了,但这并不是目的,目的是找出推荐的物品。一种常用的做法是选出与你兴趣相同的N个人,然后根据这N个人的记录来进行加权推荐。具体如下,假设已经计算出欧几里得相似度: 朋友 相似度 A SA B SB C SC A 0.95 10.0 9.5 9.0 8.55 - - B 0.80 8.5 6.8 7.5 6 5.0 4 C 0.25 - - 6.5 1.625 9.0 2.25 *总计 16.3 16.175 6.25 Sim.Sum 1.75 2 1.05 总计 Sim.Sum 9.31 8.09 5.95* 其中,s.x开头的表示相似度与评分的乘积,Sim.Sum表示打过分的朋友的相似度之和。可以看出根据三位友人的推荐,我从这三个东西中A来看。 Item CF与User CF 基于用户的协同过滤(User CF),其基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。上述过程就属于User CF。 基于物品的CF(Item CF)的原理和基于用户的CF类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。两者的计算复杂度和适用场景皆不同。 public class UserSideCF implements Serializable { private static final Pattern TAB = Pattern.compile("\t"); public MatrixFactorizationModel buildModel(RDD<Rating> rdd) { //训练模型 int rank = 10; int numIterations = 20; MatrixFactorizationModel model = ALS.train(rdd, rank, numIterations, 0.01); return model; } public RDD<Rating>[] splitData() { //分割数据,一部分用于训练,一部分用于测试 SparkConf sparkConf = new SparkConf().setAppName("JavaALS").setMaster("local[2]"); JavaSparkContext sc = new JavaSparkContext(sparkConf); JavaRDD<String> lines = sc.textFile("/home/nodin/ml-100k/u.data"); JavaRDD<Rating> ratings = lines.map(line -> { String[] tok = TAB.split(line); int x = Integer.parseInt(tok[0]); int y = Integer.parseInt(tok[1]); double rating = Double.parseDouble(tok[2]); return new Rating(x, y, rating); }); RDD<Rating>[] splits = ratings.rdd().randomSplit(new double[]{0.6,0.4}, 11L); return splits; } public static void main(String[] args) { UserSideCF cf = new UserSideCF(); RDD<Rating>[] splits = cf.splitData(); MatrixFactorizationModel model = cf.buildModel(splits[0]); Double MSE = cf.getMSE(splits[0].toJavaRDD(), model); System.out.println("Mean Squared Error = " + MSE); //训练数据的MSE Double MSE1 = cf.getMSE(splits[1].toJavaRDD(), model); System.out.println("Mean Squared Error1 = " + MSE1); //测试数据的MSE } public Double getMSE(JavaRDD<Rating> ratings, MatrixFactorizationModel model) { //计算MSE JavaPairRDD usersProducts = ratings.mapToPair(rating -> new Tuple2<>(rating.user(), rating.product())); JavaPairRDD<Tuple2<Integer, Integer>, Double> predictions = model.predict(usersProducts.rdd()) .toJavaRDD() .mapToPair(new PairFunction<Rating, Tuple2<Integer, Integer>, Double>() { @Override public Tuple2<Tuple2<Integer, Integer>, Double> call(Rating rating) throws Exception { return new Tuple2<>(new Tuple2<>(rating.user(), rating.product()), rating.rating()); } }); JavaPairRDD<Tuple2<Integer, Integer>, Double> ratesAndPreds = ratings .mapToPair(new PairFunction<Rating, Tuple2<Integer, Integer>, Double>() { @Override public Tuple2<Tuple2<Integer, Integer>, Double> call(Rating rating) throws Exception { return new Tuple2<>(new Tuple2<>(rating.user(), rating.product()), rating.rating()); } }); JavaPairRDD joins = ratesAndPreds.join(predictions); return joins.mapToDouble(new DoubleFunction<Tuple2<Tuple2<Integer, Integer>, Tuple2<Double, Double>>>() { @Override public double call(Tuple2<Tuple2<Integer, Integer>, Tuple2<Double, Double>> o) throws Exception { double err = o._2()._1() - o._2()._2(); return err * err; } }).mean(); } }

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册