我正在使用HDFSJavaAPI以及FSDataOutput和FSDataInput流将文件写入/读取到由4台机器组成的Hadoop2.6.0集群。FS流实现有一个bufferSize构造函数参数,我假设它用于流的内部缓存。但它似乎对写入/读取速度完全没有影响,无论其值如何(我尝试了8KB到几兆字节之间的值)。我想知道是否有某种方法可以实现对HDFS集群的缓冲写入/读取,而不是将FSDataOutput/Input包装到BufferedOutput/Input流中? 最佳答案 我找到了答案。FileSystem.create()的b
我了解到hdfs将其文件作为数据block存储在数据节点上,每个block实际上作为文件存储在每个数据节点的本地文件系统中。所以我想知道在给定hdfs文件名的情况下,是否有办法在本地文件系统中获取hdfsblock的实际文件名。谢谢。 最佳答案 您可以对您想到的文件使用Hadoop的FSCK命令。这将返回主机名和block名。但是,它不提供本地文件系统上文件的完整路径。$hadoopfsck/path/to/file-files-blocks-locations另一种选择是通过HDFSWebUI。如果浏览到每个文件,它将列出bloc
给定一个分布在HDFS上的Parquet数据集(元数据文件+可能的.parquet部分),如何正确合并部分并将数据收集到本地文件系统?dfs-getmerge...不起作用-它将元数据与实际的Parquet文件合并.. 最佳答案 有一种涉及ApacheSparkAPI的方法-它提供了一种解决方案,但可能存在不使用第三方工具的更有效的方法。spark>valparquetData=sqlContext.parquetFile("pathToMultipartParquetHDFS")spark>parquet.repartition(
我有一个python脚本需要处理一个大文件。如果我减少原始文件并运行脚本,代码可以正常工作,但是当我在原始数据上运行脚本时,我的脚本需要永远执行。我正在考虑使用HDFS来存储文件并从python脚本中读取它。但是为了使用HDFS,我是否必须将我的python脚本转换为mapreduce程序,或者我是否可以使用相同的代码。 最佳答案 您需要调整Python代码然后使用HadoopStreaming处理它。这正是流式传输所针对的情况类型。 关于python-从python脚本读取大型hdfs
更新您需要将hdfs-site.xml提供给hbase/conf,以便hbase可以使用正确的目标副本,否则它使用默认值3。这修复了消息。但是在每次进程重启期间,我的名称节点始终处于安全模式。fsck一切正常,没有错误,没有复制不足等。之后我看不到任何日志:2012-10-1713:15:13,278信息org.apache.hadoop.hdfs.StateChange:状态*安全模式开启。报告block的比例0.0000尚未达到阈值0.9990。安全模式将自动关闭。2012-10-1713:15:14,228信息org.apache.hadoop.net.NetworkTopolo
作为配置单元查询的结果,我得到了多个输出文件(按排序方式分发),现在我想合并它们以生成一个文件。所以我尝试了hdfsdfs-getmerge命令。现在我想了解-getmerge是在连接之前对文件进行排序还是只是连接? 最佳答案 publicstaticbooleanMore...copyMerge(FileSystemsrcFS,PathsrcDir,277FileSystemdstFS,PathdstFile,278booleandeleteSource,279Configurationconf,StringaddString)t
在Windows8中使用kerberos配置HDFS。Namenode成功登录并启动。Datanode未启动但登录成功。异常14/12/1017:51:55WARNutil.NativeCodeLoader:Unabletoloadnative-hadooplibraryforyourplatform...usingbuiltin-javaclasseswhereapplicable14/12/1017:52:00INFOsecurity.UserGroupInformation:Loginsuccessfulforuserkumar@KUMAR.COMusingkeytabfileC
运行我的第一个map-reduce程序。我使用在hdfs中创建了一个目录hdfsdfs-mkdirinput以这种方式创建的目录驻留在hdfs主目录中,即/usr/hdfs(..?)但我无法在我的linux操作系统的任何地方找到我在上面创建的目录“input”。有什么想法吗? 最佳答案 实际上我们不能直接看到hdfs目录所以有两种方法可以看到hdfs文件系统位置的文件第一种方法来自终端hdfsdfs-ls/user/cloudera这样你就可以在'cloudera'命名目录中看到hdfs文件系统中的文件第二种方法是使用浏览器。htt
我在下面引用了Hadoop-权威指南:但是请注意,小文件占用的磁盘空间不会超过存储文件原始内容所需的空间。例如,以128MB的block大小存储的1MB文件使用1MB的磁盘空间,而不是128MB,这是我的问题1)以128MB的block大小存储的1MB文件使用1MB的磁盘空间,而不是128MB。)hdfs如何使用该block中剩余的127M?2)是否有机会在同一个block中存储另一个文件? 最佳答案 1MB文件存储在128MBblock中,有3个副本。然后文件将存储在3个block中,并且仅使用3*1=3MB而不是3*128=38
我创建了一个实时应用程序,在其中使用flume将数据流从weblogs写入hdfs,然后使用sparkstream处理该数据。但是当flume在hdfs中写入和创建新文件时,spark流无法处理这些文件。如果我使用put命令将文件放入hdfs目录,则sparkstream能够读取和处理文件。任何有关相同的帮助都会很棒。 最佳答案 您自己已经检测到问题:当数据流继续时,HDFS文件被“锁定”并且不能被任何其他进程读取。相反,正如您所经历的那样,如果您放入一批数据(这是您的文件,一批,而不是流),一旦上传就可以读取了。无论如何,不是