Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
一個(gè)Apache Storm v2.0流計(jì)算入門項(xiàng)目的開發(fā)、測(cè)試和運(yùn)行(IDEA/Maven)
關(guān)于流計(jì)算框架Apache Storm最新版的安裝,可以參考:
流計(jì)算框架-最新版Apache Storm v2.0單機(jī)模式安裝詳細(xì)步驟
流計(jì)算框架Apache Storm核心概念、架構(gòu)設(shè)計(jì)
應(yīng)用名稱:firststorm
storm-client 依賴包信息,添加到項(xiàng)目的pom.xml文件中。
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-client</artifactId>
<version>2.0.0</version>
</dependency>
maven會(huì)自動(dòng)下載相關(guān)依賴并放到Maven Dependencies下,這些jar包可以點(diǎn)擊下拉查看,并且會(huì)自動(dòng)添加到項(xiàng)目classpath中,作為編譯使用,等jar包全部下載完畢,現(xiàn)在開始編寫具體的計(jì)算邏輯了,在這個(gè)項(xiàng)目中我們把所有的類都建立在包c(diǎn)om.rickie.bigdata.firststorm下。
storm提供了兩種運(yùn)行模式:本地模式(Local Mode)和分布式模式。本地模式針對(duì)開發(fā)調(diào)試storm topologies非常有用。
因?yàn)槎鄶?shù)程序開發(fā)者都是使用windows系統(tǒng)進(jìn)行程序開發(fā),如果在本機(jī)不安裝storm環(huán)境的情況下,如何在本地開發(fā)、調(diào)試storm程序呢?你可以參考本文提供的解決方案。
如下來自Storm 官方文檔:
http://storm.apache.org/releases/2.0.0-SNAPSHOT/Local-mode.html
Local Mode
Local mode simulates a Storm cluster in process and is useful for developing and testing topologies. Running topologies in local mode is similar to running topologies on a cluster.
To run a topology in local mode you have two options. The most common option is to run your topology with storm local instead of storm jar.
This will bring up a local simulated cluster and force all interactions with nimbus to go through the simulated cluster instead of going to a separate process.
If you want to do some automated testing but without actually launching a storm cluster you can use the same classes internally that storm local does.
To do this you first need to pull in the dependencies needed to access these classes. For the java API you should depend on storm-server as a test dependency.
To create an in-process cluster, simply use the LocalCluster class.
如上文所述,使用本地模式(Local Mode),需要先引入storm-server 依賴包。
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-server</artifactId>
<version>2.0.0</version>
<scope>test</scope>
</dependency>
引入的storm-server 依賴包。
在本地模式上運(yùn)行topology類似在一個(gè)集群上運(yùn)行topology。
創(chuàng)建一個(gè)本地集群,大致代碼如下所示:
完整代碼可以參考下面。
(1)首先建立RandomSpout類作為數(shù)據(jù)源,并且繼承于父類BaseRichSpout,確定后可以看到系統(tǒng)自動(dòng)補(bǔ)全3個(gè)方法:nextTuple,open和declareOutputFields。
我們現(xiàn)在就需要重寫這3個(gè)方法,open方法是數(shù)據(jù)源的初始化,nextTuple的作用是把Tuple發(fā)送至下游,declareOutputFields用來定義輸出字段,下面我們手動(dòng)分配一個(gè)數(shù)組,并且隨機(jī)取里面的元素,代碼如下:
package com.rickie.bigdata;
import org.apache.storm.spout.SpoutOutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichSpout;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Values;
import java.util.Map;
import java.util.Random;
public class RandomSpout extends BaseRichSpout {
private SpoutOutputCollector collector;
private static String[] words = {"Rickie", "Hadoop", "MapReduce", "Storm", "Spark", "Spark Streaming", "Flink"};
@Override
public void open(Map<String, Object> map, TopologyContext topologyContext,
SpoutOutputCollector spoutOutputCollector) {
this.collector = spoutOutputCollector;
}
@Override
public void nextTuple() {
String word = words[new Random().nextInt(words.length)];
collector.emit(new Values(word));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("randomString"));
}
}
(2)然后新建一個(gè)類SenqueceBolt,繼承于BaseBasicBolt類,并且重寫方法execute和declareOutputFields。
這個(gè)類就是用于執(zhí)行具體的作業(yè),準(zhǔn)確的說是execute方法用來執(zhí)行相關(guān)的計(jì)算,這里只是簡(jiǎn)單的輸出,代碼如下:
package com.rickie.bigdata;
import org.apache.storm.topology.BasicOutputCollector;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseBasicBolt;
import org.apache.storm.tuple.Tuple;
public class SequenceBolt extends BaseBasicBolt {
@Override
public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {
String word = (String) tuple.getValue(0);
String out = "Hello " + word +"!";
System.out.println(out);
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
}
}
(3)最后建立一個(gè)類FirstStorm。
這個(gè)類是主類,在main方法中定義Topology,并且綜合設(shè)置Spout和Bolt,從而調(diào)用其中的方法,這里流式計(jì)算時(shí)間設(shè)置為30s,代碼如下:
package com.rickie.bigdata;
import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.StormSubmitter;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.utils.Utils;
public class FirstStorm
{
public static void main( String[] args ) throws Exception {
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new RandomSpout());
builder.setBolt("bolt", new SequenceBolt()).shuffleGrouping("spout");
Config conf = new Config();
conf.setDebug(false);
String name = "firststorm";
if(args != null && args.length >0){
name = args[0];
conf.setNumWorkers(3);
try {
StormSubmitter.submitTopology(name, conf, builder.createTopology());
} catch (Exception e) {
e.printStackTrace();
}
} else {
try(LocalCluster cluster = new LocalCluster()) {
cluster.submitTopology("firststorm", conf, builder.createTopology());
Utils.sleep(10000);
cluster.killTopology("firststorm");
cluster.shutdown();
}
}
System.out.println( "Well done!" );
}
}
可以用本地模式運(yùn)行,在IDEA中直接運(yùn)行即可,方便開發(fā)調(diào)試。
在Console可以看到如下輸出信息:
接下來我們將這個(gè)項(xiàng)目放到Storm服務(wù)器集群中運(yùn)行。
storm jar 命令用于啟動(dòng)一個(gè)Topology。
(1)以本地模式(Local Mode)運(yùn)行
storm local firststorm-1.0-SNAPSHOT.jar com.rickie.bigdata.FirstStorm
運(yùn)行結(jié)果和之前IDEA本地模式運(yùn)行輸出類似。
(2)以分布式模式運(yùn)行
storm jar firststorm-1.0-SNAPSHOT.jar com.rickie.bigdata.FirstStorm RickieStorm
可以查看worker日志,看到SequenceBolt 線程輸出的信息。只有kill 這個(gè)topology,日志輸出信息才會(huì)終止。
在Storm架構(gòu)中,Topology代表的并不是確定的作業(yè),而是持續(xù)的計(jì)算過程,在確定的業(yè)務(wù)邏輯處理框架下,輸入數(shù)據(jù)源源不斷地進(jìn)入系統(tǒng),經(jīng)過流式處理后以較低的延遲產(chǎn)生輸出。如果不主動(dòng)結(jié)束這個(gè)Topology或者關(guān)閉Storm集群,那么數(shù)據(jù)處理的過程就會(huì)持續(xù)地進(jìn)行下去。
另外需要注意的是:由于在分布式模式下運(yùn)行,worker工作在獨(dú)立的進(jìn)程中,因此無法直接在storm jar命令行輸出窗口,看到上述SequenceBolt組件的輸出信息。
(3)storm list 查看正在運(yùn)行的topologies和它們的狀態(tài)
storm list
也可以通過訪問http://192.168.56.103:8080/ storm server,查看并操作正在運(yùn)行的 topology。
(4)kill正在運(yùn)行的topology
storm kill [storm name]
運(yùn)行“storm kill”這個(gè)命令,僅僅只是調(diào)用Nimbus的Thirft接口去kill掉相對(duì)應(yīng)的Topology。
Nimbus接受到kill命令,會(huì)將”kill”事務(wù)應(yīng)用到topology上,修改Topology的狀態(tài)為”killed”以及將“remove”事件列入到未來幾秒鐘的計(jì)劃中,即未來幾秒后會(huì)觸發(fā)remove時(shí)間。這里的kill實(shí)際上停止相關(guān)的Worker。
默認(rèn)kill的等待時(shí)間是Topology消息的超時(shí)時(shí)間,但是可以通過storm kill命令中的-w標(biāo)志對(duì)其進(jìn)行重寫,設(shè)置了以上參數(shù)之后,topology會(huì)在指定的等待時(shí)間停止運(yùn)行。這樣給了Topology一個(gè)機(jī)會(huì)在shutdown workers之后完成當(dāng)前沒有處理完成的任務(wù);刪除Topology以及清理zookeeper中的分配信息和靜態(tài)信息;清理存儲(chǔ)在本地的心跳dir和jar/configs。
現(xiàn)在,第一個(gè)Storm入門項(xiàng)目的開發(fā)和測(cè)試運(yùn)行都完畢了,更復(fù)雜的流計(jì)算邏輯模式也基本相同,主要就是Maven項(xiàng)目中出現(xiàn)了更復(fù)雜的模塊和調(diào)用,整個(gè)運(yùn)行的流程其實(shí)都是差不多的。恭喜你,現(xiàn)在算是步入Storm流式計(jì)算的殿堂的大門了。
程鏈接:https://www.itwangzi.cn/4907.html
Storm 實(shí)現(xiàn)了低延遲,還做不到高吞吐,也不能在故障發(fā)生時(shí)準(zhǔn)確地處理計(jì)算狀態(tài);Spark Streaming通過采用微批處理方法實(shí)現(xiàn)了高吞吐和容錯(cuò)性,但是犧牲了低延遲和實(shí)時(shí)處理能力,也不能使窗口與自然時(shí)間相匹配,并且表現(xiàn)力欠佳。而flink就是目前為止的最佳答案。
我們?cè)谶x擇一個(gè)新的技術(shù)框架的時(shí)候,首先考慮的是他的應(yīng)用場(chǎng)景,再牛逼的框架沒有應(yīng)用場(chǎng)景也是一無是處,當(dāng)然牛逼的框架大多都是基于某一個(gè)或者某一類應(yīng)用場(chǎng)景而產(chǎn)生,而flink主要應(yīng)用于以下三個(gè)場(chǎng)景:
Flink 主要應(yīng)用場(chǎng)景有三類:
1.Event-driven Applications【事件驅(qū)動(dòng)】
2.Data Analytics Applications【分析】
3.Data Pipeline Applications【管道式ETL】
上圖包含兩塊:
Traditional transaction Application(傳統(tǒng)事務(wù)應(yīng)用)
Event-driven Applications(事件驅(qū)動(dòng)應(yīng)用)
Traditional transaction Application執(zhí)行流程:
比如點(diǎn)擊流Events可以通過Application寫入Transaction DB(數(shù)據(jù)庫),同時(shí)也可以通過Application從Transaction DB將數(shù)據(jù)讀出,并進(jìn)行處理,當(dāng)處理結(jié)果達(dá)到一個(gè)預(yù)警值就會(huì)觸發(fā)一個(gè)Action動(dòng)作,這種方式一般為事后諸葛亮。
Event-driven Applications執(zhí)行流程:
比如采集的數(shù)據(jù)Events可以不斷的放入消息隊(duì)列,F(xiàn)link應(yīng)用會(huì)不斷ingest(消費(fèi))消息隊(duì)列中的數(shù)據(jù),F(xiàn)link 應(yīng)用內(nèi)部維護(hù)著一段時(shí)間的數(shù)據(jù)(state),隔一段時(shí)間會(huì)將數(shù)據(jù)持久化存儲(chǔ)(Persistent sstorage),防止Flink應(yīng)用死掉。Flink應(yīng)用每接受一條數(shù)據(jù),就會(huì)處理一條數(shù)據(jù),處理之后就會(huì)觸發(fā)(trigger)一個(gè)動(dòng)作(Action),同時(shí)也可以將處理結(jié)果寫入外部消息隊(duì)列中,其他Flink應(yīng)用再消費(fèi)。
典型的事件驅(qū)動(dòng)類應(yīng)用:
1.欺詐檢測(cè)(Fraud detection)
2.異常檢測(cè)(Anomaly detection)
3.基于規(guī)則的告警(Rule-based alerting)
4.業(yè)務(wù)流程監(jiān)控(Business process monitoring)
5.Web應(yīng)用程序(社交網(wǎng)絡(luò))
Data Analytics Applications包含Batch analytics(批處理分析)和Streaming analytics(流處理分析)。
Batch analytics可以理解為周期性查詢:
比如Flink應(yīng)用凌晨從Recorded Events中讀取昨天的數(shù)據(jù),然后做周期查詢運(yùn)算,最后將數(shù)據(jù)寫入Database或者HDFS,或者直接將數(shù)據(jù)生成報(bào)表供公司上層領(lǐng)導(dǎo)決策使用。
Streaming analytics可以理解為連續(xù)性查詢:
比如實(shí)時(shí)展示雙十一天貓銷售GMV,用戶下單數(shù)據(jù)需要實(shí)時(shí)寫入消息隊(duì)列,F(xiàn)link 應(yīng)用源源不斷讀取數(shù)據(jù)做實(shí)時(shí)計(jì)算,然后不斷的將數(shù)據(jù)更新至Database或者K-VStore,最后做大屏實(shí)時(shí)展示。
Data Pipeline Applications包含Periodic (周期性)ETL和Data Pipeline(管道)
Periodic ETL:比如每天凌晨周期性的啟動(dòng)一個(gè)Flink ETL Job,讀取傳統(tǒng)數(shù)據(jù)庫中的數(shù)據(jù),然后做ETL,最后寫入數(shù)據(jù)庫和文件系統(tǒng)。
Data Pipeline:比如啟動(dòng)一個(gè)Flink 實(shí)時(shí)應(yīng)用,數(shù)據(jù)源(比如數(shù)據(jù)庫、Kafka)中的數(shù)據(jù)不斷的通過Flink Data Pipeline流入或者追加到數(shù)據(jù)倉庫(數(shù)據(jù)庫或者文件系統(tǒng)),或者Kafka消息隊(duì)列。
阿里在Flink的應(yīng)用主要包含四個(gè)模塊:實(shí)時(shí)監(jiān)控、實(shí)時(shí)報(bào)表、流數(shù)據(jù)分析和實(shí)時(shí)倉庫。
實(shí)時(shí)監(jiān)控:
用戶行為預(yù)警、app crash 預(yù)警、服務(wù)器攻擊預(yù)警
對(duì)用戶行為或者相關(guān)事件進(jìn)行實(shí)時(shí)監(jiān)測(cè)和分析,基于風(fēng)控規(guī)則進(jìn)行預(yù)警
實(shí)時(shí)報(bào)表:
雙11、雙12等活動(dòng)直播大屏
對(duì)外數(shù)據(jù)產(chǎn)品:生意參謀等
數(shù)據(jù)化運(yùn)營(yíng)
流數(shù)據(jù)分析:
實(shí)時(shí)計(jì)算相關(guān)指標(biāo)反饋及時(shí)調(diào)整決策
內(nèi)容投放、無線智能推送、實(shí)時(shí)個(gè)性化推薦等
實(shí)時(shí)倉庫:
數(shù)據(jù)實(shí)時(shí)清洗、歸并、結(jié)構(gòu)化
數(shù)倉的補(bǔ)充和優(yōu)化
欺詐檢測(cè)
背景:
假設(shè)你是一個(gè)電商公司,經(jīng)常搞運(yùn)營(yíng)活動(dòng),但收效甚微,經(jīng)過細(xì)致排查,發(fā)現(xiàn)原來是羊毛黨在薅平臺(tái)的羊毛,把補(bǔ)給用戶的補(bǔ)貼都薅走了,錢花了不少,效果卻沒達(dá)到。怎么辦呢?
你可以做一個(gè)實(shí)時(shí)的異常檢測(cè)系統(tǒng),監(jiān)控用戶的高危行為,及時(shí)發(fā)現(xiàn)高危行為并采取措施,降低損失。
系統(tǒng)流程:
1.用戶的行為經(jīng)由app 上報(bào)或web日志記錄下來,發(fā)送到一個(gè)消息隊(duì)列里去;
2.然后流計(jì)算訂閱消息隊(duì)列,過濾出感興趣的行為,比如:購買、領(lǐng)券、瀏覽等;
3.流計(jì)算把這個(gè)行為特征化;
4.流計(jì)算通過UDF調(diào)用外部一個(gè)風(fēng)險(xiǎn)模型,判斷這次行為是否有問題(單次行為);
5.流計(jì)算里通過CEP功能,跨多條記錄分析用戶行為(比如用戶先做了a,又做了b,又做了3次c),整體識(shí)別是否有風(fēng)險(xiǎn);
6.綜合風(fēng)險(xiǎn)模型和CEP的結(jié)果,產(chǎn)出預(yù)警信息。
《大數(shù)據(jù)和人工智能交流》頭條號(hào)向廣大初學(xué)者新增C 、Java 、Python 、Scala、javascript 等目前流行的計(jì)算機(jī)、大數(shù)據(jù)編程語言,希望大家以后關(guān)注本頭條號(hào)更多的內(nèi)容。
一、搭建zookeeper集群
注意:為了大家學(xué)習(xí)的方便,這里在一臺(tái)機(jī)器上搭建zookeeper集群,在一個(gè)機(jī)器搭建集群和在多臺(tái)機(jī)器搭建集群原理是相同的。搭建單節(jié)點(diǎn)(一臺(tái)主機(jī)放3個(gè)服務(wù)【1個(gè)leader,2個(gè)flower】)zk集群
在/home建立zk1、zk2、zk3三個(gè)目錄,3個(gè)目錄搭建過程類似。
(一)搭建過程
【1】搭建節(jié)點(diǎn)1
(1)在zk1建立zkdata ,在zkdata下存放myid文件
[root@node1 zkdata]# more myid
1
(2) tar -zxvf zookeeper-3.4.5.tar.gz
[root@node1 zk1]# ls
zkdata zookeeper-3.4.5 zookeeper-3.4.5.tar.gz
(3)修改配置文件
[root@node1 zk1]# cd zookeeper-3.4.5
[root@node1 zookeeper-3.4.5]# cd conf
[root@node1 zookeeper-3.4.5]# mv zoo_sample.cfg zoo.cfg
[root@node1 conf]# vi zoo.cfg
注意:修改的配置信息
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
dataDir=/home/zk1/zkdata
server.1=node1:2888:3888
server.2=node1:2889:3889
server.3=node1:2890:3890
【2】搭建節(jié)點(diǎn)2
(1)在zk1建立zkdata ,在zkdata下存放myid文件
[root@node1 zkdata]# more myid
2
(2) tar -zxvf zookeeper-3.4.5.tar.gz
[root@node1 zk1]# ls
zkdata zookeeper-3.4.5 zookeeper-3.4.5.tar.gz
(3)修改配置文件
[root@node1 zk1]# cd zookeeper-3.4.5
[root@node1 zookeeper-3.4.5]# cd conf
[root@node1 zookeeper-3.4.5]# mv zoo_sample.cfg zoo.cfg
[root@node1 conf]# vi zoo.cfg
注意:修改的配置信息
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2182
dataDir=/home/zk2/zkdata
server.1=node1:2888:3888
server.2=node1:2889:3889
server.3=node1:2890:3890
【3】搭建節(jié)點(diǎn)3
(1)在zk1建立zkdata ,在zkdata下存放myid文件
[root@node1 zkdata]# more myid
3
(2) tar -zxvf zookeeper-3.4.5.tar.gz
[root@node1 zk1]# ls
zkdata zookeeper-3.4.5 zookeeper-3.4.5.tar.gz
(3)修改配置文件
[root@node1 zk1]# cd zookeeper-3.4.5
[root@node1 zookeeper-3.4.5]# cd conf
[root@node1 zookeeper-3.4.5]# mv zoo_sample.cfg zoo.cfg
[root@node1 conf]# vi zoo.cfg
注意:修改的配置信息
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2183
dataDir=/home/zk3/zkdata
server.1=node1:2888:3888
server.2=node1:2889:3889
server.3=node1:2890:3890
(二)、啟動(dòng)集群
1、啟動(dòng)各個(gè)
[root@node1 bin]# ./zkServer.sh start
JMX enabled by default
Using config: /home/zk1/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... ./zkServer.sh: line 103: [: /tmp/zookeeper: binary operator expected
STARTED
[root@node1 bin]#
2、在zk1、zk2、zk3各個(gè)目錄查看節(jié)點(diǎn)狀態(tài)
[root@node1 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /home/zk1/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
二、搭建storm集群
(一)、準(zhǔn)備工作
1、zk必須正常,3個(gè)節(jié)點(diǎn)聯(lián)網(wǎng)通信正常。我這里是3個(gè)節(jié)點(diǎn):
192.168.100.1是主節(jié)點(diǎn)
192.168.100.2是從節(jié)點(diǎn)
192.168.100.3是從節(jié)點(diǎn)
將包上傳-->解壓 -->改名-->這里改為storm
[root@node1 storm001]# ls
apache-storm-0.9.3.tar.gz storm
2、修改配置文件
[root@node1 storm001]# cd storm
[root@node1 storm]# ls
bin conf examples lib logback NOTICE README.markdown SECURITY.md
CHANGELOG.md DISCLAIMER external LICENSE logs public RELEASE storm.jar
[root@node1 storm]# cd conf
[root@node1 conf]# ls
storm_env.ini storm.yaml
[root@node1 conf]# vi storm.yaml
storm.zookeeper.servers:
- "192.168.100.1"
- "192.168.100.1"
- "192.168.100.1"
nimbus.host: "192.168.100.1"
storm.local.dir: "/usr/local/storm/tmp"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
解釋:
(1)storm.local.dir:存儲(chǔ)目錄
(2)nimbus.host: "192.168.100.1"代表選擇主機(jī)
(3)supervisor.slots.ports:對(duì)于每個(gè)supervisor機(jī)器,通過這項(xiàng)配置可以決定運(yùn)行多少個(gè)worker進(jìn)程在
這臺(tái)機(jī)器上,每個(gè)worker使用一個(gè)單獨(dú)的port來接受消息。supervisor并不會(huì)立即啟動(dòng)這個(gè)4個(gè)worker進(jìn)程,
當(dāng)接收到分配的任務(wù)的時(shí)候會(huì)啟動(dòng),具體啟動(dòng)多少個(gè)worker根據(jù)我們Topology在這個(gè)supervisor需要幾個(gè)worker
來確定
3、把storm目錄拷貝到其它2個(gè)節(jié)點(diǎn)
[root@node1 storm001]# ls
apache-storm-0.9.3.tar.gz storm
scp -r storm node2:/home/storm001
scp -r storm node3:/home/storm001
(二)、啟動(dòng)集群
1、啟動(dòng)主節(jié)點(diǎn)nimbus
[root@node1 bin]# ls
storm storm.cmd storm-config.cmd
[root@node1 bin]# ./storm nimbus
可以使用linux命令將其放到后臺(tái)./storm nimbus >/dev/null 2>&1 &
在主節(jié)點(diǎn)通過web前端訪問的進(jìn)程
./storm ui
./storm ui >/dev/null 2>&1 &
2、啟動(dòng)從節(jié)點(diǎn)node2
./storm supervisor
./storm supervisor >/dev/null 2>&1 &
從節(jié)點(diǎn)需要啟動(dòng)日志進(jìn)程
./storm logviewer
3、啟動(dòng)從節(jié)點(diǎn)node3
./storm supervisor
./storm supervisor >/dev/null 2>&1 &
從節(jié)點(diǎn)需要啟動(dòng)日志進(jìn)程
./storm logviewer
4、進(jìn)入storm的ui界面:
http://192.168.100.1:8080/index.html
5、將java開發(fā)的storm應(yīng)用打包上傳服務(wù)器
bin/storm jar storm.jar com.test.A001
《大數(shù)據(jù)和人工智能交流》的宗旨
1、將大數(shù)據(jù)和人工智能的專業(yè)數(shù)學(xué):概率數(shù)理統(tǒng)計(jì)、線性代數(shù)、決策論、優(yōu)化論、博弈論等數(shù)學(xué)模型變得通俗易懂。
2、將大數(shù)據(jù)和人工智能的專業(yè)涉及到的數(shù)據(jù)結(jié)構(gòu)和算法:分類、聚類 、回歸算法、概率等算法變得通俗易懂。
3、最新的高科技動(dòng)態(tài):數(shù)據(jù)采集方面的智能傳感器技術(shù);醫(yī)療大數(shù)據(jù)智能決策分析;物聯(lián)網(wǎng)智慧城市等等。
根據(jù)初學(xué)者需要會(huì)有C語言、Java語言、Python語言、Scala函數(shù)式等目前主流計(jì)算機(jī)語言。
根據(jù)讀者的需要有和人工智能相關(guān)的計(jì)算機(jī)科學(xué)與技術(shù)、電子技術(shù)、芯片技術(shù)等基礎(chǔ)學(xué)科通俗易懂的文章。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。