- 论坛徽章:
- 0
|
<DIV><FONT size=3 face=宋体> 最近学习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=宋体> 当然,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> * <BR></LI>
<LI> * @author LGG<BR></LI>
<LI> *<BR></LI>
<LI> */</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> <SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #0000cc">{</SPAN><BR></LI>
<LI> <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> <SPAN style="COLOR: #0000cc">}</SPAN><BR></LI>
<LI> <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> <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> <SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #0000cc">{</SPAN><BR></LI>
<LI> <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> 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> <SPAN style="COLOR: #0000cc">}</SPAN><SPAN style="COLOR: #0000ff">finally</SPAN><SPAN style="COLOR: #0000cc">{</SPAN><BR></LI>
<LI> 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> <SPAN style="COLOR: #0000cc">}</SPAN><BR></LI>
<LI> <SPAN style="COLOR: #0000cc">}</SPAN><BR></LI>
<LI><SPAN style="COLOR: #0000cc">}</SPAN></SPAN></LI></OL></DIV></FONT></DIV>
<DIV><FONT size=3 face=宋体> 将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> 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> 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> 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> 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> 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> 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=宋体> 问题找到了,因为系统指定了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> </DIV>
<DIV><FONT size=3 face=宋体></FONT> </DIV>
<DIV><FONT size=3 face=宋体></FONT> </DIV>
<DIV><FONT size=3 face=宋体></FONT> </DIV> |
|