在mapreduce中,每个reduce任务将其输出写入名为part-r-nnnnn的文件,其中nnnnn是与reduce任务关联的分区ID.map/reduce是否合并这些文件?如果有,怎么样?
在Hadoop v1中,我已经分配了每个7GB的mapper和reducer slot,大小为1GB,我的mappers和reducer运行正常.我的机器有8G内存,8个处理器.现在使用YARN,当在同一台机器上运行相同的应用程序时,我收到了容器错误.默认情况下,我有这样的设置:
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.
Run Code Online (Sandbox Code Playgroud)
然后我尝试在mapred-site.xml中设置内存限制:
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
Run Code Online (Sandbox Code Playgroud)
但仍然得到错误:
Container [pid=26783,containerID=container_1389136889967_0009_01_000002] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.2 GB of 8.4 GB virtual memory used. …Run Code Online (Sandbox Code Playgroud) 我试图在eclipse 3.81,m2e插件的maven项目中导入cloudera的org.apache.hadoop:hadoop-client:2.0.0-cdh4.0.0, 来自cdh4 maven repo,在win7上使用oracle的jdk 1.7.0_05
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.0.0-cdh4.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
The container 'Maven Dependencies' references non existing library 'C:\Users\MyUserId\.m2\repository\jdk\tools\jdk.tools\1.6\jdk.tools-1.6.jar'
Run Code Online (Sandbox Code Playgroud)
更具体的是,maven声明缺少以下工件
Missing artifact jdk.tools:jdk.tools:jar:1.6
Run Code Online (Sandbox Code Playgroud)
怎么解决这个?
我正在尝试使用Hive Thrift和JDBC接口编写一个非平凡的Hive作业,而我在设置一个像样的JUnit测试时遇到了麻烦.非平凡,我的意思是这项工作至少会产生一个MapReduce阶段,而不是只处理Metastore.
测试应该启动一个Hive服务器,将一些数据加载到一个表中,在该表上运行一些非平凡的查询,并检查结果.
我根据Spring参考连接了Spring上下文.但是,MapReduce阶段的作业失败,抱怨没有Hadoop二进制文件存在:
java.io.IOException:无法运行程序"/ usr/bin/hadoop"(在目录"/ Users/yoni/opower/workspace/intellij_project_root"中):error = 2,没有这样的文件或目录
问题是Hive Server在内存中运行,但依赖于Hive的本地安装才能运行.为了让我的项目自成一体,我需要嵌入Hive服务,包括HDFS和MapReduce集群.我尝试使用相同的Spring方法启动Hive服务器并将其指向MiniDFSCluster和MiniMRCluster,类似于Hive QTestUtil源和HBaseTestUtility中使用的模式.但是,我无法让它发挥作用.
经过三天试图纠缠Hive集成测试后,我想我会问社区:
我看过的其他资源:
编辑:我完全清楚,针对Hadoop集群(无论是本地还是远程),可以针对全栈Hive实例运行集成测试.如上所述,问题在于,这不是有效测试Hive工作流的可行解决方案.
我想知道如何找到Hive表与它们所代表的实际HDFS文件(或更确切地说,目录)之间的映射.我需要直接访问表文件.
Hive将文件存储在HDFS中的哪个位置?
我在EC2中创建了一个ubuntu单节点hadoop集群.
测试简单的文件上传到hdfs可以从EC2机器上运行,但不能在EC2之外的机器上运行.
我可以通过远程机器的Web界面浏览文件系统,它显示一个在服务中报告的datanode.已打开安全性中从0到60000(!)的所有tcp端口,所以我不认为是这样.
我收到了错误
java.io.IOException: File /user/ubuntu/pies could only be replicated to 0 nodes, instead of 1
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1448)
at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:690)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:342)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1350)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1346)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:742)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1344)
at org.apache.hadoop.ipc.Client.call(Client.java:905)
at org.apache.hadoop.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:198)
at $Proxy0.addBlock(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59)
at $Proxy0.addBlock(Unknown Source)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:928)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:811)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:427)
Run Code Online (Sandbox Code Playgroud)
namenode log只会给出相同的错误.其他人似乎没有任何有趣的东西
有任何想法吗?
干杯
在Hive中,当我们执行查询(如:)时 select * from employee,我们在输出中没有得到任何列名(比如我们在RDBMS SQL中获得的名称,年龄,工资),我们只获取值.
在执行任何查询时,有没有办法让列名与输出一起显示?
当我将Hadoop集群连接到Amazon存储并将文件下载到HDFS时,我发现s3://无法正常工作.在互联网上寻求帮助时,我发现我可以使用S3n.当我用S3n它工作.我不明白使用S3和S3n我的Hadoop集群之间的区别,有人可以解释一下吗?
如何在单个作业中使用Spark写入依赖于键的多个输出.
相关:通过键Scalding Hadoop写入多个输出,一个MapReduce作业
例如
sc.makeRDD(Seq((1, "a"), (1, "b"), (2, "c")))
.writeAsMultiple(prefix, compressionCodecOption)
Run Code Online (Sandbox Code Playgroud)
确保cat prefix/1是
a
b
Run Code Online (Sandbox Code Playgroud)
并cat prefix/2会
c
Run Code Online (Sandbox Code Playgroud)
编辑:我最近添加了一个新的答案,其中包括完整的导入,皮条客和压缩编解码器,请参阅/sf/answers/3228263111/,除了之前的答案,这可能会有所帮助.
我正在探索设置kafka的几个选项,我知道Zookeeper必须启动并运行才能启动kafka.
我想知道如何找到以下内容.
1)我的zookeeper实例的主机名和端口---我检查了zoo.cfg,我只能找到ClientPort而不是主机名,hostname是我的盒子的主机名吗?
2)检查ZooKeeper是否正常运行---我试图做一个ps -ef | grep "zoo"我找不到的东西.可能是我用错了关键词来搜索?
任何帮助将非常感激?
hadoop ×10
hdfs ×3
hive ×3
mapreduce ×3
java ×2
amazon-ec2 ×1
amazon-s3 ×1
apache-kafka ×1
apache-spark ×1
cloudera ×1
config ×1
hadoop-yarn ×1
maven ×1
maven-2 ×1
mrv2 ×1
output ×1
ps ×1
rdbms ×1
scala ×1
testing ×1