• Hadoop-Hive-Spark-离线环境搭建


    一、版本描述

    apache-hive-2.3.9-bin.tar.gz

    hadoop-2.7.0.tar.gz

    spark-2.4.0-bin-hadoop2.7.tgz

    下载链接:

    https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz

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

    https://dlcdn.apache.org/hive/hive-2.3.9/apache-hive-2.3.9-bin.tar.gz

    https://archive.apache.org/dist/hadoop/zookeeper/zookeeper-3.3.2/zookeeper-3.3.2.tar.gz

     二、创建安装用户

    各个节点都需要执行

    useradd hhs

    passwd hhs

    Apache_20240416

     三、配置域名映射

    各个节点都需要执行

    vi /etc/hosts

    ip1 hostname1

    ip2 hostname2

    ......

    ipn hostnamen

    四、配置无密钥登录

    每个节点切换到 hhs 用户生成密钥

    su - hhs

    ssh-keygen -t rsa

    输入命令后全部回车

    执行命令后会在~目录下生成.ssh文件夹,里面包含id_rsa和id_rsa.pub两个文件

    cd .ssh

    cp id_rsa.pub authorized_keys

    依次将authorized_keys 复制到其他节点并把该节点的id_rsa.pub 添加到 authorized_keys

    再将包含所有节点的 authorized_keys 放到每个节点的 /home/hhs/.ssh 下

    scp authorized_keys hhs@目标hostname:/home/hhs/.ssh

    五、关闭防火墙

    各个节点使用root用户执行

    systemctl status firewalld

    systemctl stop firewalld

    六、关闭selinux

    各个节点使用root用户执行

    cat /etc/selinux/config

    vi /etc/selinux/config

    SELINUX=enforcing 改为 SELINUX=disabled

    七、调整操作系统最大数限制

    各个节点使用root用户执行(重启生效)

    vi /etc/security/limits.conf

    * soft nofile 65535
    * hard nofile 1024999
    * soft nproc 65535
    * hard noroc 65535
    * soft memlock unlimited
    * hard memlock unlimited

    如果不修改,计算数据量增大时会报 打开的文件数过多 错误 ,因为linux处处皆文件,所以也会限制socket打开的数量,当各个节点数据传输增大时就会导致整个错暴漏出来

    测试

    ulimit -a

    八、操作系统内核调优-网络部分

    各个节点使用root用户执行

    vi /etc/sysctl.conf

    net.ipv4.ip_local_port_range = 1000 65534
    net.ipv4.tcp_fin_timeout=30
    net.ipv4.tcp_timestamps=1
    net.ipv4.tcp_tw_recycle=1

    如果 小文件特别多,错误文件特别多(主要时受损的压缩文件) 这个时候就会报如下错:

    23/11/28 17:11:58 WARN hdfs.DFSClient: Failed to connect to /10.183.243.230:9866 for block BP-1901849752-10.183.243.230-1672973682151:blk_1074692119_951295, add to deadNodes and continue.

    java.net.BindException: Cannot assign requested address

    “Cannot assign requested address.”是由于linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放,端口才可以继续使用。在http查询中,需要发送大量的短连接,这样的高并发的场景下,就会出现端口不足,从而抛出Cannot assign requested address的异常。

    查看当前linux系统的可分配端口

    cat /proc/sys/net/ipv4/ip_local_port_range

    32768 60999

    当前系统的端口数范围为32768~60999, 所以能分配的端口数为28231。如果我的连接数达到了28231个,就会报如上错误。

    1、修改端口范围

    vi /etc/sysctl.conf

    #1000到65534可供用户程序使用,1000以下为系统保留端口

    net.ipv4.ip_local_port_range = 1000 65534

    2、配置tcp端口的重用配置,提高端口的回收效率

    vi /etc/sysctl.conf

    #调低端口释放后的等待时间,默认为60s,修改为15~30s 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

    net.ipv4.tcp_fin_timeout=30

    #修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用

    net.ipv4.tcp_timestamps=1

    #修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1 需要开启net.ipv4.tcp_timestamps该参数才有效果

    #更不为提到却很重要的一个信息是:当tcp_tw_recycle开启时(tcp_timestamps同时开启,快速回收socket的效果达到),对于位于NAT设备后面的Client来说,是一场灾难——会导到NAT设备后面的Client连接Server不稳定(有的Client能连接server,有的Client不能连接server)。也就是说,tcp_tw_recycle这个功能,是为“内部网络”(网络环境自己可控——不存在NAT的情况)设计的,对于公网,不宜使用。

    net.ipv4.tcp_tw_recycle=1

    九、安装 JDK 和 Scala

    解压

    tar -xzvf jdk-8u181-linux-x64.tar.gz

    tar -xvzf scala-2.11.12.tgz

    配置

    vi ~/.bash_profile

    #-------------java setting ----------------
    export JAVA_HOME=/mnt/software/jdk1.8.0_181
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    #-------------scala setting ----------------
    export SCALA_HOME=/mnt/software/scala-2.11.12
    export PATH=$PATH:$SCALA_HOME/bin

    刷新配置

    source ~/.bash_profile

    验证

    java -version

    scala -version

    十、安装ntp

    各个节点使用root用户执行

    cd /mnt/software/ntp

    rpm -Uvh *.rpm --nodeps --force

    配置

    vi /etc/ntp.conf

    master:

    注释掉其他server

    填写

    server 127.127.1.0 fudge

    127.127.1.0 stratum 8

    限制从节点ip段信息,可以不配置

    restrict 10.243.71.0 mask 255.255.255.0 nomodify notrap

    slaver:

    server server的hostname或ip prefer

    启动、查看状态命令

    systemctl status ntpd

    systemctl restart ntpd

    报错:

    /lib64/libcrypto.so.10: version `OPENSSL_1.0.2' not found (required by /usr/sbin/ntpd)

    解决

    备份原有libcrypto.so.10

    mv /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.10_bak

    从其他服务器找到对应的so文件复制到/usr/lib64目录下

    cp libcrypto.so.10 /usr/lib64/libcrypto.so.10

    手动同步

    ntpdate -u ip

    查看同步状态

    ntpdc -np

    ntpstat

    十一、安装mysql

    解压

    tar -xzvf mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz

    重命名

    mv mysql-5.7.11-linux-glibc2.5-x86_64 /usr/local/mysql

    编写配置文件

    vi /etc/my.cnf

    [mysqld]
    bind-address=0.0.0.0
    port=3306
    user=root
    basedir=/usr/local/mysql
    datadir=/mnt/data/mysql
    socket=/tmp/mysql.sock
    #character config
    character_set_server=utf8mb4
    symbolic-links=0
    explicit_defaults_for_timestamp=true

    初始化

    cd /usr/local/mysql/bin/

    ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/mnt/data/mysql/ --user=root --initialize

    记录下临时密码:a9Mhhie*kKo3

    移动mysql服务到启动目录

    cd /usr/local/mysql/support-files

    cp mysql.server /etc/init.d/mysql

    chmod +x /etc/init.d/mysql

    启动mysql

    service mysql start

    登录mysql修改密码

    /usr/local/mysql/bin/mysql -uroot -p

    报错

    /usr/local/mysql/bin/mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

    /usr/local/mysql/bin/mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

     复制其他节点上的这两个包到指定目录

    cd /mnt/software

    cp libtinfo.so.5 /usr/lib64

    cp libncurses.so.5 /usr/lib64

    登录成功,开始修改密码并建立hive库

    1. alter user root@localhost identified by 'hhs#_20240416';
    2. grant all privileges on *.* to 'root'@'%' identified by 'hhs#_20240416' ;
    3. flush privileges;
    4. create database hive default character set utf8;
    5. grant all privileges on hive.* to 'hive'@'%' identified by 'hhs#_20240416';
    6. flush privileges;

    十二、安装Hadoop

    以下操作均使用hhs用户

    解压

    tar -xzvf hadoop-2.7.0.tar.gz

    各个节点创建数据目录

    mkdir -p /mnt/data/hadoop/dfs

    mkdir -p /mnt/data/hadoop/dfs/name

    mkdir -p /mnt/data/hadoop/dfs/data

    mkdir -p /mnt/data/hadoop/tmp

    1、配置Hadoop守护程序的环境

    vi ~/.bash_profile

    #------------hadoop setting-----------------
    export HADOOP_HOME=/mnt/software/hadoop-2.7.0
    export HADOOP_PREFIX=$HADOOP_HOME
    export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

    刷新配置

    source ~/.bash_profile

    测试(等配置完拷贝到其他节点一起测试)

    hadoop version

    配置 hadoop-env.sh

    vi /mnt/software/hadoop-2.7.0/etc/hadoop/hadoop-env.sh

    配置JAVA_HOME

    export JAVA_HOME=/mnt/software/jdk1.8.0_181

    2、配置Hadoop相关配置文件

    配置 core-site.xml

    vi /mnt/software/hadoop-2.7.0/etc/hadoop/core-site.xml

    1. <configuration>
    2. <property>
    3. <name>fs.defaultFSname>
    4. <value>hdfs://hdfs的namenode节点域名:8020value>
    5. property>
    6. <property>
    7. <name>hadoop.tmp.dirname>
    8. <value>/mnt/data/hadoop/tmpvalue>
    9. property>
    10. configuration>

    配置 hdfs-site.xml

    vi /mnt/software/hadoop-2.7.0/etc/hadoop/hdfs-site.xml

    1. <configuration>
    2. <property>
    3. <name>dfs.replicationname>
    4. <value>3value>
    5. property>
    6. <property>
    7. <name>dfs.namenode.name.dirname>
    8. <value>/mnt/data/hadoop/dfs/namevalue>
    9. property>
    10. <property>
    11. <name>dfs.datanode.data.dirname>
    12. <value>/mnt/data/hadoop/dfs/datavalue>
    13. property>
    14. configuration>

    配置 yarn-site.xml

    vi /mnt/software/hadoop-2.7.0/etc/hadoop/yarn-site.xml

    1. <configuration>
    2. <property>
    3. <name>yarn.nodemanager.aux-servicesname>
    4. <value>mapreduce_shufflevalue>
    5. property>
    6. <property>
    7. <name>yarn.log-aggregation-enablename>
    8. <value>truevalue>
    9. property>
    10. <property>
    11. <name>yarn.resourcemanager.hostnamename>
    12. <value>resourcemanager节点域名value>
    13. property>
    14. <property>
    15. <name>yarn.resourcemanager.addressname>
    16. <value>${yarn.resourcemanager.hostname}:8032value>
    17. property>
    18. <property>
    19. <name>yarn.resourcemanager.scheduler.addressname>
    20. <value>${yarn.resourcemanager.hostname}:8030value>
    21. property>
    22. <property>
    23. <name>yarn.resourcemanager.webapp.addressname>
    24. <value>${yarn.resourcemanager.hostname}:8088value>
    25. property>
    26. <property>
    27. <name>yarn.resourcemanager.webapp.https.addressname>
    28. <value>${yarn.resourcemanager.hostname}:8090value>
    29. property>
    30. <property>
    31. <name>yarn.resourcemanager.resource-tracker.addressname>
    32. <value>${yarn.resourcemanager.hostname}:8031value>
    33. property>
    34. <property>
    35. <name>yarn.resourcemanager.admin.addressname>
    36. <value>${yarn.resourcemanager.hostname}:8033value>
    37. property>
    38. <property>
    39. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.classname>
    40. <value>org.apache.hadoop.mapred.ShuffleHandlervalue>
    41. property>
    42. <property>
    43. <name>yarn.nodemanager.resource.memory-mbname>
    44. <value>2048value>
    45. property>
    46. <property>
    47. <name>yarn.scheduler.minimum-allocation-mbname>
    48. <value>1024value>
    49. property>
    50. <property>
    51. <name>yarn.scheduler.maximum-allocation-mbname>
    52. <value>30720value>
    53. property>
    54. configuration>

    配置 mapred-site.xml

    cd /mnt/software/hadoop-2.7.0/etc/hadoop

    cp mapred-site.xml.template mapred-site.xml

    vi mapred-site.xml

    1. <configuration>
    2. <property>
    3. <name>mapreduce.framework.namename>
    4. <value>yarnvalue>
    5. property>
    6. configuration>

    配置 slaves

    vi slaves (写上所有节点的hostname)

    3、分发的其他节点

    cd /mnt/software

    scp -r hadoop-2.7.0 hhs@其他节点域名:/mnt/software

    4、格式化NameNode

    cd /mnt/software/hadoop-2.7.0/bin

    hdfs namenode -format

    5、启动Hadoop集群

    cd /mnt/software/hadoop-2.7.0/sbin

    ./start-all.sh

    用jps在各个节点查看启动的进程,如果发现没有启动的角色也可以单独启动,如:

    /mnt/software/hadoop-2.7.0/sbin/yarn-daemon.sh start resourcemanager

    /mnt/software/hadoop-2.7.0/sbin/yarn-daemon.sh start nodemanager

    /mnt/software/hadoop-2.7.0/sbin/hadoop-daemon.sh stop datanode

    6、测试

    1、输入数据制作并上传


    vi file01.txt

    Hello World Bye World

    vi file02.txt

    Hello Hadoop Goodbye Hadoop

    hadoop fs -mkdir -p /user/hhs/input

    hadoop fs -put file*.txt /user/hhs/input/

    2、运行作业

    cd /mnt/software/hadoop-2.7.0/share/hadoop/mapreduce

    hadoop jar hadoop-mapreduce-examples-2.7.0.jar wordcount /user/hhs/input /user/hhs/output

    3、结果查看
    hadoop fs -cat /user/hhs/output/*

    十三、安装Hive

    解压

    tar -xzvf apache-hive-2.3.9-bin.tar.gz

    1、配置环境变量

    hhs用户在各个节点操作

    vi ~/.bash_profile

    #------------hive setting-----------------
    export HIVE_HOME=/mnt/software/apache-hive-2.3.9-bin
    export PATH=$PATH:$HIVE_HOME/bin

    2、创建所需目录

    mkdir -p /mnt/data/hive/tmp

    3、配置Hive

    cd /mnt/software/apache-hive-2.3.9-bin/conf

    cp hive-env.sh.template hive-env.sh

    cp hive-log4j2.properties.template hive-log4j2.properties

    cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

    cp hive-default.xml.template hive-site.xml

    配置 hive-env.sh

    vi hive-env.sh

    HADOOP_HOME=/mnt/software/hadoop-2.7.0
    export HIVE_CONF_DIR=/mnt/software/apache-hive-2.3.9-bin/conf
    export HIVE_AUX_JARS_PATH=/mnt/software/apache-hive-2.3.9-bin/lib

    配置 hive-site.xml

    vi hive-site.xml

    修改下面name对应的属性值

    javax.jdo.option.ConnectionURL
    jdbc:mysql://mysql所在节点域名:3306/hive?useSSL=false

    javax.jdo.option.ConnectionDriverName
    com.mysql.jdbc.Driver

    javax.jdo.option.ConnectionUserName
    hive

     javax.jdo.option.ConnectionPassword
    hhs#_20240416

    hive.metastore.schema.verification
    false

     将hive-site.xml 中的 添加 system:java.io.tmpdir 和 system:user.name

     
              system:java.io.tmpdir
              /mnt/data/hive/tmp
     

     
              system:user.name
              hhs
     

    将MySQL的数据库连接工具包添加到Hive的“lib”目录下

    cd /mnt/software

    cp mysql-connector-java-5.1.47.jar /mnt/software/apache-hive-2.3.9-bin/lib

    备份 hive中$HIVE_HOME/lib下面的log4j-slf4j-impl-*.jar包 到上级目录

    cd /mnt/software/apache-hive-2.3.9-bin/lib

    mv log4j-slf4j-impl-2.6.2.jar ..

    4、分发

    cd /mnt/software

    scp -r apache-hive-2.3.9-bin hhs@其他节点域名:/mnt/software

    5、Hive初始化

    cd /mnt/software/apache-hive-2.3.9-bin/bin

    ./schematool -initSchema -dbType mysql        

    mysql中的hive库也有了对应的表和数据

    6、测试登录

    如果有报错或者卡住的现象,可以使用下面的命令打出日志查看错误

    hive -hiveconf hive.root.logger=debug,console

    将配置好的整个hive目录分发到其他节点 (即:/mnt/software/apache-hive-2.3.9-bin)

    scp -r apache-hive-2.3.9-bin hhs@节点2域名:/mnt/software
    scp -r apache-hive-2.3.9-bin hhs@节点3域名:/mnt/software
    ......

    十四、安装Spark

    解压

    cd /mnt/software

    tar -xzvf spark-2.4.0-bin-hadoop2.7.tgz

    1、配置环境变量

    vi ~/.bash_profile

    #------------spark setting-----------------
    export SPARK_HOME=/mnt/software/spark-2.4.0-bin-hadoop2.7
    export PATH=$PATH:$SPARK_HOME/bin

    刷新

    source ~/.bash_profile

    验证

    echo $SPARK_HOME

    2、配置Spark

    cd /mnt/software/spark-2.4.0-bin-hadoop2.7/conf

    cp slaves.template slaves

    cp spark-env.sh.template spark-env.sh

    配置slaves

    将所有的节点域名都写进去(Spark 会将在列出的每台机器上启动Spark Worker)

    配置spark-env.sh

    export JAVA_HOME=/mnt/software/jdk1.8.0_181
    export HADOOP_HOME=/mnt/software/hadoop-2.7.0
    export HADOOP_CONF_DIR=/mnt/software/hadoop-2.7.0/etc/hadoop
    export HIVE_HOME=/mnt/software/apache-hive-2.3.9-bin
    export HIVE_CONF_DIR=/mnt/software/apache-hive-2.3.9-bin/conf
    export SCALA_HOME=/mnt/software/scala-2.11.12
    export SPARK_MASTER_IP=你所选择的master域名或者ip
    export SPARK_MASTER_PORT=7077
    export SPARK_MASTER_WEBUI_PORT=8081

    3、分发

    cd /mnt/software

    scp -r spark-2.4.0-bin-hadoop2.7 hhs@其他节点域名:/mnt/software

    4、启动

    cd /mnt/software/spark-2.4.0-bin-hadoop2.7/sbin

    ./start-all.sh
    哪个节点执行的./start-all.sh 哪个节点就是master

    5、测试

    spark-shell

  • 相关阅读:
    测试OpenCvSharp库的模板匹配功能
    神经网络深度学习(六)问题排查
    HTML5 游戏开发实战 | 推箱子
    【组件】Vue组件之间的通信父传子 | 子传父
    【程序员面试金典】01.05. 一次编辑
    Spring之事务开发
    shell脚本的编写规范和变量类型
    变量常用函数
    Spring Security(1)
    Python "爬虫"出发前的装备之二数据先行( Requests 模块)
  • 原文地址:https://blog.csdn.net/lu070828/article/details/137810773