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

sh 复制代码
[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时的权限问题

    sh 复制代码
    [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,

    sh 复制代码
    [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环境变量

    sh 复制代码
    [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环境变量

    sh 复制代码
    [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)

    补充如下内容

    html 复制代码
    [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>
    html 复制代码
    [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

    补充如下配置

    html 复制代码
    [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>
    html 复制代码
    [root@vm hadoop]# vim yarn-site.xml
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value> #计算方式
        </property>
  7. 执行NameNode格式化

    sh 复制代码
    [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所有组件

    sh 复制代码
    [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

    sh 复制代码
    [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操作

sh 复制代码
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,并写入如下内容

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

    python 复制代码
    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程序的两种方式

    sh 复制代码
    [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
    sh 复制代码
    [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
相关推荐
守城小轩5 分钟前
基于Chrome140的Quora账号自动化(关键词浏览)——运行脚本(三)
运维·自动化·chrome devtools·指纹浏览器·浏览器开发
未来之窗软件服务11 分钟前
幽冥大陆(五十五)ASR SetThreadInformation C语言识别到自动化软件
运维·自动化·asr·东方仙盟·操作系统级别错误
开开心心就好19 分钟前
免费卸载工具,可清理残留批量管理启动项
linux·运维·服务器·windows·随机森林·pdf·1024程序员节
Lbwnb丶29 分钟前
检测服务器是否是虚拟化,如KVM,VM等
linux·运维·服务器
老猿讲编程34 分钟前
【车载信息安全系列4】基于Linux中UIO的HSE应用实现
linux·运维·服务器
鸡吃丸子44 分钟前
初识Docker
运维·前端·docker·容器
wanhengidc1 小时前
巨椰 云手机 云游戏稳定运行
运维·服务器·arm开发·游戏·云计算
林义满1 小时前
大促零宕机背后的运维升级:长三角中小跨境电商的架构优化实践
大数据·运维·架构
linweidong2 小时前
顺丰运维面试题及参考答案
运维·nginx·容器·ansible·运维开发·防火墙·python面试
qq_455760852 小时前
docker run
运维·docker·容器