前提: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便可。