从Pig连接到Mongodb副本集URI

时间:2016-03-15 11:40:28

标签: mongodb apache-pig

我正在尝试将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多主机副本集?

1 个答案:

答案 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.jarmongo-hadoop-pig-1.5.0.jar上进行了测试。

请注意,在您的示例中,您在URI中输错了mongo-hadoop-core-1.5.0.jar,尽管在此处撰写问题时可能会输入错误。