0

Jeffrey Breen の R-Hadoop チュートリアル (2012 年 10 月) を行っています。現時点では、hdfs にデータを入力してから、Jeffrey が RStudio のチュートリアルで公開したコマンドを実行しようとしています。残念ながら、私はそれでいくつかの問題を抱えています:

更新:データフォルダーを次の場所に移動しました: /home/cloudera/data/hadoop/wordcount (airline-Dataについても同じ)いいえ、populate.hdfs.shを実行すると、次の出力が得られます:

[cloudera@localhost ~]$ /home/cloudera/TutorialBreen/bin/populate.hdfs.sh
mkdir: cannot create directory /user/cloudera: File exists
mkdir: cannot create directory /user/cloudera/wordcount: File exists
mkdir: cannot create directory /user/cloudera/wordcount/data: File exists
mkdir: cannot create directory /user/cloudera/airline: File exists
mkdir: cannot create directory /user/cloudera/airline/data: File exists
put: Target /user/cloudera/airline/data/20040325.csv already exists

そして、チュートリアルに示されているように RStudio でコマンドを試しましたが、最後にエラーが発生します。誰かが私が間違ったことを教えてもらえますか?

> if (LOCAL)
+ {
+   rmr.options.set(backend = 'local')
+   hdfs.data.root = 'data/local/airline'
+   hdfs.data = file.path(hdfs.data.root, '20040325-jfk-lax.csv')
+   hdfs.out.root = 'out/airline'
+   hdfs.out = file.path(hdfs.out.root, 'out')
+   if (!file.exists(hdfs.out))
+     dir.create(hdfs.out.root, recursive=T)
+ } else {
+   rmr.options.set(backend = 'hadoop')
+   hdfs.data.root = 'airline'
+   hdfs.data = file.path(hdfs.data.root, 'data')
+   hdfs.out.root = hdfs.data.root
+   hdfs.out = file.path(hdfs.out.root, 'out')
+ }
> asa.csvtextinputformat = make.input.format( format = function(con, nrecs) {
+   line = readLines(con, nrecs)
+   values = unlist( strsplit(line, "\\,") )
+   if (!is.null(values)) {
+     names(values) = c('Year','Month','DayofMonth','DayOfWeek','DepTime','CRSDepTime',
+                       'ArrTime','CRSArrTime','UniqueCarrier','FlightNum','TailNum',
+                       'ActualElapsedTime','CRSElapsedTime','AirTime','ArrDelay',
+                       'DepDelay','Origin','Dest','Distance','TaxiIn','TaxiOut',
+                       'Cancelled','CancellationCode','Diverted','CarrierDelay',
+                       'WeatherDelay','NASDelay','SecurityDelay','LateAircraftDelay')
+     return( keyval(NULL, values) )
+   }
+ }, mode='text' )
> mapper.year.market.enroute_time = function(key, val) {
+   if ( !identical(as.character(val['Year']), 'Year')
+        & identical(as.numeric(val['Cancelled']), 0)
+        & identical(as.numeric(val['Diverted']), 0) ) {  
+     if (val['Origin'] < val['Dest'])
+       market = paste(val['Origin'], val['Dest'], sep='-')
+     else
+       market = paste(val['Dest'], val['Origin'], sep='-')
+     output.key = c(val['Year'], market)
+     output.val = c(val['CRSElapsedTime'], val['ActualElapsedTime'], val['AirTime'])
+     return( keyval(output.key, output.val) )
+   }
+ }
> reducer.year.market.enroute_time = function(key, val.list) {
+   if ( require(plyr) )  
+     val.df = ldply(val.list, as.numeric)
+   else { # this is as close as my deficient *apply skills can come w/o plyr
+     val.list = lapply(val.list, as.numeric)
+     val.df = data.frame( do.call(rbind, val.list) )
+   }   
+   colnames(val.df) = c('crs', 'actual','air')
+   output.key = key
+   output.val = c( nrow(val.df), mean(val.df$crs, na.rm=T),
+                   mean(val.df$actual, na.rm=T),
+                   mean(val.df$air, na.rm=T) )
+   return( keyval(output.key, output.val) )
+ }
> mr.year.market.enroute_time = function (input, output) {
+   mapreduce(input = input,
+             output = output,
+             input.format = asa.csvtextinputformat,
+             output.format='csv', # note to self: 'csv' for data, 'text' for bug
+             map = mapper.year.market.enroute_time,
+             reduce = reducer.year.market.enroute_time,
+             backend.parameters = list(
+               hadoop = list(D = "mapred.reduce.tasks=2")
+             ),
+             verbose=T)
+ }
> out = mr.year.market.enroute_time(hdfs.data, hdfs.out)
Error in file(f, if (format$mode == "text") "r" else "rb") : 
  cannot open the connection
In addition: Warning message:
In file(f, if (format$mode == "text") "r" else "rb") :
  cannot open file 'data/local/airline/20040325-jfk-lax.csv': No such file or directory
> if (LOCAL)
+ {
+   results.df = as.data.frame( from.dfs(out, structured=T) )
+   colnames(results.df) = c('year', 'market', 'flights', 'scheduled', 'actual', 'in.air')
+   print(head(results.df))
+ }
Error in to.dfs.path(input) : object 'out' not found

どうもありがとう!

4

1 に答える 1

0

まず、コマンドは次のようになります。

/usr/bin/hadoop fs -mkdir /user/cloudera/wordcount/data

複数の行に分割されています。そのまま入力していることを確認してください。

また、ローカルディレクトリdata/hadoop/wordcountが存在しないと言っています。このコマンドを正しいディレクトリから実行していること、およびローカル データが期待どおりの場所にあることを確認してください。

于 2012-11-02T22:32:43.883 に答える