本文以一主三从部署hadoop为介绍
1 首先克隆原有centos系统
在这里插入图片描述

2 nn_y 为主,dn1,dn2,dn3为从,都是通过克隆快速完成的. 右键管理有克隆,选择完全克隆。
3 配置网络集群:
设置静态ip
192.168.64.132
192.168.64.133
192.168.64.134
192.168.64.135
根据自己ip网络设置静态ip地址,最后三位不同。
4 通过x’shell首先完成nn_y静态ip的设置
在这里插入图片描述
1)命令 vi /etc/sysconfig/network-scripts/ifcfg-ens33
在这里插入图片描述
2 命令:vi /etc/hostname
将主机名改为:nn
在这里插入图片描述
3 vi /etc/hosts
在这里插入图片描述
4 将其他三个也分别如此操作
5 新增用户,给四个分别新增用户: adduser hadoop
6 设置 ssh 无密码登陆如 nn无密码登陆dn1
1) 命令 ssh-keygen -t rsa 全部enter
在这里插入图片描述
因为启动Hadoop会让输入密码现在设置免密启动
接着将公用钥匙写入到authorized_keys文件中,并修改这个文件的权限(重要,请不要忽略)

cat id_rsa.pub >> authorized_keys
cat id_rsa.pub >> authorized_keys

2) 具体原理请看下面这篇博客:
https://blog.csdn.net/wh_19910525/article/details/74331649
生成如下文件
在这里插入图片描述
3) id_rsa (私钥) id_rsa.pub(公钥) known_hosts(记录谁登陆机子)
现在要做的是将 id_rsa.pub(公钥)传递到dn1,dn2,dn3.
10 命令 ssh-copy-id dn1 将id传递到dn1中,结果如下:
在这里插入图片描述
4)同样对dn2,dn3如此操作,如下图般就可以无密码登陆dn1,dn2,dn3.

在这里插入图片描述
7 配置jdk Java home
1 ) 安装jdk 和hadoop
2) 建立软连接 ln -s jdk1.8.0_152 jdk8 和 ln -s hadoop-2.7.5 hadoop2
在这里插入图片描述
3) 环境变量配置
1) echo export JAVA_HOME=/home/hadoop/opt/jdk8
2) echo export JAVA_HOME=/home/hadoop/opt/jdk8 >> ~/.bashrc
3)echo export HADOOP_HOME=/home/hadoop/opt/hadoop2 >> ~/.bashrc
4) echo export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop >> ~/.bashrc
如下图:
在这里插入图片描述
5) vi ~/.bashrc 用这命令,直接填写也一样,最终要有四行
配置完后,输入source .bashrc,使配置生效

在这里插入图片描述
6)测试配置是否成功 echo $JAVA_HOME 和 echo $HADOOP_CONF_DIR

7 hadoop默认不支持分布式系统,需要改成分布式,改它的协议,将file:///协议改成hdfs

  1. 命令 vi $HADOOP_CONF_DIR/core-site.xml
    在这里插入图片描述
  2. vi $HADOOP_CONF_DIR/hdfs-site.xml
    设置datanode个数:hadoop默认为3,而本此hadoop部署是一个namenode和三个datanode,可以不配置,但要知道在哪里配置
    在这里插入图片描述
  3. 配置namenode路径 vi $HADOOP_CONF_DIR/hdfs-site.xml
    在这里插入图片描述

启动hadoop二代引擎yar 将 mapred-site.xml.template复制并重命名mapred-site.xml
cp mapred-site.xml.template mapred-site.xml

在这里插入图片描述
5) vi $HADOOP_CONF_DIR/yarn-site.xml
在这里插入图片描述
6) vi $HADOOP_CONF_DIR/slaves
在这里插入图片描述
8 命令 tar zcf opt.tar.gz opt 将opt文件夹进行压缩传到dn1,dn2,dn3中
9 命令 scp opt.tar.gz dn1:~ 和环境变量 scp .bashrc dn1:~
传递到dn1
在这里插入图片描述
10 进入dn1,dn2,dn3解压并source .bashrc
在这里插入图片描述
11 格式化 hdfs namenode -format
在这里插入图片描述
12 状态为零的时候格式化成功

13 启动 start-dfs.sh
在这里插入图片描述
14 输入上面自己网址和50070端口,如能登陆就表示启动成功,一定要把防火墙关闭

15 hdfs dfs -mkdir -p /user/hadoop 创建文件夹
start-yarn.sh 启动yarn

16 利用java从hadoop集群中读取文件:
使用idea创建的maven项目:
在这里插入图片描述
pom引入文件:

<?xml version="1.0" encoding="UTF-8"?>

<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>com.hadoop</groupId>
  <artifactId>hadoop</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>hadoop Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</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.8.1</version>
    </dependency>

    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.8.1</version>
    </dependency>

    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <version>2.8.1</version>
    </dependency>

    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-core</artifactId>
      <version>2.8.1</version>
    </dependency>
    
  </dependencies>

  <build>
    <finalName>hadoop</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>



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

import java.io.IOException;
//从hadoop集群中读取数据,从namenode
public class ReadHdfs {
    public static void main(String[] args) throws IOException {
        //获取文件系统
        FileSystem fs=FileSystem.get(new Configuration());
        //根据路径,通过open获取文件
      FSDataInputStream  fis=fs.open(new Path("out1/part-r-00000"));
      byte[] buffer=new byte[2048];
      while(true){
          //通过read方法读取文件
         int n= fis.read(buffer);
         //当n==-1表示文件读完
         if(n==-1){
            break;
          }
          System.out.println(new String(buffer,0,n));
      }
          //关闭资源
             fis.close();
    }
}

17 往hadoop中写文件:

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

import java.io.FileInputStream;
import java.io.IOException;

//往hadoop集群写数据
public class WriteHdfs{
    public static void main(String[] args) throws IOException {
        FileSystem fs=FileSystem.get(new Configuration());
        Path path=new Path("data4");
         //创建data4文件夹
        fs.mkdirs(path);
        //根据本地路径读取文件
        FileInputStream fis=
                new FileInputStream("E:\javaWorkSpace\hadoop\src\main\java\ReadHdfs.java");
        //将读取的文件写入data4文件夹下子文件ReadHdfs.java中
        FSDataOutputStream fos = fs.create(new Path(path,"ReadHdfs.java") );
        byte[] buffer=new byte[2048];
        while(true){
           int n=fis.read(buffer);
              if(n==-1){
                  break;
              }
              //写入hadoop集群中,从0开始,一直读到n
              fos.write(buffer,0,n);
              fos.hflush();
        }
        //关闭资源
        fis.close();
        fos.close();
    }
}

18 jps等命令提示未找到命令
1) yum list openjdk-devel
2)yum install java-1.8.0-openjdk-devel.x86_64