02hadoop伪分布式搭建

3. 环境安装

3.1 安装方式

  • 单机模式

    只能启动MapReduce

  • 伪分布式

    能启动HDFS、MapReduce 和 YARN的大部分功能

  • 完全分布式

    能启动Hadoop的所有功能

3.2 安装JDK

3.2.1 JDK安装步骤

下载JDK安装包(下载Linux系统的 .tar.gz 的安装包)

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

[root@vm ~]# tar -xf jdk-8u251-linux-x64.tar.gz -C /usr/local/
[root@vm ~]# cd /usr/local/
[root@vm local]# mv jdk1.8.0_251/ jdk8
[root@vm local]# cd
[root@vm ~]# vim .bashrc
...
export JAVA_HOME=/usr/local/jdk8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=.:$JAVA_HOME/bin:$PATH

[root@vm ~]# source .bashrc
[root@vm ~]# java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

3.3 安装Hadoop并配置伪分布式

3.3.1 Hadoop安装配置步骤
  1. 配置免登录认证,避免使用Hadoop时的权限问题

    [root@vm ~]# ssh-keygen -t rsa
    [root@vm ~]# cd ~/.ssh;cat id_rsa.pub >> authorized_keys
    [root@vm .ssh]# ssh localhost
    [root@vm ~]# exit
    

    下载Hadoop 2.10(374M)

    https://archive.apache.org/dist/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz

  2. 解压到 /usr/local 目录中,并将文件夹重命名为 hadoop,

    [root@vm ~]# tar xf hadoop-2.10.0.tar.gz -C /usr/local/
    [root@vm ~]# cd /usr/local
    [root@vm local]# mv hadoop-2.10.0/ hadoop2.10
    #非root用户可能需要执行 chown -R user:user  hadoop2.10
    [root@vm local]# cd /usr/local/hadoop2.10/bin
    [root@vm bin]# ./hadoop version
    Hadoop 2.10.0
    Subversion ssh://git.corp.linkedin.com:29418/hadoop/hadoop.git -r e2f1f118e465e787d8567dfa6e2f3b72a0eb9194
    Compiled by jhung on 2019-10-22T19:10Z
    Compiled with protoc 2.5.0
    From source with checksum 7b2d8877c5ce8c9a2cca5c7e81aa4026
    This command was run using /usr/local/hadoop2.10/share/hadoop/common/hadoop-common-2.10.0.jar
    
  3. 设置JAVE_HOME环境变量

    [root@vm bin]# vim  /usr/local/hadoop2.10/etc/hadoop/hadoop-env.sh
    export JAVA_HOME=/usr/local/jdk8 #修改前JAVA_HOME=${JAVA_HOME}
    
  4. 设置Hadoop环境变量

    [root@vm bin]# cd
    [root@vm ~]# vim .bashrc
    #在末尾追加
    export HADOOP_HOME=/usr/local/hadoop2.10
    export CLASSPATH=.:{JAVA_HOME}/lib:${HADOOP_HOME}/sbin:$PATH
    export PATH=.:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
    
    [root@vm ~]# source .bashrc
    
  5. 伪分布式配置,修改2个配置文件(core-site.xml 和 hdfs-site.xml)

    补充如下内容

    [root@vm ~]# vim /usr/local/hadoop2.10/etc/hadoop/core-site.xml
    <configuration>
        <property>
            <!--数据目录配置参数-->
            <name>hadoop.tmp.dir</name>
            <value>file:/usr/local/hadoop2.10/tmp</value>
        </property>
        <property>
            <!--文件系统配置参数-->
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>
    
    [root@vm ~]# vim /usr/local/hadoop2.10/etc/hadoop/hdfs-site.xml
    <configuration>
        <property>
            <!--副本数量-->
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <!--namenode数据目录-->
            <name>dfs.namenode.name.dir</name>
            <value>file:/usr/local/hadoop2.10/tmp/dfs/name</value>
        </property>
        <property>
            <!--datanode数据目录-->
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/hadoop2.10/tmp/dfs/data</value>
        </property>
    </configuration>
    
    
    #/usr/local/hadoop2.10/tmp/dfs/name/current/VERSION记录clusterid,与 /usr/local/hadoop2.10/tmp/dfs/data/current/VERSION记录clusterid 必须是相同的,否则启动失败
    
  6. 配置YARN,修改mapred-site.xml、yarn-site.xml

    补充如下配置

    [root@vm ~]# cd /usr/local/hadoop2.10/etc/hadoop
    [root@vm hadoop]# cp mapred-site.xml.template mapred-site.xml
    [root@vm hadoop]# vim mapred-site.xml
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    
    [root@vm hadoop]# vim yarn-site.xml
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value> #计算方式
        </property>
    
  7. 执行NameNode格式化

    [root@vm hadoop]# cd /usr/local/hadoop2.10/bin
    [root@vm bin]# ./hdfs namenode -format
    
    出现 Storage directory /usr/local/hadoop2.10/tmp/dfs/name has been successfully formatted 则表示格式化成功
    
  8. 启动Hadoop所有组件

    [root@vm bin]# cd /usr/local/hadoop2.10/sbin
    [root@vm sbin]# ./start-all.sh
    启动时可能会出现警告,直接忽略即可,不影响正常使用
    [root@vm sbin]# jps #查看Hadoop相关组件进程
    14513 DataNode
    14882 NodeManager
    14643 SecondaryNameNode
    14789 ResourceManager
    14425 NameNode
    14921 Jps
    

启动成功后,可访问Web页面查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件 http://localhost:50070

  1. 测试 - 将本地文件上传至hdfs

    [root@vm ~]# hadoop fs -put jdk-8u251-linux-x64.tar.gz /
    [root@vm ~]# hadoop fs -ls /
    Found 1 items
    -rw-r--r--   1 root supergroup  195132576 2024-03-10  /jdk-8u251-linux-x64.tar.gz
    #也可以在浏览器中Utilities->Browse the file system查看,及上传下载删除操作
    

4. HDFS Shell操作

hadoop fs -ls / 	#查看HDFS系统目录
hadoop fs -mkdir -p 绝对路径		#创建文件夹
hadoop fs -put    本地文件     HDFS目录		#上传文件
hadoop fs  -get   HDFS文件    本地目录		#下载文件
hadoop fs -rm -r 目录		#删除文件或目录
haddop fs -text 文件绝对路径		#查看文件内容
hadoop fs -mv 源文件 目标目录
hadoop fs -cp 源文件  目标目录

5. MapReduce详解

5.1 MapReduce概述

5.1.1 MapReduce定义
  1. MapReduce是Hadoop提供的一套进行分布式计算的框架,用于大规模数据集(大于1TB)的并行运算
  2. MapReduce将计算过程拆分为2个阶段:Map(映射)阶段和Reduce(规约)阶段
5.1.2 MapReduce编程模型
  • MapReduce分而治之思想

    【示例1】
        需要在一堆扑克牌(张数未知)中统计四种花色的牌有多少张
        思路:需要找几个人(比如说四个人),每人给一堆,数出来四种花色的张数,然后汇总
        
    【示例2】
        一堆钞票,请查找出各种面值的钞票分别有多少张?
        思路:每个人分一部分钞票,数出各种面值的分别有多少张,然后再汇总
    
  • 统计文件中每个单词出现的次数原理图
    在这里插入图片描述

5.2 MapReduce编程实现

5.2.1 相关库安装
sudo pip3 install mrjob
5.2.2 Python实现wordcount案例(了解)
  1. 新建words.txt,并写入如下内容

    hello world
    hello tarena
    I am world and tarena
    I love tarena world
    
  2. python代码实现wordcount

    from mrjob.job import MRJob
    
    class WordCount(MRJob):
    #重写mapper   reducer  方法 完成自己的需求, hive可以实现sql转方法的实现
    
        def mapper(self, _, line):
        #def mapper(self, key, line):
            # _: key,每行行首的偏移量,一般不使用,这里写成_
            # line: 每行的内容
            
            #重写功能
            for word in line.split():
                yield word, 1
    
        # shuffle 和 sort 过程不用关注,hadoop自动去做,看不到
        # hi 1 1
        # hello 1 1 1 1
        # world 1
    
        def reducer(self, key, values):
            # key: map shuffle和sort之后的单词
            # values: 每个单词出现次数的序列
            yield key, sum(values)
    
    if __name__ == '__main__':
        WordCount.run()
    
  3. 运行MapReduce程序的两种方式

    [1]本地模式(一次启动多个进程)
        python3 wordCount.py -r local word.txt #本地运行-r local,不会排序
        
    [2]Hadoop模式 (比较消耗内存)
        python3 wordCount.py -r hadoop word.txt	#会排序
        
    "I"     2
    "am"    1
    "and"   1
    "hello" 2
    "love"  1
    "tarena"        3
    "world" 3
    
    [1]本地模式(一次启动多个进程)
        python3 wordCount.py -r local word.txt #本地运行-r local,不会排序
        
    [2]Hadoop模式 (比较消耗内存)
        python3 wordCount.py -r hadoop word.txt	#会排序
        
    "I"     2
    "am"    1
    "and"   1
    "hello" 2
    "love"  1
    "tarena"        3
    "world" 3
    
  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值