Tag: hadoop

记录MapReduce作业的标准做法

我正在尝试找到登录MapReduce作业的最佳方法。 我在我的其他Java应用程序中使用slf4j和log4j appender,但由于MapReduce作业在集群中以分布式方式运行,我不知道应该在哪里设置日志文件位置,因为它是一个访问受限的共享集群特权。 是否有任何标准做法用于登录MapReduce作业,因此您可以在作业完成后轻松查看群集中的日志?

使用Hadoop 0.20+生成多个输出文件

我试图将我的reducer的结果输出到多个文件。 数据结果全部包含在一个文件中,其余结果根据其所尊重文件中的类别进行拆分。 我知道0.18你可以用MultipleOutputs做到这一点并且它还没有删除。 但是,我正在努力使我的应用程序符合0.20+。 现有的多输出function仍然需要JobConf(我的应用程序使用Job和Configuration)。 如何根据密钥生成多个输出?

使用ArrayWritable的序列化似乎以一种有趣的方式工作

我正在使用ArrayWritable ,在某些时候我需要检查Hadoop如何序列化ArrayWritable ,这是我通过设置job.setNumReduceTasks(0) : 0 IntArrayWritable@10f11b8 3 IntArrayWritable@544ec1 6 IntArrayWritable@fe748f 8 IntArrayWritable@1968e23 11 IntArrayWritable@14da8f4 14 IntArrayWritable@18f6235 这是我使用的测试映射器: public static class MyMapper extends Mapper { public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { int red = Integer.parseInt(value.toString()); IntWritable[] a = new IntWritable[100]; for (int i =0;i<a.length;i++){ a[i] = new IntWritable(red+i); } IntArrayWritable […]

如何将.txt / .csv文件转换为ORC格式

对于某些要求,我想将文本文件(分隔)转换为ORC(优化行列)格式。 因为我必须定期运行它,所以我想编写一个java程序来执行此操作。 我不想使用Hive临时表解决方法。 有人可以帮我做吗? 以下是我的尝试 /*ORCMapper.java*/ import java.io.IOException; import java.util.*; import org.apache.hadoop.mapred.*; import org.apache.hadoop.hive.ql.io.orc.*; import org.apache.hadoop.io.*; public class ORCMapper extends MapReduceBase implements Mapper{ OrcSerde serde; @Override public void configure(JobConf job) { serde = new OrcSerde(); } @Override public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) throws IOException { output.collect(NullWritable.get(),serde.serialize(value, null)); } } /*ORCReducer.java*/ […]

hadoop mapreduce:java.lang.UnsatisfiedLinkError:org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z

我正在尝试从map-reduce作业中编写一个snappy块压缩序列文件。 我正在使用hadoop 2.0.0-cdh4.5.0和snappy-java 1.0.4.1 这是我的代码: package jinvestor.jhouse.mr; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; import java.util.List; import jinvestor.jhouse.core.House; import jinvestor.jhouse.core.util.HouseAvroUtil; import jinvestor.jhouse.download.HBaseHouseDAO; import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.LocatedFileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.RemoteIterator; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil; import org.apache.hadoop.hbase.mapreduce.TableMapper; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.SequenceFile; import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.io.compress.SnappyCodec; […]

分布式作业调度,管理和报告

我最近玩过Hadoop ,并对MapReduce作业的调度,管理和报告印象深刻。 它似乎使新工作的分配和执行非常无缝,使开发人员能够专注于他们的工作实施。 我想知道Java域中是否存在任何不容易表示为MapReduce问题的作业的分布式执行? 例如: 需要任务协调和同步的工作。 例如,它们可能涉及顺序执行任务,但同时执行某些任务是可行的: .– B –. .–A –| |–. | ‘– C –‘ | Start –| |– Done | | ‘–D ————-‘ 您希望分发但不提供任何输出以减少的CPU密集型任务 – 例如,图像转换/resize。 那么是否有一个提供这种分布式计算环境的Java框架/平台? 或者这种事情是否可以使用Hadoop接受/可实现 – 如果有的话,这些工作的模式/指南是什么?

Hadoop的FileSystem列出API调用中的通配符

tl;dr:为了能够在列出的路径中使用通配符(globs),只需使用globStatus(…)而不是listStatus(…) 。 上下文 我的HDFS集群上的文件按分区进行组织,日期为“根”分区。 文件结构的简化示例如下所示: /schemas_folder ├── date=20140101 │ ├── A-schema.avsc │ ├── B-schema.avsc ├── date=20140102 │ ├── A-schema.avsc │ ├── B-schema.avsc │ ├── C-schema.avsc └── date=20140103 ├── B-schema.avsc └── C-schema.avsc 就我而言,该目录在不同日期存储不同类型数据(本例中为A,B和C)的 Avro模式。 随着时间的推移,模​​式可能会开始存在,发展并停止存在。 目标 我需要能够尽快获得给定类型的所有模式。 在我希望得到类型A存在的所有模式的示例中,我想执行以下操作: hdfs dfs -ls /schemas_folder/date=*/A-schema.avsc 那会给我 Found 1 items -rw-r–r– 3 user group 1234 2014-01-01 12:34 /schemas_folder/date=20140101/A-schema.avsc Found 1 […]

如何以csv格式输出hadoop结果

我需要以.csv格式输出我的hadoop结果。 我该怎么做? 我的代码: https : //github.com/studhadoop/xml/blob/master/XmlParser11.java 我应该在我的代码中简单地包含csvoutputFormat。 我正在使用mapreduce API myjob.sh bin/hadoop jar /var/root/ALA/ala_jar/clsperformance.jar ala.clsperf.ClsPerf /user/root/ala_xmlrpt/Amrita\ Vidyalayam\,\ Karwar_Class\ 1\ B_ENG.xml /user/root/ala_xmlrpt-outputshell4 bin/hadoop fs -get /user/root/ala_xmlrpt-outputshell4/part-r-00000 /Users/jobsubmit cat /Users/jobsubmit/part-r-00000 /Users/jobsubmit/output.csv 解 我失踪了>在猫 cat /Users/jobsubmit/part-r-00000> /Users/jobsubmit/output.csv

Hadoop Hive无法将源移动到目标

我试图使用Hive 1.2.0而不是Hadoop 2.6.0。 我创建了一个employee表。 但是,当我运行以下查询时: hive> load data local inpath ‘/home/abc/employeedetails’ into table employee; 我收到以下错误: Failed with exception Unable to move source file:/home/abc/employeedetails to destination hdfs://localhost:9000/user/hive/warehouse/employee/employeedetails_copy_1 FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask 我在这做什么错? 我需要设置任何特定权限吗? 提前致谢!

使用Java访问HDFS中的文件

我试图使用Java API访问HDFS中的文件,但每次我都找不到文件。 我用来访问的代码是: – Configuration conf = new Configuration(); conf.addResource(FileUtilConstants.ENV_HADOOP_HOME + FileUtilConstants.REL_PATH_CORE_SITE); conf.addResource(FileUtilConstants.ENV_HADOOP_HOME + FileUtilConstants.REL_PATH_HDFS_SITE); try { FileSystem fs = FileSystem.get(conf); Path hdfsfilePath = new Path(hdfsPath); logger.info(“Filesystem URI : ” + fs.getUri()); logger.info(“Filesystem Home Directory : ” + fs.getHomeDirectory()); logger.info(“Filesystem Working Directory : ” + fs.getWorkingDirectory()); logger.info(“HDFS File Path : ” + hdfsfilePath); if (!fs.exists(hdfsfilePath)) […]