我想将数据从 flume-ng 写入 Google Cloud Storage。这有点复杂,因为我观察到一个非常奇怪的行为。让我解释:
介绍
我已经在谷歌云上启动了一个 hadoop 集群(单击),设置为使用存储桶。
当我在 master 上 ssh 并使用命令添加文件时hdfs
,我可以立即在我的存储桶中看到它
$ hadoop fs -ls /
14/11/27 15:01:41 INFO gcs.GoogleHadoopFileSystemBase: GHFS version: 1.2.9-hadoop2
Found 1 items
-rwx------ 3 hadoop hadoop 40 2014-11-27 13:45 /test.txt
但是当我尝试添加然后从我的计算机中读取时,它似乎使用了其他一些 HDFS。在这里我添加了一个名为 的文件jp.txt
,它没有显示我以前的文件test.txt
$ hadoop fs -ls hdfs://ip.to.my.cluster/
Found 1 items
-rw-r--r-- 3 jp supergroup 0 2014-11-27 14:57 hdfs://ip.to.my.cluster/jp.txt
这也是我在探索 HDFS 时看到的唯一文件http://ip.to.my.cluster:50070/explorer.html#/
当我使用 Web 控制台 ( https://console.developers.google.com/project/my-project-id/storage/my-bucket/ ) 列出存储桶中的文件时,我只能看到test.txt
而不是jp.txt
.
我读到Hadoop 无法连接到 Google Cloud Storage并且我相应地配置了我的 hadoop 客户端(相当困难的东西),现在我可以看到我的存储桶中的项目。但为此,我需要使用gs://
URI
$ hadoop fs -ls gs://my-bucket/
14/11/27 15:57:46 INFO gcs.GoogleHadoopFileSystemBase: GHFS version: 1.3.0-hadoop2
Found 1 items
-rwx------ 3 jp jp 40 2014-11-27 14:45 gs://my-bucket/test.txt
观察/中间结论
因此,在同一个集群中似乎有 2 个不同的存储引擎:“传统 HDFS”(以 开头hdfs://
)和 Google 存储桶(以 开头gs://
)。
用户和权限不同,具体取决于您列出文件的位置。
问题)
主要问题是:使用 flume 在 Google Cloud Storage 上写入 HDFS/GS 所需的最小设置是什么?
相关问题
- 我是否需要在 Google Cloud 上启动 Hadoop 集群才能实现我的目标?
- 是否可以直接写入 Google Cloud Storage Bucket ?如果是,我该如何配置水槽?(添加罐子,重新定义类路径......)
- 同一个集群怎么会有2个存储引擎(经典HDFS/GS bucket)
我的水槽配置
a1.sources = http
a1.sinks = hdfs_sink
a1.channels = mem
# Describe/configure the source
a1.sources.http.type = org.apache.flume.source.http.HTTPSource
a1.sources.http.port = 9000
# Describe the sink
a1.sinks.hdfs_sink.type = hdfs
a1.sinks.hdfs_sink.hdfs.path = hdfs://ip.to.my.cluster:8020/%{env}/%{tenant}/%{type}/%y-%m-%d
a1.sinks.hdfs_sink.hdfs.filePrefix = %H-%M-%S_
a1.sinks.hdfs_sink.hdfs.fileSuffix = .json
a1.sinks.hdfs_sink.hdfs.round = true
a1.sinks.hdfs_sink.hdfs.roundValue = 10
a1.sinks.hdfs_sink.hdfs.roundUnit = minute
# Use a channel which buffers events in memory
a1.channels.mem.type = memory
a1.channels.mem.capacity = 1000
a1.channels.mem.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.http.channels = mem
a1.sinks.hdfs_sink.channel = mem
a1.sinks.hdfs_sink.hdfs.path 行是否接受gs://
路径?
在这种情况下需要什么设置(额外的罐子,类路径)?
谢谢