当我将Hadoop集群连接到Amazon存储并将文件下载到HDFS时,我发现s3://无法正常工作.在互联网上寻求帮助时,我发现我可以使用S3n.当我用S3n它工作.我不明白使用S3和S3n我的Hadoop集群之间的区别,有人可以解释一下吗?
如何在单个作业中使用Spark写入依赖于键的多个输出.
相关:通过键Scalding Hadoop写入多个输出,一个MapReduce作业
例如
sc.makeRDD(Seq((1, "a"), (1, "b"), (2, "c")))
.writeAsMultiple(prefix, compressionCodecOption)
Run Code Online (Sandbox Code Playgroud)
确保cat prefix/1是
a
b
Run Code Online (Sandbox Code Playgroud)
并cat prefix/2会
c
Run Code Online (Sandbox Code Playgroud)
编辑:我最近添加了一个新的答案,其中包括完整的导入,皮条客和压缩编解码器,请参阅/sf/answers/3228263111/,除了之前的答案,这可能会有所帮助.
在HDFS上检查文件的快速方法是使用tail:
~$ hadoop fs -tail /path/to/file
Run Code Online (Sandbox Code Playgroud)
这将显示文件中的最后一千字节数据,这非常有用.但是,相反的命令head似乎不是shell命令集合的一部分.我发现这非常令人惊讶.
我的假设是,由于HDFS是为非常大的文件上的非常快速的流读取而构建的,因此存在一些影响访问的问题head.这让我对做头脑的事情犹豫不决.有人有答案吗?
有人如何修复腐败的HDFS?我查看了Apache/Hadoop网站,它说它的fsck命令,但没有解决它.希望之前遇到此问题的人可以告诉我如何解决这个问题.
与用于本机文件系统的传统fsck实用程序不同,此命令不会更正它检测到的错误.通常,NameNode会自动更正大多数可恢复的故障.
当我运行时bin/hadoop fsck / -delete,它列出了损坏或丢失块的文件.我如何让它不腐败?这是在练习机器上,所以我可以把所有东西吹走,但是当我们上线时,我将无法通过吹掉所有东西来"修复"它,所以我现在想要解决它.
我在伪分布式模式下使用Hadoop,一切正常.但是由于某些原因我不得不重新启动计算机.现在,当我尝试启动Namenode和Datanode时,我发现只有Datanode正在运行.谁能告诉我这个问题的可能原因?或者我做错了什么?
我想这两个bin/start-all.sh和bin/start-dfs.sh.
我需要将文件夹从本地文件系统复制到HDFS.我找不到任何将文件夹(包括其所有子文件夹)移动到HDFS的示例
$ hadoop fs -copyFromLocal /home/ubuntu/Source-Folder-To-Copy HDFS-URI
我目前正在为基于Web的应用程序设计架构,该架构还应提供某种图像存储.用户可以将照片上传为服务的关键功能之一.同时查看这些图像将是主要用途之一(通过网络).
但是,我不确定如何在我的应用程序中实现这种可伸缩的图像存储组件.我已经考虑过不同的解决方案,但由于缺少经验,我期待听到您的建议.除了图像之外,还必须保存元数据.以下是我最初的想法:
使用像HDFS这样的(分布式)文件系统,并将专用的Web服务器准备为"文件系统客户端",以便保存上传的图像和服务请求.图像元数据保存在附加数据库中,包括每个图像的文件路径信息.
在HDFS之上使用像HBase这样的面向BigTable的系统,并将图像和元数据保存在一起.同样,Web服务器桥接图像上传和请求.
使用像CouchDB这样的完全无模式数据库来存储图像和元数据.此外,使用基于HTTP的RESTful API将数据库本身用于上载和发送.(附加问题:CouchDB确实通过Base64保存blob.但它能否以image/jpeg等形式返回数据)?
是否有hdfs命令可以查看hdfs中的可用空间.我们可以看到通过浏览器在master:hdfsport在浏览器中,但由于某种原因我无法访问它,我需要一些命令.我可以通过命令./bin/hadoop fs -du -h查看我的磁盘使用情况,但看不到可用空间.
感谢您提前回答.
-put 并-copyFromLocal记录为相同,而大多数示例使用详细变量-copyFromLocal.为什么?
同样的事情-get和-copyToLocal
我想在HDFS中创建一个文件并在其中写入数据.我用过这段代码:
Configuration config = new Configuration();
FileSystem fs = FileSystem.get(config);
Path filenamePath = new Path("input.txt");
try {
if (fs.exists(filenamePath)) {
fs.delete(filenamePath, true);
}
FSDataOutputStream fin = fs.create(filenamePath);
fin.writeUTF("hello");
fin.close();
}
Run Code Online (Sandbox Code Playgroud)
它会创建文件,但不会在其中写入任何内容.我搜索了很多但没有找到任何东西.我的问题是什么?我是否需要获得HDFS写入权限?
谢谢.