我创建了一个Mapper使用语法:
public class xyz extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text>{
-----
public void map(LongWritable key, Text value,
OutputCollector<Text, Text> output, Reporter reporter)
--
}
Run Code Online (Sandbox Code Playgroud)
在作业中,我创建了一个Job对象:
Job job = new Job(getConf());
Run Code Online (Sandbox Code Playgroud)
对于这项工作,我无法使用以下方法添加Mapper类:
job.setMapper(xyz);
Run Code Online (Sandbox Code Playgroud)
错误信息:
The method setMapperClass(Class<? extends Mapper>) in the type Job is not applicable for the arguments (Class<InvertedIndMap1>)
Run Code Online (Sandbox Code Playgroud)
我不能使用带有extend的地图,Mapper因为我正在使用outputCollector和Reporter在mapper.
在工作中,如果我使用JobConf而不是像以下那样的工作:
JobConf conf = new JobConf(getConf());
Run Code Online (Sandbox Code Playgroud)
然后conf.setMapper(xyz)工作.
但是无法使用以下方法设置输入路径:
FileInputFormat.addInputPaths(conf,new Path(args[0]));
Run Code Online (Sandbox Code Playgroud)
错误信息:
The method addInputPaths(Job, String) …Run Code Online (Sandbox Code Playgroud) 我已经自制安装了hadoop但现在在执行hadoop namenode -format和./start-all.sh命令时遇到了权限控制问题.
我认为这是因为我将设置放在"core-site.xml"中."hadoop.tmp.dir"我把"/ tmp/$ {name}"放在.
现在它给了我namenode -format中的错误:无法创建文件夹,权限被拒绝.即使我sudo这个命令,但在start-all.sh命令中,仍然有很多权限被拒绝.我尝试sudo start-all.sh但是密码(我只在mac上使用这个传递给我的管理员)但是也被拒绝了.
我认为这是因为许可问题.无论如何我能解决它吗?
谢谢!
我正在使用PIG处理数百万条记录的订阅源.从HDFS读取源后,我需要执行三个不同的"分组依据"操作,然后将所有这些的结果合并.让我们说无论关系联盟的架构如何运作良好.现在我的问题是PIG如何生成执行的DAG,并且所有这三个按操作分组将并行执行.
几个小时后,这是一个非常疯狂的问题.
任何帮助将受到高度赞赏.
我无法做到
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
if (!value.toString().equals("")) {
Gson gson = new Gson();
Boolean flag = true;
System.out.println("000000000");
while(flag){
Text tweetId = new Text();
Tweet tweet = gson.fromJson(value.toString(), Tweet.class);
tweetId.set(tweet.getRetweetStatus().getUser().getId().toString());
System.out.println("Tweet objects:" + tweet.toString());
System.out.println("ParentUserId:" + tweetId);
context.write(tweetId, tweet);
flag = false;
}
Text tweetId = new Text();
Tweet tweet = gson.fromJson(value.toString(), Tweet.class);
tweetId.set(tweet.getUser().getId().toString());
String tweetReverse = (Object) tweet.getRetweetStatus().getUser().getId();
System.out.println("Reverse::");
System.out.println("Tweet objects:" + tweetReverse);
System.out.println("ParentUserId:" + tweetId);
context.write(tweetId, tweetReverse);
} …Run Code Online (Sandbox Code Playgroud) 我希望每天,每周和每月运行我发送的邮件数量.大约有500种不同的消息类型.
我有以下表格:
Table name: messages
int message_type
BIGINT num_sent
string date
Table name: stats
int message_type
BIGINT num_sent_today
BIGINT num_sent_week
BIGINT num_sent_month
Run Code Online (Sandbox Code Playgroud)
表消息每天更新,包含今天日期的新行.我可以每天运行一个单独的配置单元查询来更新stats表吗?注意我无法通过直接查询消息表来获取运行计数,WHERE date >= 30 days ago因为表太大了.我必须添加/减去表统计中的每日值.像这样的东西:
// pseudocode
// Get this table (call it table b) from table messages
int message_type
BIGINT num_sent_today
BIGINT num_sent_seven_days_ago
BIGINT num_sent_thirty_days_ago
// join b with table stats so that I can
// Set stats.num_sent_today = b.num_sent_today
// Set stats.num_sent_week = stats.num_sent_week + b.num_sent_today - b.num_sent_seven_days_ago
// Set stats.num_sent_month …Run Code Online (Sandbox Code Playgroud) 当我运行包含Hbase Bolt的Storm拓扑时,我有以下错误.
java.io.IOException: No FileSystem for scheme: hdfs
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2298) ~[hadoop-common-2.0.0-cdh4.7.0.jar:na]
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2305) ~[hadoop-common-2.0.0-cdh4.7.0.jar:na]
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:89) ~[hadoop-common-2.0.0-cdh4.7.0.jar:na]
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2344) ~[hadoop-common-2.0.0-cdh4.7.0.jar:na]
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2326) ~[hadoop-common-2.0.0-cdh4.7.0.jar:na]
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:353) ~[hadoop-common-2.0.0-cdh4.7.0.jar:na]
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:194) ~[hadoop-common-2.0.0-cdh4.7.0.jar:na]
at org.apache.hadoop.hbase.util.DynamicClassLoader.<init>(DynamicClassLoader.java:104) ~[hbase-common-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.<clinit>(ProtobufUtil.java:201) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:69) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:83) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.retrieveClusterId(HConnectionManager.java:857) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:662) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.7.0_72]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [na:1.7.0_72]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [na:1.7.0_72]
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [na:1.7.0_72]
at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:414) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:393) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:274) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:194) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:156) [hbase-client-0.98.1-hadoop2.jar:0.98.1-hadoop2]
at org.apache.storm.hbase.bolt.HBaseBolt$1.run(HBaseBolt.java:97) …Run Code Online (Sandbox Code Playgroud) 鉴于我在Windows系统中开发MapReduce任务,在将它们移动到HDFS集群之前,我想在本地运行MapReduce.我只想检查我的mapper逻辑,inputSplits,输入/输出格式等是如何工作的.有可能吗?
我有一个perl程序,它将获取一个输入文件并处理它并生成一个输出文件.现在我需要在hadoop上使用这个perl程序.所以perl程序将运行在边缘节点上存储的数据块上,我不应该修改perl代码.我不知道如何开始这个.有人可以给我任何建议吗?
我可以编写一个java程序,在mapper类中使用process builder调用perl程序并将结果合并到reducer类中吗?
有没有其他方法来实现这一目标?
我试图将我的头脑包含在新API的实际目的上,并通过互联网阅读,我找到了与我正在处理的相同问题的不同答案.
我想知道答案的问题是:
1)哪个MRv2/YARN守护程序是负责启动应用程序容器和监视应用程序资源使用的守护程序.
2)MRv2/YARN旨在解决哪两个问题?
我将尝试通过指定搜索中的资源和实际数据,使这个线程对其他读者具有教育性和建设性,所以我希望看起来我提供的信息太多,而我可以提出问题并发布帖子短.
对于第一个问题,阅读文档,我可以找到3个主要资源:
从Hadoop文档:
ApplicationMaster < - > NodeManager启动容器.使用NMClientAsync对象与NodeManagers通信,通过NMClientAsync.CallbackHandler处理容器事件
ApplicationMaster与YARN集群通信,并处理应用程序执行.它以异步方式执行操作.在应用程序启动期间,ApplicationMaster的主要任务是:
a)与ResourceManager通信,为将来的容器协商和分配资源,以及
b)在容器分配之后,通信YARN NodeManagers(NM)以在它们上启动应用程序容器.
来自Hortonworks文档
ApplicationMaster实际上是一个特定于框架的库的实例,负责协商来自ResourceManager的资源,并与NodeManager一起执行和监视容器及其资源消耗.它负责从ResourceManager协商适当的资源容器,跟踪其状态并监视进度.
来自Cloudera文档:
MRv2守护进程 -
ResourceManager - 每个群集一个 - 启动ApplicationMasters,在从属节点上分配资源
ApplicationMaster - 每个作业一个 - 请求资源,管理单个Map和Reduce任务
NodeManager - 每个从节点一个 - 管理各个从节点上的资源
JobHistory - 每个群集一个 - 归档作业的指标和元数据
回到问题(哪些守护进程负责启动应用程序容器和监视应用程序资源使用)我问自己:
是NodeManager吗?它是ApplicationMaster吗?
根据我的理解,ApplicationMaster是让NodeManager实际完成工作的人,因此就像是在询问谁负责从地面抬起一个盒子,是那些实际解除控制心灵的人身体,让他们做提升......
我想这是一个棘手的问题,但必须有一个答案.
对于第二个问题,在线阅读,我可以从许多资源中找到不同的答案,从而产生混淆,但我的主要来源是:
来自Cloudera文档:
MapReduce v2("MRv2") - 建立在YARN之上("另一个资源NegoGator")
- 使用ResourceManager/NodeManager架构
- 提高集群的可扩展性
- 节点资源可用于任何类型的任务
- 提高群集利用率
- 支持非/ MR工作
回到问题(MRv2/YARN旨在解决哪两个问题?),我知道MRv2做了一些改变,比如防止JobTracker上的资源压力(在MRv1中,集群中的最大节点数可能在4000左右,并且在MRv2它是这个数字的2倍多,而且我也知道它提供了运行MapReduce之外的框架的能力,比如MPI.
来自文档:
Application Master提供了传统ResourceManager的大部分功能,因此整个系统可以进行更大规模的扩展.在测试中,我们已经成功地模拟了由现代硬件组成的10,000个节点集群而没有重大问题.
和:
将所有特定于应用程序框架的代码移动到ApplicationMaster中会对系统进行概括,以便我们现在可以支持多个框架,例如MapReduce,MPI和Graph Processing.
但我也认为它处理了NameNode是单点故障的事实,而在新版本中,通过高可用性模式存在Standby NameNode(我可能会混淆旧API和新API的功能,具有以下功能: MRv1与MRv2相关,这可能是我的问题的原因):
在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF).每个群集都有一个NameNode,如果该机器或进程变得不可用,整个群集将无法使用,直到NameNode重新启动或在单独的计算机上启动.
那么,如果你必须选择3中的2个,哪个是2个作为MRv2/YARN旨在解决的两个问题?
- …
我正在阅读Hadoop教程,我对hadoop中的Block pool有疑问.
块池 - 基本上每个块池彼此独立管理,每个块池都是属于单个命名空间的一组块.
该块池是虚拟概念还是类似于内存中维护的块上的metadat?
hadoop ×10
hdfs ×4
mapreduce ×4
java ×3
hbase ×2
apache ×1
apache-pig ×1
hadoop-yarn ×1
hadoop2 ×1
hive ×1
hiveql ×1
mrv2 ×1
perl ×1
permissions ×1
twitter ×1