美文网首页
大数据下:上传java代码到Hadoop上运行实例

大数据下:上传java代码到Hadoop上运行实例

作者: 大炮对着虫子 | 来源:发表于2018-06-26 15:51 被阅读64次

在实现了hadoop的伪分布式部署,接下来打算通过编写几个例子来感受下在hadoop上是如何运行java代码的。

例子一:读取hdfs上文件的数据输出到控制台。

实现功能思路:
1、数据源:需要在hdfs上创建数据源
2、java代码:程序的入口

一、启动hadoop环境
strart-all.sh    启动hadoop环境
stop-all.sh      关闭hadoop环境
jps                查看java进程,检查hadoop是否正常启动

附带一个小技巧:
可能会忘了start-all.sh全拼,记不住的情况下,可以输入 start(前几个字母)后+ 两次Tab键。

二、创建目录

在linux目录下自己建立一个目录 input,myclass用以存放数据和java代码。
我的路径为:


[hadoop@Hadoop travis]$ pwd
/home/hadoop/travis
mkdir input
mkdir myclass

在input目录下创建quangle.txt文件并输入内容数据

cd input
touch quangle.txt
vi quangle.txt

数据:

On the top of the Crumpetty Tree
The Quangle Wangle sat,
But his face you could not see,
On account of his Beaver Hat.

接下来要将刚刚建立的linux本地的quangle.txt上传到hdfs上

hadoop fs -mkdir  /class4         在hdfs上创建文件夹class4
hadoop fs -ls /                 显示hdfs根目录下的文件信息
hdfs 上目录

接下来,将linux本地上的quangle.txt上传到hdfs上

[hadoop@Hadoop travis]$ cd input
[hadoop@Hadoop input]$ hadoop fs -copyFromLocal quangle.txt /class4/quangle.txt
hadoop fs -ls /class4/quangle.txt
显示hdfs上文件
三、配置本地环境

数据源有了,那么我们现在,打算将刚才创建的myclass作为运行java代码的空间,那么hadoop怎么认可这个我们自己创建的文件夹呢,这个时候需要我们去配置HADOOP_CLASSPATH

找到hadoop-env.sh
加入对HADOOP_CLASSPATH变量值,值为myclass的路径,保存编辑后使配置文件生效。
image.png
使配置文件生效:
source hadoop-env.sh
四、上传java代码到hadoop
1、jar包准备

通过http://mvnrepository.com/ 官网上去下载对应需要的jar包

hadoop所需jar包.png
2、编写代码

编写代码:读取hdfs上文件的数据,控制台输出

package test;

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;




public class FileSystemCat {
    public static void main(String[] args) throws IOException {
        String uri=args[0];
        Configuration conf=new Configuration();
        FileSystem fs=FileSystem.get(URI.create(uri),conf);
        InputStream in=null;
        try{
        in=fs.open(new Path(uri));
        IOUtils.copyBytes(in, System.out, 4096,false);
        }finally
        {
            IOUtils.closeStream(in);
        }
        
    }
}

3、将java文件打包成可以运行的jar包

关于导成jar包,这里本人踩了一个坑,关于代码依赖的jar包的问题,一般选择Runable JAR file 能确保能运行,jar不会少


image.png

再通过winSCP将导出的jar包文件 上传到linux的myclass目录上。

五、运行验证数据

[hadoop@Hadoop myclass]$ hadoop jar FileSystemCat.jar /class4/quangle.txt
18/06/26 13:32:29 WARN util.NativeCodeLoader:
 Unable to load native-hadoop library for 
your platform... using builtin-java classes where applicable
n the top of the Crumpetty Tree
The Quangle Wangle sat,
But his face you could not see,
On account of his Beaver Hat.

六、期间踩过的坑

刚开始是 打算直接编译成.class文件而不是jar去运行,结果存在两个问题。

1、没有jar包

因为直接通过运行java编译成的class,则通过指令运行程序会发现找不到class

hadoop FileSystemCat  /class4/quangle.txt
image.png

解决方法:配置hadoop_classspath,将hadoop的jar包引进去

hadoop的jar包

打开hadoop-env.sh,加上 下面的代码


for f in /home/hadoop/hdfs/hadoop-2.6.0/share/hadoop/**/*.jar; do
  if [ "$HADOOP_CLASSPATH" ]; then
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
  else
    export HADOOP_CLASSPATH=$f
  fi
done

然后打开.bashrc文件

[hadoop@Hadoop ~]$ pwd
/home/hadoop
[hadoop@Hadoop ~]$ vi .bashrc

将HADOOP_CLASSPATH环境给拼接上去
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HADOOP_CLASSPATH

2、编译带package和不带package

我是通过eclipse上编写编译后通过winSCP上传到linux上,


image.png

如果只是简单的放到myclass文件目录上,会路径错误。
解决方法两种: 1、在myclass上创建test目录,将.class文件上传到test上。
2、通过指令 进行编译,则会自动生成文件目录

javac -d .  FileSystemCat.java

相关文章

  • 大数据下:上传java代码到Hadoop上运行实例

    在实现了hadoop的伪分布式部署,接下来打算通过编写几个例子来感受下在hadoop上是如何运行java代码的。 ...

  • Android apk 空包签名(记录)

    百度应用平台认领应用需要下载空包APK,对其进行签名再上传,已重新上传应用。 需要在 Java 环境下运行代码。 ...

  • 知识笔记<一>

    问题描述:本地编译运行没有问题的代码,上传至svn服务器上。另一台机器检出代码,编译通过,运行时报错,未将对象实例...

  • 大数据下:hadoop伪分布式的搭建

    一、Hadoop启动模式 Hadoop集群有三种启动模式: 单机模式:默认情况下运行为一个单独机器上的独立Java...

  • Hadoop的安装使用简介

    Hadoop的运行有三种形式: 单实例运行 伪分布式 完全分布式本文主要介绍单实例Hadoop的安装以及使用简介。...

  • Hadoop伪分布式安装

    Hadoop也可以以伪分布式模式在单节点上运行,其中每个Hadoop守护程序都在单独的Java进程中运行。hado...

  • Java 实例

    Java 环境设置实例 Java 实例 – 如何编译一个Java 文件? Java 实例 – Java 如何运行一...

  • Hadoop基础

    Hadoop基础 Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语...

  • SparkSQL基本使用

    往Hadoop集群上上传测试数据,hdfs dfs -cat /person/employee.txtemploy...

  • jvm 内存区域与创建对象

    Java 运行时数据区域 Java 对象的创建 Java 运行时数据区域 计算机想要运行一段代码,两个设备是必不可...

网友评论

      本文标题:大数据下:上传java代码到Hadoop上运行实例

      本文链接:https://www.haomeiwen.com/subject/nnkpyftx.html