zoukankan      html  css  js  c++  java
  • 原生态在Hadoop上运行Java程序

    第一种:原生态运行jar包
    1,利用eclipse编写Map-Reduce方法,一般引入Hadoop-core-1.1.2.jar。注意这里eclipse里没有安装hadoop的插件,只是引入其匝包,该eclipse可以安装在windows或者linux中,如果是在windows中安装的,且在其虚拟机安装的linux,可以通过共享文件夹来实现传递。
    2,编写要测试的数据,如命名为tempdata
    3,利用eclipse的export来打包已编写好的,在利用eclipse打包jar的时候,只需要选择src即可,一般只打包程序文件,并且需要选择main class,将该jar放到如/home/hadoop/docum/Test.jar
    4,将要分析的数据传到hdfs上
    hadoop fs -put /home/hadoop/myhadoopdata/tempdata  ./testdata/
    5,开始执行jar
    hadoop jar /home/hadoop/Docum/Test.jar  /user/hadoop/temperatur output
    这是一种利用jar来运行的。
    这里Test.jar在本地,jar没必要上传到hdfs上
    参数依次为
    本地mapred程序,hdfs的测试数据即输入文件,输出文件夹。
    hadoop jar /home/hadoop/Temperature.jar inputpath outputpath
    注意:这里可以不需要指定类的名称,而输出的文件夹outputpath不能事先已经存在。

    第二种:伪分布式下运行WordCount
    1,拷贝源代码
    cp /usr/local/hadoop1.1.2/src/examples/org/apache/hadoop/examples/WordCount.java  ~/ygch/hadoop/
    2,编译源代码,放到指定的文件夹如这里的class下
    javac 
    -classpath /usr/local/hadoop1.1.2/hadoop-core1.1.2.jar:
    /usr/local/hadoop1.1.2/lib/commons-cli-1.2.jarWordCount.java  -d class,
    利用-classpath选项指定WordCount需要的jar包。hadoop目录下存放jar包的位置有两个:根目录和/lib目录。然后我们可以通过jar tvf  *.jar查看jar包内容,进而可以知道WordCount需要的是哪几个jar包。
    -d选项指定生成的类文件的位置,在编译的时候这个选项必须重新指定,不能让class文件生成在当前目录下。
    3,将class文件打包成一个jar包:
    jar cvf WordCount.jar -C classes/  .
    注意不要忘记最后有一个点.,这个点点必须和前面要有空格,否则jar命令报错。该点指示jar命令的文件列表,表示指定目录下的所有文件。
    4,生成input文件:
    由于运行hadoop时指定的输入文件只能是HDFS文件系统中的文件,所以我们必须将要进行wordcount的文件从本地文件系统拷贝到HDFS文件系统中。
    hadoop fs -mkdir input
    hadoop fs -put testfile input
    5. 运行jar包:
    hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output
    在运行命令中由于WordCount.java中包括package信息,所以我们在指定类时要包含package的完整信息。
    6. 查看结果
    在hadoop程序运行完后,结果会放在output目录下,该目录是自动生成的。查看命令为:
    hadoop fs -cat output/part-r-00000
    使用-cat或者-text都行

    第三种Hadoop直接执行Class文件
    可以事先在eclipse中编译好class,然后直接利用hadoop来执行该class文件
    在Hadoop集群中运行作业的时候,必须要将程序打包为jar文件。
    在Hadoop本地和伪分布中可以运行jar文件,也可以直接运行class文件,注意直接运行class文件,必须是没有map和reducer的,直接获取FileSystem来进行操作。
    如果类有包名,拷贝的时候也要将其包名拷贝,然后
    hadoopwhut/structfile/SequenceFileWriteDemo numbers.seq

    利用Hadoop命令和Java命令都可以执行class文件,前者可以将Hadoop库文件路径加入到类路径中来,同时也能获取Hadoop的配置文件。
    一般都需要提前设置一个HADOOP_CLASSPATH环境变量用于添加应用程序类的路径,注意这里的路径是用户本地的文件路径,不是hdfs中的路径。

    具体的如下:
    export  HADOOP_CLASSPATH=/home/hadoop/hadoopclass
    hadoop FileSystemCat hdfs://localhost:9000/user/hadoop/inputdata/iodata.txt
    也可以直接在IDE中将hadoop的jar加入classpath中,然后直接run

    第四种 Hadoop与eclipse环境的搭建
    hadoop jar 运行的实质是:
    1.利用hadoop这个脚本启动一个jvm进程;
    2.jvm进程去运行org.apache.hadoop.util.RunJar这个java类;
    3.org.apache.hadoop.util.RunJar解压Temperature.jar
    到hadoop.tmp.dir/hadoop-unjar*/目录下;
    4.org.apache.hadoop.util.RunJar动态的加载并运行MainClass或参数中指定的Class;
    5.MainClass或参数中指定的Class中设定Job的各项属性
    6.提交job到JobTracker上并监视运行情况

    执行hadoop jar的时候,jar不需要放到hdfs中,一般hadoop是到本地中寻找jar的,如果用户此时在jar目录下,可以直接写jar名。

    对于输入文件夹和输出文件夹也不需要写上hadoop的内置路径名,默认是在/user/hadoop/这个目录下的,hadoop命令后可以不用加根路径。

    相关阅读:

    HDFS的安装和部署 http://www.linuxidc.com/Linux/2013-06/86599.htm

    HDFS上块恢复机制 http://www.linuxidc.com/Linux/2013-05/84199.htm

    将本地文件拷到HDFS中 http://www.linuxidc.com/Linux/2013-05/83866.htm

    用Sqoop进行MySQL和HDFS系统间的数据互导 http://www.linuxidc.com/Linux/2013-04/83447.htm

  • 相关阅读:
    ExcelManager基于.Net的Excel读写管理类库(二)
    ExcelManager基于.Net的Excel读写管理类库(一)
    NHibernate初探!
    也谈软件工程!
    本人初学WCF ,请教一个问题
    初来咋到,今天终于在这里建起了一个家!
    c#中委托和直接函数调用用什么区别,好处和目的在哪?
    CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别
    C++线程同步
    C++中using的作用
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/yuhjklhikj89089.html
Copyright © 2011-2022 走看看