• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > 万法归宗之Hadoop编程无界限,万法归宗hadoop

万法归宗之Hadoop编程无界限,万法归宗hadoop

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含万法归宗之Hadoop编程无界限,万法归宗hadoop等服务器相关知识,网友希望可以进行参考

万法归宗之Hadoop编程无界限,万法归宗hadoop


记录下,散仙今天的工作以及遇到的问题和解决方案,俗话说,好记性不如烂笔头,写出来文章,供大家参考,学习和点评,进步,才是王道 ,废话不多说,下面切入主题: 

先介绍下需求: 

散仙要处理多个类似表的txt数据,当然只有值,列名什么的全部在xml里配置了,然后加工这些每个表的每一行数据,生成特定的格式基于ASCII码1和ASCII码2作为分隔符的一行数据,ASCII2作为字段名和字段值的分隔符,ASCII1作为字段和字段之间的分隔符,每解析一个txt文件时,都要获取文件名,然后与xml中的schema信息映射并找到对应位置的值,它的列名,前提是,这些的txt的内容位置,是固定的,然后我们知道它每一行属于哪个表结构的映射,因为这些映射信息是提前配置在xml中的,如下图: 



当然类似这样的结构有20个左右的表文件,到时候,我们的数据方,会给我们提供这些txt文件,然后散仙需要加工成特定的格式,然后写入HDFS,由我们的索引系统使用MapReduce批量建索引使用。 

本来想直接用java写个单机程序,串行处理,然后写入HDFS,后来一想假如数据量比较大,串行程序还得改成多线程并行执行,这样改来改去,倒不如直接使用MapReduce来的方便 


ok,说干就干,测试环境已经有一套CDH5.3的hadoop2.5集群,直接就在eclipse进行开发和MapReduce程序的调试,反正也好久也没手写MapReduce了,前段时间,一直在用Apache Pig分析数据,这次处理的逻辑也不复杂,就再写下练练手 , CDH的集群在远程的服务器上,散仙本机的hadoop是Apache Hadoop2.2的版本,在使用eclipse进行开发时,也没来得及换版本,理论上最好各个版本,不同发行版,之间对应起来开发比较好,这样一般不会存在兼容性问题,但散仙这次就懒的换了,因为CDH5.x之后的版本,是基于社区版的Apache Hadoop2.2之上改造的,接口应该大部分都一致,当然这只是散仙猜想的。 



(1)首先,散仙要搞定的事,就是解析xml了,在程序启动之前需要把xml解析,加载到一个Map中,这样在处理每种txt时,会根据文件名来去Map中找到对应的schma信息,解析xml,散仙直接使用的jsoup,具体为啥,请点击散仙这篇 
http://qindongliang.iteye.com/blog/2162519文章,在这期间遇到了一个比较蛋疼的问题,简直是一个bug,最早散仙定义的xml是每个表,一个table标签,然后它下面有各个property的映射定义,但是在用jsoup的cssQuery语法解析时,发现总是解析不出来东西,按照以前的做法,是没任何问题的,这次简直是开玩笑了,后来就是各种搜索,测试,最后才发现,将table标签,换成其他的任何标签都无任何问题,具体原因,散仙还没来得及细看jsoup的源码,猜测table标签应该是一个关键词什么的标签,在解析时会和html的table冲突,所以在xml解析中失效了,花了接近2个小时,求证,检验,终于搞定了这个小bug。 


(2)搞定了这个问题,散仙就开始开发调试MapReduce版的处理程序,这下面临的又一个问题,就是如何使用Jsoup解析存放在HDFS上的xml文件,有过Hadoop编程经验的人,应该都知道,HDFS是一套分布式的文件系统,与我们本地的磁盘的存储方式是不一样的,比如你在正常的JAVA程序上解析在C:\file\t.tx或者在linux上/home/user/t.txt,所编写的程序在Hadoop上是无法使用的,你得使用Hadoop提供的编程接口获取它的文件信息,然后转成字符串之后,再给jsoup解析。 


(3)ok,第二个问题搞定之后,你得编写你的MR程序,处理对应的txt文本,而且保证不同的txt里面的数据格式,所获取的scheaml是正确的,所以在map方法里,你要获取当然处理文件的路径,然后做相应判断,在做对应处理。 


(4)很好,第三个问题搞定之后,你的MR的程序,基本编写的差不多了,下一步就改考虑如何提交到Hadoop的集群上,来调试程序了,由于散仙是在Win上的eclipse开发的,所以这一步可能遇到的问题会很多,而且加上,hadoop的版本不一致与发行商也不一致,出问题也纯属正常。 


这里多写一点,一般建议大家不要在win上调试hadoop程序,这里的坑非常多,如果可以,还是建议大家在linux上直接玩,下面说下,散仙今天又踩的坑,关于在windows上调试eclipse开发, 运行Yarn的MR程序,散仙以前也记录了文章,感兴趣者,可以点击这个链接 
http://qindongliang.iteye.com/blog/2078452地址。 


(5)提交前,是需要使用ant或maven或者java自带的导出工具,将项目打成一个jar包提交的,这一点大家需要注意下,最后测试得出,Apache的hadoop2.2编写的MR程序,是可以直接向CDH Hadoop2.5提交作业的,但是由于hadoop2.5中,使用google的guice作为了一个内嵌的MVC轻量级的框架,所以在windows上打包提交时,需要引入额外的guice的几个包,截图如下: 



 

上面几步搞定后,打包整个项目,然后运行成功,过程如下: 
Java代码  收藏代码
  1. 输出路径存在,已删除!  
  2. 2015-04-08 19:35:18,001 INFO  [main] client.RMProxy (RMProxy.java:createRMProxy(56)) - Connecting to ResourceManager at /172.26.150.18:8032  
  3. 2015-04-08 19:35:18,170 WARN  [main] mapreduce.JobSubmitter (JobSubmitter.java:copyAndConfigureFiles(149)) - Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.  
  4. 2015-04-08 19:35:21,156 INFO  [main] input.FileInputFormat (FileInputFormat.java:listStatus(287)) - Total input paths to process : 2  
  5. 2015-04-08 19:35:21,219 INFO  [main] mapreduce.JobSubmitter (JobSubmitter.java:submitJobInternal(394)) - number of splits:2  
  6. 2015-04-08 19:35:21,228 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - user.name is deprecated. Instead, use mapreduce.job.user.name  
  7. 2015-04-08 19:35:21,228 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.jar is deprecated. Instead, use mapreduce.job.jar  
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 万法归宗之Hadoop编程无界限,万法归宗hadoop

相关文章

  • Twitter 新一代流处理利器——Heron 论文笔记之Storm Limitations,
  • Flocker浅析与Docker插件(3),flockerdocker
  • Zookeeper 在Hadoop中的应用,zookeeperhadoop
  • hadoop单机存储均衡和坏block处理,hadoop单机block
  • Spark jar包找不到解决方法,sparkjar
  • MapReduce编程之WordCount,mapreducewordcount
  • Elasticsearch之scroll,elasticsearch
  • MapReduce 按照Value值进行排序输出,mapreducevalue
  • hadoop2.7完全分布式安装,hadoop2.7
  • [Hive]HBaseIntegration:通过Hive读写HBase,

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • 从Hadoop URL中读取数据,hadoopurl读取数据
    • hive grouping sets 和 cube 用法,hivegrouping
    • 微软平台开发技术蓝图,微软平台蓝图
    • Hadoop DistributedCache使用案例,hadoopcache
    • hadoop2企业级集群部署(DNS域名解析+NFS密钥共享+AWK批量复制),hadoop2awk
    • Mesos资料收集(持续更新),mesos资料收集
    • 深度学习工具caffe详细安装指南,深度caffe安装指南
    • 详说大数据计算的可类化Classable,类化classable
    • Docker 使用方法总结之:容器的基本操作,docker基本操作
    • HBase shell 启动出错 org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = Con,

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有