2

我正在使用DSE 3.1.2 我正在使用Pig將一些預處理結果存儲到cql中,一張表,並啓動了我的腳本,它爲少量數據工作,當增加幾條記錄時,它不會存儲到cassandra中,只有90%或輸出存儲到cassandra中。CIGStorage()不能在PIG中使用較高記錄(Pig中的CqlStorage()拋出異常)

這裏是我的腳本

SET default_parallel 10; 
result = foreach PreprocUDF generate Primary1,Primary2,col3,col4; 
finalresult = foreach result generate TOTUPLE(TOTUPLE('Primary1',PreprocUDF::Primary1),TOTUPLE('Primary2',PreprocUDF::Primary2)),TOTUPLE(PreprocUDF::col3,PreprocUDF::col4); 

store finalresult into 'cql://conflux/tbl_test?output_query=update+conflux.tbl_test+set+col3+%3D+%3F+,col4+%3D+%3F' using CqlStorage(); 

現在我得到以下錯誤 和90%的記錄被傾入卡桑德拉

ERROR - 2014-04-29 01:53:49.590; org.apache.hadoop.security.UserGroupInformation; PriviledgedActionException as:sarrajen cause:java.io.IOException: java.io.IOException: InvalidRequestException(why:Expected 8 or 0 byte long (4)) 
WARN - 2014-04-29 01:53:49.590; org.apache.hadoop.mapred.Child; Error running child 
java.io.IOException: java.io.IOException: InvalidRequestException(why:Expected 8 or 0 byte long (4)) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Reduce.runPipeline(PigGenericMapReduce.java:465) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Reduce.processOnePackageOutput(PigGenericMapReduce.java:428) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Reduce.reduce(PigGenericMapReduce.java:408) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Reduce.reduce(PigGenericMapReduce.java:262) 
    at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:176) 
    at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:652) 
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:420) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:266) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 
    at org.apache.hadoop.mapred.Child.main(Child.java:260) 
Caused by: java.io.IOException: InvalidRequestException(why:Expected 8 or 0 byte long (4)) 
    at org.apache.cassandra.hadoop.cql3.CqlRecordWriter$RangeClient.run(CqlRecordWriter.java:248) 
Caused by: InvalidRequestException(why:Expected 8 or 0 byte long (4)) 
    at org.apache.cassandra.thrift.Cassandra$execute_prepared_cql3_query_result.read(Cassandra.java:42694) 
    at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) 
    at org.apache.cassandra.thrift.Cassandra$Client.recv_execute_prepared_cql3_query(Cassandra.java:1724) 
    at org.apache.cassandra.thrift.Cassandra$Client.execute_prepared_cql3_query(Cassandra.java:1709) 
    at org.apache.cassandra.hadoop.cql3.CqlRecordWriter$RangeClient.run(CqlRecordWriter.java:232) 
INFO - 2014-04-29 01:53:49.764; org.apache.hadoop.mapred.Task; Runnning cleanup for the task 

的經緯度記錄它執行的,如果我是工作的罰款手動插入cassandra。

而且一切,如果我傾倒最終結果爲CFS

store result into '/testop' 
Output(s): 
Successfully stored 56347 records in: "/testop" 

我還企圖把數據分成CFS再由CFS卡桑德拉DB這個工作對我來說是工作的罰款。請讓我知道我錯了。我已經使用組合鍵在CQL中創建了表,所以我想我們不需要給任何比較器和驗證器,因爲我已經爲coloumns指定了數據類型。

store result into '/testop' 
x = load '/testop' as (Primary1:chararray,Primary2:long,col3:chararray,col4:long); 
finalresult = foreach x generate TOTUPLE(TOTUPLE('Primary1',Primary1),TOTUPLE('Primary2',Primary2)),TOTUPLE(col3,col4); 

    store finalresult into 'cql://conflux/tbl_test?output_query=update+conflux.tbl_test+set+col3+%3D+%3F+,col4+%3D+%3F' using CqlStorage(); 

現在,這工作得很好。

請讓我知道我在哪裏錯了。

回答

0

錯誤原因:InvalidRequestException(爲什麼:期望8或0字節長(4)) 說長輸入數據格式錯誤。輸入字段中有一些不好的數據。

可以檢查UDF看到的數據是如何以正確的格式

+0

手動我可以插入記錄它給我的錯誤。 – sudheer

+0

我也嘗試將數據轉儲到CFS中,然後從CFS轉儲到Cassandra DB,這對我有用。請讓我知道我錯了。我已經使用組合鍵在CQL中創建了表,所以我想我們不需要給任何比較器和驗證器,因爲我已經爲coloumns指定了數據類型。 – sudheer

+0

請參閱編輯的問題。 – sudheer

0

準備從BigInt有在卡桑德拉更改數據類型varint解決了上述問題。