在druid.io的services目錄下,有比較多的druid.io的使用小工具,本結要說的就是這個insert-segment-to-db Tool工具,這個工具可以根據用戶的druid.io的segments數據來對元數據進行重建,或者更新元數據,使用場景爲數據遷移到其他集羣,或者遷移druid.io數據存儲地址,已經元數據損毀重建元數據.
這種重建方式需要注意的是他永遠是以最新的segement的狀態來重建你的元數據,這個可能會與你的正正的元數據有點差異.所以如果想保持與之前的元數據一直的話,最好是通話遷移元數據的方式來做dataSource數據遷移.
使用這個工具是比較容易的,需要在JVM中指定一些全局的系統參數,參數如下:
druid.metadata.storage.type 元數據存儲數據庫類型(mysql/oracle)
druid.metadata.storage.connector.connectURI UAN數據存儲的URL
druid.metadata.storage.connector.user 數據庫用戶名
druid.metadata.storage.connector.password 數據庫登錄密碼
druid.storage.type 數據存儲文件系統類型(HDFS/S3)
當然如果做數據遷移的話,需要將原先的segements遷移到新的文件路徑,具體的存儲目錄格式如下:
Directory path: /druid/storage/wikipedia
├── 2013-08-31T000000.000Z_2013-09-01T000000.000Z
│ └── 2015-10-21T22_07_57.074Z
│ ├── 0_descriptor.json
│ └── 0_index.zip
├── 2013-09-01T000000.000Z_2013-09-02T000000.000Z
│ └── 2015-10-21T22_07_57.074Z
│ ├── 0_descriptor.json
│ └── 0_index.zip
├── 2013-09-02T000000.000Z_2013-09-03T000000.000Z
│ └── 2015-10-21T22_07_57.074Z
│ ├── 0_descriptor.json
│ └── 0_index.zip
└── 2013-09-03T000000.000Z_2013-09-04T000000.000Z
└── 2015-10-21T22_07_57.074Z
├── 0_descriptor.json
└── 0_index.zip
運行該工具的命令如下:
java
-Ddruid.metadata.storage.type=mysql
-Ddruid.metadata.storage.connector.connectURI=jdbc\:mysql\://localhost\:3306/druid
-Ddruid.metadata.storage.connector.user=druid
-Ddruid.metadata.storage.connector.password=diurd
-Ddruid.extensions.loadList=[\"mysql-metadata-storage\",\"druid-hdfs-storage\"] #需要用到的擴展包的集合
-Ddruid.storage.type=hdfs
-cp $DRUID_CLASSPATH #druid-services的jar包存儲路徑
org.apache.druid.cli.Main tools insert-segment-to-db --workingDir #遷移後的segments路徑 hdfs://host:port//druid/storage/wikipedia --updateDescriptor true (默認如果與當前元數據發生差異,覆蓋元數據)
如果segments遷移到S3文件系統的話,具體執行命令如下:
java
-Ddruid.metadata.storage.type=mysql
-Ddruid.metadata.storage.connector.connectURI=jdbc\:mysql\://localhost\:3306/druid
-Ddruid.metadata.storage.connector.user=druid
-Ddruid.metadata.storage.connector.password=diurd
-Ddruid.extensions.loadList=[\"mysql-metadata-storage\",\"druid-s3-extensions\"]
-Ddruid.storage.type=s3
-Ddruid.s3.accessKey=...
-Ddruid.s3.secretKey=...
-Ddruid.storage.bucket=your-bucket
-Ddruid.storage.baseKey=druid/storage/wikipedia
-Ddruid.storage.maxListingLength=1000
-cp $DRUID_CLASSPATH
org.apache.druid.cli.Main tools insert-segment-to-db --workingDir "druid/storage/wikipedia" --updateDescriptor true
當然,在不同安裝方式下,這寫命令可能會發生一些錯誤,無法運行,這個一把是少jar包,或者路徑指定不對的問題,例如我們使用的阿里雲的druid.io,在運行該工具的時候,就發現保錯無法運行,在對改命令充分理解之後,以及對阿里雲druid
.io安裝目錄等熟悉偶發現,經過簡單的修改後,該工具集可以順暢的運行起來了,那麼阿里雲druid.io的運行命令如下:
java -Ddruid.metadata.storage.type=mysql -Ddruid.metadata.storage.connector.connectURI=jdbc:mysql://emr-header-1:3306/druid -Ddruid.metadata.storage.connector.user=root -Ddruid.metadata.storage.connector.password=EMRroot1234 -Ddruid.extensions.loadList=[\"/opt/apps/ecm/service/druid/0.12.3-1.1.0/package/druid-0.12.3-1.1.0/extensions/mysql-metadata-storage\",\"/opt/apps/ecm/service/druid/0.12.3-1.1.0/package/druid-0.12.3-1.1.0/extensions/druid-hdfs-storage\"] -Ddruid.storage.type=hdfs -cp .:/usr/lib/druid-current/lib/*:/usr/lib/druid-current/lib/druid-services-0.12.3.jar io.druid.cli.Main tools insert-segment-to-db --workingDir oss://icsoc-emr-hadoop/druid-test/segments/TEST-CTI-PT30M-PT1H --updateDescriptor true```