设为首页 加入收藏

TOP

如何在Hadoop的MapReduce程序中处理JSON文件
2014-11-24 01:40:33 来源: 作者: 【 】 浏览:1
Tags:何在 Hadoop MapReduce 程序 处理 JSON 文件

简介


在Hadoop上执行Java程序的命令如下所示:


[hadoop@localhost]$ hadoop jar my-mapreduce.jar


my-mapreduce.jar是我们进行日志处理的MapReduce程序。现在假定我们需要在其中处理JSON格式的配置文件,这里忽略如何在Hadoop集群读取文件的细节,只关注如何使用JSON工具包。下面是简单的HelloWorld程序:


import org.json.simple.JSONObject;
public class HelloWorld{
public static void main(String[] args){
JSONObject obj=new JSONObject();
obj.put("name","foo");
obj.put("num",new Integer(100));
obj.put("balance",new Double(1000.21));
obj.put("is_vip",new Boolean(true));
obj.put("nickname",null);
System.out.print(obj);
}
}


在HelloWorld程序中,只简单修改JSON对象,将其内容打印输出,从而验证解析修改JSON内容的过程。


编译


由于MapReduce程序需提交到Hadoop集群执行,所以HelloWorld依赖的json-simple包必须存在于集群的classpath路径中,如果集群上没有对应的jar包。执行HelloWorld会出现如下异常:


Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/JSONObject


简单的解决方法是将json-simple包直接和HelloWorld编译结果一起打包,然后即可使用命令hadoop jar HelloWorld.jar执行。需将json-simple的jar包解压再同HelloWorld打包。


编译命令如下所示:


[hadoop@localhost]$ jar tf json-simple-1.1.1.jar
META-INF/MANIFEST.MF
META-INF/
META-INF/maven/
META-INF/maven/com.googlecode.json-simple/
META-INF/maven/com.googlecode.json-simple/json-simple/
META-INF/maven/com.googlecode.json-simple/json-simple/pom.properties
META-INF/maven/com.googlecode.json-simple/json-simple/pom.xml
org/
org/json/
org/json/simple/
org/json/simple/ItemList.class
org/json/simple/JSONArray.class
org/json/simple/JSONAware.class
org/json/simple/JSONObject.class
org/json/simple/JSONStreamAware.class
org/json/simple/JSONValue.class
org/json/simple/parser/
org/json/simple/parser/ContainerFactory.class
org/json/simple/parser/ContentHandler.class
org/json/simple/parser/JSONParser.class
org/json/simple/parser/ParseException.class
org/json/simple/parser/Yylex.class
org/json/simple/parser/Yytoken.class


[hadoop@localhost]$ unzip json-simple-1.1.1.jar
[hadoop@localhost]$ javac -classpath ./json-simple-1.1.1.jar HelloWorld.java
[hadoop@localhost]$ jar -cfe HelloWorld.jar HelloWorld HelloWorld.class ./org/


执行HelloWorld


[hadoop@localhost]$ hadoop jar HelloWorld.jar
{"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo"}


相关阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中的特殊运算符 下一篇C++中模拟反射填充消息struct

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: