Tag: mapreduce

更改DataFrame.write()的输出文件名前缀

通过Spark SQL DataFrame.write()方法生成的输出文件以“part”basename前缀开头。 例如 DataFrame sample_07 = hiveContext.table(“sample_07”); sample_07.write().parquet(“sample_07_parquet”); 结果是: hdfs dfs -ls sample_07_parquet/ Found 4 items -rw-r–r– 1 rob rob 0 2016-03-19 16:40 sample_07_parquet/_SUCCESS -rw-r–r– 1 rob rob 491 2016-03-19 16:40 sample_07_parquet/_common_metadata -rw-r–r– 1 rob rob 1025 2016-03-19 16:40 sample_07_parquet/_metadata -rw-r–r– 1 rob rob 17194 2016-03-19 16:40 sample_07_parquet/part-r-00000-cefb2ac6-9f44-4ce4-93d9-8e7de3f2cb92.gz.parquet 我想更改使用Spark SQL DataFrame.write()创建文件时使用的输出文件名前缀。 我尝试在Spark上下文的hadoop配置中设置“mapreduce.output.basename”属性。 例如 public […]

从windows eclipse运行Mapreduce(yarn)时出错

我正在从我的eclipse运行一个WordCount程序。 我试过Hadoop1.x它运行正常。 在hadoop2.x上运行时遇到问题 我试过1)将所有xml添加到我的类路径中。 2)也试过conf.set(),在conf对象中设置xml属性。 它还在日志中说:容器容器中没有可用的日志_1394042163908_0573_01_000001 Application application_1394042163908_0573 failed 2 times due to AM Container for appattempt_1394042163908_0573_000002 exited with exitCode: 1 due to: Exception from container-launch: org.apache.hadoop.util.Shell$ExitCodeException: /bin/bash: line 0: fg: no job control at org.apache.hadoop.util.Shell.runCommand(Shell.java:464) at org.apache.hadoop.util.Shell.run(Shell.java:379) at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589) at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerEx ecutor.java:195) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:283) at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)`enter code here` […]

使用hadoop和java命令执行map-reduce作业之间有什么区别

找到许多运行map-reduce程序的选项。 任何人都可以解释以下命令之间的差异。 如果有的话,会对Map减少工作产生什么影响。 java -jar MyMapReduce.jar [args] hadoop jar MyMapReduce.jar [args] yarn jar MyMapReduce.jar [args] 在这些命令中哪一个最好还是其他? 可以使用下面的命令使用Web服务8088(YARN)的端口在Web服务正常上使用Yarn和Job History(如显示Hadoop和yarn命令)显示有关作业的所有信息的配置吗? java -jar MyMapReduce.jar [args]

如何在运行Hadoop MapReduce作业时将文件名/文件内容作为MAP的键/值输入?

我正在创建一个分析PDF,DOC和DOCX文件的程序。 这些文件存储在HDFS中。 当我启动MapReduce作业时,我希望map函数将Filename作为键,将Binary Contents作为值。 然后我想创建一个流阅读器,我可以将其传递给PDF解析器库。 如何实现Map Phase的键/值对是filename / filecontents? 我正在使用Hadoop 0.20.2 这是启动作业的旧代码: public static void main(String[] args) throws Exception { JobConf conf = new JobConf(PdfReader.class); conf.setJobName(“pdfreader”); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); conf.setMapperClass(Map.class); conf.setReducerClass(Reduce.class); conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); } 我知道还有其他inputformat类型。 但有没有一个完全符合我的要求? 我发现文档很模糊。 如果有一个可用,那么Map函数输入类型应该如何? 提前致谢!

在Hadoop伪分布式模式下充分利用所有核心

我正在我的4核笔记本电脑上以伪分布式模式运行任务。 如何确保有效使用所有核心。 目前我的工作跟踪器显示一次只执行一项工作。 这是否意味着只使用一个核心? 以下是我的配置文件。 CONF /芯-site.xml中: fs.default.name hdfs://localhost:9000 CONF / HDFS-site.xml中: dfs.replication 1 CONF / mapred-site.xml中: mapred.job.tracker localhost:9001 编辑:根据答案,我需要在mapred-site.xml中添加以下属性 mapred.map.tasks 4 mapred.reduce.tasks 4

hadoop方法将输出发送到多个目录

我的MapReduce作业按日期处理数据,需要将输出写入某个文件夹结构。 目前的期望是产生以下结构: 2013 01 02 .. 2012 01 02 .. 等等 在任何时候,我只获得长达12个月的数据,因此,我使用MultipleOutputs类在驱动程序中使用以下函数创建12个输出: public void createOutputs(){ Calendar c = Calendar.getInstance(); String monthStr, pathStr; // Create multiple outputs for last 12 months // TODO make 12 configurable for(int i = 0; i 10 ? “” + month : “0” + month ; // Generate path string in […]

为什么将Mapper和Reducer类声明为静态?

这可能表明我缺乏Java理解,但我想知道为什么在大多数MapReduce程序中mapper和reducer类被声明为静态?

尝试格式化namenode时无法找到或加载主类; 在MAC OS X 10.9.2上安装hadoop

我正在尝试使用hadoop在我的MAC OS X 10.9.2上完成开发单节点集群设置。 我尝试了各种在线教程,最近就是这个 。 总结一下我的所作所为: 1) $ brew install hadoop 这在/usr/local/Cellar/hadoop/2.2.0中安装了hadoop 2.2.0 2)配置的环境变量。 这是我的.bash_profile的相关部分: ### Java_HOME export JAVA_HOME=”$(/usr/libexec/java_home)” ### HADOOP Environment variables export HADOOP_PREFIX=”/usr/local/Cellar/hadoop/2.2.0″ export HADOOP_HOME=$HADOOP_PREFIX export HADOOP_COMMON_HOME=$HADOOP_PREFIX export HADOOP_CONF_DIR=$HADOOP_PREFIX/libexec/etc/hadoop export HADOOP_HDFS_HOME=$HADOOP_PREFIX export HADOOP_MAPRED_HOME=$HADOOP_PREFIX export HADOOP_YARN_HOME=$HADOOP_PREFIX export CLASSPATH=$CLASSPATH:. export CLASSPATH=$CLASSPATH:$HADOOP_HOME/libexec/share/hadoop/common/hadoop-common-2.2.0.jar export CLASSPATH=$CLASSPATH:$HADOOP_HOME/libexec/share/hadoop/hdfs/hadoop-hdfs-2.2.0.jar 3)配置HDFS dfs.datanode.data.dir file:///usr/local/Cellar/hadoop/2.2.0/hdfs/datanode Comma separated list of paths on the local […]

Java 8按一对多分组

我想学习如何使用Java 8语法与流,并有点卡住。 当每个值都有一个键时,分组很容易。 但是如果我为每个值都有一个键列表并且仍然想用groupingBy对它们进行分类呢? 我是否必须将其分解为多个语句,或者可能有一些流魔术可以使其更简单。 这是基本代码: List albums = new ArrayList(); Map<Artist, List> map = albums.stream().collect(Collectors.groupingBy(this::getArtist)); 如果每个专辑只有一个艺术家,那么效果很好。 但我必须返回一个列表,因为专辑可以有很多艺术家。 专辑和艺术家当然用于说明,我有真实世界的类型.. 可能有一个简单的解决方案,但我有一段时间没有找到它所以我呼吁这个网站代表的集体大脑来解决它。 :)如果不存在简单的解决方案,也欢迎使用复杂的解决方案。 在Album类中或作为以Album作为参数的实用程序方法: Artist getArtist(); // ok List getArtist(); // Not ok, since we now have many “keys” for every Album 干杯,Mikael Grev

用Java读取HDFS和本地文件

我想读取文件路径,无论它们是HDFS还是本地路径。 目前,我传递带有前缀file://的本地路径和带有前缀hdfs://的HDFS路径,并编写一些代码如下 Configuration configuration = new Configuration(); FileSystem fileSystem = null; if (filePath.startsWith(“hdfs://”)) { fileSystem = FileSystem.get(configuration); } else if (filePath.startsWith(“file://”)) { fileSystem = FileSystem.getLocal(configuration).getRawFileSystem(); } 从这里我使用FileSystem的API来读取文件。 如果还有其他比这更好的方法,你能告诉我吗?