笔记-hadoop本地模式、伪分布式、分布式的搭建

目录

hadoop运行环境搭建

VM虚拟机安装centos,Linux系统配置

安装Java和hadoop

JAVA安装

Hadoop安装

hadoop本地模式

本地模式grep案例

本地模式Wordcount案例

hadoop伪分布式搭建

启动HDFS并运行MapReduce程序

伪分布式下Wordcount案例

启动YARN并运行MapReduce程序

yarn下运行Wordcount

配置历史服务器

配置日志的聚集

 hadoop完全分布式

集群部署规划

SSH无密登录配置

xsync集群分发脚本

修改hadoop配置文件

核心配置文件

HDFS配置文件

YARN配置文件

MapReduce配置文件

通过xsync向集群分发配置好的Hadoop配置文件

启动集群

配置slaves

启动HDFS

启动YARN


hadoop运行环境搭建

VM虚拟机安装centos,Linux系统配置

  1. 网卡设置
    vim /etc/udev/rules.d/70-persistent-net.rules

    删除第一个网卡,将第二条eth1改为eth0,复制ATTR{address}物理地址

    修改前
    # PCI device 0x8086:0x100f (e1000)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:8b:4e:8b", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

    # PCI device 0x8086:0x100f (e1000)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:17:d4:e6", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

    修改后如下
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:17:d4:e6", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    复制ATTR{address}中的物理地址"00:0c:29:17:d4:e6",后面会用

  2. 设置静态IP,修改物理地址HWADDR,ONBOOT改成yes,BOOTPROTO改成static,添加ip地址,网关和dns

    vim /etc/sysconfig/network-scripts/ifcfg-eth0

    修改后内容
    DEVICE=eth0
    HWADDR=00:0c:29:17:d4:e6
    TYPE=Ethernet
    UUID=48f8d581-9014-4d85-b367-05f08b46875f
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static

    IPADDR=192.168.12.101
    GATEWAY=192.168.12.2
    DNS1=192.168.12.2

    HWADDR中的物理地址是/etc/udev/rules.d/70-persistent-net.rulesATTR{address}的数据

  3. 修改主机名,将主机名修改为hadoop101

    vim /etc/sysconfig/network

    修改为:
    NETWORKING=yes
    HOSTNAME=hadoop101

  4. 修改/etc/hosts文件

    vim /etc/hosts

    末尾添加
    192.168.12.101 hadoop101
    192.168.12.102 hadoop102
    192.168.12.103 hadoop103

    本地Windows系统hosts也添加相同信息

  5. 关闭防火墙

    service iptables stop

    设置开机时关闭防火墙

    chkconfig iptables off
  6. 添加用户并设置密码

    useradd liun
    passwd liun
  7. 给新创建用户root权限

    vim /etc/sudoers

    找到“root    ALL=(ALL)       ALL”,在下一行添加“liun    ALL=(ALL)       ALL”。

reboot命令重启系统

/opt创建两个文件夹module和software,software存放压缩包,module存放解压后文件

sudo mkdir /opt/module /opt/software

设置文件夹所属用户和组

sudo chown -R liun:liun /opt/module/ /opt/software/

安装Java和hadoop

      通过工具上传jdk和hadoop到software目录

JAVA安装

  1. jdk解压到module
    tar -zxvf /opt/software/jdk-8u144-linux-x64.tar.gz -C /opt/module/
  2. 配置java环境变量
    sudo vim /etc/profile

    末尾添加:
    ##JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    export PATH=$PATH:$JAVA_HOME/bin

  3. 使修改立即生效

    source /etc/profile

    java -version 查看是否配置成功

Hadoop安装

  1. 将上传的hadoop包解压到module目录下
    tar -zxvf /opt/software/hadoop-2.7.2.tar.gz -C /opt/module/
  2. 配置hadoop环境变量

    sudo vim /etc/profile

    末尾添加:
    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin

  3. 使修改立即生效

    source /etc/profile

hadoop本地模式


官方网站:https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SingleCluster.html

本地模式grep案例

hadoop目录下创建input目录

cd /opt/module/hadoop-2.7.2
mkdir input
cp etc/hadoop/*.xml input/
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input/ output 'dfs[a-z.]+'

查看输出数据

cat output/*

output输出数据
1    dfsadmin

本地模式Wordcount案例

创建wcinput目录

cd /opt/module/hadoop-2.7.2
mkdir wcinput

创建测试文本

cd wcinput
touch wc.input
vim wc.input

输入网上随意找的英文文章

Life is full of confusing and disordering Particular time,a particular location,Do the arranged thing of ten million time in the brain,Step by step ,the life is hard to avoid delicacy and stiffness No enthusiasm forever,No unexpected happening of surprising and pleasing So,only silently ask myself in mind Next happiness,when will come?

返回hadoop-2.7.2目录,测试Wordcount

cd ..
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput

查看输出数据

cat wcoutput/*

wcoutput部分输出数据
,the    1
Life    1
Next    1
No    1
Particular    1
So,only    1
and    3
官方examples的wordcount并没有过滤标点


hadoop伪分布式搭建

启动HDFS并运行MapReduce程序

  1. 配置:core-site.xml,在hadoop-2.7.2目录下
     vim etc/hadoop/core-site.xml

    添加

    <!-- 指定HDFS中NameNode的地址 -->
    <property>
    <name>fs.defaultFS</name>
        <value>hdfs://hadoop101:9000</value>
    </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
  2. 修改hadoop-env.sh,设置JAVA_HOME

    vim etc/hadoop/hadoop-env.sh

    可以用 echo $JAVA_HOME 查看JAVA_HOME
    修改为export JAVA_HOME=/opt/module/jdk1.8.0_144

  3. 配置:hdfs-site.xml,指定副本数为1(默认值为3)

    vim etc/hadoop/hdfs-site.xml

    添加

    <!-- 指定HDFS副本的数量 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
  4. 格式化NameNode(第一次启动时格式化)

    bin/hdfs namenode -format
  5. 启动namenode和datanode

    sbin/hadoop-daemon.sh start namenode
    sbin/hadoop-daemon.sh start datanode

    jps命令查看进程是否运行

    网页访问hadoop101:50070

伪分布式下Wordcount案例

hdfs创建/user/liun/input文件夹

bin/hdfs dfs -mkdir -p /user/liun/input

上传本地文件到hdfs

bin/hdfs dfs -put wcinput/wc.input /user/liun/input

可在hadoop101:50070网页Utilities ->Browse the file system->Browse Directory输入/user/liun/input查看到

执行Wordcount案例

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/liun/input /user/liun/output

查看执行结果

bin/hdfs dfs -cat /user/liun/output/*

启动YARN并运行MapReduce程序

配置YARN

  1. 配置yarn-env.sh
    vim etc/hadoop/yarn-env.sh

    配置一下JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144

  2. 配置yarn-site.xml

    vim 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>hadoop101</value>
    </property>

     

  3. 配置:mapred-env.sh

    vim etc/hadoop/mapred-env.sh

    配置JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144

  4. 配置:mapred-site.xml

    mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
    vim etc/hadoop/mapred-site.xml

    添加

    <!-- 指定MR运行在YARN上 -->
    <property>
    	<name>mapreduce.framework.name</name>
    	<value>yarn</value>
    </property>

     

启动集群

启动前必须保证NameNode和DataNode已经启动

启动resourcemanager和nodemanager

sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager

jps查看进程是否成功启动

网页输入hadoop101:8088

yarn下运行Wordcount

先删除hdfs上/user/liun/output目录

bin/hdfs dfs -rm -r /user/liun/output

 执行Wordcount

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/liun/input /user/liun/output

hadoop101:8088查看进度

配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

配置mapred-site.xml

vim etc/hadoop/mapred-site.xml

添加以下信息:

<!-- 历史服务器端地址 -->
<property>
	<name>mapreduce.jobhistory.address</name>
	<value>hadoop101:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
	<name>mapreduce.jobhistory.webapp.address</name>
	<value>hadoop101:19888</value>
</property>

启动历史服务器

sbin/mr-jobhistory-daemon.sh start historyserver

jps查看进程是否启动

hadoop101:19888/jobhistory查看JobHistory

配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。

sbin/mr-jobhistory-daemon.sh stop historyserver
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager

配置yarn-site.xml

vim etc/hadoop/yarn-site.xml

添加

<!-- 日志聚集功能使能 -->
<property>
	<name>yarn.log-aggregation-enable</name>
	<value>true</value>
</property>

<!-- 日志保留时间设置7天 -->
<property>
	<name>yarn.log-aggregation.retain-seconds</name>
	<value>604800</value>
</property>

重新启动NodeManager 、ResourceManager和HistoryManager

sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver

删除hdfs上/user/liun/output目录

bin/hdfs dfs -rm -r /user/liun/output

重新运行Wordcount案例

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/liun/input /user/liun/output

在JobHistory点击logs查看日志

 hadoop完全分布式

按照hadoop环境搭建步骤准备准备三台客户机hadoop101,hadoop102,hadoop103。直接克隆hadoop101,修改主机名和IP地址

集群部署规划

 hadoop101hadoop102hadoop103

HDFS

NameNode

DataNode

 

DataNode

SecondaryNameNode

DataNode
YARN

 

NodeManager

ResourceManager

NodeManager

 

NodeManager

NameNode,SecondaryNameNode和ResourceManager需要内存资源大,尽量避免在同一台机器
为了方便集群部署,编写集群分发脚本xsync,设置ssh免密登陆,方便集群通信。

SSH无密登录配置

  1. 生成公钥和私钥(hadoop101,liun用户)
    ssh-keygen -t rsa

    一直回车就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)。

  2. 将公钥拷贝到要免密登录的目标机器上

    ssh-copy-id hadoop101
    ssh-copy-id hadoop102
    ssh-copy-id hadoop103

    因为集群部署规划是NameNode在hadoop101,ResourceManager在hadoop102,所以:
    还需要在hadoop101上采用root账号,配置一下无密登录到hadoop101、hadoop102、hadoop103;
    还需要在hadoop102上采用liun账号配置一下无密登录到hadoop101、hadoop102、hadoop103服务器上。

xsync集群分发脚本

  1. 在/home/liun路径下新建文件夹bin,并在bin目录下xsync创建文件
    cd /home/liun
    mkdir bin
    cd bin
    touch xsync
    vim xsync
    说明:在/home/liun/bin这个目录下存放的脚本,liun用户可以在系统任何地方直接执行。
  2. 在该文件中编写如下代码
    #!/bin/bash
    #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 获取当前用户名称
    user=`whoami`
    
    #5 循环
    for((host=102; host<104; host++)); do
            echo ------------------- hadoop$host --------------
            rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
    done
  3. 修改脚本 xsync 权限

    chmod 777 xsync

分发/etc/profile和/opt/和 /opt/module/

xsync /etc/profile
xsync /opt/module/

 

修改hadoop配置文件

核心配置文件

配置core-site.xml,根据集群规划设置NameNode地址hadoop101节点

在该文件中编写如下配置

<!-- 指定HDFS中NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop101:9000</value>
</property>

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

HDFS配置文件

配置hadoop-env.sh(配置JAVA_HOME,在伪分布式时已经配置过)

配置hdfs-site.xml

增加如下配置,也可以直接删除dfs.replication,删除默认为3

<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>

<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop103:50090</value>
</property>

 

YARN配置文件

配置yarn-env.sh(配置JAVA_HOME,在伪分布式时已经配置过)

配置yarn-site.xml

增加如下配置,根据集群规划设置YARN的ResourceManager的地址hadoop102节点

<!-- Reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop102</value>
</property>

MapReduce配置文件

配置mapred-env.sh(配置JAVA_HOME,在伪分布式时已经配置过)

配置mapred-site.xml(指定MR运行在Yarn上,在伪分布式时已经配置过)

通过xsync向集群分发配置好的Hadoop配置文件

xsync /opt/module/hadoop-2.7.2/

格式化NameNode,格式化之前删除所有节点hadoop-2.7.2目录下的data和logs

rm -rf /opt/module/hadoop-2.7.2/data/ /opt/module/hadoop-2.7.2/logs/

所有节点删除后格式化NameNode

bin/hdfs namenode -format

启动集群

配置slaves

vim /opt/module/hadoop-2.7.2/etc/hadoop/slaves

添加

hadoop101
hadoop102
hadoop103

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

像所有节点分发slaves

xsync /opt/module/hadoop-2.7.2/etc/hadoop/slaves

如果集群是第一次启动,需要格式化NameNode

启动HDFS

NameNode配置在hadoop101节点,在hadoop101执行

sbin/start-dfs.sh

启动YARN

YARN的ResourceManager配置在hadoop102节点,在hadoop102执行

sbin/start-yarn.sh

jps查看各个节点进程是否启动


以上内容学习尚硅谷视频课程整理


2019-07-12

因为笔记本性能过低,准备了三台云服务器,部署完遇到的坑

NameNode无法启动

查看日志报错信息java.net.BindException: Problem binding to [hadoop101:9000] java.net.BindException:

删除了data和logs NameNode -format了好几次都不行

最后找的原因是云服务器公网ip不能用端口

解决办法:

hosts设置本机映射为私有网络ip,可以用ifconfig查看,其他节点映射用公网ip

NameNode 重新format

启动集群ok

云服务器8088端口访问不了

云服务器一定要设置好安全组规则,否则无法访问服务器端口

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值