Tag: hadoop

在zookeeper中创建路径的最有效方法,路径的根元素可能存在也可能不存在?

想象一下路径“/ root / child1 / child2 / child3” 想象一下,在动物园管理员中,可能有一部分存在,比如“/ root / child1” 在zookeeper中没有“mkdir -p”的等价物; 此外,如果任何一个操作失败,ZooKeeper.multi()将失败,因此“make path”无法真正被烘焙到多次调用中。 另外,你可以让其他一些客户尝试制作相同的路径…… 这就是我为创建路径而想出的。 我想知道是否值得检查一个部件是否存在,以保存exists()调用的往返行程。 //String[] pathParts new String[] { “root”, “child1”, “child2”, “child3” }; public void savePath(String[] pathParts) { if (zooKeeper.exists(pathString, false) != null) return; StringBuilder path = new StringBuilder(); for (String pathElement : pathParts) { path.append(UNIX_FILE_SEPARATOR).append(pathElement); String pathString = […]

来自hbase / filesystem的hadoop namenode连接中EOFexception的含义是什么?

这是关于java EOFexception的一般性问题,以及与jar互操作性相关的Hadoop的EOFexception。 任何一个主题的评论和答案都是可以接受 背景 我注意到一些讨论隐藏exception的线程,这最终是由“readInt”方法引起的。 这个例外似乎有一些与hadoop无关的通用含义,但最终是由Hadoop jar的互操作性引起的。 在我的例子中,当我尝试在java中的hadoop中创建一个新的FileSystem对象时,我得到了它。 题 我的问题是:发生了什么以及为什么读取整数会引发EOFexception? 什么“文件”是这个EOFexception所指的,如果两个jar无法互操作,为什么会抛出这样的exception呢? 其次,我也想知道如何解决这个错误,这样我就可以使用hdfs协议和java api远程连接和读/写hadoops文件系统…. java.io.IOException:在本地exception上调用/10.0.1.37:50070失败:java.io.EOFException at org.apache.hadoop.ipc.Client.wrapException(Client.java:1139) 在org.apache.hadoop.ipc.Client.call(Client.java:1107) 在org.apache.hadoop.ipc.RPC $ Invoker.invoke(RPC.java:226) 在$ Proxy0.getProtocolVersion(未知来源) 在org.apache.hadoop.ipc.RPC.getProxy(RPC.java:398) 在org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384) 在org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:111) 在org.apache.hadoop.hdfs.DFSClient。(DFSClient.java:213) 在org.apache.hadoop.hdfs.DFSClient。(DFSClient.java:180) 在org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89) 在org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1514) 在org.apache.hadoop.fs.FileSystem.access $ 200(FileSystem.java:67) at org.apache.hadoop.fs.FileSystem $ Cache.getInternal(FileSystem.java:1548) 在org.apache.hadoop.fs.FileSystem $ Cache.get(FileSystem.java:1530) 在org.apache.hadoop.fs.FileSystem.get(FileSystem.java:228) 在sb.HadoopRemote.main(HadoopRemote.java:35) 引起:java.io.EOFException 在java.io.DataInputStream.readInt(DataInputStream.java:375) 在org.apache.hadoop.ipc.Client $ Connection.receiveResponse(Client.java:819) 在org.apache.hadoop.ipc.Client $ Connection.run(Client.java:720)

在Hadoop中,框架在正常的Map-Reduce应用程序中保存Map任务的输出?

我试图找出Map任务的输出在Reduce任务可以使用之前保存到磁盘的位置。 注意: – 使用的版本是带有新API的Hadoop 0.20.204 例如,在Map类中覆盖map方法时: public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } // code that starts a new Job. } 我有兴趣找出context.write()最终写入数据的位置。 到目前为止,我遇到了: FileOutputFormat.getWorkOutputPath(context); 这给了我在hdfs上的以下位置: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0 当我尝试将它用作另一个作业的输入时,它会给我以下错误: org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0 […]

如何使用spark处理一系列hbase行?

我正在尝试使用HBase作为spark的数据源。 因此,第一步是从HBase表创建RDD。 由于Spark使用hadoop输入格式,我可以通过创建rdd找到一种使用所有行的方法http://www.vidyasource.com/blog/Programming/Scala/Java/Data/Hadoop/Analytics/2014/01/25 / lighting-a-spark-with-hbase但我们如何为范围扫描创建RDD? 欢迎所有建议。

Jetty中的传输速度缓慢,在某些缓冲区大小时使用分块传输编码

我正在调查Jetty 6.1.26的性能问题。 Jetty似乎使用Transfer-Encoding: chunked ,并且根据使用的缓冲区大小,在本地传输时这可能非常慢。 我用一个servlet创建了一个小型Jetty测试应用程序来演示这个问题。 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.mortbay.jetty.Server; import org.mortbay.jetty.nio.SelectChannelConnector; import org.mortbay.jetty.servlet.Context; public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { final int bufferSize = 65536; resp.setBufferSize(bufferSize); OutputStream outStream = resp.getOutputStream(); […]

使用Java API在Hadoop中移动文件?

我想使用Java API在HDFS中移动文件。 我无法想办法做到这一点。 FileSystem类似乎只允许允许移入和移出本地文件系统..但我想将它们保存在HDFS中并将它们移动到那里。 我错过了什么基本的东西? 我可以想象的唯一方法是从输入流中读取它并将其写回…然后删除旧副本(yuck)。 谢谢

/ bin / bash:/ bin / java:没有这样的文件或目录

我试图在Mac OS X EL Captain 10.11上使用Java 1.7 SDK和Hadoop2.7.1运行一个简单的wordcount MapReduce程序,我在容器日志“stderr”/ bin / bash:/ bin / java中收到以下错误消息:没有相应的文件和目录 申请日志 – 5/11/27 02:52:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable 15/11/27 02:52:33 INFO client.RMProxy: Connecting to ResourceManager at /192.168.200.96:8032 15/11/27 02:52:34 INFO input.FileInputFormat: Total input paths to process : 0 15/11/27 […]

如何在Hadoop中自定义Writable类?

我正在尝试实现Writable类,但是如果在我的类中有嵌套对象,例如list等,我不知道如何实现可写类。任何正文可以帮助我吗? 谢谢 public class StorageClass implements Writable{ public String xStr; public String yStr; public List sStor //omitted ctors @override public void write(DataOutput out) throws IOException{ out.writeChars(xStr); out.WriteChars(yStr); //WHAT SHOULD I DO FOR List } @override public void readFields(DataInput in) throws IOException{ xStr = in.readLine(); yStr = in.readLine(); //WHAT SHOULD I DO FOR List } } […]

在mapper中逐行读取HDFS中的文本文件

以下是Mappers的代码,从HDFS读取文本文件对吗? 如果是: 如果不同节点中的两个映射器几乎同时尝试打开文件会发生什么? 是不是需要关闭InputStreamReader ? 如果是这样,如何在不关闭文件系统的情况下执行此操作? 我的代码是: Path pt=new Path(“hdfs://pathTofile”); FileSystem fs = FileSystem.get(context.getConfiguration()); BufferedReader br=new BufferedReader(new InputStreamReader(fs.open(pt))); String line; line=br.readLine(); while (line != null){ System.out.println(line);

扩展SequenceFileInputFormat以包含文件名+偏移量

我希望能够创建一个自定义的InputFormat来读取序列文件,但是还要在该文件中公开记录所在的文件路径和偏移量。 退一步,这是用例:我有一个包含可变大小数据的序列文件。 密钥几乎不相关,并且值高达几兆字节,包含各种不同的字段。 我想索引elasticsearch中的一些字段以及文件名和偏移量。 这样,我可以从elasticsearch中查询这些字段,然后使用文件名和偏移量返回到序列文件并获取原始记录,而不是将整个内容存储在ES中。 我将整个过程作为单个java程序运行。 SequenceFile.Reader类方便地提供getPosition和seek方法来实现这一点。 但是,最终会涉及到数TB的数据,所以我需要将其转换为MapReduce作业(可能只有Map)。 由于序列文件中的实际键是无关紧要的,我希望采用的方法是创建一个自定义的InputFormat,它扩展或以某种方式利用SquenceFileInputFormat,而不是返回实际的键,而是返回一个由文件组成的复合键和抵消。 然而,事实certificate这在实践中更加困难。 看起来它应该是可能的,但考虑到实际的API以及暴露的内容,这很棘手。 有任何想法吗? 也许我应该采取另一种方法?