• Hadoop项目开发环境搭建(EclipseMyEclipse + Maven)


    写在前面的话

        可详细参考,一定得去看

    HBase 开发环境搭建(EclipseMyEclipse + Maven)

    Zookeeper项目开发环境搭建(EclipseMyEclipse + Maven)

    Hive项目开发环境搭建(EclipseMyEclipse + Maven)

    MapReduce 开发环境搭建(EclipseMyEclipse + Maven)

      我这里,相信,能看此博客的朋友,想必是有一定基础的了。我前期写了大量的基础性博文。可以去补下基础。

    步骤一:File  ->  New  -> Project   ->  Maven Project

      步骤二:自行设置,待会创建的myHBase工程,放在哪个目录下。

     

     步骤三:

     步骤四:自行设置

     步骤五:修改jdk

    省略,很简单!

     步骤六:修改pom.xml配置文件

      参考: http://blog.itpub.net/26495863/viewspace-1328030/

           http://blog.csdn.net/kongxx/article/details/42339581  (推荐)

      

    官网Maven的Hadoop配置文件内容:

    http://www.mvnrepository.com/search?q=hadoop

    因为我的hadoop版本是hadoop-2.6.0

     1、

    2、

     3、

    4、

     暂时这些吧,以后需要,可以自行再加呢!

     最后的pom.xml配置文件为

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>zhouls.bigdata</groupId>
    <artifactId>myHadoop</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>myHadoop</name>
    <url>http://maven.apache.org</url>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.6.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.6.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.6.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core -->
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-core</artifactId>
    <version>2.6.0</version>
    </dependency>
    <dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.7</version>
    <scope>system</scope>
    <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
    </dependency>
    </dependencies>
    </project>

    当然,这只是初步而已,最简单的,以后可以自行增删。

    步骤七:这里,给大家,通过一组简单的Hive应用程序实例来向大家展示Hive的某些功能。

      类名为HadoopTestCase.java

      当然,这里,分hdfs和mapreduce测试。具体不多赘述了!很简单的

      比如CopyingLocalFileToHDFS.java    、 CopyManyFilesToHDFS.java      、   MergeSmallFilesToHDFS.java

    package zhouls.bigdata.myHadoop;


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

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

    /**
    *
    * @author
    * @function Copying from Local file system to HDFS
    *
    */
    public class CopyingLocalFileToHDFS
    {
    /**
    * @function Main() 方法
    * @param args
    * @throws IOException
    * @throws URISyntaxException
    */
    public static void main(String[] args) throws IOException,URISyntaxException
    {
    // 本地文件路径
    String source = "D://Data/weibo.txt";
    // hdfs文件路径
    String dest = "hdfs://HadoopMaster:9000/middle/weibo/";
    copyFromLocal(source, dest);
    }

    /**
    * @function 本地文件上传至 HDFS
    * @param source 原文件路径
    * @param dest 目的文件路径
    * @throws IOException
    * @throws URISyntaxException
    */
    public static void copyFromLocal(String source, String dest)
    throws IOException, URISyntaxException {
    // 读取hadoop文件系统的配置
    Configuration conf = new Configuration();
    URI uri = new URI("hdfs://HadoopMaster:9000");
    // FileSystem是用户操作HDFS的核心类,它获得URI对应的HDFS文件系统
    FileSystem fileSystem = FileSystem.get(uri, conf);
    // 源文件路径
    Path srcPath = new Path(source);
    // 目的路径
    Path dstPath = new Path(dest);
    // 查看目的路径是否存在
    if (!(fileSystem.exists(dstPath))) {
    // 如果路径不存在,即刻创建
    fileSystem.mkdirs(dstPath);
    }
    // 得到本地文件名称
    String filename = source.substring(source.lastIndexOf('/') + 1,source.length());
    try {
    // 将本地文件上传到HDFS
    fileSystem.copyFromLocalFile(srcPath, dstPath);
    System.out.println("File " + filename + " copied to " + dest);
    } catch (Exception e) {
    System.err.println("Exception caught! :" + e);
    System.exit(1);
    } finally {
    fileSystem.close();
    }
    }

    }

    package zhouls.bigdata.myHadoop;

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

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataInputStream;
    import org.apache.hadoop.fs.FSDataOutputStream;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.FileUtil;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.fs.PathFilter;
    /**
    * @function 将指定格式的多个文件上传至 HDFS
    * @author 小讲
    *
    */
    public class CopyManyFilesToHDFS {

    private static FileSystem fs = null;
    private static FileSystem local = null;

    /**
    * @function Main 方法
    * @param args
    * @throws IOException
    * @throws URISyntaxException
    */
    public static void main(String[] args) throws IOException,URISyntaxException
    {
    //文件源路径 这是在 Windows 下测试运行,如果在 Linux 修改srcPath路径即可
    String srcPath = "/home/hadoop/djt/data/*";
    //String srcPath = "D://Data/testdata/*";
    //或者Path srcPath =new Path("D://Data/testdata/*");


    //文件目的路径 如果在 Hadoop 环境下运行,使用 dstPath 的相对路径"/middle/filter/"也可以
    String dstPath = "hdfs://HadoopMaster:9000/middle/filter/";
    //或者Path dstPath = new Path("hdfs://HadoopMaster:9000/middle/filter/");
    //调用文件上传 list 方法
    list(srcPath,dstPath);
    }

    /**
    * function 过滤文件格式 将多个文件上传至 HDFS
    * @param dstPath 目的路径
    * @throws IOException
    * @throws URISyntaxException
    */
    //2.接下来在 list 方法中,使用 globStatus 方法获取所有 txt 文件,然后通过 copyFromLocalFile 方法将文件上传至 HDFS。
    public static void list(String srcPath,String dstPath) throws IOException, URISyntaxException {
    //读取hadoop配置文件
    Configuration conf = new Configuration();

    //获取默认文件系统 在Hadoop 环境下运行,也可以使用此种方法获取文件系统
    fs = FileSystem.get(conf);

    //HDFS接口和获取文件系统对象,本地环境运行模式
    //URI uri = new URI("hdfs://djt002:9000");
    //fs = FileSystem.get(uri, conf);
    //获得本地文件系统
    local = FileSystem.getLocal(conf);
    //只上传Data/testdata 目录下 txt 格式的文件 ,获得文件目录,即D://Data/testdata/
    //FileStatus[] localStatus = local.globStatus(new Path("D://Data/testdata/*"),new RegexAcceptPathFilter("^.*txt$"));
    FileStatus[] localStatus = local.globStatus(new Path("/home/hadoop/djt/data/*"),new RegexAcceptPathFilter("^.*txt$"));
    // 获得所有文件路径
    Path[] listedPaths = FileUtil.stat2Paths(localStatus);
    Path out= new Path(dstPath);
    //循坏所有文件
    for(Path p:listedPaths)
    {
    //将本地文件上传到HDFS
    fs.copyFromLocalFile(p, out);
    }
    }

    /**
    * @function 只接受 txt 格式的文件
    * @author
    *
    */
    // 1.首先定义一个类 RegexAcceptPathFilter实现 PathFilter,过滤掉 txt 文本格式以外的文件。
    public static class RegexAcceptPathFilter implements PathFilter
    {
    private final String regex;

    public RegexAcceptPathFilter(String regex)
    {
    this.regex = regex;
    }
    // 如果要接收 regex 格式的文件,则accept()方法就return flag; 如果想要过滤掉regex格式的文件,则accept()方法就return !flag。

    public boolean accept(Path path)
    {
    // TODO Auto-generated method stub
    boolean flag = path.toString().matches(regex);
    //只接受 regex 格式的文件
    return flag;
    }
    }
    }

    package zhouls.bigdata.myHadoop;


    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataInputStream;
    import org.apache.hadoop.fs.FSDataOutputStream;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.FileUtil;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.fs.PathFilter;
    import org.apache.hadoop.io.IOUtils;
    /**
    * function 合并小文件至 HDFS
    * @author 小讲
    *
    */
    public class MergeSmallFilesToHDFS
    {
    private static FileSystem fs = null; //定义文件系统对象,是HDFS上的
    private static FileSystem local = null; //定义文件系统对象,是本地上的
    /**
    * @function main
    * @param args
    * @throws IOException
    * @throws URISyntaxException
    */
    public static void main(String[] args) throws IOException,URISyntaxException
    {
    list();
    }

    /**
    *
    * @throws IOException
    * @throws URISyntaxException
    */
    public static void list() throws IOException, URISyntaxException
    {
    // 读取hadoop配置文件
    Configuration conf = new Configuration();
    // 文件系统访问接口和创建FileSystem对象,在本地上运行模式
    URI uri = new URI("hdfs://HadoopMaster:9000");
    fs = FileSystem.get(uri, conf);
    // 获得本地文件系统
    local = FileSystem.getLocal(conf);
    // 过滤目录下的 svn 文件
    FileStatus[] dirstatus = local.globStatus(new Path("D://Data/tvdata/*"),new RegexExcludePathFilter("^.*svn$"));
    //获取D:Data vdata目录下的所有文件路径
    Path[] dirs = FileUtil.stat2Paths(dirstatus);
    FSDataOutputStream out = null;
    FSDataInputStream in = null;
    for (Path dir : dirs)
    {//比如拿2012-09-17为例
    //将文件夹名称2012-09-17的-去掉,直接,得到20120901文件夹名称
    String fileName = dir.getName().replace("-", "");//文件名称
    //只接受20120917日期目录下的.txt文件
    FileStatus[] localStatus = local.globStatus(new Path(dir+"/*"),new RegexAcceptPathFilter("^.*txt$"));
    // 获得20120917日期目录下的所有文件
    Path[] listedPaths = FileUtil.stat2Paths(localStatus);
    // 输出路径
    Path block = new Path("hdfs://HadoopMaster:9000/middle/tv/"+ fileName + ".txt");
    System.out.println("合并后的文件名称:"+fileName+".txt");
    // 打开输出流
    out = fs.create(block);
    //循环20120917日期目录下的所有文件
    for (Path p : listedPaths)
    {
    in = local.open(p);// 打开输入流
    IOUtils.copyBytes(in, out, 4096, false); // 复制数据
    // 关闭输入流
    in.close();
    }
    if (out != null)
    {
    // 关闭输出流
    out.close();
    }
    //当循环完20120917日期目录下的所有文件之后,接着依次20120918,20120919,,,
    }
    }

    /**
    *
    * @function 过滤 regex 格式的文件
    *
    */
    public static class RegexExcludePathFilter implements PathFilter
    {
    private final String regex;

    public RegexExcludePathFilter(String regex)
    {
    this.regex = regex;
    }


    public boolean accept(Path path)
    {
    // TODO Auto-generated method stub
    boolean flag = path.toString().matches(regex);
    return !flag;
    }

    }

    /**
    *
    * @function 接受 regex 格式的文件
    *
    */
    public static class RegexAcceptPathFilter implements PathFilter
    {
    private final String regex;

    public RegexAcceptPathFilter(String regex)
    {
    this.regex = regex;
    }


    public boolean accept(Path path)
    {
    // TODO Auto-generated method stub
    boolean flag = path.toString().matches(regex);
    return flag;
    }

    }
    }

      步骤八:作为补充,

    参考:  http://blog.itpub.net/26495863/viewspace-1328030/

    从Hadoop集群环境下载hadoop配置文件

    • core-site.xml
    • hdfs-site.xml
    • mapred-site.xml

        myHadoop    ->  New  ->   Folder 

       具体下载,不多赘述了。

     删除原自动生成的文件:App.java和AppTest.java

      后面的深入学习,可以参考

    http://blog.itpub.net/26495863/viewspace-1328030/

     若是MyEclipse里,需要注意一下

    MyEclipse *的安装步骤和破解(32位和64位皆适用)

  • 相关阅读:
    用python实现批量替换.doc文件文件内容
    记我是如何通过Security+考试的
    去哪儿笔试羊生羊问题
    CSS作用域问题
    常用的几种清除浮动的方式
    ECE转专业找工作经历-从零电面到facebook offer
    面经-Bloomberg
    题解-Linked List Cycle II
    自我介绍
    解题技巧-发现子结构
  • 原文地址:https://www.cnblogs.com/zlslch/p/6025865.html
Copyright © 2020-2023  润新知