草庐IT

java - 分几步写入 HDFS 文件的效率如何?

我知道HDFSblock大小为64MB。但是假设我创建了一个新的HDFS文件,并继续向其中写入数据,但一次只写入了4KB的数据。那会不会效率很低?到最后我的文件可能有1GB大小,但是一点一点地写入数据是否会使写入这样的文件效率低下?我的意思是,在写入文件之前缓冲我的数据是否重要。例如,在这种情况下,我可以不断地将数据累积到一个缓冲区中,直到它达到64MB的大小,然后将其写入HDFS文件,并在清除该缓冲区后重复该过程。 最佳答案 首先,HDFSblock大小由您决定,默认值是可配置的,您可以在将文件放入HDFS时为给定文件设置不同的b

java - 在 Hadoop 2 中从 Java 远程读取 HDFS 文件时出现 BlockMissingException

我使用的是Hadoop2.6,我有一个安装了HDFS的虚拟机集群。我正在尝试通过在我的本地运行的一些Java代码远程读取我的HDFS中的文件,以基本方式,使用BufferedReaderFileSystemfs=null;StringhadoopLocalPath="/path/to/my/hadoop/local/folder/etc/hadoop";ConfigurationhConf=newConfiguration();hConf.addResource(newPath(hadoopLocalPath+File.separator+"core-site.xml"));hConf

hadoop - Spark 作业失败,因为 HDFS 正在缓存 jar

我将Scala/Sparkjar上传到HDFS以在我们的集群上测试它们。运行后,我经常意识到需要做出一些改变。所以我在本地进行更改,然后将新的jar推送回HDFS。然而,当我这样做时,hadoop经常(并非总是)抛出一个错误,本质上是说这个jar与旧jar不同(duh)。我尝试清除我的回收站、.staging和.sparkstaging目录,但这没有任何作用。我尝试重命名jar,这有时会起作用,有时却不起作用(这仍然很荒谬,我必须首先这样做)。有谁知道为什么会发生这种情况以及如何防止这种情况发生?谢谢你的帮助。如果有帮助,这里有一些日志(编辑了一些路径):Applicationappl

hadoop - HDFS:金丝雀测试失败

刚刚使用ClouderaManager安装了HDFS。我可以访问ameNodeWebUI,所有节点都处于事件状态。但我得到了各种各样的Canary测试无法在目录/tmp/.cloudera_health_monitoring_canary_files中创建文件。我试过:1)hadoopdfsadmin-safemodeget:可以确认namenode没有处于安全模式。因此写操作不应该有任何限制。2)hadoopfs-ls/:显示/tmp目录拥有完全权限777,也就是说任何人都可以往这个目录下放数据。顺便说一句,我在名称节点日志中找不到任何特别之处。为什么金丝雀测试无法在/tmp中创建文

shell - 我无法在终端中启动配置单元,并且花费太多时间并且无法启动,如下所示

Hiveerrorittakeslotoftimetostart但是hiveshell还没有启动我无法启动配置单元shell:在终端和方式中花费太多时间并且没有启动,如下所示。[cloudera@quickstart~]$配置单元2016-10-2610:29:26,261WARN[main]mapreduce.TableMapReduceUtil:不存在包含PrefixTreeCodec的hbase-prefix-tree模块jar。没有它继续。使用文件中的配置初始化日志记录:/etc/hive/conf.dist/hive-log4j.properties]2

amazon-s3 - Hadoop从本地机器上传文件到amazon s3

我正在开发一个JavaMapReduce应用程序,它必须能够为一些图片从用户的本地计算机提供上传服务到S3存储桶。问题是应用程序必须在EC2集群上运行,所以我不确定在复制文件时如何引用本地机器。方法copyFromLocalFile(..)需要来自本地计算机的路径,该计算机将成为EC2集群...不知道我说的对不对,谁能看懂我的意思?谢谢 最佳答案 您还可以调查s3distcp:http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/UsingE

hadoop - 使用配置单元初始化数据库时出现 java.sql.SQLException : Failed to start database 'metastore_db' ERROR,

我在3个集群上安装了Hadoop和Hive。我能够从运行HIVE的集群节点登录到配置单元。root@NODE_3hive]#hiveLogginginitializedusingconfigurationinjar:file:/usr/lib/hive/lib/hive-common-0.10.0-cdh4.2.0.jar!/hive-log4j.propertiesHivehistoryfile=/tmp/root/hive_job_log_root_201304020248_306369127.txthive>showtables;OKTimetaken:1.459secondsh

java - 使用 AvroMultipleOutputs 创建多个输出文件

我有一个使用AvroKeyOutput作为输出格式的Reducer。默认情况下,MapReduce会将我的所有key写入单个输出文件。我想为每个键值写入一个单独的输出文件。Avro提供了AvroMultipleOutputs方法,但示例很少。Apache提供的AvroMultipleOutputs,展示了如何在定义作业时预先配置各种输出。例子表明:职位:AvroMultipleOutputs.addNamedOutput(job,"avro1",AvroOutputFormat.class,schema);AvroMultipleOutputs.addNamedOutput(job,"

Hadoop HDFS - 保留许多部分文件或 concat?

在Hadoop中运行map-reduce作业后,结果是一个包含部分文件的目录。part文件的数量取决于reducer的数量,可以达到几十个(在我的例子中是80个)。保留多个部分文件是否会影响futuremap-reduce操作的性能,是好是坏?采取额外的缩减步骤并合并所有部分会提高还是降低进一步处理的速度?请仅引用map-reduce性能问题。我不关心以任何其他方式拆分或合并这些结果。 最佳答案 在零件目录上运行进一步的mapreduce操作应该对整体性能几乎没有影响。原因是Hadoop做的第一步是根据大小拆分输入目录中的数据,并将

java - FSDataInputStream 是否仅限于创建时已经写入的那些字节?

所以我试图了解HDFS中的一些行为。我的目标是设置一个配置,在该配置中我将FSDataOutputStream打开到某个位置,然后在我写入任何字节之前,我的应用程序的其他部分立即将FSDataInputStream打开到同一位置。我的想法是,当我将字节写入FSDataOutputStream、刷新它们并调用“sync()”时,任何有权访问相同位置的FSDataInputStream的人都应该能够读取这些字节。可悲的是,它似乎并没有那样工作。当我以这种方式设置我的代码时:FSDataOutputStreamwriter=fs.create(newPath("/foo/bar"));FSD