如何在Hadoop的MapReduce程序中处理JSON文件
2014-01-24 15:37
344 查看
简介:
最近在写MapReduce程序处理日志时,需要解析JSON配置文件,简化Java程序和处理逻辑。但是Hadoop本身似乎没有内置对JSON文件的解析功能,我们不得不求助于第三方JSON工具包。这里选择json-simple实现我们的功能。在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"}
相关文章推荐
- 如何在Hadoop的MapReduce程序中处理JSON文件
- 如何在Hadoop的MapReduce程序中处理JSON文件
- mapreduce程序如何跳过待处理文件的首行
- 开源ASP.NET程序是如何处理文件编码的-从DotNetNuke看过来
- 深度解析cocostudio是如何处理动作编辑器导出来的Json文件(2) (转)
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 从零开始最短路径学习Hadoop之02----处理气象数据的第一个MapReduce程序
- Hadoop MapReduce处理海量小文件:自定义InputFormat和RecordReader
- Hadoop MapReduce中如何处理跨行Block和inputSplit
- Hadoop MapReduce中如何处理跨行Block和UnputSplit
- Hadoop MapReduce处理海量小文件:基于CombineFileInputFormat(每次往map中读入1行)
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 在Visual Studio 的 “一般处理程序 ” .ashx 文件中如何创建Session 对象
- Hadoop 中文编码相关问题 -- mapreduce程序处理GBK编码数据并输出GBK编码数据
- Hadoop MapReduce中如何处理跨行Block和UnputSplit
- Hadoop MapReduce中如何处理跨行Block和InputSplit
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- Hadoop MapReduce中如何处理跨行Block和inputSplit
- hadoop如何执行自己编写的MapReduce程序
- hadoop_MapReduce处理topKey程序