Tag: hadoop

在Hadoop Map Reduce中重命名部件文件

我已尝试按照页面http://hadoop.apache.org/docs/mapreduce/r0.21.0/api/index.html?org/apache/hadoop/mapreduce/lib/output/中的示例使用MultipleOutputs类MultipleOutputs.html 驱动程序代码 Configuration conf = new Configuration(); Job job = new Job(conf, “Wordcount”); job.setJarByClass(WordCount.class); job.setInputFormatClass(TextInputFormat.class); job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); MultipleOutputs.addNamedOutput(job, “text”, TextOutputFormat.class, Text.class, IntWritable.class); System.exit(job.waitForCompletion(true) ? 0 : 1); 减速机代码 public class WordCountReducer extends Reducer { private IntWritable result = new IntWritable(); private MultipleOutputs mos; public void […]

写入HDFS只能复制到0个节点而不是minReplication(= 1)

我有3个数据节点正在运行,而在运行作业时我得到以下错误, java.io.IOException:File / user / ashsshar / olhcache / loaderMap9b663bd9只能复制到0个节点而不是minReplication(= 1)。 运行中有3个数据节点,此操作中排除了3个节点。 在org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1325) 此错误主要发生在我们的DataNode实例空间不足或DataNode未运行时。 我尝试重新启动DataNodes但仍然遇到相同的错误。 我的集群节点上的dfsadmin -reports清楚地显示了大量可用空间。 我不确定为什么会这样。

如何在Hadoop-.20 api中指定KeyValueTextInputFormat分隔符?

在新的API(apache.hadoop.mapreduce.KeyValueTextInputFormat)中,如何指定除tab之外的分隔符(分隔符)(默认值)以分隔键和值。 样本输入: one,first line two,second line 输出要求: Key : one Value : first line Key : two Value : second line 我将KeyValueTextInputFormat指定为: Job job = new Job(conf, “Sample”); job.setInputFormatClass(KeyValueTextInputFormat.class); KeyValueTextInputFormat.addInputPath(job, new Path(“/home/input.txt”)); 这适用于tab作为分隔符。

以编程方式将数据批量加载到HBase的最快方法是什么?

我有一个纯文本文件,可能有数百万行需要自定义解析,我想尽快加载到HBase表中(使用Hadoop或HBase Java客户端)。 我目前的解决方案是基于没有Reduce部分的MapReduce作业。 我使用FileInputFormat读取文本文件,以便将每一行传递给Mapper类的map方法。 此时,解析该行以形成写入context的Put对象。 然后, TableOutputFormat获取Put对象并将其插入表中。 该解决方案产生的平均插入速率为每秒1,000行,低于我的预期。 我的HBase设置在单个服务器上处于伪分布式模式。 一个有趣的事情是,在插入1,000,000行时,会产生25个Mappers(任务),但它们会连续运行(一个接一个); 这是正常的吗? 这是我当前解决方案的代码: public static class CustomMap extends Mapper { protected void map(LongWritable key, Text value, Context context) throws IOException { Map parsedLine = parseLine(value.toString()); Put row = new Put(Bytes.toBytes(parsedLine.get(keys[1]))); for (String currentKey : parsedLine.keySet()) { row.add(Bytes.toBytes(currentKey),Bytes.toBytes(currentKey),Bytes.toBytes(parsedLine.get(currentKey))); } try { context.write(new ImmutableBytesWritable(Bytes.toBytes(parsedLine.get(keys[1]))), row); } catch (InterruptedException […]

匿名类上的NotSerializableException

我有一个过滤项目的界面: public interface KeyValFilter extends Serializable{ public static final long serialVersionUID = 7069537470113689475L; public boolean acceptKey(String iKey, Iterable iValues); public boolean acceptValue(String iKey, String value); } 以及包含KeyValFilter类型成员的类。 public class KeyValFilterCollector extends KeyValCollectorSkeleton { /** * */ private static final long serialVersionUID = -3364382369044221888L; KeyValFilter filter; public KeyValFilterCollector(KeyValFilter filter){ this.filter=filter; } 当我尝试使用实现KeyValFilter的匿名类启动KeyValFilterCollector时: new KeyValFilterCollector(new KeyValFilter(){ private […]

在OOZIE-4.1.0中运行多个工作流时出错

我按照http://gauravkohli.com/2014/08/26/apache-oozie-installation-on-hadoop-2-4-1/中的步骤在Linux机器上安装了oozie 4.1.0 hadoop version – 2.6.0 maven – 3.0.4 pig – 0.12.0 群集设置 – MASTER NODE runnig – Namenode,Resourcemanager,proxyserver。 SLAVE NODE正在运行 -Datanode,Nodemanager。 当我运行单个工作流程时,工作意味着它成功。 但是当我尝试运行多个Workflow作业时,即两个作业都处于接受状态 检查错误日志,我深入研究了问题, 014-12-24 21:00:36,758 [JobControl] INFO org.apache.hadoop.ipc.Client – Retrying connect to server: 172.16.***.***/172.16.***.***:8032. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS) 2014-12-25 09:30:39,145 [communication thread] INFO org.apache.hadoop.ipc.Client – Retrying connect […]

线程“main”中的exceptionjava.lang.NoClassDefFoundError:org / apache / hadoop / hbase / HBaseConfiguration

我使用的是Hadoop 1.0.3和HBase 0.94.22。 我试图运行一个映射器程序来读取Hbase表中的值并将它们输出到一个文件。 我收到以下错误: Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:340) at org.apache.hadoop.util.RunJar.main(RunJar.java:149) Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 代码如下 import java.io.IOException; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil; import org.apache.hadoop.hbase.mapreduce.TableMapper; import […]

将数据附加到HDFS Java中的现有文件

我无法将数据附加到HDFS中的现有文件。 我希望如果文件存在然后追加一行,如果没有,创建一个名称给定的新文件。 这是我写入HDFS的方法。 if (!file.exists(path)){ file.createNewFile(path); } FSDataOutputStream fileOutputStream = file.append(path); BufferedWriter br = new BufferedWriter(new OutputStreamWriter(fileOutputStream)); br.append(“Content: ” + content + “\n”); br.close(); 实际上这个方法写入HDFS并创建一个文件,但正如我所提到的那样没有追加。 这是我测试我的方法的方法: RunTimeCalculationHdfsWrite.hdfsWriteFile(“RunTimeParserLoaderMapperTest2”, “Error message test 2.2”, context, null); 第一个参数是文件的名称,第二个参数是消息,另外两个参数不重要。 所以任何人都知道我错过了什么或做错了什么?

CombineFileInputFormat Hadoop 0.20.205的实现

有人可以指出我在哪里可以找到CombineFileInputFormat的实现(org。使用Hadoop 0.20.205?这是使用EMR从非常小的日志文件(行中文本)创建大分割。 令人惊讶的是,Hadoop没有专门为此目的而制作的这个类的默认实现,并且谷歌搜索看起来我不是唯一一个被此混淆的人。 我需要编译类并将其捆绑在一个jar中,用于hadoop-streaming,对Java的知识有限,这是一个挑战。 编辑:我已经尝试过yetitrails示例,使用了必要的导入,但是我为下一个方法得到了编译器错误。

如何在hadoop hdfs中列出目录及其子目录中的所有文件

我在hdfs中有一个文件夹,它有两个子文件夹,每个子文件夹有大约30个子文件夹,最后每个子文件夹包含xml文件。 我想列出所有xml文件,只给出主文件夹的路径。 在本地我可以使用apache commons-io的 FileUtils.listFiles()来做到这一点。 我试过这个 FileStatus[] status = fs.listStatus( new Path( args[ 0 ] ) ); 但它只列出了两个第一个子文件夹,它不会更进一步。 在hadoop有没有办法做到这一点?