免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2804 | 回复: 0
打印 上一主题 下一主题

[Hadoop&HBase] Hadoop命令行接口运行自己编写的类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:52 |只看该作者 |倒序浏览
<DIV><FONT size=3 face=宋体>&nbsp;&nbsp;&nbsp; 最近学习Hadoop,可以使用命令行来简单的管理Hadoop,例如使用:</FONT></DIV>
<DIV><FONT size=3 face=宋体>
<DIV style="WIDTH: 92.94%; HEIGHT: 122px" id=codeText class=codeText>
<OL style="PADDING-BOTTOM: 5px; MARGIN: 0px 1px 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 5px" class=dp-css>
<LI>#查看hadoop的HDFS根节点情况</LI>
<LI>hadoop fs -ls /</LI>
<LI></LI>
<LI>#创建文件夹LGG</LI>
<LI>hadoop fs mkdir /user/root/LGG</LI></OL></DIV></FONT></DIV>
<DIV><FONT size=3 face=宋体>通过命令行接口来进行操作。</FONT></DIV>
<DIV><FONT size=3 face=宋体>&nbsp;&nbsp;&nbsp; 当然,hadoop命令行接口同样支持自己编写的类的参数,例如在Hadoop权威指南中的一个例子如下:</FONT></DIV>
<DIV><FONT size=3 face=宋体>
<DIV id=codeText class=codeText>
<OL style="PADDING-BOTTOM: 5px; MARGIN: 0px 1px 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 5px" class=dp-css>
<LI><SPAN style="COLOR: #000000"><SPAN style="COLOR: #0000ff">import</SPAN> <SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">io</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">InputStream</SPAN><SPAN style="COLOR: #0000cc">;</SPAN><BR></LI>
<LI><SPAN style="COLOR: #0000ff">import</SPAN> <SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">net</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">URL</SPAN><SPAN style="COLOR: #0000cc">;</SPAN><BR></LI>
<LI><SPAN style="COLOR: #0000ff">import</SPAN> <SPAN style="COLOR: #ff0000">org</SPAN><SPAN style="COLOR: #0000cc">.</SPAN>apache<SPAN style="COLOR: #0000cc">.</SPAN>hadoop<SPAN style="COLOR: #0000cc">.</SPAN>fs<SPAN style="COLOR: #0000cc">.</SPAN>FsUrlStreamHandlerFactory<SPAN style="COLOR: #0000cc">;</SPAN><BR></LI>
<LI><SPAN style="COLOR: #0000ff">import</SPAN> <SPAN style="COLOR: #ff0000">org</SPAN><SPAN style="COLOR: #0000cc">.</SPAN>apache<SPAN style="COLOR: #0000cc">.</SPAN>hadoop<SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">io</SPAN><SPAN style="COLOR: #0000cc">.</SPAN>IOUtils<SPAN style="COLOR: #0000cc">;</SPAN><BR></LI>
<LI><BR></LI>
<LI><SPAN style="COLOR: #ff9900">/**<BR></LI>
<LI>&nbsp;* <BR></LI>
<LI>&nbsp;* @author LGG<BR></LI>
<LI>&nbsp;*<BR></LI>
<LI>&nbsp;*/</SPAN><BR></LI>
<LI><SPAN style="COLOR: #0000ff">public</SPAN> <SPAN style="COLOR: #0000ff">class</SPAN> URLCat <SPAN style="COLOR: #0000cc">{</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #0000cc">{</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">URL</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">setURLStreamHandlerFactory</SPAN><SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN> FsUrlStreamHandlerFactory<SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #0000cc">)</SPAN><SPAN style="COLOR: #0000cc">)</SPAN><SPAN style="COLOR: #0000cc">;</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #0000cc">}</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #0000ff">public</SPAN> <SPAN style="COLOR: #0000ff">static</SPAN> <SPAN style="COLOR: #0000ff">void</SPAN> main<SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #ff0000">String</SPAN><SPAN style="COLOR: #0000cc">[</SPAN><SPAN style="COLOR: #0000cc">]</SPAN> args<SPAN style="COLOR: #0000cc">)</SPAN> <SPAN style="COLOR: #0000ff">throws</SPAN> <SPAN style="COLOR: #ff0000">Exception</SPAN><SPAN style="COLOR: #0000cc">{</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">InputStream</SPAN> <SPAN style="COLOR: #ff0000">in</SPAN> <SPAN style="COLOR: #0000cc">=</SPAN> <SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #0000cc">;</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #0000cc">{</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #ff0000">in</SPAN> <SPAN style="COLOR: #0000cc">=</SPAN> <SPAN style="COLOR: #0000ff">new</SPAN> <SPAN style="COLOR: #ff0000">URL</SPAN><SPAN style="COLOR: #0000cc">(</SPAN>args<SPAN style="COLOR: #0000cc">[</SPAN>0<SPAN style="COLOR: #0000cc">]</SPAN><SPAN style="COLOR: #0000cc">)</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">openStream</SPAN><SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #0000cc">)</SPAN><SPAN style="COLOR: #0000cc">;</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOUtils<SPAN style="COLOR: #0000cc">.</SPAN>copyBytes<SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #ff0000">in</SPAN><SPAN style="COLOR: #0000cc">,</SPAN> <SPAN style="COLOR: #ff0000">System</SPAN><SPAN style="COLOR: #0000cc">.</SPAN>out<SPAN style="COLOR: #0000cc">,</SPAN> 4096<SPAN style="COLOR: #0000cc">,</SPAN>false<SPAN style="COLOR: #0000cc">)</SPAN><SPAN style="COLOR: #0000cc">;</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #0000cc">}</SPAN><SPAN style="COLOR: #0000ff">finally</SPAN><SPAN style="COLOR: #0000cc">{</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOUtils<SPAN style="COLOR: #0000cc">.</SPAN>closeStream<SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #ff0000">in</SPAN><SPAN style="COLOR: #0000cc">)</SPAN><SPAN style="COLOR: #0000cc">;</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #0000cc">}</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #0000cc">}</SPAN><BR></LI>
<LI><SPAN style="COLOR: #0000cc">}</SPAN></SPAN></LI></OL></DIV></FONT></DIV>
<DIV><FONT size=3 face=宋体>&nbsp;&nbsp;&nbsp; 将URLCat.java编译后生成class文件,然后可以将此类作为一个hadoop命令行接口的参数进行使用,如下:
<DIV id=codeText class=codeText>
<OL style="PADDING-BOTTOM: 5px; MARGIN: 0px 1px 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 5px" class=dp-css>
<LI>hadoop URLCat hdfs://localhost/user/tom/readme.txt</LI></OL></DIV></FONT></DIV>
<DIV><FONT size=3 face=宋体>作用是将HDFS文件里面的readme.txt输出到System.out中,就是标准输出。但是在执行的时候会报以下错误:</FONT></DIV>
<DIV>
<DIV id=codeText class=codeText>
<OL style="PADDING-BOTTOM: 5px; MARGIN: 0px 1px 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 5px" class=dp-css>
<LI><SPAN style="COLOR: #000000"><SPAN style="COLOR: #ff0000">Exception</SPAN> <SPAN style="COLOR: #ff0000">in</SPAN> <SPAN style="COLOR: #ff0000">thread</SPAN> <SPAN style="COLOR: #ff00ff">"main"</SPAN> <SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">lang</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">NoClassDefFoundError</SPAN><SPAN style="COLOR: #0000cc">:</SPAN> URLCat<BR></LI>
<LI>Caused by<SPAN style="COLOR: #0000cc">:</SPAN> <SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">lang</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">ClassNotFoundException</SPAN><SPAN style="COLOR: #0000cc">:</SPAN> URLCat<BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;at <SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">net</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">URLClassLoader</SPAN><SPAN style="COLOR: #ff0000">$</SPAN>1<SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">run</SPAN><SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #ff0000">URLClassLoader</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">:</SPAN>217<SPAN style="COLOR: #0000cc">)</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;at <SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">security</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">AccessController</SPAN><SPAN style="COLOR: #0000cc">.</SPAN>doPrivileged<SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #0000ff">Native</SPAN> <SPAN style="COLOR: #ff0000">Method</SPAN><SPAN style="COLOR: #0000cc">)</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;at <SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">net</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">URLClassLoader</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">findClass</SPAN><SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #ff0000">URLClassLoader</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">:</SPAN>205<SPAN style="COLOR: #0000cc">)</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;at <SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">lang</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">ClassLoader</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">loadClass</SPAN><SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #ff0000">ClassLoader</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">:</SPAN>321<SPAN style="COLOR: #0000cc">)</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;at sun<SPAN style="COLOR: #0000cc">.</SPAN>misc<SPAN style="COLOR: #0000cc">.</SPAN>Launcher$AppClassLoader<SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">loadClass</SPAN><SPAN style="COLOR: #0000cc">(</SPAN>Launcher<SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">:</SPAN>294<SPAN style="COLOR: #0000cc">)</SPAN><BR></LI>
<LI>&nbsp;&nbsp;&nbsp;&nbsp;at <SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">lang</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">ClassLoader</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">loadClass</SPAN><SPAN style="COLOR: #0000cc">(</SPAN><SPAN style="COLOR: #ff0000">ClassLoader</SPAN><SPAN style="COLOR: #0000cc">.</SPAN><SPAN style="COLOR: #ff0000">java</SPAN><SPAN style="COLOR: #0000cc">:</SPAN>266<SPAN style="COLOR: #0000cc">)</SPAN><BR></LI>
<LI>Could <SPAN style="COLOR: #ff0000">not</SPAN> <SPAN style="COLOR: #ff0000">find</SPAN> the main <SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #0000cc">:</SPAN> URLCat<SPAN style="COLOR: #0000cc">.</SPAN> Program will <SPAN style="COLOR: #ff0000">exit</SPAN><SPAN style="COLOR: #0000cc">.</SPAN></SPAN></LI></OL></DIV></DIV>
<DIV><FONT size=3 face=宋体>这个异常是典型的类装入问题的异常,异常表明在类装入的过程中,没有找到URLCat这个类的定义。于是LGG查阅了相关资料,发现hadoop脚本执行的时候,classpath的搜索路径默认会在当前系统变量$HADOOP_CLASSPATH中去寻找,于是echo查看之,发现竟然显示为空!</FONT></DIV>
<DIV><FONT size=3 face=宋体>&nbsp;&nbsp;&nbsp; 问题找到了,因为系统指定了classpath,所以回去这个环境变量中去寻找,但是在当前路径下找不到类URLCat(废话,都是空的了)。使用export命令就可以解决了:</FONT></DIV>
<DIV><FONT size=3 face=宋体>
<DIV id=codeText class=codeText>
<OL style="PADDING-BOTTOM: 5px; MARGIN: 0px 1px 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 5px" class=dp-css>
<LI>#.表示当前目录,即类所在目录,只有这样才能让hadoop找到这个类</LI>
<LI></LI>
<LI>export HADOOP_CLASSPATH=.</LI></OL></DIV></FONT></DIV>
<DIV><FONT size=3 face=宋体>然后再执行:</FONT></DIV>
<DIV><FONT size=3 face=宋体>
<DIV id=codeText class=codeText>
<OL style="PADDING-BOTTOM: 5px; MARGIN: 0px 1px 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 5px" class=dp-css>
<LI>hadoop URLCat hdfs://localhost/user/tom/readme.txt</LI></OL></DIV></FONT></DIV>
<DIV><FONT size=3 face=宋体>就搞定了~~</FONT></DIV>
<DIV><FONT size=3 face=宋体></FONT>&nbsp;</DIV>
<DIV><FONT size=3 face=宋体></FONT>&nbsp;</DIV>
<DIV><FONT size=3 face=宋体></FONT>&nbsp;</DIV>
<DIV><FONT size=3 face=宋体></FONT>&nbsp;</DIV>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP