Hadoop项目开发环境搭建(Eclipse\MyEclipse + Maven)
写在前面的话
可详细参考,一定得去看
HBase 开发环境搭建(Eclipse\MyEclipse + Maven)
Zookeeper项目开发环境搭建(Eclipse\MyEclipse + Maven)
Hive项目开发环境搭建(Eclipse\MyEclipse + Maven)
MapReduce 开发环境搭建(Eclipse\MyEclipse + 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\tvdata目录下的所有文件路径
		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位皆适用)



作者:大数据和人工智能躺过的坑
出处:http://www.cnblogs.com/zlslch/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击右下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!
                    
                
                
            
        
浙公网安备 33010602011771号