• 伪分布式环境下命令行正确运行hadoop示例wordcount


    首先确保hadoop已经正确安装、配置以及运行。

    1.     首先将wordcount源代码从hadoop目录中拷贝出来。

    [root@cluster2 logs]# cp /usr/local/hadoop-1.1.2/src/examples/org/apache/hadoop/examples/WordCount.java ~/ygch/hadoop/

    因为在编译过程中需要将jave源文件和class类文件分离,所以在~/ygch/hadoop下还要有一个class目录。

    2.     编译WordCount.java文件:

    [root@cluster2 src]#javac -classpath /usr/local/hadoop-1.1.2/hadoop-core-1.1.2.jar:/usr/local/hadoop-1.1.2/lib/commons-cli-1.2.jar WordCount.java -d class

    该命令的特别之处是利用-classpath选项指定WordCount需要的jar包。一开始我们可能不知道WordCount需要什么jar包,我们可以通过搜索hadoop的目录来搜寻相关jar包。hadoop目录下存放jar包的位置有两个:根目录和/lib目录。然后我们可以通过jar tvf  *.jar查看jar包内容,进而可以知道WordCount需要的是哪几个jar包。

    -d选项指定生成的类文件的位置,在编译的时候这个选项必须重新指定,不能让class文件生成在当前目录下。这是因为WordCount.java内包含package信息,如果我们不加-d选项,则编译的时候会将package信息丢失,导致能编译通过,但是后续不能找到类文件的错误。

    此时我们直接调用java命令运行生成的WordCount:

    [root@cluster2 classes]# java org.apache.hadoop.examples.WordCount

    则会报错:

    Exceptionin thread "main" java.lang.NoClassDefFoundError:org/apache/hadoop/conf/Configuration

            atorg.apache.hadoop.examples.WordCount.main(WordCount.java:52)

            Caused by:java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration

            atjava.net.URLClassLoader$1.run(URLClassLoader.java:366)

            atjava.net.URLClassLoader$1.run(URLClassLoader.java:355)

            at java.security.AccessController.doPrivileged(NativeMethod)

            atjava.net.URLClassLoader.findClass(URLClassLoader.java:354)

            atjava.lang.ClassLoader.loadClass(ClassLoader.java:424)

            atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

            at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

            ... 1 more

    错误提示表明java找不到我们在编译时添加的jar包,这时即使用-classpath选项添加相关jar包也不能正确运行。正确的方式是,将class文件打包成jar包。

    3.     将class文件打包成一个jar包:

    [root@cluster2 hadoop]# jar cvf WordCount.jar -C classes/ .

    注意不要忘记最后有一个点,否则jar命令报错。该点指示jar命令的文件列表,表示指定目录下的所有文件。这里不能用*,否则会添加除了指定目录还有当前目录下的所有文件。

            我们也可以首先cd到指定目录,然后利用命令:

    [root@cluster2 class]# jar cvf WordCount.jar *

    来执行打包命令。

            打包的结果是在执行jar命令的目录下生成一个WordCount.jar。

    4.     生成input文件:

    由于运行hadoop时指定的输入文件只能是HDFS文件系统中的文件,所以我们必须将要进行wordcount的文件从本地文件系统拷贝到HDFS文件系统中。

    [root@cluster2 hadoop]# hadoop fs -mkdir input
    [root@cluster2 hadoop]# hadoop fs -put testfile input
    

    5.     运行jar包:

    [root@cluster2 hadoop]#hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output

    在运行命令中由于WordCount.java中包括package信息,所以我们在指定类时要包含package的完整信息。

    6.     查看结果

    在hadoop程序运行完后,结果会放在output目录下,该目录是自动生成的。查看命令为:

    [root@cluster2 hadoop]# hadoop fs -cat output/part-r-00000

    至此,hadoop下的WordCount实例运行结束。

    
    
  • 相关阅读:
    Sass-unitless()函数
    Sass函数:unit()函数
    Sass函数:Introspection 函数 -type-of()
    Sass函数-值列表index
    Sass函数--列表函数append
    Sass函数-join()函数
    Sass函数:列表函数nth
    Sass函数:值列表函数length
    Sass函数:random()函数
    学习笔记77—Iphone集
  • 原文地址:https://www.cnblogs.com/aukle/p/3214984.html
Copyright © 2020-2023  润新知