问题标签 [sequencefile]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hive - 使用 Hive 读取 Hadoop 序列文件
我有一些来自 Common Crawl 的映射数据,这些数据以 SequenceFile 格式存储。我已经反复尝试在 Hive 中“按原样”使用这些数据,这样我就可以在各个阶段对其进行查询和采样。但我的工作输出中总是出现以下错误:
我什至构建了一个更简单(更小)的 [Text, LongWritable] 记录数据集,但也失败了。如果我将数据输出为文本格式,然后在其上创建一个表格,它就可以正常工作:
我尝试使用自定义输入格式:
然后我创建表:
但我仍然得到相同的 SerDer 错误。
我确定这里缺少一些非常基本的东西,但我似乎无法正确处理。此外,我必须能够就地解析 SequenceFiles(即我无法将数据转换为文本)。所以我需要为我的项目的未来部分找出 SequenceFile 方法。
解决方案: 正如@mark-grover 在下面指出的那样,问题是 Hive 默认忽略密钥。只有一列(即只有值),serder 无法映射我的第二列。
解决方案是使用比我最初使用的要复杂得多的自定义 InputFormat。我在指向 Git 的链接中找到了一个关于使用键而不是值的答案,然后我对其进行了修改以满足我的需要:从内部 SequenceFile.Reader 中获取键和值,然后将它们组合到最终的 BytesWritable 中。即像这样的东西(来自自定义阅读器,因为这是所有艰苦工作发生的地方):
有了这个,我得到了我所有的专栏!
hadoop - Hadoop HDFS 和序列文件
我想到了一个更基本的概念级别的问题,HDFS和各种文件格式——序列文件(基于它的映射文件)、HAR文件有什么区别和关系?
我想答案是,HDFS是基础文件系统,我们可以把原始二进制文件上传到HDFS(不用序列文件、HAR文件等),也可以使用一些特殊设计的文件格式来写文件HDFS——类似序列文件(基于它的映射文件)格式,HAR文件格式。这是正确的理解吗?
hadoop - 有没有一种有效的方法来查找给定键的序列文件?
我的 map-reduce 作业将最终结果写入序列文件。是否有任何有效的方法来查找给定键的序列文件?
hadoop - Hadoop HDFS:读取正在写入的序列文件
我正在使用 Hadoop 1.0.3。
我将日志写入到 HDFS 的 Hadoop 序列文件中,在每组日志之后调用 syncFS() 但我从不关闭文件(除非我执行每日滚动)。
我要保证的是,在文件仍在写入时,该文件可供读者使用。
我可以通过 FSDataInputStream 读取序列文件的字节,但是如果我尝试使用 SequenceFile.Reader.next(key,val),它会在第一次调用时返回 false。
我知道数据在文件中,因为我可以使用 FSDataInputStream 或 cat 命令读取它,并且我 100% 确定调用了 syncFS()。
我检查了 namenode 和 datanode 日志,没有错误或警告。
为什么 SequenceFile.Reader 无法读取我当前正在写入的文件?
hadoop - Mapper类如何将SequenceFile识别为hadoop中的输入文件?
在我的一个 MapReduce 任务中,我将 BytesWritable 覆盖为 KeyBytesWritable,并将 ByteWritable 覆盖为 ValueBytesWritable。然后我使用 SequenceFileOutputFormat 输出结果。
我的问题是当我开始下一个 MapReduce 任务时,我想使用这个 SequenceFile 作为输入文件。那么如何设置作业类,以及 Mapper 类如何识别我之前覆盖的 SequenceFile 中的键和值?
我知道我可以通过 SequenceFile.Reader 读取键和值。
但我不知道如何使用这个 Reader 将键和值作为参数传递给 Mapper 类。如何将 conf.setInputFormat 设置为 SequenceFileInputFormat,然后让 Mapper 获取键和值?
谢谢
hadoop - 阅读 Hadoop SequenceFile:奇怪的十六进制数字流
我正在尝试使用以下代码将一段 Hadoop SequenceFile 转换为纯文本:
密钥可以正确转换。但是,这些值将转换为奇怪的 HEX 数字流。一个样本是:
真正的流比这要长得多。我所知道的是,键存储为Hadoop Text
格式,值存储为Hadoop BytesWritable
. 这些值可能是中文的,但我不确定。
有人知道发生了什么吗?
hadoop - 将 HDFS 文件中的二进制数据写入 SequenceFile
我在 HDFS 中有很多文件,想通过 MR 作业将它们复制到序列文件中。seq文件的key类型是TEXT(我用的是SHA1),value类型是BytesWritable(文件内容)。我发现一些示例代码将所有文件内容读取到一个字节数组中,比如缓冲区,然后将缓冲区设置为 ByteWritable 对象。前任:
我的问题是:如果我的输入文件很大,缓冲区大小会超出内存限制。我可以在每次迭代中写入少量数据的循环附加到 ByteWritable 对象吗?或者我可以将输入流分配给 BytesWritable 对象并让它处理问题吗?
谢谢。
hadoop - 使用 SequenceFile 类写入文件
我使用以下代码将一些数据写入 SequenceFile 格式文件。当程序运行一段时间时,我通过 Eclipse 控制台上的红色按钮中断程序。但是,当我检查 hdfs 上的数据文件时,序列文件的大小为零。而且也不能使用'hadoop fs -text filename'命令查看文件。当我使用 SequenceFile.Reader 读取之前创建的文件时,我遇到了 'Exception in thread "main" java.io.EOFException' 异常。在这种情况下,怎么办?我的开发环境是 eclipse3.7(在 windows 7 上)和 hadoop 集群(hadoop 版本 1.0.3 )在 CentOS 6 上。
类序列扩展线程{
}
公共类 TestSequenceFile {
}
hadoop - 如何限制 Hadoop 序列文件的大小?
我正在使用 txt 作为输入编写 Hadoop seq 文件。我知道如何从文本文件中编写序列文件。
但我想将输出序列文件限制为某个特定大小,例如 256MB。
有没有内置的方法可以做到这一点?
performance - HDFS 序列文件性能调优
我正在尝试使用 Hadoop 处理大量存储在序列文件中的小文件。我的程序是高度 IO 绑定的,所以我想确保 IO 吞吐量足够高。
我编写了一个 MR 程序,它从序列文件中读取小样本文件并将这些文件写入ram 磁盘(/dev/shm/test/)。还有另一个独立程序可以删除写入 ram 磁盘的文件而无需任何计算。所以测试应该几乎是纯 IO 绑定的。但是,IO 吞吐量并没有我想象的那么好。
我有 5 个数据节点,每个数据节点有 5 个数据磁盘。每个磁盘可以提供大约 100MB/s 的吞吐量。理论上这个集群应该能够提供 100MB/s * 5(磁盘)* 5(机器)= 2500MB/s。但是,我只能得到大约 600MB/s。我在5台机器上运行“iostat -d -x 1”,发现IO负载不均衡。通常只有少数磁盘具有 100% 的利用率,一些磁盘的利用率非常低(10% 或更少)。有些机器有时甚至没有 IO 加载。这是屏幕截图。(当然每个磁盘/机器的负载变化很快)
这是另一个屏幕截图,显示了“top -cd1”命令的 CPU 使用情况:
这是关于我的案例的一些更详细的配置:
Hadoop 集群硬件:5 台 Dell R620 机器,配备 128GB 内存和 32 核 CPU(实际上是 2 台 Xeon E5-2650)。2 HDD 由一个用于 CentOS 的 RAID 1 磁盘和 5 个用于 HDFS 的数据磁盘组成。所以你可以在上面的截图中看到 6 个磁盘。
Hadoop设置:块大小128MB;数据节点处理程序计数为 8;每个任务跟踪器 15 个地图;2GB Map减少子堆进程。
测试文件集:约40万个小文件,总大小320GB。存储在 160 个序列文件中,每个 seq 文件大小约为 2GB。我尝试将所有文件存储在许多不同大小的 seq 文件中(1GB、512MB、256MB、128MB),但性能并没有太大变化。
我不会期望整个系统可以有 100% 的 IO 吞吐量(2500MB/s),但我认为40%(1000MB/s)或更多应该是合理的。谁能提供一些性能调整指南?