Ubuntu18.04 配置 Hadoop 3.1.0 分布式集群

环境

操作系统 Ubuntu Server 18.04
Hadoop 版本: Hadoop 3.1.0

创建Hadoop用户设置SSH 免密登录

创建Hadoop账户

sudo useradd -m hadoop -s /bin/bash

设置密码

sudo passwd hadoop

增加管理员权限

sudo adduser hadoop sudo

更新系统

sudo apt-get update

安装SSH 配置SSH 免密登录

sudo apt-get install openssh-server
ssh localhost

首次登录会提示,输入Yes 按提示输入密码 就可以登录本机。
我们需要配置成免密登录。利用 ssh-keygen 生成密钥,并将密钥加入到授权中。

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

配置Java环境

下载安装包 上传到用户目录

创建目录作为JDK的安装目录,这里选择安装位置为:/usr/java/
解压文件带/usr/java/目录下,cd到文件下载的位置
修改jdk1.8.0_171为jdk。 方便配置jdk

sudo mkdir /usr/java
sudo tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/java/
sudo mv /usr/java/jdk1.8.0_171  /usr/java/jdk

配置环境变量

sudo vim /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin" 
export CLASSPATH=$JAVA_HOME/lib$JAVA_HOME/jre/lib 
export JAVA_HOME=/usr/java/jdk 
export JRE_HOME=${JAVA_HOME}/jre
sudo vim  /etc/profile
JAVA_HOME=/usr/java/jdk
export JRE_HOME=/usr/java/jdk/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

更新环境变量 查看Java是否安装成功

source /etc/environment
source /etc/profile
java -version

配置Hadoop

下载安装包 上传到用户目录

sudo tar -zxvf  /home/hadoop/hadoop-3.1.0.tar.gz -C /usr/local    # 解压到/usr/local中
sudo mv  /usr/local/hadoop-3.1.0/  /usr/local/hadoop            # 将文件夹名改为hadoop
sudo chown -R hadoop /usr/local/hadoop       # 修改文件权限
cd  /usr/local/hadoop  # 进入hadoop 安装目录
./bin/hadoop version #查看hadoop 版本

集群配置

为了方便配置建议关闭防火墙以及卸载iptables

sudo  ufw enable|disable
sudo apt-get remove iptables

修改Hosts文件

sudo vim /etc/hosts

172.16.111.233    hadoopmaster.quantilogic.com.cn
172.16.111.234    hadoopslave1.quantilogic.com.cn
172.16.111.235    hadoopslave2.quantilogic.com.cn

安装pdsh和ssh 确认master节点可以SSH免密登录到slave节点

#所有节点执行
sudo apt install ssh pdsh
sudo sh -c "echo ssh > /etc/pdsh/rcmd_default"

#master 主机执行
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoopmaster.quantilogic.com.cn
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoopslave1.quantilogic.com.cn
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoopslave2.quantilogic.com.cn

修改Hadoop 配置文件

配置文件路径 /usr/local/hadoop/etc/hadoop。修改完成以后上传到所有的hadoop节点

core-site.xml

<configuration>
  <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hadoopmaster.quantilogic.com.cn:9000</value>
  </property>
  <property>
   <name>hadoop.tmp.dir</name>
   <value>/usr/local/hadoop/tmp</value>
  </property>
</configuration>

hadoop-env.sh

修改Java_Home路径

export JAVA_HOME=/usr/java/jdk

hdfs-site.xml

设置Hdfs文件保存份数以及路径

<configuration>
<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>
<property>
  <name>dfs.name.dir</name>
  <value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
  <name>dfs.data.dir</name>
  <value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

workers

设置为slave节点的主机名

hadoopslave1.quantilogic.com.cn
hadoopslave2.quantilogic.com.cn

yarn-env.sh

增加java安装路径

export JAVA_HOME=/usr/java/jdk

yarn-site.xml

<configuration>
  <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>hadoopmaster.quantilogic.com.cn</value>
  </property>
  <property>
          <name>yarn.resourcemanager.webapp.address</name>
          <value>hadoopmaster.quantilogic.com.cn:8088</value>
  </property>
  <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
      <value>false</value>
  </property>
  <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
      <value>false</value>
  </property>
</configuration>

测试运行

在master 节点执行相关脚本进行Hadoop 测试。

初始化HDFS ,只需要执行一次。

/usr/local/hadoop/bin/hdfs namenode -format myClusterName # 初始化HDFS

启动HDFS和yarm

/usr/local/hadoop/sbin/start-dfs.sh  #启动HDFS   
/usr/local/hadoop/sbin/start-yarn.sh #  启动yarn

在三台主机上执行jps 查看运行情况。正常情况下显示如下
master节点

13905 ResourceManager
13669 SecondaryNameNode
17752 Jps
13374 NameNode

slave节点

41413 Jps
39432 NodeManager
39244 DataNode

在浏览器输入master节点 http://master:9870 和http://master:8088 查看节点运行情况。

在HDFS中创建用户目录

./bin/hdfs dfs -mkdir -p /user/hadoop

将 ./etc/hadoop 中的 xml 文件作为输入文件复制到HDFS中

./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input

运行MapReduce作业 将输出保存到output文件夹

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

将运行结果取回本地,也可以直接浏览器http://master:9870 中查看

rm -r ./output    # 先删除本地的 output 文件夹(如果存在)
./bin/hdfs dfs -get output ./output     # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*