Hadoop环境搭建

使用Docker

Posted by AnAn on September 29, 2021

介绍

使用群晖Docker 搭建hadoop分布式服务
使用了4个jdk1.8的容器分别作1个nameNode 和3个dataNode
命名分别为:

hdfs-master  
hdfs-slave1  
hdfs-slave2  
hdfs-slave3  

目录

常见问题

  • 启动问题 可以如下命令查看具体错误
    hdfs dfsadmin -report  
    
  • hdfs种的主机名中不要出现下划线(_),可以使用“-”代替。

环境配置

拉取JDK1.8镜象

  • 本例使用的镜像地址为:dustheart/jdk1.8_8u261:v8u261 ,镜像为精简版centos系统
    docker pull dustheart/jdk1.8_8u261:v8u261  
    

配置ssh server

  • 下载安装ssh server 和 ssh client
    yum install openssh-server -y  
    yum install openssh-clients -y  
    

配置ssh server自启动

  • 拉取的centos镜像没有systemd工具,这里使用修改/etc/bashrc的方式来自启动,实验发现修改/etc/profile无法自动执行启动脚本
  • 启动脚本如下,文件路径为/usr/bin/sshd_autorun.sh
    #!/bin/bash  
    sshd_flag=`ps -ef|grep sshd |grep -v grep`  
    if [ ${#sshd_flag} == 0 ]  
    then  
    /usr/sbin/sshd -D  
    fi  
    
  • 将 “/usr/bin/sshd_autorun.sh”添加到/etc/bashrc文件末尾
  • ssh server 启动应该会报错,需要修复以下
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key  
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key  
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key  
    

ssh免密登陆

  • 4个容器需要启动ssh-server
    ssh-kengen -t rsa #一路下一步  
    ssh-copy-id hdfs-master #自己需要给自己拷贝一份  
    ssh-copy-id hdfs-slave1 #docker可以自动将dockerName映射为ip  
    ssh-copy-id hdfs-slave2  
    ssh-copy-id hdfs-slave3  
    

添加环境变量

  • /etc/bashrc中添加如下,/hadoop/hadoop-3.3.1/为haddop解压路径
    export PATH=/hadoop/hadoop-3.3.1/bin:/hadoop/hadoop-3.3.1/sbin:$PATH  
    

hadoop配置

core-site.xml配置

  • 配置
    <configuration>  
        <property>  
            <name>fs.defaultFS</name>   #默认  
            <value>hdfs://hdfs-master:9000</value> #hdfs的api接口  
        </property>  
        <property>  
            <name>hadoop.tmp.dir</name> #hadoop运行时产生临时数据的存储目录  
            <value>/home/hadoop/apps/tmp</value> #该目录的地址  
        </property>  
    </configuration>  
    

hdfs-site.xml配置

  • vi /hadoop/hadoop-3.3.1/etc/hadoop/hdfs-site.xml
    <configuration>  
            <property>  
                    <name>dfs.namenode.secondary.http-address</name>  
                    <value>hdfs-master:50090</value>  
            </property>  
            <property>  
                    <name>dfs.replication</name> #设置副本个数  
                    <value>3</value>  
            </property>  
            <property>  
                    <name>dfs.namenode.name.dir</name> #设置namende数据存放点  
                    <value>/home/hadoop/apps/dfs/name</value>  
            </property>  
            <property>  
                    <name>dfs.datanode.data.dir</name> #设置datanode数据存放点  
                    <value>/home/hadoop/apps/dfs/data</value>  
            </property>  
    </configuration>  
    

mapred-site.xml配置

  • vi /hadoop/hadoop-3.3.1/etc/hadoop/mapred-site.xml
    <configuration>  
        <property>  
            <name>mapreduce.framwork.name</name>    #设置mapreduce的运行平台的名称  
            <value>yarn</value> #设置mapreduce的运行平台为yarn  
        </property>  
    </configuration>  
    

yarn-site.xml配置

  • vi /hadoop/hadoop-3.3.1/etc/hadoop/yarn-site.xml
    <configuration>  
        <property>  
            <name>yarn.resourcemanager.hostname</name> #指定yarn的老大的地址  
            <value>hdfs-master</value>  
        </property>  
        <property>  
            <name>yarn.nodemanager.aux-services</name>  #reducer获取数据的方式  
            <value>mapreduce_shuffle</value>   
        </property>  
    </configuration>  
    

workers配置

  • vi /hadoop/hadoop-3.3.1/etc/hadoop/workers
  • 添加
    hdfs-slave1  
    hdfs-slave2  
    hdfs-slave3  
    

hadoop-env.xml配置

  • vi /hadoop/hadoop-3.3.1/etc/hadoop/hadoop-env.sh
  • 添加root启动,配置JAVA_HOME
    export HDFS_DATANODE_USER=root                                                                                                          
    export HDFS_DATABODE_SECURE_USER=root                                                                                                   
    export HDFS_NAMENODE_USER=root                                                                                                          
    export HDFS_SECONDARYNAMENODE_USER=root                                                                                                 
    export YARN_RESOURCEMANAGER_USER=root                                                                                                   
    export YARN_NODEMANAGER_USER=root  
    export JAVA_HOME=/usr/local/jdk/jdk1.8.0_261  
    

从节点配置

  • 如下为全量复制,比较慢,可以采用解压缩包,然后值复制哦诶值文件的方法
    scp -r /hadoop/hadoop3.3.1 hdfs-slave1:/hadoop/  
    scp -r /hadoop/hadoop3.3.1 hdfs-slave2:/hadoop/  
    scp -r /hadoop/hadoop3.3.1 hdfs-slave3:/hadoop/  
    

hdfs的运行

  • 格式化hdfs
    hdfs namenode -format  
    
  • 启动hdfs
    s 
    
  • 停止hdfs
    stop-dfs.sh  
    
  • 在线监控
    http://hdfs-master:9870  
    #可以使用docker配置端口映射,直接用宿主机地址访问