我正在尝试使用Pig将数据从HDFS中的文件复制到Cassandra中的表。但是在Cassandra中存储数据时,作业失败,并且空指针异常。有人可以帮我这个吗?
用户表格结构:
CREATE TABLE用户( user_id文本PRIMARY KEY, 年龄int, 第一个文字, 最后的文字 )
我的猪脚本
A =使用PigStorage(',')加载'/user/hduser/user.txt'(id:chararray,age:int,fname:chararray,lname:chararray);
< / LI>C = foreach A GENERATE TOTUPLE(TOTUPLE('user_id',id)),TOTUPLE('age',age),TOTUPLE('first',fname),TOTUPLE('last',lname);
将C存储到'cql:// ram_keyspace / users'使用CqlStorage();
例外:
java.lang.RuntimeException:java.lang.NullPointerException 在org.apache.cassandra.hadoop.cql3.CqlRecordWriter。(CqlRecordWriter.java:123) 在org.apache.cassandra.hadoop.cql3.CqlRecordWriter。(CqlRecordWriter.java:90) 在org.apache.cassandra.hadoop.cql3.CqlOutputFormat.getRecordWriter(CqlOutputFormat.java:76) 在org.apache.cassandra.hadoop.cql3.CqlOutputFormat.getRecordWriter(CqlOutputFormat.java:57) 在org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat.getRecordWriter(PigOutputFormat.java:84) at org.apache.hadoop.mapred.MapTask $ NewDirectOutputCollector。(MapTask.java:627) 在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:753) 在org.apache.hadoop.mapred.MapTask.run(MapTask.java:364) 在org.apache.hadoop.mapred.Child $ 4.run(Child.java:255) at java.security.AccessController.doPrivileged(Native Method) 在javax.security.auth.Subject.doAs(Subject.java:415) 在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190) 在org.apache.hadoop.mapred.Child.main(Child.java:249) 引起:java.lang.NullPointerException 在org.apache.cassandra.hadoop.cql3.CqlRecordWriter。(CqlRecordWriter.java:109) ......还有12个
使用Pig with Cassandra的人可以帮我解决这个问题吗?
答案 0 :(得分:0)
您正在使用CqlStorage,它要求您指定output_query
,这是一个准备好的语句,用于将数据插入列族。 DSE pig documentation提供了一个示例:
grunt> STORE insertformat INTO
'cql://cql3ks/simple_table1?output_query=UPDATE+cql3ks.simple_table1+set+b+%3D+%3F'
USING CqlStorage;