Druid:一個用於大資料實時處理的開源分散式系統
Druid是一個用於大資料實時查詢和分析的高容錯、高效能開源分散式系統,旨在快速處理大規模的資料,並能夠實現快速查詢和分析。尤其是當發生程式碼部署、機器故障以及其他產品系統遇到宕機等情況時,Druid仍能夠保持100%正常執行。建立Druid的最初意圖主要是為了解決查詢延遲問題,當時試圖使用Hadoop來實現互動式查詢分析,但是很難滿足實時分析的需要。而Druid提供了以互動方式訪問資料的能力,並權衡了查詢的靈活性和效能而採取了特殊的儲存格式。
Druid功能介於PowerDrill和Dremel之間,它幾乎實現了Dremel的所有功能,並且從PowerDrill吸收一些有趣的資料格式。Druid允許以類似Dremel和PowerDrill的方式進行單表查詢,同時還增加了一些新特性,如為區域性巢狀資料結構提供列式儲存格式、為快速過濾做索引、實時攝取和查詢、高容錯的分散式體系架構等。從官方得知,Druid的具有以下主要特徵:
- 為分析而設計——Druid是為OLAP工作流的探索性分析而構建,它支援各種過濾、聚合和查詢等類;
- 快速的互動式查詢——Druid的低延遲資料攝取架構允許事件在它們建立後毫秒內可被查詢到;
- 高可用性——Druid的資料在系統更新時依然可用,規模的擴大和縮小都不會造成資料丟失;
- 可擴充套件——Druid已實現每天能夠處理數十億事件和TB級資料。
Druid應用最多的是類似於廣告分析創業公司Metamarkets中的應用場景,如廣告分析、網際網路廣告系統監控以及網路監控等。當業務中出現以下情況時,Druid是一個很好的技術方案選擇:
- 需要互動式聚合和快速探究大量資料時;
- 需要實時查詢分析時;
- 具有大量資料時,如每天數億事件的新增、每天數10T資料的增加;
- 對資料尤其是大資料進行實時分析時;
- 需要一個高可用、高容錯、高效能資料庫時。
Realtime節:實時攝取資料、監聽輸入資料流
Broker節點:接收來自外部客戶端的查詢和將查詢轉發到Realtime和Historical節點
一個Druid叢集有各種型別的節點(Node)組成,每個節點都可以很好的處理一些的事情,這些節點包括對非實時資料進行處理儲存和查詢的Historical節點、實時攝取資料、監聽輸入資料流的Realtime節、監控Historical節點的Coordinator節點、接收來自外部客戶端的查詢和將查詢轉發到Realtime和Historical節點的
查詢操作中資料流和各個節點的關係如下圖所示:
如下圖是Druid叢集的管理層架構,該圖展示了相關節點和叢集管理所依賴的其他元件(如負責服務發現的ZooKeeper叢集)的關係:
一、Druid簡介
二、Druid架構組成及相關依賴
三、Druid叢集配置
四、Druid叢集啟動
五、Druid查詢
六、後記
一、Druid簡介
Druid是一個為大型冷資料集上實時探索查詢而設計的開源資料分析和儲存系統,提供極具成本效益並且永遠線上的實時資料攝取和任意資料處理。
主要特性:
- 為分析而設計——Druid是為OLAP工作流的探索性分析而構建。它支援各種filter、aggregator和查詢型別,併為新增新功能提供了一個框架。使用者已經利用Druid的基礎設施開發了高階K查詢和直方圖功能。
- 互動式查詢——Druid的低延遲資料攝取架構允許事件在它們建立後毫秒內查詢,因為Druid的查詢延時通過只讀取和掃描有必要的元素被優化。Aggregate和 filter沒有坐等結果。
- 高可用性——Druid是用來支援需要一直線上的SaaS的實現。你的資料在系統更新時依然可用、可查詢。規模的擴大和縮小不會造成資料丟失。
- 可伸縮——現有的Druid部署每天處理數十億事件和TB級資料。Druid被設計成PB級別。
就係統而言,Druid功能位於PowerDrill和Dremel之間。它實現幾乎所有Dremel提供的工具(Dremel處理任意巢狀資料結構,而Druid只允許一個基於陣列的巢狀級別)並且從PowerDrill吸收一些有趣的資料格式和壓縮方法。
Druid對於需要實時單一、海量資料流攝取產品非常適合。特別是如果你面向無停機操作時,如果你對查詢查詢的靈活性和原始資料訪問要求,高於對速度和無停機操作,Druid可能不是正確的解決方案。在談到查詢速度時候,很有必要澄清“快速”的意思是:Druid是完全有可能在6TB的資料集上實現秒級查詢。
二、Druid架構組成及其他依賴
2.1 Overlord Node (Indexing Service)
Overlord會形成一個載入批處理和實時資料到系統中的叢集,同時會對儲存在系統中的資料變更(也稱為索引服務)做出響應。另外,還包含了Middle Manager和Peons,一個Peon負責執行單個task,而Middle Manager負責管理這些Peons。
2.2 Coordinator Node
監控Historical節點組,以確保資料可用、可複製,並且在一般的“最佳”配置。它們通過從MySQL讀取資料段的元資料資訊,來決定哪些資料段應該在叢集中被載入,使用Zookeeper來確定哪個Historical節點存在,並且建立Zookeeper條目告訴Historical節點載入和刪除新資料段。
2.3 Historical Node
是對“historical”資料(非實時)進行處理儲存和查詢的地方。Historical節點響應從Broker節點發來的查詢,並將結果返回給broker節點。它們在Zookeeper的管理下提供服務,並使用Zookeeper監視訊號載入或刪除新資料段。
2.4 Broker Node
接收來自外部客戶端的查詢,並將這些查詢轉發到Realtime和Historical節點。當Broker節點收到結果,它們將合併這些結果並將它們返回給呼叫者。由於瞭解拓撲,Broker節點使用Zookeeper來確定哪些Realtime和Historical節點的存在。
2.5 Real-time Node
實時攝取資料,它們負責監聽輸入資料流並讓其在內部的Druid系統立即獲取,Realtime節點同樣只響應broker節點的查詢請求,返回查詢結果到broker節點。舊資料會被從Realtime節點轉存至Historical節點。
2.6 ZooKeeper
為叢集服務發現和維持當前的資料拓撲而服務;
2.7 MySQL
用來維持系統服務所需的資料段的元資料;
2.8 Deep Storage
儲存“冷資料”,可以使用HDFS。
三、Druid叢集配置
3.1 環境資訊
我這裡有兩臺機器,node1有32G記憶體,上面部署了Histotical Node和Coordinator Node;node2有72G記憶體,上面部署了其他四個服務。
3.2 通用配置(Common Configuration)
##建立MySQL資料庫
CREATE DATABASE `druid` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all on druid.* to [email protected]’%’ identified by ‘druid1234′ WITH GRANT OPTION;
flush privileges;
##配置檔案
cd $DRUID_HOME/config/_common
vi common.runtime.properties(所有節點)
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 |
##使用Mysql儲存元資料
druid.extensions.coordinates=[ "io.druid.extensions:druid-examples" , "io.druid.extensions:druid-kafka-eight" , "io.druid.extensions:mysql-metadata-storage" ]
##zookeeper
druid.zk.service.host=zkNode1:2181,zkNode2:2181,zkNode3:2181
##Mysql配置
druid.metadata.storage. type =mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql: //node1 :3306 /druid
druid.metadata.storage.connector.user=druid
druid.metadata.storage.connector.password=diurd1234
##配置deep storage到HDFS
druid.storage. type =hdfs
druid.storage.storageDirectory=hdfs: //cdh5/tmp/druid/storage
##配置查詢快取,暫用本地,可配置memcached
druid.cache. type = local
druid.cache.sizeInBytes=10737418240
##配置監控
druid.monitoring.monitors=[ "com.metamx.metrics.JvmMonitor" ]
##配置Indexing service的名字
druid.selectors.indexing.serviceName=druid /overlord
##
druid.emitter=logging
|
3.3 Overlord Node(Indexing Service)
在執行Overlord Node節點上:
cd $DRUID_HOME/config/overlord
vi runtime.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
druid.host=node2
druid.port=8090
druid.service=druid /overlord
# Only required if you are autoscaling middle managers
druid.indexer.autoscale.doAutoscale= true
druid.indexer.autoscale.strategy=ec2
druid.indexer.autoscale.workerIdleTimeout=PT90m
druid.indexer.autoscale.terminatePeriod=PT5M
druid.indexer.autoscale.workerVersion=0
# Upload all task logs to deep storage
druid.indexer.logs. type =hdfs
druid.indexer.logs.directory=hdfs: //cdh5/tmp/druid/indexlog
# Run in remote mode
druid.indexer.runner. type =remote
druid.indexer.runner.minWorkerVersion=0
# Store all task state in the metadata storage
druid.indexer.storage. type =metadata
|
3.4 MiddleManager Node
在執行MiddleManager Node節點上:
cd $DRUID_HOME/config/middleManager
vi runtime.properties
1 2 3 4 5 6 7 8 9 10 |
druid.host=node2
druid.port=8091
druid.service=druid /middlemanager
druid.indexer.logs. type =hdfs
druid.indexer.logs.directory=hdfs: //cdh5/tmp/druid/indexlog
# Resources for peons
druid.indexer.runner.javaOpts=-server -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
druid.indexer.task.baseTaskDir= /tmp/persistent/task/
|
3.5 Coordinator Node
在執行Coordinator Node節點上:
cd $DRUID_HOME/config/coordinator
vi runtime.properties
1 2 3 4 5 |
druid.host=node1
druid.port=8081
druid.service=coordinator
druid.coordinator.startDelay=PT5M
|
3.6 Historical Node
在執行Historical Node節點上:
cd $DRUID_HOME/config/historical
vi runtime.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
druid.host=node1
druid.port=8082
druid.service=druid /historical
druid.historical.cache.useCache= true
druid.historical.cache.populateCache= true
druid.processing.buffer.sizeBytes=1073741824
druid.processing.numThreads=9
druid.server.http.numThreads=9
druid.server.maxSize=300000000000
druid.segmentCache.locations=[{ "path" : " /tmp/druid/indexCache" , "maxSize" : 300000000000}]
druid.monitoring.monitors=[ "io.druid.server.metrics.HistoricalMetricsMonitor" , "com.metamx.metrics.JvmMonitor" ]
|
3.7 Broker Node
在執行Broker Node節點上:
cd $DRUID_HOME/config/broker
vi runtime.properties
1 2 3 4 5 6 7 8 9 10 11 |
druid.host=node2
druid.port=8092
druid.service=druid /broker
druid.broker.http.numConnections=20
druid.broker.http.readTimeout=PT5M
druid.processing.buffer.sizeBytes=2147483647
druid.processing.numThreads=11
druid.server.http.numThreads=20
|
3.8 Real-time Node
在執行Real-time Node節點上:
cd $DRUID_HOME/config/realtime
vi runtime.properties
1 2 3 4 5 6 7 8 9 10 11 |
druid.host=node2
druid.port=8093
druid.service=druid /realtime
druid.processing.buffer.sizeBytes=1073741824
druid.processing.numThreads=5
# Override emitter to print logs about events ingested, rejected, etc
druid.emitter=logging
druid.monitoring.monitors=[ "io.druid.segment.realtime.RealtimeMetricsMonitor" , "com.metamx.metrics.JvmMonitor" ]
|
四、Druid叢集啟動
首次啟動時候,可以遵循下面的啟動順序。
4.1 Broker Node
cd $DRUID_HOME/
cp run_druid_server.sh run_broker.sh
vi run_broker.sh
替換以下內容:
1 2 3 4 5 6 7 |
SERVER_TYPE=broker
# start process
JAVA_ARGS= "${JAVA_ARGS} -Xmx10g -Xms5g -XX:NewSize=2g -XX:MaxNewSize=2g -XX:MaxDirectMemorySize=24g -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_ARGS= "${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS= "${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS= "${JAVA_ARGS} -Dcom.sun.management.jmxremote.port=17071 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Ddruid.extensions.localRepository=${MAVEN_DIR}"
|
執行./run_broker.sh啟動Broker Node:
4.2 Historical Node
cd $DRUID_HOME/
cp run_druid_server.sh run_historical.sh
vi run_historical.sh
替換以下內容:
1 2 3 4 5 6 7 |
SERVER_TYPE=historical
# start process
JAVA_ARGS= "${JAVA_ARGS} -Xmx10g -Xms10g -XX:NewSize=2g -XX:MaxNewSize=2g -XX:MaxDirectMemorySize=16g -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_ARGS= "${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS= "${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS= "${JAVA_ARGS} -Ddruid.extensions.localRepository=${MAVEN_DIR}"
|
執行命令./run_historical.sh啟動Historical Node:
4.3 Coordinator Node
cd $DRUID_HOME/
cp run_druid_server.sh run_coordinator.sh
vi run_coordinator.sh
替換以下內容:
1 2 3 4 5 6 7 |
SERVER_TYPE=coordinator
# start process
JAVA_ARGS= "${JAVA_ARGS} -Xmx10g -Xms10g -XX:NewSize=512m -XX:MaxNewSize=512m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_ARGS= "${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS= "${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS= "${JAVA_ARGS} -Ddruid.extensions.localRepository=${MAVEN_DIR}"
|
執行命令./run_coordinator.sh啟動Coordinator Node.
4.4 Middle Manager
cd $DRUID_HOME/
cp run_druid_server.sh run_middleManager.sh
vi run_middleManager.sh
替換以下內容:
1 2 3 4 5 |
SERVER_TYPE=middleManager
# start process
JAVA_ARGS= "${JAVA_ARGS} -Xmx64m -Xms64m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS="${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir= /tmp/druid -Ddruid.extensions.localR
epository=${MAVEN_DIR}"
|
執行命令./run_middleManager.sh啟動MiddleManager Node。
4.5 Overlord Node
cd $DRUID_HOME/
cp run_druid_server.sh run_overlord.sh
vi run_overlord.sh
替換以下內容:
1 2 3 4 5 6 |
SERVER_TYPE=overlord
# start process
JAVA_ARGS= "${JAVA_ARGS} -Xmx4g -Xms4g -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_ARGS= "${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS= "${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS= "${JAVA_ARGS} -Ddruid.extensions.localRepository=${MAVEN_DIR}"
|
執行命令./run_overlord.sh啟動Overlord Node:
4.6 Real-time Node
cd $DRUID_HOME/
cp run_druid_server.sh run_realtime.sh
vi run_realtime.sh
替換以下內容:
1 2 3 4 5 6 7 8 9 10 11 |
SERVER_TYPE=realtime
# start process
JAVA_ARGS="${JAVA_ARGS} -Xmx13g -Xms13g -XX:NewSize=2g -XX:MaxNewSize=2g -XX:MaxDirectMemorySize=9g -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -
XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError"
JAVA_ARGS= "${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS= "${JAVA_ARGS} -Ddruid.realtime.specFile=/home/liuxiaowen/druid-0.8.1/examples/wikipedia/wikipedia_realtime.spec"
JAVA_ARGS= "${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS="${JAVA_ARGS} -Dcom.sun.management.jmxremote.port=17072 -Dcom.sun.management.jmxremote.authenticate= false -Dcom.sun.management.jmxremot
e.ssl= false "
JAVA_ARGS= "${JAVA_ARGS} -Ddruid.extensions.localRepository=${MAVEN_DIR}"
|
##特別需要注意引數:
-Ddruid.realtime.specFile=/home/liuxiaowen/druid-0.8.1/examples/wikipedia/wikipedia_realtime.spec
啟動RealTime Node需要指定一個realtime資料來源的配置檔案,本文中使用example提供的wikipedia_realtime.spec,啟動後,該資料來源從irc.wikimedia.org獲取實時資料。
關於RealTime Node的配置,後續文章將會詳細介紹。
執行命令./run_realtime.sh啟動RealTime Node。
五、Druid查詢
第四部分中啟動RealTime Node時候使用了例子中自帶的配置檔案wikipedia_realtime.spec,啟動後,該RealTime Node會從irc.wikimedia.org獲取實時資料,本章將以該資料來源為例,學習幾種最常見的查詢。
5.1 select查詢
首先編輯查詢配置檔案select_query.json
1 2 3 4 5 6 7 8 9 10 11 |
{
"queryType" : "select" ,
"dataSource" : "wikipedia" ,
"dimensions" :[],
"metrics" :[],
"granularity" : "all" ,
"intervals" : [
"2015-11-01/2015-11-20"
],
"pagingSpec" :{ "pagingIdentifiers" : {}, "threshold" :10}
}
|
該配置檔案的含義是從資料來源”wikipedia”進行select查詢所有列,時間區間為2015-11-01/2015-11-20,每10條記錄一個分頁。
執行命令查詢:
curl -X POST ‘http://node2:8093/druid/v2/?pretty’ -H ‘content-type: application/json’ -d @select_query.json
瞬間返回結果:
5.2 基於時間序列的查詢Timeseries query
編輯查詢配置檔案timeseries.json
1 2 3 4 5 6 7 8 9 10 |
{
"queryType" : "timeseries" ,
"dataSource" : "wikipedia" ,
"intervals" : [ "2010-01-01/2020-01-01" ],
"granularity" : "minute" ,
"aggregations" : [
{ "type" : "longSum" , "fieldName" : "count" , "name" : "edit_count" },
{ "type" : "doubleSum" , "fieldName" : "added" , "name" : "chars_added" }
]
}
|
該配置檔案的含義是:從資料來源” wikipedia”中進行時間序列查詢,區間為2010-01-01/2020-01-01,按分鐘彙總結果,彙總欄位為count和added;
執行查詢命令:
curl -X POST ‘http://node2:8093/druid/v2/?pretty’ -H ‘content-type: application/json’ -d @timeseries.json
同樣瞬間返回結果:
5.3 TopN查詢
編輯查詢檔案topn.json
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{
"queryType" : "topN" ,
"dataSource" : "wikipedia" ,
"granularity" : "all" ,
"dimension" : "page" ,
"metric" : "edit_count" ,
"threshold" : 10,
"aggregations" : [
{ "type" : "longSum" , "fieldName" : "count" , "name" : "edit_count" }
],
"filter" : { "type" : "selector" , "dimension" : "country" , "value" : "United States" },
"intervals" : [ "2012-10-01T00:00/2020-01-01T00" ]
}
|
該檔案含義是:從資料來源” wikipedia”進行TopN查詢,其中N=10,維度為page,指標為edit_count,也就是,在page維度上將edit_count彙總後取Top 10.
執行查詢命令:
curl -X POST ‘http://node2:8093/druid/v2/?pretty’ -H ‘content-type: application/json’ -d @topn.json
結果為:
六、後記
Druid目前已經有很多公司用於實時計算和實時OLAP,而且效果很好。雖然它的配置和查詢都比較複雜和繁瑣,但如果是真正基於海量資料的實時OLAP,它的威力還是很強大的。我將持續學習和分享Druid的相關技術,驗證它在海量資料實時OLAP上的效果,敬請關注我的部落格。
參考文章:
http://druid.io
http://www.csdn.net/article/2014-10-30/2822381/2
參考 http://www.infoq.com/cn/news/2015/04/druid-data/
http://druid.io/
http://www.open-open.com/lib/view/open1447852962978.html
相關推薦
Druid:一個用於大資料實時處理的開源分散式系統
Druid是一個用於大資料實時查詢和分析的高容錯、高效能開源分散式系統,旨在快速處理大規模的資料,並能夠實現快速查詢和分析。尤其是當發生程式碼部署、機器故障以及其他產品系統遇到宕機等情況時,Druid仍能夠保持100%正常執行。建立Druid的最初意圖主要是為了解決查詢延遲問題,當時試圖使用Hadoop來實現
Flume+Kafka+Storm+Redis構建大資料實時處理系統
資料處理方法分為離線處理和線上處理,今天寫到的就是基於Storm的線上處理。在下面給出的完整案例中,我們將會完成下面的幾項工作: 如何一步步構建我們的實時處理系統(Flume+Kafka+Storm+Redis) 實時處理網站的使用者訪問日誌,並統計出該網站的PV、UV 將實時
大資料實時處理技術框架-spark和storm對比
對比點 Storm Spark Streaming 實時計算模型 純實時,來一條資料,處理一條資料 準實時,對一個時間段內的資料收集起來,作為一個RDD,再處理
[大資料專案]-0016-基於Spark2.x新聞網大資料實時分析視覺化系統
2018最新最全大資料技術、專案視訊。整套視訊,非那種淘寶雜七雜八網上能免費找到拼湊的亂八七糟的幾年前的不成體系浪費咱們寶貴時間的垃圾,詳細內容如下,視訊高清不加密,需要的聯絡QQ:3164282908(加Q註明51CTO)。 課程介紹 本專案基於某新聞網使用者日誌分析系統進行講解
大資料實時流式處理引擎比較
從流處理的核心概念,到功能的完備性,再到周邊的生態環境,全方位對比了目前比較熱門的流處理框架:Spark,Flink,Storm和 Gearpump。結合不同的框架的設計,為大家進行深入的剖析。與此同時,從吞吐量和延時兩個方面,對各個框架進行效能評估。 主要技術點:流失資料處理,Spark,
R in Action學習筆記:一個簡單的資料處理例項
這是來自《R in Action》中的一個數據處理例項。 資料:一組學生的名字和其對應的數學、科學、英語的成績; 資料分析需求: 1、為所有學生確定一個單一的成績衡量指標; 2、將前20%的學生評定為A,接下來20%的學生評定為B,依次類推; 3、按照學生姓氏的字母順序對學生排序。
大資料實時計算Spark學習筆記(7)—— RDD 資料傾斜處理
1 處理資料傾斜 在 reduceByKey 之前先進行隨機分割槽 package com.bigdataSpark.cn import org.apache.spark.{SparkConf, SparkContext} import scala.util.Ran
大資料預處理,讀寫檔案為每一行資料增加一個標識ID(JAVA)
對包含多行資料的資料集進行預處理,讀入文字檔案資料集,為每一條記錄增加一個唯一的ID,並儲存成一個新的文字檔案。其中每行的ID生成規則為:每一條記錄對應生成0-33隨機數,每個數對應一個特定省份,最後原始記錄和新生成的省份標籤一起寫入新的文字檔案中。Shell終端執行語句#!
大資料分批處理(一個大list集合分300行拆分一次)
/** * 把 excelList 按每三百行拆分一次 */ public List<Map<String, String>> getSplitList(List<Map<String, String>> excelList
網路程式設計基礎【day09】:socket接收大資料(五)
本節內容 1、概述 2、socket接收大資料 3、中文字元的坑 一、概述 上篇部落格寫到了,就是說當伺服器傳送至客戶端的資料,大於客戶端設定的資料,則就會把資料服務端發過來的資料剩餘資料存在IO緩衝區中,那我們如何解決這個問題呢? 有的同學就說了: 改大客戶端接收的資料的大小=&
Hadoop大資料通用處理平臺
1.簡介 Hadoop是一款開源的大資料通用處理平臺,其提供了分散式儲存和分散式離線計算,適合大規模資料、流式資料(寫一次,讀多次),不適合低延時的訪問、大量的小檔案以及頻繁修改的檔案。 *Hadoop由HDFS、YARN、MapReduce組成。 Hadoop的特點:
分享:15道大資料崗位面試題
你認為哪個更好:是好的資料還是好模型?同時你是如何定義“好”?存在所有情況下通用的模型嗎?有你沒有知道一些模型的定義並不是那麼好?1、你處理過的最大的資料量?你是如何處理他們的?處理的結果。2、告訴我二個分析或者電腦科學相關專案?你是如何對其結果進行衡量的?3、什麼是:提升值、關鍵績效指標、強壯性、模型按合度
python:爬蟲爬取資料的處理之Json字串的處理(2)
#Json字串的處理 Json字串轉化為Python資料型別 import json JsonStr ='{"name":"sunck","age":"18","hobby":["money","power","English"],"parames":{"a":1,"b":2}}' Js
【python學習筆記】44:Series.apply()列資料批量處理,Series.str.extract()正則匹配
學習《Python3爬蟲、資料清洗與視覺化實戰》時自己的一些實踐。 Series.apply()列資料批量處理 先將該列取出,形成Series物件,再呼叫apply()方法傳入用於處理的函式,這個過程就像map()一樣。 import pandas as pd # 各
使用pyqt寫了一個檢查大資料環境的gui
背景:在xx公司上班,該公司有款超融合的產品,當前已經梳理出來在超融合平臺部署大資料軟體的最佳實踐,該指令碼主要是為了檢查當前部署的大資料環境是否符合最佳實踐的部署 使用方法:輸入超融合的主控的ip地址和密碼,輸入ambari節點的主控和密碼,然後上傳大資料虛擬機器的vmid資訊,點選檢查即可觸發檢查 &
福利來了:39個大資料視覺化工具
資料視覺化無處不在,而且比以前任何時候都重要。無論是在行政演示中為資料點建立一個視覺化程序,還是用視覺化概念來細分客戶,資料視覺化都顯得尤為重要。以前的工具的基本不能處理大資料。本文將推薦39個可用於處理大資料的視覺化工具(排名不分先後)。其中許多工具是開源的,能夠共同使用或嵌入已經設計好的應用程式
Cris 的 Python 資料分析筆記 06:Pandas 常見的資料預處理
文章目錄 1. Pandas 對指定列排序 2. 泰坦尼克經典入門案例 3. Pandas 常用資料預處理函式 3.1 缺失值處理 3.2 Pandas 預處理函式自動過濾缺失值
一篇文章讀懂:什麼是大資料?大資料發展前景?零基礎如何去學習大資料?
學習大資料之前,我們首先要知道的就是: 1.什麼是大資料? 2.大資料是做什麼的? 3.大資料就業領域,就業形勢是怎麼樣的? 4.等明確以上三點之後,就可以開始著手學習大資料 要確定學習線路,零基礎程式設計基礎的小白怎麼去學習? 仔細閱讀完本文,你需要花大概20分鐘 很
多圖技術貼:深入淺出解析大資料平臺架構
化資料也爆發式增長。比如: 1、業務系統現在平均每天儲存20萬張圖片,磁碟空間每天消耗100G; 2、平均每天產生簽約視訊檔案6000個,每個平均250M,磁碟空間每天消耗1T; …… 三國裡的“大資料” “草船借箭”和大資料有什麼關係呢?對天象的觀察是基於一種對風、雲、溫度、溼度、光照和
譚安林:大資料在智慧外呼系統的應用
歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 譚安林,騰訊高階工程師,2015年加入騰訊,8年網際網路從業經歷,從事大資料平臺與產品開發相關工作;先後參與廣告、金融等領域產品專案,目前負責行為預測解決方案,幫助客戶盤活現有客群、挖掘潛在高價值新客。目前我們的產品包括:智慧客服、大資料套件、騰