druid.io 使用hdfs做爲deep storage 不能保存

前提:java

---a、首先須要你本身搭建一個hadoop集羣,該集羣自帶hdfs功能。node

---b、第二點在你的druid的集羣每一臺機器配置hadoop-client。而且須要修改conf,能夠直接將hadoop集羣的conf目錄拷貝過來。(注意:若是conf中的配置文件使用了機器名,這時你須要拷貝集羣中機器的 /etc/hosts 中的必要內容,添加到本機的/etc/hosts中,假設192.168.121.100 NameNode )shell

步驟:apache

一、配置config/_common/common.runtime.properties:oop

druid.storage.type=hdfs

druid.storage.storageDirectory=hdfs:/tmp/druid/Storage

三、使用命令直接查看 hdfs dfs -ls hdfs:/tmp/druid/Storage,發現什麼也沒有保存,排查問題緣由。ui

四、最後在發如今 config/_common/common.runtime.properties 缺乏一項配置,在druid.io的手冊中沒有說起到,致使問題排查了好久,配置druid.extensions.coordinates=[], 增長一項" io.druid.extensions:druid-hdfs-storage ",保存。.net

五、從新運行第2步的例子(因爲配置了hdfs,因此須要最早運行coordination節點,否則先運行其餘節點會卡住)。發現任務運行失敗、查看日誌失敗緣由(失敗緣由須要配置一下index服務的log日誌,由於是後臺線程不會consle 不會打印具體緣由,須要配置 config/overlord/runtime.properties中添加下面兩項線程

druid.indexer.logs.type=local
druid.indexer.logs.directory=/tmp/druid/indexlog

)。配置後從新運行第2步的例子,失敗後,能夠查看/tmp/druid/indexlog下的log文件。日誌

問題日誌以下:code

2016-03-23T10:04:36,733 INFO [task-runner-0] io.druid.storage.hdfs.HdfsDataSegmentPusher - Copying segment[wikipedia_2013-08-31T00:00:00.000Z_2013-09-01T00:00:00.000Z_2016-03-23T10:04:28.781Z] to HDFS at location[hdfs://tmp/druid/Storage/wikipedia/20130831T000000.000Z_20130901T000000.000Z/2016-03-23T10_04_28.781Z/0]

2016-03-23T10:04:44,089 WARN [task-runner-0] io.druid.indexing.common.index.YeOldePlumberSchool - Failed to merge and upload

java.lang.IllegalArgumentException: java.net.UnknownHostException: tmp

 at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:377) ~[?:?]

 at org.apache.hadoop.hdfs.NameNodeProxies.createNonHAProxy(NameNodeProxies.java:237) ~[?:?]

 at org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:141) ~[?:?]

 at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:569) ~[?:?]

問題緣由是因爲hdfs配置目錄的問題,從新修改config/_common/common.runtime.properties中的

druid.storage.type=hdfs
# druid.storage.storageDirectory=hdfs://tmp/druid/Storage

#增長NameNode,這裏必需要只能hdfs集羣的nameNode,若是不知到NameNode,可使用ip代替


druid.storage.storageDirectory=hdfs://Namenode/tmp/druid/Storage

六、從新運行第二步的例子。運行成功。查看hdfs中已經保存了segment的文件。

root@debian:~/druid-0.8.3# hdfs dfs -ls /tmp/druid/Storage

Found 1 items
drwxr-xr-x   - root hdfs          0 2016-03-23 18:11 /tmp/druid/Storage/wikipedia
root@debian:~/druid-0.8.3#

總結 :deep storage使用時 最重要的兩點要注意在配置文件config/_common/common.runtime.properties:

一、" io.druid.extensions:druid-hdfs-storage ",這裏要先指定使用hdfs,後面hdfs配置的選項才能生效。

二、druid.storage.storageDirectory=hdfs://Namenode/tmp/druid/Storage ,這裏的NameNode很重要,若是要是忘記配了,則一樣會失敗,這裏因爲在/etc/hosts 文件中配置了NameNode 轉換ip爲 192.168.120.100。若是你要是沒配置能夠替換成ip便可。

相關文章
相關標籤/搜索