Hadoop初探

2020-02-11T11:39:00

[TOC]

系统环境

Hadoop 安装

用户准备

  1. 创建hadoop用户(此处按照要求使用hadoop511)

    sudo useradd -m hadoop511 -s /bin/bash
  2. 设置新建用户密码

    sudo passwd hadoop511
  3. 添加到sudo组

    sudo adduser hadoop511 sudo

  4. 切换到新建用户

  5. 添加SSH密钥证书

    ssh_keygen 步骤,如对安全性等无特殊要求,建议他询问你输入东西的时候,全部回车即可

    cd ~/.ssh/
    ssh-keygen -t rsa
    cat ./id_rsa.pub >> ./authorized_keys

配置Java环境

本处选择的是AdoptOpenJDKOpenJDK8U-jdk_x64_linux_hotspot_8u242b08
由于实验时到Github下载服务器的网络不是太好,采取下载到本地再拉取到服务器的方式,因此wget地址为本地地址

  1. 创建JAVA下载目录

    mkdir -p openjdk
    cd openjdk
  2. 下载JAVA文件

    wget -c https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_*.tar.gz

  3. 解压缩并去除二级目录

    tar zxf OpenJDK8U-jdk_x64_linux_hotspot_8u242b08.tar.gz
    mv jdk8u424-b08/* .

  4. 拷贝到系统目录

    sudo cp -r ~/openjdk /usr/local/
  5. 修改系统环境变量

    多个变量的分隔符为 冒号 :

    cat >> ~/.bashrc <<'EOF'
    export JAVA_HOME=/usr/local/openjdk
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=$PATH:${JAVA_HOME}/bin
    EOF

  6. 刷新系统环境变量

    source ~/.bashrc
  7. 测试JAVA配置

    which java

配置Hadoop

  1. 创建Hadoop下载目录

    mkdir -p ~/hadoop
  2. 下载Hadoop源文件

    wget -c https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz

  3. 解压缩后去除二级目录拷贝到目标位置

    tar zxf hadoop-3.1.3.tar.gz
    mv hadoop-3.1.3 hadoop
    sudo cp -r ./hadoop /usr/local/

  4. 更改文件拥有者

    cd /usr/local
    sudo chown -R hadoop511 ./hadoop

  5. 验证Hadoop可用

    /usr/local/hadoop/bin/hadoop version
  6. 修改系统环境变量

    cat >> ~/.bashrc <<'EOF'
    export PATH=$PATH:/usr/local/hadoop/bin
    EOF

  7. 刷新系统环境变量

    source ~/.bashrc

Hadoop 非分布式单机配置

Hadoop 默认即为非分布式单机运行

  1. 查看Hadoop自带的样例程序

    hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar

  2. 测试正则grep

    2.1 将输入文件放入 input 文件夹

    此处使用Hadoop配置文件进行测试

    cd /usr/local/hadoop
    mkdir -p input
    cp -r ./etc/hadoop/*.xml ./input/

    2.2 运行Hadoop测试

    hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input ./output 'dfs[a-z.]+'

    2.3 查看测试运行结果

    cat ./output/*

Hadoop 伪分布式配置

这个伪分布式的意思就是其实还是在一台电脑上运行不同的节点,只不过看起来有好多节点,类似于Docker和k8s那种,或者理解成多个VM / WSL虚拟机也差不多感觉

Hadoop的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改的两个文件为 core-site.xmlhdfs-site.xml

  1. 修改 core-site.xml

    cd /usr/local/hadoop
    cp etc/hadoop/core-site.xml etc/hadoop/core-site.xml.bak
    cat > etc/hadoop/core-site.xml <<EOF
    <configuration>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>file:/usr/local/hadoop/tmp</value>
            <description>Abase for other temporary directories.</description>
        </property>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>
    EOF
  2. 修改 hdfs-site.xml

    cp etc/hadoop/hdfs-site.xml etc/hadoop/hdfs-site.xml.bak
    cat > etc/hadoop/hdfs-site.xml <<EOF
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
    </configuration>
    EOF
  3. Namenode 初始化

    hdfs namenode -format

  4. 开启 NameNode 和 DataNode 守护进程

    ./sbin/start-dfs.sh

    如果说找不到JAVA_HOME但是自己又配置了,你可以执行下面的语句强行告诉Hadoop环境变量

    cat >> /usr/local/hadoop/etc/hadoop/hadoop-env.sh <<'EOF'
    JAVA_HOME=/usr/local/openjdk
    EOF
  5. 查看启动情况

    jps

  6. 网页管理监控

Web界面是运行于Hadoop服务器的,所以其IP地址为安装Hadoop的机器IP地址
可以在终端中使用 ifconfig 查看
至于端口,我安装版本2的时候是50070,但是3的时候使用 netstat 找了一下,发现同功能页面端口改成了9870

运行Hadooop伪分布式实例

  1. 在文件系统中创建输入文件夹

    hdfs dfs -mkdir -p input
  2. 将测试文件放入文件系统
hdfs dfs -put ./etc/hadoop/*.xml ./input/

![dfs mkdir ls](https://go.fancyking.win/i/2020/02/11/ntjju9.png)
  1. 检查文件系统内部测试文件

    hdfs dfs -ls input

    从Web页面检查也可以

  2. 运行实例

    hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'

  3. 查看一下输出结果

    hdfs dfs -cat output/*

    • 这个时候的所有文件操作都在文件系统中发生改写,本地当前目录并无更新,相当于Docker的卷映射

      ![volum docker](https://go.fancyking.win/i/2020/02/11/svmoe.png)
    • 在web界面管理端也可以验证这一点

      ![web admin dfs](https://go.fancyking.win/i/2020/02/19/gz5mq4.png)
      
  4. 将文件系统文件取到当前目录

    hdfs dfs -get output ./output
    cat ./output/*

  5. 关闭从节点

    ./sbin/stop-dfs.sh

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »