当前位置:   article > 正文

windows上搭建hadoop2开发环境_头歌hadoop开发环境搭建第二关

头歌hadoop开发环境搭建第二关

搭建前的准备:

1》安装ant-->配置ant环境变量和java的环境变量

2》配置jdk环境变量---》这里的jdk版本要求和build.xml 编译的版本一致否则不通过

正式搭建:

1.使用eclipse创建java project-->bigdata (这里也需要配置一下eclipse中运行的ant路径 由于该路径下有eclipse默认的ant没有的jar包---jscn-0.1.15.jar  该jar包作用就是运行window下hadoop程序用的)

2.创建lib包---》和src同级(这里必须创建lib文件夹否则后期用ant 运行build.xml 无法找到对应的hadoop的jar包)

3.创建类hdfs.App1

  1. package hdfs;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.net.URI;
  6. import java.net.URISyntaxException;
  7. import java.util.concurrent.atomic.AtomicInteger;
  8. import org.apache.hadoop.conf.Configuration;
  9. import org.apache.hadoop.fs.BlockLocation;
  10. import org.apache.hadoop.fs.FSDataInputStream;
  11. import org.apache.hadoop.fs.FSDataOutputStream;
  12. import org.apache.hadoop.fs.FileStatus;
  13. import org.apache.hadoop.fs.FileSystem;
  14. import org.apache.hadoop.fs.Path;
  15. import org.apache.hadoop.fs.Trash;
  16. import org.apache.hadoop.fs.permission.FsPermission;
  17. import org.apache.hadoop.io.IOUtils;
  18. import org.apache.hadoop.util.Progressable;
  19. public class App1 {
  20. public static void main(String[] args) throws Exception {
  21. final FileSystem fileSystem = FileSystem.get(new URI("hdfs://hadoop1:9000"), new Configuration());
  22. System.out.println("************************"+fileSystem);
  23. System.out.println("************************"+fileSystem.getClass());//DistributedFileSystem
  24. //创建文件夹 mkdir /-->表示根目录 dir1-->表示目录名称 (目录结构比较单一可用使用)
  25. // createDir(fileSystem);
  26. //上传文件create 参数1--》hdfs路径 参数2---》覆盖 参数3--》缓冲大小 参数4--》副本数 参数5-->块默认128m
  27. // upload(fileSystem);
  28. //读取hdfs文件
  29. // read(fileSystem);
  30. //遍历 listStatus 首字母就是ls 遍历的意思
  31. // FileStatus[] listStatus = fileSystem.listStatus(new Path("/dir1"));
  32. // for(FileStatus fileStatus : listStatus) {
  33. // System.out.println(fileStatus);
  34. // if(!fileStatus.isDirectory()) {
  35. // BlockLocation[] fileBlockLocations = fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
  36. // for (BlockLocation blockLocation : fileBlockLocations) {
  37. // String[] names = blockLocation.getNames();
  38. // for (String name : names) {
  39. // System.out.println("name:"+name);//HOST NAME:192.168.0.2:50010
  40. // }
  41. // String[] hosts = blockLocation.getHosts();
  42. // for (String hostname : hosts) {
  43. // System.out.println("HOST NAME:"+hostname);
  44. // }
  45. // }
  46. // }
  47. // }
  48. //获取工作目录 hdfs://hadoop1:9000/user/root
  49. System.out.println(fileSystem.getWorkingDirectory().toString());
  50. //删除
  51. // Trash trash = new Trash(fileSystem, fileSystem.getConf());
  52. // trash.moveToTrash(new Path("/dir1/file1"));
  53. // fileSystem.delete(new Path("/dir1/file1"),true);
  54. }
  55. private static void read(final FileSystem fileSystem) throws IOException {
  56. FSDataInputStream in = fileSystem.open(new Path("/dir1/file1"));
  57. IOUtils.copyBytes(in, System.out, 1024,true); //把结果输出到控制台
  58. }
  59. private static void upload(final FileSystem fileSystem) throws IOException, FileNotFoundException {
  60. // FSDataOutputStream out = fileSystem.create(new Path("/dir1/file1"),true,1024000,(short)2,1048576);// 65535 < 1048576
  61. // FileInputStream in = new FileInputStream("/usr/hadoop1/hadoop.txt");
  62. //参数1--》linux本地文件io流,参数2--》hdfs输出文件流 参数3--》缓冲大小 参数4 ---》操作完是否关闭流
  63. // IOUtils.copyBytes(in, out, 1024,true);
  64. //progressable--->表达数据上传的进程
  65. final AtomicInteger writeBytes = new AtomicInteger(0); //计数器
  66. FSDataOutputStream out = fileSystem.create(new Path("/dir1/file2"), new Progressable() {
  67. @Override
  68. public void progress() {
  69. System.out.println("writeBytes:"+writeBytes.get());
  70. }
  71. });
  72. FileInputStream in = new FileInputStream("/usr/hadoop1/hadoop.txt");
  73. byte[] buffer = new byte[1024];
  74. int readBytes = 0;
  75. while((readBytes=in.read(buffer))!=-1) {
  76. out.write(buffer);
  77. out.flush();
  78. out.hsync();//保证当前实际写入hdfs是成功的
  79. writeBytes.addAndGet(readBytes);
  80. }
  81. }
  82. private static void createDir(final FileSystem fileSystem) throws IOException {
  83. fileSystem.mkdirs(new Path("/dir1"));
  84. // fileSystem.mkdirs(new Path("/dir1/dir11/dir111"));//递归创建的
  85. //mydir位于working home--->推荐使用
  86. //fileSystem.mkdirs(new Path("mydir"));//没有根目录 /user/root--->hdfs存放所有用户的根目录
  87. //第二个参数是权限 ---drwxr-xr-x
  88. // fileSystem.mkdirs(new Path("/dir2"),new FsPermission("111"));
  89. }
  90. }

4.创建build.xml-->并运行

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <project name="项目名称" basedir="." default="sshexec">
  3. <description>本配置文件共ANT编辑项目、自动化进行单元测试、打包并部署使用</description>
  4. <description>默认操作 (输入命令:ant) 为编译源程序并发布运行</description>
  5. <!-- 属性设置 -->
  6. <!-- property environment="env"/ -->
  7. <!--property file="build.properties"/ -->
  8. <!--property name="java.lib.dir" value="${env.JAVA_HOME}/lib"/ -->
  9. <property name="project" location="bigdata"/>
  10. <property name="src.dir" value="${basedir}/src"/><!-- 设置变量,指向被编译的java代码的位置 -->
  11. <property name="classes.dir" value="${basedir}/classes"/><!-- 设置变量,指向编译后的class文件的位置 -->
  12. <property name="dist.dir" value="${basedir}/dist"/> <!-- 设置变量,指向编译后生成jar包的位置 -->
  13. <property name="project.lib.dir" value="${basedir}/lib"/><!-- 设置变量,指向所依赖的jar包所在的位置 -->
  14. <property name="localpath.dir" value="${basedir}"/>
  15. <property name="remote.home" value="~"/>
  16. <!-- 可以修改 -->
  17. <property name="remote.hostname" value="hadoop1"/>
  18. <!-- 可以修改 -->
  19. <property name="remote.username" value="root"/>
  20. <!-- 可以修改 -->
  21. <property name="remote.password" value="root"/>
  22. <!-- 可以修改:每次需要知道的main类,写到这里 -->
  23. <property name="main.class" value="hdfs.App1"/>
  24. <!-- 基本编译路径设置 -->
  25. <path id="compile.classes">
  26. <pathelement path="${dist.dir}" />
  27. <fileset dir="${project.lib.dir}">
  28. <include name="**/*.jar"/>
  29. </fileset>
  30. </path>
  31. <!-- 清理删除临时目录-->
  32. <target name="clean" description="清理删除临时文件">
  33. <!-- delete dir="${build.dir}"-->
  34. <delete dir="${dist.dir}" />
  35. <delete dir="${classes.dir}" />
  36. </target>
  37. <!-- 初始化,建立目录,复制文件-->
  38. <target name="init" depends="clean" description="初始化,建立目录,复制文件">
  39. <mkdir dir="${classes.dir}"/>
  40. <mkdir dir="${dist.dir}"/>
  41. </target>
  42. <!-- 编译源文件-->
  43. <target name="compile" depends="init" description="编译源文件">
  44. <!-- 编译的版本不能比运行的版本高 -->
  45. <javac srcdir="${src.dir}" destdir="${classes.dir}" fork="true"
  46. executable="E:\Java\jdk1.7.0_80\bin\javac"
  47. includeantruntime="on"
  48. classpath="${project.lib.dir}">
  49. <classpath refid="compile.classes"/>
  50. </javac>
  51. </target>
  52. <!-- 打包类文件-->
  53. <target name="jar" depends="compile" description="打包类文件">
  54. <jar jarfile="${dist.dir}/jar.jar" basedir="${classes.dir}">
  55. <!--fileset dir="${classes.dir}" includes="**/*.*"/-->
  56. </jar>
  57. </target>
  58. <!-- 上传到服务器
  59. **需要把lib目录下jsch-0.1.15拷贝到$ANT_HOME/lib下,如果Eclipse下的ant环境必须在Windows->preference->ANT->RUNIIME->CLASSPATH中加入jscn-0.1.15.
  60. -->
  61. <target name="ssh" depends="jar">
  62. <scp file="${dist.dir}/jar.jar" todir="${remote.username}@${remote.hostname}:${remote.home}" password="${remote.password}" trust="true"/>
  63. </target>
  64. <target name="sshexec" depends="ssh">
  65. <sshexec command="/usr/hadoop1/hadoop-2.7.5/bin/hadoop jar ${remote.home}/jar.jar ${main.class}" host="${remote.hostname}" username="${remote.username}" password="${remote.password}" trust="true" />
  66. </target>
  67. </project>

最终运行效果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/643407
推荐阅读
相关标签
  

闽ICP备14008679号