<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          No.6 - 時序數(shù)據(jù)庫隨筆 - InfluxDB&Flux調(diào)試環(huán)境搭建

          共 5455字,需瀏覽 11分鐘

           ·

          2021-03-18 01:13

           本篇為大家介紹了InfluxDB和Flux的開發(fā)調(diào)試環(huán)境,便于后續(xù)對上一篇提到的用戶問題進行解決的操作演示。

          2021 校招請閱讀:阿里云2021春招


          01

          上篇回顧


          這是上一篇結尾我們拋出來的InfluxDB社區(qū)問題,那么要想解決這個問題,我們首先先建立InfluxDB的開發(fā)環(huán)境,以源碼的方式了解其應用和實現(xiàn)。所以本篇我們?yōu)榇罱ń榻BInflxuDB的開發(fā)調(diào)試環(huán)境。


          02

          依賴安裝


          要想進行InfluxDB的開發(fā)調(diào)試,我們需要一些基礎軟件安裝(MacOS),如下:

          • brew 

          /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
          • go

          brew install go@1.15......flux git:(master) ? go versiongo version go1.15.9 darwin/am
          • git

          brew install gitgit:(master) ? git --versiongit version 2.30.2
          • bazaar

          brew install bazaargit:(master) ? bzr versionBazaar (bzr) 2.7.0
          • rust

          curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
          • make pkg-config protobuf yarn

          brew install make pkg-config protobuf yarngit:(master) ? make --versionGNU Make 4.3......

          如果上面一切順利,我們設置一下環(huán)境變量 ~/.bash_profile :

          export GOPATH=/Users/jincheng/goexport GOROOT=/usr/local/opt/[email protected]/libexecexport PKG_CONFIG=/Users/jincheng/go/bin/pkg-configexport PKG_CONFIG_PATH=$(find /usr/local/Cellar -name 'pkgconfig' -type d | grep lib/pkgconfig | tr '\n' ':' | sed s/.$//)export PATH=$GOROOT/bin:$GOPATH/bin:$PKG_CONFIG_PATH:$PATH

          別忘記 source ~/.bash_profile, 我們進入正題,下載源碼。


          03

          源碼構建


          很多時候我們對一項功能的了解,需要對源碼有一定的了解,學習InfluxDB我們同樣需要源碼方式進行。


          • 下載

          git clone https://github.com/influxdata/influxdb.git
          • 編譯

          make......make[2]: Leaving directory '/Users/jincheng/work/influxdb/storage/flux'make[1]: Leaving directory '/Users/jincheng/work/influxdb/storage'env GO111MODULE=on go build -tags 'assets' -ldflags "-s -w  -X main.commit=eeba0f3268" -o bin/darwin/influx ./cmd/influxenv GO111MODULE=on go build -tags 'assets' -ldflags " -X main.commit=eeba0f3268" -o bin/darwin/influxd ./cmd/influxd

              如上我們發(fā)現(xiàn)會生成兩個二進制文件,一個是influxd服務,一個是influx的客戶端。

          • 下載依賴

          go clean -modcache && go mod tidy && go mod vendor

          執(zhí)行完如上命令會在項目目錄下生成一個vendor目錄,里面下載了go.mod里面配置的項目所有依賴。


          04

          GoLand運行調(diào)試



          GoLand是進行Go開發(fā)調(diào)試的IDE工具,我們后面關于InfluxDB源碼部分分享就在GoLand環(huán)境中進行。


          • IDE配置


          在GoLand中進行InfluxDB的開發(fā)調(diào)試,需要簡單的配置一下,GOROOT/GOPATH/Go Modules ,如圖:


          其中GOROOT/GOPATH和~/.bash_profile保持一致。


          • 運行主服務

          運行 influxd/main.go  ,出現(xiàn)如下界面證明已經(jīng)influxd的服務已經(jīng)啟動成功,并在8086端口監(jiān)聽。

          如果一切順利,那么服務監(jiān)聽在8086端口。


          • 調(diào)試主服務

          我們?nèi)绻纯丛创a的執(zhí)行路徑,往往我們期望debug的方式運行 influxd/main.go ,如果出現(xiàn)debug啟動出現(xiàn)如下錯誤,說明我們的環(huán)境變量沒有在IDE中生效:



          如上情況我們可以創(chuàng)建或者在~/.zshrc中增加一行配置讓 ~/.bash_profile配置生效。

          source ~/.bash_profile

          然后重啟電腦,再試一下。如果順利,我們設置一下斷點,可以類似界面如下:



          如果一切順利,那么調(diào)試模式下的服務也是監(jiān)聽8086端口。



          05

          操作測試


          好的,服務啟動了,下面我們利用客戶端繼續(xù)數(shù)據(jù)操作的測試。上面編譯的時候大家發(fā)現(xiàn)其實我們會生成2個二進制可執(zhí)行文件,一個是influxd,一個是influx。我們剛才debug啟動了influxd的服務,我們同樣可以啟動influx的客戶端,進行數(shù)據(jù)操作,客戶端我們之間運行可執(zhí)行文件(如果你愿意也可以IDE啟動)。


          • 初始化

          bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx setup \--username iot \--password 2021iotdb \--org org \--bucket iot \--retention 1h \--token where-were-going-we-dont-need-roads \--force
          Config default has been stored in /Users/jincheng/.influxdbv2/configs.User  Organization  Bucketiot org iot

          如上執(zhí)行成功表明我們完成了setup,創(chuàng)建了名為 iot 的bucket,在v2中bucket相當于v1中的database。


          • 插入數(shù)據(jù)

          bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx write --bucket iot --precision s "m v=2 $(date +%s)"bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx write --bucket iot --precision s "m v=168 $(date +%s)"bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx write --bucket iot --precision s "n v=222 $(date +%s)"

          如上我們插入了3條數(shù)據(jù),接下來我們查詢一下。


          • 查詢數(shù)據(jù)


          bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx query 'from(bucket:"iot") |> range(start:-1h)'

          執(zhí)行之后,我們會查詢到剛才插入的數(shù)據(jù),同時IDE中調(diào)試模式啟動的influxd服務也會打印相應的日志信息。

          上面是簡單查詢記錄,下面我們在進行一下聚合計算:

          bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx query 'from(bucket:"iot") |> range(start:-1h) |> sum()'

          到此,我們InfluxDB的調(diào)試模式啟動服務,客戶端創(chuàng)建bucket,插入數(shù)據(jù)和查詢數(shù)據(jù)就有了一個直觀的印象。


          06

          Flux查詢語言


          上面我利用influx客戶端進行query命令,其實執(zhí)行的是Flux的查詢語言,F(xiàn)lux是influxDB社區(qū)提供的新的查詢語言,那么Flux是否可以在IDE中進行運行和調(diào)試呢?當然!我們對Flux的開發(fā)調(diào)試環(huán)境搭建一下,并且對查詢操作進行演示。



          • 下載&編譯



          git clone https://github.com/influxdata/flux.git...make...go clean -modcache && go mod tidy && go mod vendor
          • GoLand 運行


          我們需要配置flux的命令,為 repl,然后運行,如下:

          啟動repl之后,我們可以進行數(shù)據(jù)處理操作,如下圖:

          • 查詢數(shù)據(jù)

          Flux可以直接和InfluxDB服務連接,進行數(shù)據(jù)查詢,上面我們在influx客戶端輸入的查詢語句其實就是Flux查詢語言,那么我們當然可以在Flux中進行數(shù)據(jù)查詢,我們啟動Flux repl,進行查詢?nèi)缦拢喝缦拢?/p>

          import "influxdata/influxdb"data = influxdb.from(bucket:"iot") |> range(start:-1h) |> sum()data |> yield()

          如圖,發(fā)生了錯誤,原因是Flux去嘗試連接influxdb的9999端口服務,不過我們上面看到我們的服務是監(jiān)聽8086了,所以我們要修改一下默認端口(這就是源碼debug的好處了)。

          修改端口之后,我們發(fā)現(xiàn)連接已經(jīng)建立,但是權限還有問題,如下:


          這個就需要我們連接的Token信息,如下:


          cat ~/.influxdbv2/configs 


          我們讀取數(shù)據(jù)時候攜帶token和org信息,如下:

          import "influxdata/influxdb"data = influxdb.from(bucket:"iot", token:"where-were-going-we-dont-need-roads", org:"org") |> range(start:-1h) |> sum()data |> yield()

          好,到這里我們Flux讀取InfluxDB數(shù)據(jù)部分也有了一個直觀的了解。


          07

          InfluxDB&Flux社區(qū)貢獻


          目前看InflxdbV2版本的貢獻者并不多,我在源碼構建的時候發(fā)現(xiàn)的這些默認端口問題都是influx社區(qū)待改進的patch,我也提交了相關的PRs。


          • For InfluxDB: https://github.com/influxdata/influxdb/pull/20809

          • For Flux: https://github.com/influxdata/flux/pull/3514


          BTW:如何貢獻社區(qū)?見到問題就解決,不以善小而不為!祝你好運!


          阿里招聘

          時序數(shù)據(jù)庫開發(fā)崗位

          (P7/P8/P9)

          (長期有效)


          職位描述:

          1. 精通Java/Scala編程

          2. 精通常用數(shù)據(jù)結構和算法應用,具備良好的、精益求精的設計思維,每一個bit都是客戶/技術價值。

          3. 了解Hadoop/Flink/Spark等計算框架和熟悉HBase/LevelDB/RocksDB等主流NoSQL數(shù)據(jù)庫,深入理解其實現(xiàn)原理和架構優(yōu)勢劣勢;

          4. 具備分布式系統(tǒng)的設計和應用的經(jīng)歷,能對分布式常用技術進行應用和改進者優(yōu)先;

          5. 有開源社區(qū)貢獻,并成為Flink/Spark/Druid/OpenTSDB/InfluxDB/IoTDB等社區(qū)的Committer/PMC者優(yōu)先;

          6. 要具備良好的團隊協(xié)作能力,良好的溝通表達能力,和對正確事情持之以恒的韌性和耐力。


          來!讓我看到你的簡歷,因為成就你的不僅僅是能力,更是雷厲風行的執(zhí)行力!

          瀏覽 91
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  香蕉国产AV | 青娱乐免费操逼视频 | a中文在线视频 | 男女拍拍视频 j.zyme.xin | 亚洲第一色|