我是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
有没有人有解决这个问题的想法?
答案 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