将Hadoop源码.java程序加载到自己的工程中

2019-03-28 13:40|来源: 网络

原因:分析代码的时候,在Eclipse中通过Build Path引入的软件包(Hadoop-0.20.2-core.jar)是编译后的.class文件,是无法直接修改编译的。要很难跟踪引入包的程序执行过程。

解决方案:可以将Hadoop的源代码复制到自己的工程中,这样和引入软件包的效果是相同的

具体过程:

(1)下载Hadoop的源代码(到apache官网下载http://download.nextag.com/apache/hadoop/common/)。

(2)解压后就可以看到源码,在工程中新建org.apache.hadoop包,将源代码src目录下的src\core\org\apache\hadoop和src\hdfs\org\apache\hadoop以及src\mapred\org\apache\hadoop三个目录下的所有的文件夹复制到刚才创建的软件包中。

(3)现在程序中肯定有很多错误,因为刚才复制的代码需要引入其他软件包,引入必要的软件包,源码的lib目录下已经有所有的必要软件包,通过Buid Path ->add  external jars引入软件包:jets3t-0.6.1.jar和kfs-0.2.2.jar,到现在程序应该没有错误了,但是还不能运行,应为没有加载必要的配置文件

(4)加载配置文件,将hadoop-0.20.2-core.jar解压,将解压后的文件中的core-default.xml,hadoop-metrics.properties,hdfs-default.xml,mapred-default.xml,bin.tgz这6个配置文件复制到Nutch工程中的conf文件夹中

(5)通过上面处理,程序就可以正常运行了。

备注:不要把Nutch配置文件夹conf中的log4j.properties覆盖掉,回事日志系统出错。

相关问答

更多
  • 在Eclipse中新建一个java项目,将src下的文件复制到项目的src下,然后导入lib下的jar文件,即可查看源码了。网上有教程
  • 工程
  • 把你编译后的hadoop源码丢到原来的hadoop集群环境中去 即覆盖hadoop安装目录下的原hadoop-core-xxx.jar 同样的所有节点都需要更新 然后重启集群
  • 具体参考Eclipse查看hadoop源代码出现Source not found,是因为没有添加.zip在我们hadoop编程中,经常遇到像看看hadoop的某个类中函数的功能。但是我们会遇到一种情况就是Source not found。遇到这个问题,该如何解决。因为我们已经引入了包,为什么会找不到。如果不了解怎么引入的可以参考:hadoop开发方式总结及操作指导http://www.aboutyun.com/thread-6950-1-1.html看到上面现象,是因为我们每天添加.zip。该如何添加zip ...
  • 您必须提供MySQL的用户名和密码,并且必须具有访问数据库的权限。 看起来你做了一个全新的mysql安装,并没有配置root帐户以使用root密码保护。 您可以使用以下步骤执行此操作: $ mysqladmin -u root password "newpassword"例如$ mysqladmin -u root password mysql-root-password 重启MySQL守护进程。 $ sudo service mysqld restart或$ sudo /etcinit.d/mysqld ...
  • 如果缺少源路径,则必须检查本地计算机上是否存在文件。 但是如果目标文件夹没有丢失,那么首先尝试在HDFS上检查该文件夹是否存在。 为此,您可以通过以下方式打开hadoop HDFS的Web UI :50070 ,然后浏览文件系统 除此之外,您可以通过Command检查文件 hadoop fs -ls / 如果这样可行,则将文件放入以下命令 hadoop fs -put
  • 不,这很好,因为虚拟地址空间和虚拟内存。 阅读这些: http://en.wikipedia.org/wiki/Virtual_memory http://en.wikipedia.org/wiki/Virtual_address_space 虚拟内存意味着您可以将大量内存装入内存,并将未使用的部分保存到光盘并从物理内存中移出。 虚拟地址空间意味着每个进程(一个进程的例子就是你的Java程序)都有自己的地址空间,所以它不会从其他进程中“窃取”地址。 No it's fine, because of virt ...
  • 我刚才在博客上发布了一些内容。 (谷歌“hive parse_url”应该在前几名) 我正在解析网址但在这种情况下你会想要使用str_to_map。 str_to_map(arg1,arg2,arg3)arg1 =>要处理的字符串arg2 =>键值对分隔符arg3 =>键值分隔符 str = "a=1 b=42 x=abc" str_to_map(str," ","=") str_to_map的结果将为您提供3个键值对的映射。 str_to_map(str,“”,“=”)[“a”]将返回“1” str_ ...
  • @Praveen:使用映射器来克服每个客户端数据到Hadoop服务器的停机时间,因为客户端数据在这种情况下保存主键。 充分利用每个客户端的分区以及Date分区。 在开始sqoop导入之前,必须为HDFS文件位置实现TDE区域。 * TDE:Trasparent Data Encryption专区,是客户数据安全区域的最佳实践。 @Praveen: Use mappers to overcome the downtime for each clients data to Hadoop servers, as ...
  • 是的,您可以使用ProcessBuilder或Runtime.exec来执行任意系统命令 编辑:我提出的解决方案是按照您的指定启动hadoop命令。 Hadoop确实有一个用于启动作业的API,在一个简单的java程序中调用mapreduce作业时讨论过。 Yes, you can use ProcessBuilder or Runtime.exec to execute arbitrary system commands EDIT: The solution I proposed is to just l ...