为什么我不能运行蔚蓝电影推荐示例?

时间:2014-10-15 03:52:20

标签: powershell azure recommendation-engine

我是MS Azure的新手。

我对运行电影推荐示例有疑问。 我已经安装了powershell,我的hdInsight版本是3.1,我跟着the tutorial。 但我不能做以下代码:

# Create the job definition
$jobDefinition = New-AzureHDInsightMapReduceJobDefinition `
  -JarFile $jarFile `
  -ClassName "org.apache.mahout.cf.taste.hadoop.item.RecommenderJob" `
  -Arguments $jobArguments

错误与Jarfile有关。

这是错误:

New-AzureHDInsightMapReduceJobDefinition : 無法將 'System.Object[]' 轉換為 'JarFile' 參數所需的 'System.String' 型別。不支援指定的方法。
位於 線路:2 字元:12
+   -JarFile $jarFile `
+            ~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-AzureHDInsightMapReduceJobDefinition],ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.WindowsAzure.Management.HDInsight.Cmdlet.PSCmdlets.NewAzureHDIn 
   sightMapReduceDefinitionCmdlet

有没有人有解决这个问题的想法?

1 个答案:

答案 0 :(得分:0)

看起来发生的事情是群集上的Mahout版本最近已经更新,因此示例代码中的硬编码路径现在是错误的。

要解决此问题,请更改PowerShell脚本中的行:

$jarFile = "file:///c:/apps/dist/mahout-0.9.0.2.1.3.0-1887/examples/target/mahout-examples-0.9.0.2.1.3.0-1887-job.jar"

$jarFile = "file:///c:/apps/dist/mahout-0.9.0.2.1.6.0-2103/examples/target/mahout-examples-0.9.0.2.1.6.0-2103-job.jar"

这是我今天配置的群集的路径。如果您有一个群集,您可以暂时配置,您可以启用远程桌面并连接到群集,然后转到c:\ apps \ dist \以查看当前版本的Mahout。

编辑:这是一个修改后的脚本,它将使用Hive动态获取mahout jar名称。

# The HDInsight cluster name.
$clusterName = "the cluster name"

# NOTE: The version number portion of the file path
# may change in future versions of HDInsight.
# So dynamically grab it using Hive.
$mahoutPath = Invoke-Hive -Query '!${env:COMSPEC} /c dir /b /s ${env:MAHOUT_HOME}\examples\target\*-job.jar' | where {$_.startswith("C:\apps\dist")}
$jarFile = "file:///$mahoutPath"
#
# If you are using an earlier version of HDInsight,
# set $jarFile to the jar file you
# uploaded.
# For example,
# $jarFile = "wasb:///example/jars/mahout-core-0.9-job.jar"

# The arguments for this job
# * input - the path to the data uploaded to HDInsight
# * output - the path to store output data
# * tempDir - the directory for temp files
$jobArguments = "-s", "SIMILARITY_COOCCURRENCE",
                "--input", "wasb:///example/data/u.data",
                "--output", "wasb:///example/out",
                "--tempDir", "wasb:///temp/mahout"

# Create the job definition
$jobDefinition = New-AzureHDInsightMapReduceJobDefinition `
  -JarFile $jarFile `
  -ClassName "org.apache.mahout.cf.taste.hadoop.item.RecommenderJob" `
  -Arguments $jobArguments

# Start the job
$job = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition $jobDefinition

# Wait on the job to complete
Write-Host "Wait for the job to complete ..." -ForegroundColor Green
Wait-AzureHDInsightJob -Job $job

# Write out any error information
Write-Host "STDERR"
Get-AzureHDInsightJobOutput -Cluster $clusterName -JobId $job.JobId -StandardError