You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@chukwa.apache.org by Min Zhou <co...@gmail.com> on 2010/11/04 07:53:17 UTC
problems about JSON
Hi all,
We deployed chukwa on a 5 nodescluster where hadoop's version is
hadoop 0.20.2 and chukwa's is 0.4.0. After some logs of NameNode were
successfully collectected and processed by chukwa, we started hicc
server. The hicc produced files listed below on HDFS,
# bin/hadoop dfs -lsr /chukwa/hicc/views/
drwxr-xr-x - root supergroup 0 2010-11-04 13:01
/chukwa/hicc/views/public
-rw-r--r-- 2 root supergroup 22177 2010-11-04 13:01
/chukwa/hicc/views/public/default.view
-rw-r--r-- 2 root supergroup 236 2010-11-04 13:01
/chukwa/hicc/views/public/newview.tpl
-rw-r--r-- 2 root supergroup 46 2010-11-04 13:01
/chukwa/hicc/views/public/view.permission
-rw-r--r-- 2 root supergroup 103 2010-11-04 13:01
/chukwa/hicc/views/public/workspace_view_list.cache
drwxr-xr-x - root supergroup 0 2010-11-04 13:01
/chukwa/hicc/views/users
We digged into the hicc.log and found that it encountered some
exceptions about JSON.
2010-11-04 14:00:16,954 ERROR btpool0-3 ViewBean -
org.json.JSONException: JSONObject["owner"] not found.
at org.json.JSONObject.get(JSONObject.java:283)
at org.json.JSONObject.getString(JSONObject.java:409)
at org.apache.hadoop.chukwa.rest.bean.ViewBean.<init>(ViewBean.java:62)
at org.apache.hadoop.chukwa.datastore.ViewStore.list(ViewStore.java:217)
at org.apache.hadoop.chukwa.rest.resource.ViewResource.getUserViewList(ViewResource.java:159)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:156)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:166)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:114)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:74)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:114)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:66)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:658)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:616)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:607)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:309)
/pathList
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
After further analysis, we found the problem is caused by at lines in
ViewStore.list()
String[] pathList = new String[2];
pathList[0]=viewPath.toString();
pathList[1]=publicViewPath;
JSONArray list = new JSONArray();
for(String path : pathList) {
Path viewFile = new Path(path);
try {
FileSystem fs = FileSystem.get(config);
FileStatus[] fstatus = fs.listStatus(viewFile);
if(fstatus!=null) {
for(int i=0;i<fstatus.length;i++) {
long size = fstatus[i].getLen();
FSDataInputStream viewStream = fs.open(fstatus[i].getPath());
byte[] buffer = new byte[(int)size];
viewStream.readFully(buffer);
viewStream.close();
try {
ViewBean view = new ViewBean(new JSONObject(new String(buffer)));
JSONObject json = new JSONObject();
json.put("name", view.getName());
json.put("type", view.getPermissionType());
json.put("owner", view.getOwner());
if(uid.intern()==view.getOwner().intern()) {
json.put("editable","true");
} else {
json.put("editable","false");
}
list.put(json);
} catch (Exception e) {
log.error(ExceptionUtil.getStackTrace(e));
}
}
}
} catch (IOException ex) {
...
}
}
All files of /chukwa/hicc/views/public/ would be read and then parsed
into json objects. After that, those json objects were passed to
ViewBean's constructor which will run
json.getString("owner"). But there is only one file(default.view) 's
json has this key. So the exception throwed.
Could anyone help me with this?
Thanks,
Min
--
My research interests are distributed systems, parallel computing and
bytecode based virtual machine.
My profile:
http://www.linkedin.com/in/coderplay
My blog:
http://coderplay.javaeye.com
Re: problems about JSON
Posted by Eric Yang <er...@gmail.com>.
Yes, this is a bug. I filed a jira to track this issue.
https://issues.apache.org/jira/browse/CHUKWA-543
regards,
Eric
On Wed, Nov 3, 2010 at 11:53 PM, Min Zhou <co...@gmail.com> wrote:
> Hi all,
>
> We deployed chukwa on a 5 nodescluster where hadoop's version is
> hadoop 0.20.2 and chukwa's is 0.4.0. After some logs of NameNode were
> successfully collectected and processed by chukwa, we started hicc
> server. The hicc produced files listed below on HDFS,
>
> # bin/hadoop dfs -lsr /chukwa/hicc/views/
> drwxr-xr-x - root supergroup 0 2010-11-04 13:01
> /chukwa/hicc/views/public
> -rw-r--r-- 2 root supergroup 22177 2010-11-04 13:01
> /chukwa/hicc/views/public/default.view
> -rw-r--r-- 2 root supergroup 236 2010-11-04 13:01
> /chukwa/hicc/views/public/newview.tpl
> -rw-r--r-- 2 root supergroup 46 2010-11-04 13:01
> /chukwa/hicc/views/public/view.permission
> -rw-r--r-- 2 root supergroup 103 2010-11-04 13:01
> /chukwa/hicc/views/public/workspace_view_list.cache
> drwxr-xr-x - root supergroup 0 2010-11-04 13:01
> /chukwa/hicc/views/users
>
> We digged into the hicc.log and found that it encountered some
> exceptions about JSON.
>
> 2010-11-04 14:00:16,954 ERROR btpool0-3 ViewBean -
> org.json.JSONException: JSONObject["owner"] not found.
> at org.json.JSONObject.get(JSONObject.java:283)
> at org.json.JSONObject.getString(JSONObject.java:409)
> at org.apache.hadoop.chukwa.rest.bean.ViewBean.<init>(ViewBean.java:62)
> at org.apache.hadoop.chukwa.datastore.ViewStore.list(ViewStore.java:217)
> at org.apache.hadoop.chukwa.rest.resource.ViewResource.getUserViewList(ViewResource.java:159)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:156)
> at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
> at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:166)
> at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:114)
> at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:74)
> at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:114)
> at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:66)
> at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:658)
> at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:616)
> at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:607)
> at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:309)
> /pathList
> at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
>
> After further analysis, we found the problem is caused by at lines in
> ViewStore.list()
>
> String[] pathList = new String[2];
> pathList[0]=viewPath.toString();
> pathList[1]=publicViewPath;
> JSONArray list = new JSONArray();
> for(String path : pathList) {
> Path viewFile = new Path(path);
> try {
> FileSystem fs = FileSystem.get(config);
> FileStatus[] fstatus = fs.listStatus(viewFile);
> if(fstatus!=null) {
> for(int i=0;i<fstatus.length;i++) {
> long size = fstatus[i].getLen();
> FSDataInputStream viewStream = fs.open(fstatus[i].getPath());
> byte[] buffer = new byte[(int)size];
> viewStream.readFully(buffer);
> viewStream.close();
> try {
> ViewBean view = new ViewBean(new JSONObject(new String(buffer)));
> JSONObject json = new JSONObject();
> json.put("name", view.getName());
> json.put("type", view.getPermissionType());
> json.put("owner", view.getOwner());
> if(uid.intern()==view.getOwner().intern()) {
> json.put("editable","true");
> } else {
> json.put("editable","false");
> }
> list.put(json);
> } catch (Exception e) {
> log.error(ExceptionUtil.getStackTrace(e));
> }
> }
> }
> } catch (IOException ex) {
> ...
> }
> }
>
> All files of /chukwa/hicc/views/public/ would be read and then parsed
> into json objects. After that, those json objects were passed to
> ViewBean's constructor which will run
> json.getString("owner"). But there is only one file(default.view) 's
> json has this key. So the exception throwed.
>
> Could anyone help me with this?
>
> Thanks,
> Min
> --
> My research interests are distributed systems, parallel computing and
> bytecode based virtual machine.
>
> My profile:
> http://www.linkedin.com/in/coderplay
> My blog:
> http://coderplay.javaeye.com
>