我正在尝试将Pig中的数据存储到Mongodb数据库中,其中包含两个主机的副本集:
STORE out INTO 'mongodb://user:pass@mongoserver1.com:27017,mongoserver2.com:27017/my_db.my_collection?replicaSet=set-1234
USING com.mongodb.hadoop.pig.MongoUpdateStorage('{"_id":"\$id"}', '{\$set:{"_id":"\$uid","data":"\$data"}}','id:chararray,data:chararray','','{upsert:true}');
但我得到以下例外:
pig script failed to validate: java.lang.IllegalArgumentException:
java.net.URISyntaxException: Relative path in absolute URI: mongoserver2.com:27017/my_db.my_collection%3FreplicaSet=set-1234
这似乎与正确解析MongoClientURI
格式的问题有关。
有没有办法从Pig连接到MongoDB多主机副本集?
答案 0 :(得分:1)
只要在MongoURI中指定副本集名称,MongoDB Java驱动程序就会自动检测副本集故障转移并发现主要副本集。即使(主)机器的地址未在URI连接字符串中列出。
您可以通过为示例指定辅助功能来测试此功能:
Sub two_column_dated_duplicates()
Dim i As Long, lastRow As Long
With Worksheets("Sheet1")
lastRow = .Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To lastRow
If Application.CountIfs(.Columns(1), .Cells(i, 1), _
.Columns(2), .Cells(i, 2)) > 1 Then
If Not CBool(Application.CountIfs(.Columns(1), .Cells(i, 1), _
.Columns(2), .Cells(i, 2), _
.Columns(3), ">" & .Cells(i, 3))) Then
.Cells(i, 4).Resize(1, 2) = Array("selected", "updated")
End If
End If
Next
End With
End Sub
以上行为在STORE out INTO
'mongodb://user:pass@mongoserver2.com:27017/my_db.my_collection?replicaSet=replicaSetName'
USING com.mongodb.hadoop.pig.MongoInsertStorage('', '');
,mongo-java-driver-3.2.2.jar
和mongo-hadoop-pig-1.5.0.jar
上进行了测试。
请注意,在您的示例中,您在URI中输错了mongo-hadoop-core-1.5.0.jar
,尽管在此处撰写问题时可能会输入错误。