我不是Java或Hadoop程序员,所以我解决问题的方式可能不是最好的,但无论如何。
我花了两天的时间解决了在没有安装hadoop的情况下在本地读取FileSeq(Linux debian amd64)的问题。
所提供的样品
while (reader.next(key, val)) {
System.out.println(key + ":" + val);
}
非常适用于文本,但BytesWritable压缩输入数据没有工作。
我做了什么? 我下载了这个实用程序来创建(编写SequenceFiles Hadoop数据) github_com/shsdev/sequencefile-utility/archive/master.zip ,并得到它的工作,然后修改为读取输入Hadoop SeqFiles。
运行从头此实用工具为Debian的指令:
sudo apt-get install maven2
sudo mvn install
sudo apt-get install openjdk-7-jdk
edit "sudo vi /usr/bin/mvn",
change `which java` to `which /usr/lib/jvm/java-7-openjdk-amd64/bin/java`
Also I've added (probably not required)
'
PATH="/home/mine/perl5/bin${PATH+:}${PATH};/usr/lib/jvm/java-7-openjdk-amd64/"; export PATH;
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
export JAVA_VERSION=1.7
'
to ~/.bashrc
Then usage:
sudo mvn install
~/hadoop_tools/sequencefile-utility/sequencefile-utility-master$ /usr/lib/jvm/java-7-openjdk-amd64/bin/java -jar ./target/sequencefile-utility-1.0-jar-with-dependencies.jar
-- and this doesn't break the default java 1.6 installation that is required for FireFox/etc.
为了解决误差FileSeq兼容性(例如:“无法加载原生的Hadoop库平台...使用内置的Java类适用“),我使用了Hadoop的主服务器的库为是(一种黑客):
scp [email protected]:/usr/lib/libhadoop.so.1.0.0 ~/
sudo cp ~/libhadoop.so.1.0.0 /usr/lib/
scp [email protected]:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server/libjvm.so ~/
sudo cp ~/libjvm.so /usr/lib/
sudo ln -s /usr/lib/libhadoop.so.1.0.0 /usr/lib/libhadoop.so.1
sudo ln -s /usr/lib/libhadoop.so.1.0.0 /usr/lib/libhadoop.so
一天晚上喝咖啡,我已经写了这个代码读取FileSeq Hadoop的输入文件(使用此CMD运行这个代码“/ usr/lib/jvm/java-7-open JDK-AMD64 /斌/ Java的罐子./target/sequencefile-utility-1.3-jar-with-dependencies.jar -d测试/ -c NONE“):
import org.apache.hadoop.io.*;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.SequenceFile.ValueBytes;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
Path file = new Path("/home/mine/mycompany/task13/data/2015-08-30");
reader = new SequenceFile.Reader(fs, file, conf);
long pos = reader.getPosition();
logger.info("GO from pos "+pos);
DataOutputBuffer rawKey = new DataOutputBuffer();
ValueBytes rawValue = reader.createValueBytes();
int DEFAULT_BUFFER_SIZE = 1024 * 1024;
DataOutputBuffer kobuf = new DataOutputBuffer(DEFAULT_BUFFER_SIZE);
kobuf.reset();
int rl;
do {
rl = reader.nextRaw(kobuf, rawValue);
logger.info("read len for current record: "+rl+" and in more details ");
if(rl >= 0)
{
logger.info("read key "+new String(kobuf.getData())+" (keylen "+kobuf.getLength()+") and data "+rawValue.getSize());
FileOutputStream fos = new FileOutputStream("/home/mine/outb");
DataOutputStream dos = new DataOutputStream(fos);
rawValue.writeUncompressedBytes(dos);
kobuf.reset();
}
} while(rl>0);
由于信息的这些来源: 链接:
如果使用Hadoop的核心,而不是mahour,然后就可以下载手动ASM-3.1.jar: search_maven_org/remotecontent文件路径=组织/ow2/util/asm/asm/3.1/asm-3.1.jar search_maven_org /#搜索| GA | 1个| ASM-3.1
avaliable象夫回购名单: repo1_maven_org/maven2的/组织/阿帕奇/象夫/ Mahout简介: mahout_apache_org/
学习Hadoop的Java类(我用它编写自己的代码读取FileSeq)的接口和来源良好的资源:我用来创建我自己的项目TB-LSDR-seqfilecreator的 http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.7/org/apache/hadoop/io/BytesWritable.java
来源项目FileSeq阅读器: www_javased_com /?source_dir = scape/tb-lsdr-seqfilecreator/src/main/java/eu/scape_project/tb/lsdr/seqfileutility/ProcessParameters。java的
stackoverflow_com /问题/ 5096128 /序列文件正在Hadoop的 - 相同的例子(阅读键,不起作用值)
https://github.com/twitter/elephant-bird/blob/master/core/src/main/java/com/twitter/elephantbird/mapreduce/input/RawSequenceFileRecordReader.java - 这一个帮助我(我用的reader.nextRaw和nextKeyValue()以及其他子集一样)
另外我已经更改了./pom.xml本地apache.hadoop而不是mahout.hadoop,但可能这不是必需的,因为read-> next的缺陷(key,value)是相同的,所以我不得不使用read-> nextRaw(keyRaw,valueRaw)来代替:
diff ../../sequencefile-utility/sequencefile-utility-master/pom.xml ./pom.xml
9c9
< <version>1.0</version>
---
> <version>1.3</version>
63c63
< <version>2.0.1</version>
---
> <version>2.4</version>
85c85
< <groupId>org.apache.mahout.hadoop</groupId>
---
> <groupId>org.apache.hadoop</groupId>
87c87
< <version>0.20.1</version>
---
> <version>1.1.2</version>
93c93
< <version>1.1</version>
---
> <version>1.1.3</version>
如果您有权威指南的副本,则此示例位于第133页(第三版)上。还有编写和显示序列文件的例子。 – Steven