在 ARM 环境下搭建原生 Hadoop 集群

2023年 8月 23日 90.2k 0

文章顶部.png

时光.png

一、X86 和 ARM

众所周知,当前 CPU 的主流系统架构分为 X86 架构和 ARM 架构。其中 X86 架构的所有权归属于 Intel 公司,而 ARM 架构则是开源的。

X86 架构的系统推出已经近 30 年,在这 30 年来互联网领域发展飞快,X86 架构也伴随着互联网的腾飞经过了高速发展的黄金时期,用户的应用、软件配套、软件开发等工具的配套和兼容都非常成熟,但由于 X86 架构的所有权问题,所有使用该架构的用户都需向 Intel 公司付费方可使用。

而开源的 ARM 架构在近年来尤为受到关注,面对当前日益复杂的国际环境以及基于 ARM 架构本身在功耗上的优异表现,国内外大量企业自研基于 ARM 架构的服务器芯片,越来越多的应用和软件配套也适配 ARM 架构。

二、Hadoop 集群搭建解决方案

CDH(Cloudra's Distribution Apache Of Hadoop)是 Apache Hadoop 和相关项目的最完整,经过测试和最流行的发行版。

CDH 是一个 WEB 操作平台,它集成了丰富的 Hadoop 生态,基于 CDH 版本的各种 Hadoop 框架和组件都能较为轻松并且高效的集成至 Hadoop 集群中。基于 CDH 的易用性和高效性,在 X86 架构下,绝大多数的公司和个人都会基于 CDH 进行大数据 Hadoop 集群的搭建与部署,但 CDH 本身并未提供基于 ARM 架构的版本,所以在当前火热的 ARM 架构和大数据发展下,如何在基于 ARM 架构的集群上搭建 Hadoop 集群是一个需要解决的问题。

当前基于 ARM 架构的 Hadoop 集群搭建有多种解决方案:

  • 重新编译适用于 ARM 架构的 CDH 源码,基于编译后的 CDH 进行整体 Hadoop 集群部署。
  • 基于 Hadoop 开源版本的各个框架和组件,自行搭建部署 Hadoop 集群。
  • 自研 Hadoop 管理平台,即类似于 CDH 的 WEB 操作平台,用于整体 Hadoop 集群部署。
  • 上述解决方案中,基于 Hadoop 开源版本的部署,会更加的贴近于 Hadoop 生态的蓬勃发展,并且能够更好地基于需求进行整个 Hadoop 集群的升级或优化。本文将介绍如何基于 Hadoop 开源版本完成一个大数据 Hadoop 集群的搭建。

    三、Hadoop 组件和本地安装

    得益于当前 ARM 架构的蓬勃发展,当前国内基于 ARM 架构投入研发的公司也越来越多,伴随着大家的研发与开源贡献,当前主流并且较为核心的 Hadoop 框架都已有支持 ARM 架构的版本。

    本文将介绍如何安装 Zookeeper、Hadoop、Hive 和 Spark 用于实现基于开源 Hadoop 框架的大数据集群搭建。

    3.1、配置免密和时钟同步

    Hadoop 集群内部通信,需设置各个机器互相免密登录,并且各机器之间应确保时钟同步。

    设置免密可通过修改 .ssh/authorized_keys 文件,设置 ssh 访问,在此不详细赘述。

    设置 NTP 时间同步是用于确保分布式集群的时间一致性,在此不详细赘述。

    模拟集群模式至少需要 3 台机器,默认以 node1,node2 和 node3 来指代,其中 node1 作为 master 节点。

    3.2、JAVA

    3.2.1 简介

    Java 是搭建 Hadoop 集群最基础的配置,当前业界使用较为主流的是 JAVA8 和 JAVA11,由于当前 Hadoop 开源框架主流版本依旧使用 JAVA8,故本文使用 JAVA8。

    3.2.2 解压并移动

    上传 JAVA 包至 /usr/local 目录下,本文使用的是 zulu-java8-aarch64 的包。

    tar -zxvf /usr/local/java8.tar.gz
    mv /usr/local/java8 /opt/java
    

    3.2.3 修改环境变量

    vim ~/.bashrc
    ​
    export JAVA_HOME=/opt/java
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:${JRE_HOME}/lib
    export PATH=$JAVA_HOME/bin:$PATH
    ​
    source ~/.bashrc
    

    3.2.4 验证

    java -version
    

    3.3 Zookeeper

    3.3.1 简介

    Zookeeper 是一个分布式、开源的分布式应用程序协调服务,Hadoop 集群的各个组件的通信都依赖于 Zookeeper,所以首先安装 Zookeeper。

    3.3.2 解压并移动

    上传 Zookeeper 包至 /usr/local 目录下,本文使用的是 zk-3.4.14 版本。

    tar -zxvf /usr/local/zookeeper.tar.gz
    mv /usr/local/zookeeper /opt/zookeeper
    

    3.3.3 修改 conf 下配置

    cd /opt/zookeeper/conf
    cp zoo_sample.cfg zoo.cfg
    vim zoo.cfg
    dataDir=/opt/zookeeper/data
    server.1=node1:2888:3888
    server.1=node1:2888:3888
    server.1=node1:2888:3888
    

    3.3.4 其他配置

    cd /opt/zookeeper
    mkdir data
    echo 1 > /opt/zookeeper/data/myid(node1 为 1,node2 为 2,node3 为 3)
    

    3.3.5 scp 至各机器并修改 myid

    scp -r /opt/zookeeper node2:/opt/zookeeper
    

    其他机器相同操作

    ssh node2
    echo 2 > /opt/zookeeper/data/myid
    

    3.3.6 添加环境变量

    export ZOOKEEPER_HOME=/opt/zookeeper/zookeeper-3.4.14
    export PATH=$ZOOKEEPER_HOME/bin:$PATH
    # 更新
    source ~/.bashrc
    

    3.3.7 启动

    cd /opt/zookeeper/bin
    ./zkServer.sh start
    

    3.3.8 查看状态

    jps
    有一个进程名为 QuorumPeerMain
    
    cd /opt/zookeeper/bin
    ./zkServer.sh status
    

    3.4、Hadoop

    3.4.1 简介

    Hadoop 生态其实最初起源于 Hadoop 这个框架,Hadoop 中包括分布式文件存储系统 HDFS(Hadoop Distributed File System)、集群管理系统 YARN(Yet Another Resource Negotiator)和计算框架 MR(MapReduce)。

    3.4.2 解压并移动

    上传 Hadoop 包至 /usr/local 目录下,本文使用的是 hadoop-3.3.5-arrch64 版本。

    tar -zxvf /usr/local/hadoop.tar.gz
    mv /usr/local/hadoop /opt/hadoop
    

    3.4.3 配置环境变量

    vim ~/.bashrc
    export HADOOP_HOME=/opt/hadoop/hadoop-3.3.5
    export HADOOP_USER_NAME=user
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    # 更新
    source ~/.bashrc
    

    3.4.4 验证环境变量

    cd /opt/hadoop/bin
    ./hadoop version
    

    3.4.5 修改 hadoop-env.sh 文件

    export JAVA_HOME=/opt/java
    # 修改启动用户为 root
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    export YARN_PROXYSERVER_USER=root
    

    3.4.6 配置 core-site.xml、hdfs-site.xml、yarn-site.xml 和 mapred-site.xml

    cd /opt/hadoop/etc/hadoop
    

    core-site.xml

    core-site.xml 文件中的主要是集群全局参数,用于定义系统级别的参数,如 HDFS 的 namenode 地址、Hadoop 临时目录等。

    
      
        
        fs.defaultFS
        hdfs://node1:8020
      
      
        fs.trash.interval
        1
      
      
        io.compression.codecs
        org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.DeflateCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.Lz4Codec
      
      
        hadoop.security.authentication
        simple
      
      
        hadoop.security.authorization
        false
      
      
        hadoop.rpc.protection
        authentication
      
      
        hadoop.security.auth_to_local
        DEFAULT
      
      
        hadoop.proxyuser.oozie.hosts
        *
      
      
        hadoop.proxyuser.oozie.groups
        *
      
      
        hadoop.proxyuser.flume.hosts
        *
      
      
        hadoop.proxyuser.flume.groups
        *
      
      
        hadoop.proxyuser.HTTP.hosts
        *
      
      
        hadoop.proxyuser.HTTP.groups
        *
      
      
        hadoop.proxyuser.hive.hosts
        *
      
      
        hadoop.proxyuser.hive.groups
        *
      
      
        hadoop.proxyuser.hue.hosts
        *
      
      
        hadoop.proxyuser.hue.groups
        *
      
      
        hadoop.proxyuser.httpfs.hosts
        *
      
      
        hadoop.proxyuser.httpfs.groups
        *
      
      
        hadoop.proxyuser.hdfs.groups
        *
      
      
        hadoop.proxyuser.hdfs.hosts
        *
      
      
        hadoop.proxyuser.yarn.hosts
        *
      
      
        hadoop.proxyuser.yarn.groups
        *
      
      
        hadoop.security.group.mapping
        org.apache.hadoop.security.ShellBasedUnixGroupsMapping
      
      
        hadoop.security.instrumentation.requires.admin
        false
      
      
        net.topology.script.file.name
        /etc/hadoop/conf.cloudera.yarn/topology.py
      
      
        io.file.buffer.size
        65536
      
      
        hadoop.ssl.enabled
        false
      
      
        hadoop.ssl.require.client.cert
        false
        true
      
      
        hadoop.ssl.keystores.factory.class
        org.apache.hadoop.security.ssl.FileBasedKeyStoresFactory
        true
      
      
        hadoop.ssl.server.conf
        ssl-server.xml
        true
      
      
        hadoop.ssl.client.conf
        ssl-client.xml
        true
      
    
    

    hdfs-site.xml

    hdfs-site.xml 文件是关于 HDFS 的配置信息,其中重点包括 namenode 节点地址、second namenode 节点地址、hdfs 的副本数和 block 块大小等。

    
      
      
        dfs.namenode.name.dir
        /opt/hadoop/hadoop-3.3.5/data/namenode
      
      
      
        dfs.namenode.servicerpc-address
        node1:8022
      
      
      
        dfs.namenode.secondary.http-address
        node2:8022
      
      
        dfs.https.address
        node1:9871
      
      
      
        dfs.datanode.data.dir
        /opt/hadoop/hadoop-3.3.5/data/datanode
      
      
        dfs.https.port
        9871
      
      
        dfs.namenode.http-address
        node1:9870
      
      
      
        dfs.replication
        3
      
      
      
        dfs.blocksize
        134217728
      
      
        dfs.client.use.datanode.hostname
        false
      
      
        fs.permissions.umask-mode
        022
      
      
        dfs.client.block.write.locateFollowingBlock.retries
        7
      
      
        dfs.namenode.acls.enabled
        false
      
      
        dfs.client.read.shortcircuit
        false
      
      
        dfs.domain.socket.path
        /var/run/hdfs-sockets/dn
      
      
        dfs.client.read.shortcircuit.skip.checksum
        false
      
      
        dfs.client.domain.socket.data.traffic
        false
      
      
        dfs.datanode.hdfs-blocks-metadata.enabled
        true
      
    
    

    yarn.site.xml

    yarn-site.xml 文件是 YARN 的配置文件信息,主要包括 resource manager 地址和 yarn 日志存放地址等。

    
       
        
            yarn.resourcemanager.hostname
            node1
        
        
            yarn.nodemanager.aux-services
            mapreduce_shuffle
        
       
        
            yarn.nodemanager.local-dirs
            file:///home/shaocx/.bigdata/hadoop/data/nm
        
        
        
            yarn.log.server.url
            http://node1:19888/jobhistory/logs/
        
        
            yarn.log-aggregation-enable
            true
        
        
            yarn.web-proxy.address
            node1:54321
        
        
            yarn.log-aggregation.retain-seconds
            -1
        
        
            yarn.nodemanager.remote-app-log-dir
            /logs
        
        
            yarn.nodemanager.pmem-check-enabled
            false
        
        
            yarn.nodemanager.vmem-check-enabled
            false
        
    
    

    mapred-site.xml

    mapred-site.xml 文件是 MapReduce 的参数配置文件,其中中的包括使用 yarn 进行 job 的调度管理、job 的历史文件存放位置等。

    
        
        
            mapreduce.framework.name
            yarn
        
        
            mapreduce.jobhistory.address
            node1:10020
        
        
            mapreduce.jobhistory.webapp.address
            node1:19888
        
        
            yarn.app.mapreduce.am.env
            HADOOP_MAPRED_HOME=/opt/hadoop/hadoop-3.3.5
        
        
            mapreduce.map.env
            HADOOP_MAPRED_HOME=/opt/hadoop/hadoop-3.3.5
        
        
            mapreduce.reduce.env
            HADOOP_MAPRED_HOME=/opt/hadoop/hadoop-3.3.5
        
        
            mapreduce.job.ubertask.enable
            true
        
    
    

    3.4.7 修改 workers 文件

    vim /opt/hadoop/etc/hadoop/workers
    
    node1
    node2
    node3
    

    3.4.8 scp 文件至各节点并配置

    scp -r /opt/hadoop node2:/opt/hadoop
    其他节点相同操作
    
    各节点设置环境变量
    vim ~/.bashrc
    

    3.4.9 初始化

    cd /opt/hadoop/bin
    ./hadoop namenode -format
    

    3.4.10 启动

    cd /opt/hadoop/sbin
    ./start-all.sh
    

    3.4.11 各节点状态查看

    Master

    jps
    
    Jps
    ResourceManager
    QuorumPeerMain
    NameNode
    NodeManager
    WebAppProxyServer
    DataNode
    

    Second Namenode

     jps
    
     SecondaryNameNode
     NodeManager
     Jps
     DataNode
     QuorumPeerMain
    

    Worker

    jps
    
    DataNode
    NodeManager
    Jps
    QuorumPeerMain
    

    3.5、Mysql

    3.5.1 简介

    Mysql 的安装是为了使用 Mysql 作为 Hive 的基础库。

    3.5.2 解压

    上传 Mysql 压缩包只 /usr/local 目录下,使用的是 mysql-5.7.27-aarch64 版本的包。

    tar -zxvf /usr/local/mysql-5.7.27-aarch64.tar.gz
    

    3.5.3 新建 log 文件夹

    mkdir -p /usr/local/mysql/logs
    

    3.5.4 赋权 mysql 账号可访问 mysql 文件夹

    chmod -R mysql:mysql /usr/local/mysql
    

    3.5.5 修改初始化启动免密登录

    cd /usr/local/mysql
    vim my.cnf
    [mysqld]下增加 skip-grant-tables
    

    3.5.6 初始化

    cd /usr/local/mysql/bin
    ./mysqld --initialize --console
    

    3.5.7 启动

    ./mysqld -start 
    

    3.6、Hive

    3.6.1 简介

    Hive 是基于 Hadoop 之上的一个分布式数据仓库工具,可能经常能够听到说数仓的数据存储与 Hive 中,这其实是不准确的。Hive 本质是让开发人员能够使用类 SQL 的 HiveQL 对存储于 HDFS 上的文件能够进行快速操作,Hive 会将 HiveQL 转化为在 YARN 上 运行的 MapReduce 任务从而实现读取或操作。

    3.6.2 解压并移动

    上传 Hive 包至 /usr/local 目录下,使用的是 hive-3.1.2 版本的包。

    tar -zxvf /usr/local/hive.tar.gz
    mv /usr/local/hive /opt/hive
    

    3.6.3 配置文件

    cd /opt/hive/conf
    cp hive-default.xml.template hive-site.xml
    vim hive-site.xml
    

    删除 hive-site.xml 第 3215 行的 "&8"。

    将 hive-site.xml 中 "system:" 替换为 "",如 {system:java.io.tmpdir} 替换为 {java.io.tmpdir}

    hive-site.xml 最后追加数据库连接信息

    
      
        javax.jdo.option.ConnectionUserName
        root
      
      
      
        javax.jdo.option.ConnectionPassword
        password
      
      
      
        javax.jdo.option.ConnectionURL
        jdbc:mysql://node1:3306/hive
      
    
      
        javax.jdo.option.ConnectionDriverName
        com.mysql.cj.jdbc.Driver
      
      
         hive.metastore.schema.verification
         false
      
    

    3.6.4 创建数据库

    在 Mysql 下创建 hive 库

    3.6.5 数据初始化

    上传 mysql-connector-java-8.0.15.jar 至 /opt/hive/lib 目录下

    cd /opt/hive/bin 
    ./schematool -dbType mysql -initSchema
    

    3.6.6 修改环境变量

    vim ~/.bashrc
    
    export HIVE_HOME=/opt/hive/apache-hive-3.1.2-bin
    export PATH=$PATH:$HIVE_HOME/bin:$PATH
    
    source ~/.bashrc
    

    3.6.7 验证

    查看 Mysql 下的 hive 库下是否新增 74 张表。

    启动 Hive

    cd /opt/hive/bin
    ./hive
    

    3.7 Spark

    3.7.1 简介

    Spark 是一个类似于 MapReduce 的分布式快速计算框架,用于解决 MapReduce 的查询效率问题,Spark 将中间的查询结果读取到内存中用于后续继续计算,大大提高了查询效率。

    3.7.2 解压并移动

    上传 Spark 包至 /usr/local 下,使用的是 spark-3.3.2-hadoop3-scala2.13 版本,从包名可以看出这是基于 Hadoop3 和 Scala2.13 版本的 Spark-3.3.2。

    tar -zxvf /usr/local/spark
    mv /usr/local/hive /opt/spark
    

    3.7.3 修改 spark-env 文件

    cd /opt/spark/conf
    cp spark-env.sh.template spark-env.sh
    vim spark-env.sh
    
    export JAVA_HOME=/opt/java
    export HADOOP_HOME=/opt/hadoop
    export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
    export HADOOP_LOG_DIR=/opt/hadoop/logs
    

    3.7.4 修改 spark-defaults.conf 文件

    cp spark-defaults.conf.template spark-defaults.conf
    vim spark-defaults.conf
    
    spark.master yarn
    spark.eventLog.enabled true
    spark.driver.memory 5g
    

    3.7.5 启动

    cd /opt/spark/bin
    ./spark-shell
    

    一段启动日志后,Spark 启动成功并进入操作控制台,可以执行增删改查命令。

    一个基于开源 Hadoop 框架的基础的大数据集群也就搭建完成了。

    推荐阅读

    利用流量保障搜索质量的实践

    Rc-form: 消失的“Ta”

    Redis Bigkey 排查

    Kubernetes Gateway API

    架构方法论

    招贤纳士

    政采云技术团队(Zero),Base 杭州,一个富有激情和技术匠心精神的成长型团队。规模 500 人左右,在日常业务开发之外,还分别在云原生、区块链、人工智能、低代码平台、中间件、大数据、物料体系、工程平台、性能体验、可视化等领域进行技术探索和实践,推动并落地了一系列的内部技术产品,持续探索技术的新边界。此外,团队还纷纷投身社区建设,目前已经是 google flutter、scikit-learn、Apache Dubbo、Apache Rocketmq、Apache Pulsar、CNCF Dapr、Apache DolphinScheduler、alibaba Seata 等众多优秀开源社区的贡献者。

    如果你想改变一直被事折腾,希望开始折腾事;如果你想改变一直被告诫需要多些想法,却无从破局;如果你想改变你有能力去做成那个结果,却不需要你;如果你想改变你想做成的事需要一个团队去支撑,但没你带人的位置;如果你想改变本来悟性不错,但总是有那一层窗户纸的模糊……如果你相信相信的力量,相信平凡人能成就非凡事,相信能遇到更好的自己。如果你希望参与到随着业务腾飞的过程,亲手推动一个有着深入的业务理解、完善的技术体系、技术创造价值、影响力外溢的技术团队的成长过程,我觉得我们该聊聊。任何时间,等着你写点什么,发给 zcy-tc@cai-inc.com

    微信公众号

    文章同步发布,政采云技术团队公众号,欢迎关注

    文章顶部.png

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论