Hadoop2.x配置-Ubuntu18.04-Vm虚拟机


边学边写,持续更新中
配合目录用


启动进程

启动CODE
Namenodesbin/hadoop-daemon.sh start namenode
Damenodesbin/hadoop-daemon.sh start datanode
ResourceManagersbin/yarn-daemon.sh start resourcemanager
NodeManagersbin/yarn-daemon.sh start nodemanager
历史服务器sbin/mr-jobhistory-daemon.sh start historyserver
启动start-dfs.sh
启动start-yarn.sh


hdfs删除命令
bin/hdfs dfs -rm -r


虚拟机准备

博主用的是VM软件操作,以下步骤根据自己要求适当性安装

1. 安装VM Tool

为了方便虚拟机和电脑之间的复制粘贴

  1. 在菜单栏,点 虚拟机 ,点 安装Vmware Tool
  2. 打开桌面上的VM Tool文件,把后缀为 gz的文件复制,打开桌面左边栏的 文件,新建一个文件夹,把刚才拷贝的文件粘贴
    在这里插入图片描述
  3. 打开终端,找到文件解压
    tar -zxvf VMwareTools-10.3.2-9925305.tar.gz
  4. 进入到 vmware-tools-distrib 中,执行 ./vmware-install.pl,期间一直敲回车
  5. 设置共享文件夹,解决拖动文件卡死问题
  6. /mnt/hgfs/share
 1. 将Ubuntu关机(power off),否则不能添加共享文件夹
 2. 在VMware虚拟机窗口,选择虚拟机->设置->选项->共享文件夹
 3. 点右边的“添加”,点“下一步”->选择事先创建好的共享目录的路径,然后点“下一步”->选中 启动共享->完成
 4. 在窗口的右边,选择“总是启用”
 5. 点 确定 退出

2. 换源

这里是18.04版本的源

  1. 进入管理员模式,sudo -i
  2. cd ..退到根目录,vi /etc/apt/sources.list
按dd(长按)
按i
鼠标右键-粘贴下面的源
按Esc
:wq 退出保存
# 清华源 首推,还要阿里源 中科大源 可自行百度
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
  1. 执行下面代码更新
    apt-get update
    apt-get upgrade

3. 安装相应软件

  1. 安装vim apt install vim
  2. 安装ssh apt-get install ssh
  3. 安装rsync apt-get install rsync


4. 安装Jdk和Hadoop

  1. 解压 tar -zxvf ******
  2. 配置环境变量 vim /etc/profile
    输入相应的环境变量
## JAVA_HOME
export JAVA_HOME=/opt/jdk1.8.0_144
## 路径不唯一  可以进入jkd  然后用pwd看路径
export PATH=$PATH:$JAVA_HOME/bin
## HADOOP
export HADOOP_HOME=/opt/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
  1. 更新 source /etc/profile

5. grep案例

  1. 进入Hadoop目录下,创建一个文件
    mkdir input
  2. 复制文件
    cp etc/hadoop/*.xml input
  3. 运行grep
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
  4. 查看结果
    cat output/*

6. wordcount案例

  1. 在hadoop路径下创建一个wcinput文件夹 mkdir wcinput,然后创建 touch wc.input
  2. 编辑wc.input vim wc.input 在里面随便输点什么,保存退出
  3. 在/opt/Hadoop-2.7.2目录下执行 wordcount
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
  4. 看运行结果
    cat wcoutput/part-r-00000


伪分布式案例

1. HDFS

1. 配置文件

  1. 配置core-site.xml,进入 /opt/hadoop-2.7.2/etc/hadoop 目录下,vim core-site.xml
  2. 在两个 <configuration> 中间写入一下代码,保存退出
<!--指定HDFS中NameNode的地址-->
<property> 
	<name>fs.defaultFS</name>
	<value>hdfs://localhost:9000</value> 
</property>

<!--指定Hadoop运行时产生文件的存储路径-->
<property> 
	<name>hadoop.tmp.dir</name>
	<value>/opt/hadoop-2.7.2/data/tmp</value> 
</property>
  1. 配置hadoop-env.sh,vim hadoop-env.sh,写入JAVA_HOME,用 echo $JAVA_HOME 看java路径。如图
    在这里插入图片描述
  2. 配置hdfs-site.xml,vim hdfs-site.xml ,写入以下代码
<!--指定HDFS副本数量-->
<property> 
	<name>dfs.replication</name>
	<value>1</value> 
</property>

2. 启动集群

  1. 格式化NameNode
    bin/hdfs namenode -format
  2. 启动NameNode
    sbin/hadoop-daemon.sh start namenode
  3. 启动DataNode
    sbin/hadoop-daemon.sh start datanode
  4. 查看启动情况 jps 或者是 在虚拟机里的网页打开 localhost:50070 或者是浏览器打开网页 虚拟机ip:50070

3. 测试

  1. 创建文件 ,结果如图
    bin/hdfs dfs -mkdir -p /user/root/input
    在这里插入图片描述
  2. 上传文件,这里是之前的那个wordcount案例的文件。刷新网页即看到文件
    bin/hdfs dfs -put wcinput/wc.input /user/root/input
    在这里插入图片描述
  3. 执行hdfs上的文件,output不能事先创建。结果如图
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/root/input /user/root/output
    在这里插入图片描述
  4. 在本地看hdfs的结果
    bin/hdfs dfs -cat /user/root/output/p*


2. YARN

1. 配置

  1. 配置yarn-env.sh ,删除export之前的 # ,更改JAVA_HOME vim yarn-env.sh ,如图
  2. 配置yarn-site.xml,vim yarn-site.xml ,地址可以写自己的主机名或者是localhost
<!--Reducer获取数据的方式-->
<property> 
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value> 
</property>

<!--指定Yarn的ResourceManager的地址-->
<property> 
	<name>yarn.resourcemanager.hostname</name>
	<value>localhost</value> 
</property>
  1. 配置mapred-env.sh,更改JAVA_HOME,vim mapred-env.sh ,如图
    在这里插入图片描述
  2. 配置mapred-site.xml,先将mapred-site.xml.template重命名为mapred-site.xml
    cp mapred-site.xml.template mapred-site.xml
    然后再 vim mapred-site.xml ,加入以下代码
<!--指定MR运行在Yarn上-->
<property> 
	<name>mapreduce.framework.name</name>
	<value>yarn</value>  
</property>

2. 启动

  1. 启动集群,启动之前保证namenode和datanode已启动,用 jps 看。
    要在/opt//hadoop-2.7.2目录下启动
    启动ResourceManager
    sbin/yarn-daemon.sh start resourcemanager
    启动NodeManager
    sbin/yarn-daemon.sh start nodemanager
    localhost:8088 网址看是否启动成功,如图
    在这里插入图片描述
  2. 测试 运行wordcount案例
    删除output
    hdfs dfs -rm -r /user/root/output
    运行wordcount
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/root/input /user/root/output
    Yarn上看进度
    在这里插入图片描述


3. 配置历史服务器

1. 配置

配置mapred-site.xml vim mapred-site.xml
hostname 看主机名
ipconfig 看ip

<!--历史服务器端地址-->
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>虚拟机主机名:10020</value>
</property>

<!--历史服务器Web端地址-->
<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>虚拟机IP:19888</value>
</property>

2. 启动

启动
sbin/mr-jobhistory-daemon.sh start historyserver
用 jps 看,或者网址http://上面的IP:19888/jobhistory
测试
用wordcount案例测试,注意先删掉outout

4. 日志聚合

  1. 配置配置yarn-site.xml vim yarn-site.xml 加入以下代码
<!--日志聚合功能使能-->
<property> 
	<name>yarn.log-aggregation-enable</name>
	<value>true</value> 
</property>

<!--日志保留时间设置为七天-->
<property> 
	<name>yarn.log-aggregation.retain-seconds</name>
	<value>604800</value> 
</property>
  1. 关闭NodeManager、ResourceManager、HistoryManager
sbin/mr-jobhistory-daemon.sh stop historyserver
sbin/yarn-daemon.sh stop nodemanager
sbin/yarn-daemon.sh stop resourcemanager
  1. 重启NodeManager、ResourceManager、HistoryManager
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver
  1. 再次运行wordcount案例去看聚合后的日志

完全分布式

1.环境准备

1. 主机名 IP 防火墙

  • 主机名
  1. 安装软件包
    apt-get install cloud-init
  2. 修改/etc/cloud/cloud.cfg
    vim /etc/cloud/cloud.cfg
    找到preserve_hostname: false修改为preserve_hostname: true
  3. 修改主机名(永久)
    vim /etc/hostname
    #映射主机名
    vim /etc/hosts
  • 静态IP
  1. 打开Vm状态栏的编辑,点 虚拟网络编辑器 ,点第三个NAT模式,点 NAT设置,记住网关地址
  2. 打开终端,查IP ifconfig 记住ip 。若提示未安装net,按提示安装
  3. 设置静态ip vim /etc/netplan/01-network-manager-all.yaml,注意这里不一定是01,去netplan目录下看再进入配置
# Let NetworkManager manage all devices on this system
network:
  version: 2  
  renderer: networkd
  ethernets:
     enp33: #配置的网卡名称,使用ifconfig -a查看得到 注意这里的enp33是博主的
       addresses: [ip地址/24] #设置本机IP及掩码
       gateway4: 网关地址 #设置网关
       nameservers:
         addresses: [刚才记的网关地址] # DNS
  1. 让设置生效 netplan apply
  2. 配置host vim /etc/hosts 如图
    在这里插入图片描述
  • 关闭防火墙
    查看当前防火墙状态 ufw status
    关闭防火墙 ufw disable

完成三步操作后,重启

2. 配置环境(ssh免密)

  • SSH配置及免密配置
  1. 进入root用户,安装ssh,apt-get install ssh,用ssh localhost 检测
  2. 重置root用户的密码,passwd root,可以输入登录root时的密码。为了解决permission denied,please try again问题!!!
  3. 允许以 root 用户通过 ssh 登录:vi /etc/ssh/sshd_config,找到 PermitRootLogin prohibit-password ,取消注释,并改为 PermitRootLogin yes。然后重启ssh,service ssh restart
  4. SSH免密登录设置:ssh-keygen -t rsa 生成公钥和私钥,连续敲三个回车。分发给自己和其他两个虚拟机,ssh-copy-id hadoop1 ssh-copy-id hadoop2 ssh-copy-id hadoop3,过程中输入yes和对应的密码
  5. ping一下看连接上了吗 ping -c 1 主机名
  • jdk和hadoop
  1. 把jdk和hadoop拷贝到其他两台虚拟机
    scp -r /opt root@主机名:/opt 我这里的opt目录下有jdk和Hadoop的安装包,这个命令是把opt目录下所有文件递归的复制过去。这里需要输入另一台虚拟机root密码
  2. 分别拷贝完。然后就解压,配置环境变量。见上面的步骤
    另外的方法是:在一台主机上解压和配置完,然后scp到其他虚拟机上,环境变量的是scp -r /etc/profile root@主机名:/etc/profile

2. 集群配置

1. 集群分发脚本

  • xsync
  1. cd /usr/local/bin
  2. touch xsync
  3. vim xsync 粘贴以下代码
#!/bin/bash

if [[ ! -x $(command -v rsync) ]]; then
  echo no rsync found!
  exit 1
fi

#1 获取输入参数的个数;如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
  echo no args!
  exit
fi

#2 获取文件名称
p1=$1
fname=$(basename $p1)
echo fname=$fname

#3 获取文件绝对路径
pdir=$(cd -P $(dirname $p1); pwd)
echo pdir=$pdir

#4 获取当前用户名称
usr=$(whoami)

#5 循环体
for ((host=2; host<4; host++)); do
  echo ---hadoop${host}---
  rsync -rvl $pdir/$fname ${usr}@hadoop${host}:${pdir}
done
  1. chmod +x xsync 赋予权限

2. 集群配置

记住这张图
在这里插入图片描述

  1. 配置core-site.xml
    vim /opt/hadoop-2.7.2/etc/hadoop core-site.xml
<!--指定HDFS中NameNode的地址-->
<property> 
	<name>fs.defaultFS</name>
	<value>hdfs://hadoop1:9000</value> 
</property>

<!--指定Hadoop运行时产生文件的存储路径-->
<property> 
	<name>hadoop.tmp.dir</name>
	<value>/opt/hadoop-2.7.2/data/tmp</value> 
</property>

注意这里的主机名,和上图对应

  1. 配置hadoop-env.sh
    同伪分布操作,见上文
  2. 配置hdfs-site.xml
    vim /opt/hadoop-2.7.2/etc/hadoop hdfs-site.xml
<!--指定HDFS副本数量-->
<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>
<!--指定Hadoop Secondary NameNode配置-->
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop3:50090</value>
</property>
  1. 配置 yarn-env.sh 环境变量
    vim /opt/hadoop-2.7.2/etc/hadoop yarn-env.sh 见上文
  2. 配置 yarn-site-xml
    vim /opt/hadoop-2.7.2/etc/hadoop yarn-site-xml
<!--Reducer获取数据的方式-->
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<!--指定Yarn的ResourceManager的地址-->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>hadoop2</value>
</property>
<!--防止主机名进不去-->
<property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>hadoop2的ip:8088</value>
</property>
  1. 配置mapred-env.sh 环境变量
    vim /opt/hadoop-2.7.2/etc/hadoop mapred-env.sh 见上文
  2. 配置mapred-site.xml
    vim opt/hadoop-2.7.2/etc/hadoop mapred-site.xml
<!--指定MR运行在Yarn上-->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
  1. 配置历史服务器 mapred-site.xml
    放在第一台主机,IP和主机名都填第一台的
<!--历史服务器端地址-->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop1:10020</value>
</property>
<!--历史服务器Web端地址-->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop1的IP:19888</value>
</property>
  1. 日志聚合 yarn-site.xml
    详情见伪分布式日志聚合
<!--日志聚合功能使能-->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!--日志聚合功能使能-->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
  1. 分发配置
    xsync /opt/hadoop-2.7.2/etc/hadoop
    然后去另一台虚拟机检查是否分发成功

3. 群启与测试

1. 群启

  1. 配置slaves
    vim ${HADOOP_HOME}/etc/hadoop/slaves
    写入三台主机名,不能多余的空格回车 如图
    在这里插入图片描述
  2. 分发slaves
    xsync salves 去其他虚拟机看一下分发成功了吗
  3. 群起集群
    先格式化Namenode,见上文
    /opt/hadoop-2.7.2 目录下
    在规划的NameNode(hadoop1)上执行:
    sbin/start-dfs.sh
    sbin/stop-dfs.sh
    在规划的ResourceManager(hadoop2)上执行:
    sbin/start-yarn.sh
    sbin/stop-yarn.sh
    启动历史服务器 (hadoop1)
    sbin/mr-jobhistory-daemon.sh start historyserver
    在每个虚拟机上用 jps 查看启动结果

2. 测试

  1. 上传文件
    创建存储路径
    hdfs dfs -mkdir -p /usr/root/input
    上传小文件
    hdfs dfs -put wcinput/wc.input /user/root/input
    上传大文件
    hdfs dfs -put /opt/hadoop-2.7.2.tar.gz /user/root/input
  2. 上传之后,文件还是保存在本地的,可以在本地查看,然后拼接解压
  3. 测试wordcount案例
    略,见上文


4. 时间同步

同步阿里服务器的时间
apt install ntpdate
ntpdate ntp4.aliyun.com

每一个服务器都设置一下

勿看,没写完

  1. 安装ntp apt install ntp
  2. 进入修改配置 vim /etc/ntp.conf
    修改1,授权本网段所有主机可以从这台服务器上查询和同步时间,改为自己的网段,如图 网段就是IP的前三段
    在这里插入图片描述
    修改2,集群在局域网中,不使用其它互联网上的时间。注释掉与网络的连接,注释如图所示的白色代码部分
    在这里插入图片描述
    修改3,当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其它节点提供时间同步。在最后加入以下代码
    保存退出后重启ntp
server 127.127.1.0
fudge 127.127.1.0 stratum10
  1. ntp 相关设置
    查看ntp状态 service ntp status或者是 watch "ntpq -p"
    启动ntp service ntp start
    重启ntp service ntp restart

  2. 创建例行性命令,10分钟与时间服务器同步一次
    创建/etc/cron.d/ntpupdate.cron文件
    ``


常见问题

  1. namenode启动后消失;namenode启动不了
     方法一:查看core-site-xml 中的主机名,伪分布是localhost
     方法二:格式化不干净,先停止namenode和datanode进程,然后删掉 opt 目录下的data文件和logs文件,再格式化namenode,再启动
  2. 虚拟机启动黑屏
    解决方案:
    1.运行cmd,执行 netsh winsock reset,重启电脑
    2.设备-显示器-加速3D图形取消对勾
    3.编辑-首选项-设备-虚拟打印机,选择启动虚拟打印机,重启电脑
    能挂起就别关机

idea会省略细节,能不用就不用。避免更换开发环境不会写代码

端口
8088 mapreduce
50070 hdfs

ifconfig 看ip

NAMETIPSTIPS
清屏Ctrl + lclear
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tancy.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值