hadoop基础搭建(hadoop+hive+hbase+zk)(一)

news2024/11/15 12:00:11

文章目录

    • 一、基础环境&插件安装(root)
    • 二、创建启动脚本,后续使用
    • 三、安装JDK(root)
    • 四、安装Hadoop
    • 五、安装 rsync(root)
    • 六、网络配置(4台服务器,root)
    • 七、rsync脚本配置(root)
    • 八、免密登录配置(4台服务器)
    • 九、zk集群搭建(10、11、12)
    • 十、hadoop集群配置(4台服务器)
    • 十一、hive搭建(10)
    • 十二、hbase集群配置(10)
    • 十三、启动方式
    • 十四、相关节点主备切换
    • 十五、yarn相关指令介绍
    • 十六、相关问题整合

ps:如果没有标注root的,全部使用hadoop用户进行安装

一、基础环境&插件安装(root)

  1. 可以直接下载我这边上传的相关包,包括搭建过程中的一些缺失包、在线yum源的一些tpm包以及ranger编译后的包。hadoop的一些基础包这边就不上传了。比如hadoop包,因为太大了,这边有提供了下载地址,可自行下载。

  2. 创建文件夹并上传需要的rpm包:mkdir /opt/rpm

  3. 安装:rpm -Uvh --force --nodeps *.rpm

  4. 所有的rpm包都是后续yum源下载的包,如果有遗漏的,可以直接使用yum源下载,如果是无网络线上环境可以参照https://blog.csdn.net/weixin_40496191/article/details/124508488进行无网络rpm安装

  5. 关闭防火墙

    1)systemctl stop firewalld

    2)systemctl disable firewalld.service

  6. 新建用户:useradd hadoop

  7. 设置密码:passwd hadoop -->ffcsict123

  8. 切换hadoop用户

  9. 在/home/hadoop 目录下创建 module 和 software 文件夹(software 用于存放软件安装包,而 module 用于存放解压后的文件包)

    1)mkdir /home/hadoop/module

    2)mkdir /home/hadoop/software

  10. 修改 module、software 文件夹的所属主和所属组均为 hadoop用户

chown hadoop:hadoop /home/hadoop/module
chown hadoop:hadoop /home/hadoop/software
  1. 查看 module、software 文件夹的所有者和所属组:ll

二、创建启动脚本,后续使用

  1. journalnode脚本:vi /home/hadoop/journalnode.sh

    chmod u+x /home/hadoop/journalnode.sh

    if [ $# -lt 1 ] 
    then 
        echo "No Args Input..." 
        exit ; 
    fi 
     
    case $1 in 
    "start") 
            echo " =================== 启动 journalnode 集群 ===================" 
    
            echo " --------------- 启动 node10 ---------------" 
            	ssh node10 "/home/hadoop/module/hadoop-3.2.2/sbin/hadoop-daemon.sh start journalnode" 
            echo " --------------- 启动 node11 ---------------"
    	    	ssh node11 "/home/hadoop/module/hadoop-3.2.2/sbin/hadoop-daemon.sh start journalnode" 
            echo " --------------- 启动 node12 ---------------" 
            	ssh node12 "/home/hadoop/module/hadoop-3.2.2/sbin/hadoop-daemon.sh start journalnode" 
    ;; 
    "stop") 
            echo " =================== 关闭 journalnode 集群 ===================" 
    
            echo " --------------- 关闭 node10 ---------------" 
            	ssh node10 "/home/hadoop/module/hadoop-3.2.2/sbin/hadoop-daemon.sh stop journalnode" 
            echo " --------------- 关闭 node11 ---------------"
    	    	ssh node11 "/home/hadoop/module/hadoop-3.2.2/sbin/hadoop-daemon.sh stop journalnode" 
            echo " --------------- 关闭 node12 ---------------" 
            	ssh node12 "/home/hadoop/module/hadoop-3.2.2/sbin/hadoop-daemon.sh stop journalnode" 
    ;; 
    *) 
        echo "Input Args Error..." 
    ;; 
    esac
    
  2. hadoop脚本:vi /home/hadoop/hadoop.sh

    chmod u+x /home/hadoop/hadoop.sh

    #!/bin/bash 
    if [ $# -lt 1 ] 
    then 
        echo "No Args Input..." 
        exit ; 
    fi 
     
    case $1 in 
    "start") 
            echo " =================== 启动 hadoop 集群 ===================" 
    
            echo " --------------- 启动 hdfs ---------------" 
            ssh node10 "/home/hadoop/module/hadoop-3.2.2/sbin/start-dfs.sh" 
            echo " --------------- 启动 yarn ---------------"
    	    ssh node11 "/home/hadoop/module/hadoop-3.2.2/sbin/start-yarn.sh" 
            echo " --------------- 启动 historyserver ---------------" 
            ssh node10 "/home/hadoop/module/hadoop-3.2.2/bin/mapred --daemon start historyserver" 
    ;; 
    "stop") 
            echo " =================== 关闭 hadoop 集群 ===================" 
     
            echo " --------------- 关闭 historyserver ---------------" 
            ssh node10 "/home/hadoop/module/hadoop-3.2.2/bin/mapred --daemon stop historyserver" 
            echo " --------------- 关闭 yarn ---------------" 
            ssh node11 "/home/hadoop/module/hadoop-3.2.2/sbin/stop-yarn.sh" 
            echo " --------------- 关闭 hdfs ---------------" 
            ssh node10 "/home/hadoop/module/hadoop-3.2.2/sbin/stop-dfs.sh" 
    ;; 
    *) 
        echo "Input Args Error..." 
    ;; 
    esac
    
  3. zookeeper脚本:vi /home/hadoop/zookeeper.sh

    chmod u+x /home/hadoop/zookeeper.sh

    #!/bin/bash 
    if [ $# -lt 1 ] 
    then 
        echo "No Args Input..." 
        exit ; 
    fi 
     
    case $1 in 
    "start") 
            echo " =================== 启动 node10 ===================" 
        	ssh node10 "/home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start" 
       	    echo " =================== 启动 node11 ===================" 
        	ssh node11 "/home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start" 
           	echo " =================== 启动 node12 ===================" 
        	ssh node12 "/home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start" 
    ;; 
    "stop") 
            echo " =================== 关闭 node10 ===================" 
        	ssh node10 "/home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop" 
       	    echo " =================== 关闭 node11 ===================" 
        	ssh node11 "/home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop" 
           	echo " =================== 关闭 node12 ===================" 
        	ssh node12 "/home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop" 
    ;; 
    *) 
        echo "Input Args Error..." 
    ;; 
    esac
    
  4. hbase脚本:vi /home/hadoop/hbase.sh

    chmod u+x /home/hadoop/hbase.sh

    #!/bin/bash
    if [ $# -lt 1 ]
    then
        echo "No Args Input..."
        exit ;
    fi
    
    case $1 in
    "start")
            echo " =================== 启动hbaes集群 ==================="
            cd /home/hadoop/hbase/hbase-2.1.0/bin
                    ./start-hbase.sh
    ;;
    "stop")
            echo " =================== 关闭hbase集群 ===================" 
                     cd /home/hadoop/hbase/hbase-2.1.0/bin
                    ./stop-hbase.sh
    ;;
    *)
        echo "Input Args Error..."
    ;;
    esac
    

三、安装JDK(root)

  1. 上传jdk-8u291-linux-x64.tar.gz包到linux服务

  2. 解压jdk:tar -xvf jdk-8u291-linux-x64.tar.gz

  3. 配置jdk环境变量:vi /etc/profile,在最后加上以下几行

    JAVA_HOME=/opt/jdk/jdk1.8.0_291
    PATH=$PATH:$JAVA_HOME/bin
    CLASSPATH=:$JAVA_HOME/lib
    export JAVA_HOME PATH CLASSPATH
    
  4. 重新导入环境变量配置:source /etc/profile

  5. 检查JDK是否安装成功,能看到相关版本信息即安装成功:java -version
    在这里插入图片描述

四、安装Hadoop

  1. 下载hadoop-3.2.2.tar.gz:http://archive.apache.org/dist/hadoop/core/

  2. 上传至/home/hadoop/module

  3. 解压:tar -xvf hadoop-3.2.2.tar.gz

  4. 配置hadoop环境变量(使用root用户修改):vi /etc/profile,在最后加上以下几行

    export HADOOP_HOME=/home/hadoop/module/hadoop-3.2.2
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    export HADOOP_CLASSPATH=`hadoop classpath`
    
  5. 重新导入环境变量配置(使用root、hadoop分别刷新):source /etc/profile

  6. 查看版本,看看是否成功:hadoop version
    在这里插入图片描述

五、安装 rsync(root)

  1. 安装:忽略,第一步已经rpm安装

  2. 启动 rsync 并设置开机自启:

    systemctl start rsyncd.service
    systemctl enable rsyncd.service
    
  3. 修改配置文件:vi /etc/rsyncd.conf

    # 运行RSYNC守护进程的用户
    uid = hadoop
    # 运行RSYNC守护进程的组
    gid = hadoop
    #不使用chroot
    use chroot = no
    # 最大连接数为4
    max connections = 4
    # CentOS7中yum安装不需指定pid file 否则报错
    # pid file = /var/run/rsyncd.pid
    # 指定锁文件
    lock file=/var/run/rsyncd.lock
    # 指定日志文件
    log file = /var/log/rsyncd.log
    exclude = lost+found/
    transfer logging = yes
    # 超时时间
    timeout = 900
    # 同步时跳过没有权限的目录
    ignore nonreadable = yes
    # 传输时不压缩的文件
    dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    
  4. 重启rsync: systemctl restart rsyncd.service

六、网络配置(4台服务器,root)

  1. 克隆三台机子

  2. 主机名和IP分配(根据自己的需求分配)

    主机名node10node11node12node13
    IP地址192.168.248.10192.168.248.11192.168.248.12192.168.248.13
  3. 修改 UUID 和 IP地址:vi /etc/sysconfig/network-scripts/ifcfg-ens33

    ps:可通过uuidgen获取UUID

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=yes
    NAME=ens33
    UUID=91f1d9bd-946d-42da-a54f-76ac44cc965c
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.248.10
    GATEWAY=192.168.248.254
    NETMAST=255.255.255.0
    DNS1=8.8.8.8
    ZONE=public
    
  4. 修改主机名:vi /etc/hostname(每台都要)
    在这里插入图片描述

  5. 修改主机名称映射文件(hosts):vi /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.248.10 node10
    192.168.248.11 node11
    192.168.248.12 node12
    192.168.248.13 node13
    
  6. 重置网络:service network restart

七、rsync脚本配置(root)

  1. mkdir /home/hadoop/rsync
  2. vi /home/hadoop/rsync/xsync
  3. 赋予xsync脚本可执行权限:chmod u+x /home/hadoop/rsync/xsync
  4. 测试xsync:/home/hadoop/rsync/xsync /home/hadoop/rsync
    在这里插入图片描述

八、免密登录配置(4台服务器)

  1. 生成公钥和私钥:ssh-keygen -t rsa

    直接一直回车即可

  2. 将公钥拷贝至本机以及其他节点中

    ffcsict123

    1)ssh-copy-id node10

    2)ssh-copy-id node11

    3)ssh-copy-id node12

    4)ssh-copy-id node13

  3. 测试:ssh node12

九、zk集群搭建(10、11、12)

zookeeper下载:https://zookeeper.apache.org/releases.html#download

  1. 创建文件夹:mkdir /home/hadoop/zookeeper

  2. 进入目录:cd /home/hadoop/zookeeper

  3. 上传安装包:apache-zookeeper-3.6.3-bin.tar.gz

  4. 解压:tar -xvf apache-zookeeper-3.6.3-bin.tar.gz

  5. 创建zookeeper数据文件夹:mkdir /home/hadoop/zookeeper/tmp(自定义)

  6. 进入配置文件目录:cd /home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/conf

  7. 将“zoo_sample.cfg”重命名为“zoo.cfg”,并打开配置:mv zoo_sample.cfg zoo.cfg

    4.1 打开zoo.cfg,修改数据文件夹地址:dataDir=/home/hadoop/zookeeper/tmp

    4.2 打开zoo.cfg,如果需要变更zookeeper端口号,可修改:clientPort=端口号,默认2181

    4.3 打开zoo.cfg,修改8080端口:admin.serverPort=8888(无用端口)

    4.4 打开zoo.cfg,添加集群配置

    #ip+数据同步+通信端口,保证zookeeper、数据同步、通信端口三个端口不同
    server.1=0.0.0.0:2888:3888
    server.2=192.168.248.11:2888:3888
    server.3=192.168.248.12:2888:3888
    
    #ip+数据同步+通信端口,保证zookeeper、数据同步、通信端口三个端口不同
    server.1=192.168.248.10:2888:3888
    server.2=192.168.248.11:2888:3888
    server.3=192.168.248.12:2888:3888
    
  8. 修改配置文件:vi /home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkEnv.sh

    首行添加JAVA_HOME路径的申明

    JAVA_HOME=/opt/jdk/jdk1.8.0_291
    
  9. 进入zookeeper数据文件目录:cd /home/hadoop/zookeeper/tmp

  10. 新建myid并且写入对应的myid,myid为第7步对应的数字(server.数字)

服务器192.168.248.10:echo 1 > myid
服务器192.168.248.11:echo 2 > myid
服务器192.168.248.12:echo 3 > myid    
  1. 启动zookeeper脚本:cd /home/hadoop --> ./zookeeper.sh start

  2. 查看主从状态:/home/hadoop/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh status
    在这里插入图片描述

十、hadoop集群配置(4台服务器)

  1. 节点功能

    ps:NameNode、SecondaryNameNod和ResourceManage很耗内存资源,建议不要配置在同一节点上

    node10node11node12node13
    HDFSNameNodeNameNodeDataNodeDataNode
    YARNResourceManagerResourceManagerNodeManagerNodeManager
    hbaseHMasterHMaster、HRegionServerHRegionServerHRegionServer
    hivehive
    mysqlmysql
    zookeeperzookeeperzookeeperzookeeper
  2. 修改核心配置文件:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/core-site.xml

    在中间添加配置

    <!-- 指定 NameNode 的地址 --> 
    <property> 
        <name>fs.defaultFS</name> 
        <value>hdfs://mycluster</value> 
    </property> 
    
    <!-- 指定 hadoop 数据的存储目录 --> 
    <property> 
        <name>hadoop.tmp.dir</name> 
        <value>/home/hadoop/module/hadoop-3.2.2/data</value> 
    </property> 
    
    <!-- 配置 HDFS 网页登录使用的静态用户为 hadoop --> 
    <property> 
        <name>hadoop.http.staticuser.user</name> 
        <value>hadoop</value> 
    </property>
    <!-- 考虑配置,整合hive 用户代理设置 --> 
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
    <property>               
        <name>ha.zookeeper.quorum</name>       
        <value>node10:2181,node11:2181,node12:2181</value>   
     </property>    
     <property>              
        <name>ha.zookeeper.session-timeout.ms</name>      
        <value>10000</value>  
     </property>
    
  3. 修改HDFS配置文件:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/hdfs-site.xml

    在标签中添加配置

      
        <!-- 副本数dfs.replication默认值3,可不配置 --> 
        <property>               
        	<name>dfs.replication</name>       
        	<value>3</value>    
        </property>  
        
        <!-- 节点数据存储地址 --> 
        <property>                
        	<name>dfs.namenode.name.dir</name>        
        	<value>/home/hadoop/module/hadoop-3.2.2/namenode/data</value>    
        </property>    
        <property>                
        	<name>dfs.datanode.data.dir</name>        
        	<value>/home/hadoop/module/hadoop-3.2.2/datanode/data</value>    
        </property>  
        
        <!-- 主备配置 --> 
        <!-- 为namenode集群定义一个services name --> 
        <property>                
        	<name>dfs.nameservices</name>        
        	<value>mycluster</value>    
        </property>    
        <!-- 声明集群有几个namenode节点 -->
        <property>                
        	<name>dfs.ha.namenodes.mycluster</name>        
        	<value>nn1,nn2</value>    
        </property>
        <!-- 指定 RPC通信地址 的地址 --> 
        <property>                
        	<name>dfs.namenode.rpc-address.mycluster.nn1</name>       
        	<value>node10:8020</value>   
        </property>
        <!-- 指定 RPC通信地址 的地址 --> 
        <property>                
            <name>dfs.namenode.rpc-address.mycluster.nn2</name>        
            <value>node11:8020</value>    
        </property>  
        <!-- http通信地址 web端访问地址 --> 
        <property>                
                <name>dfs.namenode.http-address.mycluster.nn1</name>        
                <value>node10:50070</value> 
        </property> 
        <!-- http通信地址 web 端访问地址 --> 
        <property>                
                <name>dfs.namenode.http-address.mycluster.nn2</name>      
                <value>node11:50070</value>   
         </property>  
                    
         <!-- 声明journalnode集群服务器 -->
         <property>                
                <name>dfs.namenode.shared.edits.dir</name> 
                <value>qjournal://node10:8485;node11:8485;node12:8485/mycluster</value>   
    	 </property>   
         <!-- 声明journalnode服务器数据存储目录 -->
         <property>              
                <name>dfs.journalnode.edits.dir</name>        
                <value>/home/hadoop/module/hadoop-3.2.2/journalnode/data</value>  
         </property>
         <!-- 开启NameNode失败自动切换 -->
         <property>               
                <name>dfs.ha.automatic-failover.enabled</name>     
                <value>true</value>    
         </property>
         <!-- 隔离:同一时刻只能有一台服务器对外响应 -->
    	<property>
            <name>dfs.ha.fencing.methods</name>
            <value>
                sshfence
                shell(/bin/true)
            </value>
        </property>
    
         <!-- 配置失败自动切换实现方式,通过ConfiguredFailoverProxyProvider这个类实现自动切换 -->
         <property>              
                <name>dfs.client.failover.proxy.provider.mycluster</name>    
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>   
         </property>          
             
         <!-- 指定上述选项ssh通讯使用的密钥文件在系统中的位置。 -->
         <property>              
                <name>dfs.ha.fencing.ssh.private-key-files</name>       
                <value>/root/.ssh/id_rsa</value>    
          </property>  
          <!-- 配置sshfence隔离机制超时时间(active坏了之后,standby如果没有在30秒之内未连接上,那么standby将变成active) -->
          <property>               
                <name>dfs.ha.fencing.ssh.connect-timeout</name>       
                <value>30000</value>    
         </property> 
             
         <!-- 开启hdfs允许创建目录的权限,配置hdfs-site.xml -->
         <property>
       	 	<name>dfs.permissions.enabled</name>
       	 	<value>false</value>
    	</property>
        <!-- 使用host+hostName的配置方式 -->       
    	<property>
    		<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
    		<value>false</value>
    	</property>
    
  4. 修改YARN配置文件:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/yarn-site.xml

    根据虚拟机内存进行设置,参照:https://blog.csdn.net/u010452388/article/details/98234147

    在标签中添加配置

     <property>
        <name>yarn.log.server.url</name>
        <value>http://node10:19888/jobhistory/logs</value>
    </property>
        <!-- 指定 MR 走 shuffle --> 
        <property>                
        	<name>yarn.nodemanager.aux-services</name>        
        	<value>mapreduce_shuffle</value>    
    	</property>  
        <!-- 开启日志聚集功能 --> 
        <property>               
        	<name>yarn.log-aggregation-enable</name>        
        	<value>true</value>    
        </property> 
        <!-- 设置日志保留时间为 7--> 
        <property>                
        	<name>yarn.log-aggregation.retain-seconds</name>        
        	<value>86400</value>   
        </property> 
        
        <!-- 主备配置 --> 
        <!-- 启用resourcemanager ha -->
        <property>                
        	<name>yarn.resourcemanager.ha.enabled</name>        
        	<value>true</value>    
        </property>    
        <property>                
        	<name>yarn.resourcemanager.cluster-id</name>        
        	<value>my-yarn-cluster</value>    
        </property>   
        <!-- 声明两台resourcemanager的地址 -->
        <property>                
        	<name>yarn.resourcemanager.ha.rm-ids</name>        
        	<value>rm1,rm2</value>    
        </property>    
        <property>                
        	<name>yarn.resourcemanager.hostname.rm1</name>        
        	<value>node10</value>    
        </property>    
        <property>                
        	<name>yarn.resourcemanager.hostname.rm2</name>        
        	<value>node11</value>    
        </property>    
        <property>                
        	<name>yarn.resourcemanager.webapp.address.rm1</name>        
        	<value>node10:8088</value>    
        </property>    
        <property>                
            <name>yarn.resourcemanager.webapp.address.rm2</name>        
            <value>node11:8088</value>    
        </property> 
        <!-- 指定zookeeper集群的地址 -->
        <property>                
            <name>yarn.resourcemanager.zk-address</name>        
            <value>node10:2181,node11:2181,node12:2181</value>    
        </property>
        <!-- 启用自动恢复 -->
        <property>                
            <name>yarn.resourcemanager.recovery.enabled</name>        
            <value>true</value>    
        </property> 
        <!-- 指定resourcemanager的状态信息存储在zookeeper集群 -->
        <property>                
        	<name>yarn.resourcemanager.store.class</name>   
            <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>    
        </property>
                
                
        <property>
            <name>yarn.scheduler.maximum-allocation-mb</name>
            <value>2048</value>
        </property>
        <property>
            <name>yarn.scheduler.minimum-allocation-mb</name>
            <value>2048</value>
        </property>
        <property>
            <name>yarn.nodemanager.vmem-pmem-ratio</name>
            <value>2.1</value>
        </property>
        <property>
            <name>mapred.child.java.opts</name>
            <value>-Xmx1024m</value>
        </property>
                 
      <property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>node10:8032</value>
      </property>
      <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>node10:8030</value>
      </property>
      <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>node10:8031</value>
      </property>
      <property>
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>node10:8033</value>
      </property>
      <property>
        <name>yarn.nodemanager.address.rm1</name>
        <value>node10:8041</value>
      </property>
      <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>node11:8032</value>
      </property>
      <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>node11:8030</value>
      </property>
      <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>node11:8031</value>
      </property>
      <property>
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>node11:8033</value>
      </property>
      <property>
        <name>yarn.nodemanager.address.rm2</name>
        <value>node11:8041</value>
      </property>
      <property>
        <name>yarn.nodemanager.localizer.address</name>
        <value>0.0.0.0:8040</value>
      </property>
      <property>
        <description>NM Webapp address.</description>
        <name>yarn.nodemanager.webapp.address</name>
        <value>0.0.0.0:8042</value>
      </property>
    <property>
        <name>yarn.nodemanager.address</name>
        <value>${yarn.resourcemanager.hostname}:8041</value>
    </property>
        <!-- vulue主要看HADOOP_CLASSPATH这个环境变量的输出值 -->      
        <property>
            <name>yarn.application.classpath</name>
            <value>/home/hadoop/module/hadoop-3.2.2/etc/hadoop:/home/hadoop/module/hadoop-3.2.2/share/hadoop/common/lib/*:/home/hadoop/module/hadoop-3.2.2/share/hadoop/common/*:/home/hadoop/module/hadoop-3.2.2/share/hadoop/hdfs:/home/hadoop/module/hadoop-3.2.2/share/hadoop/hdfs/lib/*:/home/hadoop/module/hadoop-3.2.2/share/hadoop/hdfs/*:/home/hadoop/module/hadoop-3.2.2/share/hadoop/mapreduce/lib/*:/home/hadoop/module/hadoop-3.2.2/share/hadoop/mapreduce/*:/home/hadoop/module/hadoop-3.2.2/share/hadoop/yarn:/home/hadoop/module/hadoop-3.2.2/share/hadoop/yarn/lib/*:/home/hadoop/module/hadoop-3.2.2/share/hadoop/yarn/*</value>
        </property>  
    
    
    
  5. 修改MapReduce配置文件:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/mapred-site.xml

    在标签中添加如下配置

    <!-- 指定 MapReduce 程序运行在 Yarn--> 
    <property> 
        <name>mapreduce.framework.name</name> 
        <value>yarn</value> 
    </property>
    <!-- 历史服务器端地址 --> 
    <property> 
        <name>mapreduce.jobhistory.address</name> 
        <value>node10:10020</value> 
    </property> 
    
    <!-- 历史服务器 web 端地址 --> 
    <property> 
        <name>mapreduce.jobhistory.webapp.address</name> 
        <value>node10:19888</value> 
    </property>
    
  6. 修改workers配置文件,指定从节点信息:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/workers

    ps:文件中添加的内容结尾不能有空格,文件中也不能有空行

    node12
    node13
    
  7. 创建pid目录:mkdir /home/hadoop/module/hadoop-3.2.2/pids

  8. 添加用户配置:vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/hadoop-env.sh,在最后添加

    export HDFS_NAMENODE_USER=hadoop 
    export HDFS_DATANODE_USER=hadoop 
    export HDFS_SECONDARYNAMENODE_USER=hadoop 
    export YARN_RESOURCEMANAGER_USER=hadoop 
    export YARN_NODEMANAGER_USER=hadoop 
    export JAVA_HOME=/opt/jdk/jdk1.8.0_291 
    export HADOOP_PID_DIR=/home/hadoop/module/hadoop-3.2.2/pids
    #以下内容暂时忽略,不用添加    
    #HDFS_DATANODE_SECURE_USER=hdfs
    #HADOOP_SECURE_DN_USER=yarn
    
  9. vi /home/hadoop/module/hadoop-3.2.2/etc/hadoop/yarn-env.sh

     export YARN_PID_DIR=/home/hadoop/module/hadoop-3.2.2/pids
    
  10. vi /home/hadoop/module/hadoop-3.2.2/sbin/start-dfs.sh和stop-dfs.sh,在头部添加以下内容

HDFS_ZKFC_USER=hadoop
HDFS_JOURNALNODE_USER=hadoop
HDFS_NAMENODE_USER=hadoop
HDFS_SECONDARYNAMENODE_USER=hadoop
HDFS_DATANODE_USER=hadoop
HDFS_DATANODE_SECURE_USER=hadoop
#HADOOP_SECURE_DN_USER=hadoop
  1. vi /home/hadoop/module/hadoop-3.2.2/sbin/start-yarn.sh和stop-yarn.sh,在头部添加以下内容

    #HADOOP_SECURE_DN_USER=hadoop
    HDFS_DATANODE_SECURE_USER=hadoop
    YARN_NODEMANAGER_USER=hadoop
    YARN_RESOURCEMANAGER_USER=hadoop
    
  2. 分发到其他节点:xsync /home/hadoop/module/hadoop-3.2.2/etc/hadoop/

  3. 进入路径:cd /home/hadoop

  4. 启动Journalnode脚本:./journalnode.sh start

  5. 初始化NameNode(删除所有节点的/home/hadoop/module/hadoop-3.2.2/data和logs目录)

    1)cd /home/hadoop/module/hadoop-3.2.2/

    2)hdfs namenode -format

  6. 将初始化生成的数据拷贝到node11节点(dfs.namenode.name.dir属性):/home/hadoop/module/hadoop-3.2.2/namenode

    ps:如果是用root用户拷贝的,需要重新赋权 chown -R hadoop:hadoop /home/hadoop

    scp /opt/kerberos/$account.keytab root@node13:/opt/kerberos

  7. 在任意一台 NameNode 上使用以下命令来初始化 ZooKeeper 中的 HA 状态:hdfs zkfc -formatZK

  8. 创建文件夹:mkdir /tmp/logs

  9. 启动hadoop脚本:cd /home/hadoop -->./hadoop.sh start

  10. 赋权其他用户都能读: chmod -R 755 /home/hadoop/ 、chmod -R 700 ~/.ssh/

  11. 遇到一些yarn切换active错误,如果是测试环境,可以考虑将tmp底下的yarn相关文件夹删除,重启即可

十一、hive搭建(10)

  1. 切换路径:cd /home/hadoop/module

  2. 下载hive:wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz --no-check-certificate

  3. 解压并且重命名:tar -zxvf apache-hive-3.1.2-bin.tar.gz -> mv apache-hive-3.1.2-bin hive

  4. 配置环境变量:vi /etc/profile ,最后一行后面加上以下内容

    #添加下面两行
    export HIVE_HOME=/home/hadoop/module/hive
    export PATH=$PATH:$HIVE_HOME/bin
    

    重置环境变量:source /etc/profile

  5. 将hadoop的lib中高版本的 /home/hadoop/module/hadoop-3.2.2/share/hadoop/common/lib/guava-27.0-jre.jar包复制到/home/hadoop/module/hive/lib下,并删除hive下的低版本guava包

    cp /home/hadoop/module/hadoop-3.2.2/share/hadoop/common/lib/guava-27.0-jre.jar  /home/hadoop/module/hive/lib
    rm  /home/hadoop/module/hive/lib/guava-19.0.jar 
    
  6. 安装mysql(在node12安装,建议跟后面的ranger安装在同一台服务器):https://blog.csdn.net/weixin_40496191/article/details/124358743

  7. 切回hadoop用户

  8. 添加Hive核心配置,选择远程MySQL模式:vi /home/hadoop/module/hive/conf/hive-site.xml

    <configuration>
    <!-- mysql的主机地址 -->
    <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://node10:3306/hivedb?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=GMT</value>
    </property>
    
    <!-- 固定写法,mysql驱动类的位置 -->
    <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.cj.jdbc.Driver</value>
    </property>
    
    <!-- 修改为你自己的Mysql账号 -->
    <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>root</value>
    </property>
    
    <!-- 修改为你自己的Mysql密码 -->
    <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>ffcsict123</value>
    </property>
    
    <!-- 忽略HIVE 元数据库版本的校验,如果非要校验就得进入MYSQL升级版本 -->
    <property>
            <name>hive.metastore.schema.verification</name>
            <value>false</value>
    </property>
        
    <!-- 配置MetaStore端口 -->
    <property>
        	<name>hive.metastore.port</name>
        	<value>9083</value>
        	<description>Hive metastore listener port</description>
    </property>
        
    <!-- 显示当前使用的数据库 -->    
    <property> 
         <name>hive.cli.print.current.db</name>
         <value>true</value>
    </property>
    
    <!-- 显示当前表的列名 -->    
    <property> 
             <name>hive.cli.print.header</name>
             <value>true</value>
    </property>
    
    <!-- 配置hiveserver2的端口 -->
    <property>
             <name>hive.server2.thrift.port</name>
             <value>10000</value>
    </property>
    
    <!-- 绑定到的TCP接口 -->
    <property>
    	<name>hive.server2.thrift.bind.host</name>
    	<value>node10</value>
    </property>
    
    <!--设置用户名和密码-->
    <property>
    	<name>hive.jdbc_passwd.auth.root</name>
    	<value>ffcsict123</value>
        <description/>
    </property>  
    <!--支持事务和行级更新-->   
    <property>
        <name>hive.support.concurrency</name>
        <value>true</value>
    </property>
        
    <!--启用分桶设置-->   
    <property>
        <name>hive.enforce.bucketing</name>
        <value>true</value>
    </property>
    <!--分区模式设置,动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区。nonstrict模式:表示允许所有的分区字段都可以使用动态分区。-->   
    <property>
        <name>hive.exec.dynamic.partition.mode</name>
        <value>nonstrict</value>
    </property>
        
    <!--hive的锁管理器,不能从一个非ACID会话向ACID表中读写数据-->   
    <property>
        <name>hive.txn.manager</name>
        <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
    </property>
    <!--是否在metastore实例上运行initiator和cleaner进程。-->   
    <property>
        <name>hive.compactor.initiator.on</name>
        <value>true</value>
    </property>
    <!--每个MetastoreWorker的数量-->   
    <property>
        <name>hive.compactor.worker.threads</name>
        <value>1</value>
    </property>
    <!--HIve中日志存放位置-->   
    <property>
        <name>hive.querylog.location</name>
        <value>/home/hadoop/module/hive/tmp/querylog</value>
    </property>
    <!--HDFS路径,用于存储不同 map/reduce 阶段的执行计划和这些阶段的中间输出结果。 -->   
    <property>
        <name>hive.exec.local.scratchdir</name>
        <value>/home/hadoop/module/hive/tmp/scratchdir</value>
    </property>
    <!--远程资源下载的临时目录-->   
    <property>
        <name>hive.downloaded.resources.dir</name>
        <value>/home/hadoop/module/hive/tmp/resources</value>
    </property>
    </configuration>
    
  9. 上传MySQL的驱动包到/home/hadoop/module/hive/lib目录:mysql-connector-java-8.0.17.jar

  10. 在MySQL上创建Hive的元数据存储库:create database hivedb;

  11. 执行Hive的初始化工作

cd /home/hadoop/module/hive/bin
./schematool -initSchema -dbType mysql
  1. 初始化完成后,在MySQLhivedb数据库中查看是否初始化成功:show tables;

  2. 修改mysql的相关编码,主要是防止后续hive建表注释乱码的问题

    #修改字段注释字符集
    ALTER TABLE COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
    #修改表注释字符集
    ALTER TABLE TABLE_PARAMS modify column PARAM_VALUE varchar(20000) character set utf8;
    #修改分区参数,支持分区建用中文表示
    ALTER TABLE PARTITION_PARAMS modify column PARAM_VALUE varchar(20000) character set utf8;
    ALTER TABLE PARTITION_KEYS modify column PKEY_COMMENT varchar(20000) character set utf8;
    #修改索引名注释,支持中文注释
    ALTER TABLE INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
    #修改视图,支持视图中文
    ALTER TABLE TBLS modify COLUMN VIEW_EXPANDED_TEXT mediumtext CHARACTER SET utf8;
    ALTER TABLE TBLS modify COLUMN VIEW_ORIGINAL_TEXT mediumtext CHARACTER SET utf8;
    
  3. 在hadoop的active节点赋权

    hadoop fs -chmod 777 /
    hadoop fs -chown -R root:root  /tmp
    

    ps1:需要使用hadoop用户赋权

  4. 使用beeline连接测试

    1)首先启动hiveserver2服务

    cd /home/hadoop/module/hive
    nohup ./bin/hiveserver2>> hiveserver2.log 2>&1 &
    #该服务暂时不启动,因为metastore和mysql在同一台服务,网络互通,不需要开启该服务
    hive --service metastore > metastore.log 2>&1 &
    

    ps1:需要在active节点操作,如果10不是就需要把active转移过来

    #查看节点
    hdfs haadmin -getServiceState nn1
    #转移节点
    hdfs haadmin -failover nn2 nn1
    #再次查看
    hdfs haadmin -getServiceState nn1 ##结果显示active即可
    

    ps2:启动很慢,需耐心等待10000端口起来

    2)hiveserver2服务启动后,使用beeline客户端访问hiveserver2服务

    cd /home/hadoop/module/hive
    # 进入beeline客户端
    bin/beeline
    # 执行连接hiveserver2操作
    !connect jdbc:hive2://node10:10000/default
    
    #测试
    create table student(id int,name String);
    show tables;
    insert into student values('4', 'abc222');
    select * from student;
    
    # 或者
    bin/beeline -u jdbc:hive2://node10:10000/default -n root -p ffcsict123
    

    3)hive默认使用的是yarn的default,如果想要切换其他队列,则可以执行以下几种命令(根据版本了,3.1.2的执行第一种)

    set mapred.job.queue.name=yarnuser1;
    SET mapreduce.job.queuename=yarnuser1;
    set mapred.queue.names=yarnuser1;
    

十二、hbase集群配置(10)

  1. 创建文件夹:mkdir /home/hadoop/hbase

  2. 进入文件夹:cd /home/hadoop/hbase

  3. 下载并传hbase包:https://archive.apache.org/dist/hbase/2.3.5/

  4. 解压:tar -xvf hbase-2.1.0-bin.tar.gz

  5. 修改配置文件:vi /home/hadoop/hbase/hbase-2.1.0/conf/hbase-env.sh

    export JAVA_HOME=/opt/jdk/jdk1.8.0_291
    export HADOOP_HOME=/home/hadoop/module/hadoop-3.2.2
    export HBASE_LOG_DIR=/home/hadoop/hbase/logs
    export HBASE_MANAGES_ZK=false
    export HBASE_CLASSPATH=/home/hadoop/module/hadoop-3.2.2/etc/hadoop
    export HBASE_PID_DIR=/home/hadoop/module/hadoop-3.2.2/pids 
        
    # 表示采用HBase自带的ZooKeeper管理,如果想用外部ZooKeeper管理HBase,可忽略本配置,该次配置使用自行安装的zk。
    # export HBASE_MANAGES_ZK=false
    
  6. vi /home/hadoop/hbase/hbase-2.1.0/conf/hbase-site.xml

    ps:记得清除原来的hbase.cluster.distributed配置

    <!--region server的共享目录,用来持久化HBase-->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://mycluster/hbase</value>
    </property>
    <!--HBase端口-->    
    <property>
      <name>hbase.master.info.port</name>
      <value>16010</value>
    </property>
    <!--HBase的运行模式,false是单机模式,true是分布式模式。若为false,HBaseZookeeper会运行在同一个JVM里面-->
    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    <!--zookeeper集群的URL配置,多个host中间用逗号隔开-->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>node10,node11,node12</value>
    </property>
        
        
        
        
    
    <!--本地文件系统的临时目录。可以修改到一个更为持久的目录上-->
    <property>
      <name>hbase.tmp.dir</name>
      <value>/home/hadoop/hbase/tmp</value>
    </property>
    <!--如果你打算在本地文件系统中跑hbase,请禁掉此项-->
    <property>
      <name>hbase.unsafe.stream.capability.enforce</name>
      <value>false</value>
    </property>
    
    
    <!--HBase在zookeeper上数据的根目录znode节点-->
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase</value>
    </property>
    <!--设置zookeeper通信端口,不配置也可以,zookeeper默认就是2181-->
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
    
  7. 配置从服务器:vi /home/hadoop/hbase/hbase-2.1.0/conf/regionservers

    node11
    node12
    node13
    
  8. 拷贝包:cp /home/hadoop/hbase/hbase-2.1.0/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar /home/hadoop/hbase/hbase-2.1.0/lib/

  9. 分发hbase配置:xsync /home/hadoop/hbase/hbase-2.1.0

  10. 启动hbase脚本:cd /home/hadoop --> ./hbase.sh start

    ps:启动节点必须是hadoop的active节点

    #查看节点
    hdfs haadmin -getServiceState nn1
    #转移节点
    hdfs haadmin -failover nn2 nn1
    #再次查看
    hdfs haadmin -getServiceState nn1 ##结果显示active即可
    
  11. 查看:jps
    在这里插入图片描述

  12. 访问:http://192.168.248.10:16010/master-status

  13. 如果想要起多个hmaster,需要在另一个执行脚本即可:./hbase-daemon.sh start master

十三、启动方式

  1. 切换至脚本路径:cd /home/hadoop

  2. 启动zk:./zookeeper.sh start

  3. 启动journalnode:./journalnode.sh start

  4. 启动hadoop:./hadoop.sh start

  5. 启动hbase:./hbase.sh start

  6. 启动hive服务器:

    ##启动的节点必须是hadoop的active节点
    cd /home/hadoop/module/hive
    nohup ./bin/hiveserver2>> hiveserver2.log 2>&1 &
    

十四、相关节点主备切换

  1. 手动切换namenode的状态的三种方式

    ** 查看namenode节点的状态: hdfs haadmin -getServiceState nn1 nn2

    2.1 将 active 状态从 nn1节点切换到 nn2上:hdfs haadmin -failover nn1 nn2

    2.2 将 nn1 过渡到 Standby:hdfs haadmin -transitionToStandby --forcemanual nn1

    2.3 将 nn2过渡到 Active(不存在active时候):hdfs haadmin -transitionToActive --forceactive --forcemanual nn1

  2. 手动切换resourcemanager

    ** 查看resourcemanager 节点的状态: yarn rmadmin -getServiceState rm1

    2.1 将 rm1 过渡到 Standby:yarn rmadmin -transitionToStandby --forcemanual rm1

    2.2 将 rm2 过渡到 Active:yarn rmadmin -transitionToActive --forcemanual rm2

十五、yarn相关指令介绍

  1. 查看yarn正在运行的任务列表:yarn application -list
  2. kill掉yarn正在运行的任务: yarn application -kill application_id
  3. 查找yarn已经完成的任务列表:yarn application -appStates finished -list
  4. 查找yarn所有任务列表:yarn application -appStates ALL -list
  5. 查看日志详情:yarn logs -applicationId application_id

十六、相关问题整合

  1. 为什么需要metastore和hiveser

    1)hiveserver2 会启动一个hive服务端默认端口为:10000,可以通过beeline,jdbc,odbc的方式链接到hive。hiveserver2启动的时候会先检查有没有配置hive.metastore.uris,如果没有会先启动一个metastore服务(通过 Metastore服务连接MySQL获取元数据),然后在启动hiveserver2。如果有配置hive.metastore.uris。会连接到远程的metastore服务。

    2)Hive充当客户端(是HDFS的客户端也是Metastore的客户端,也是Hive的客户端),又充当服务端(因为有Metastore服务和Hiveserver2服务配置)。在实际生产环境下,可能有多台Hive客户端,MySQL的 IP地址对外不暴露,只暴露给其中一台,那么其他客户端就需要在暴露的那台机器上启动Metastore服务,其他Hive客户端连接这个Metastore服务,进而达到连接Mysql获取元数据的目的。

  2. 什么时候需要开启metastore和hiveserver2

    一般情况下,如果需要客户端去连接hive,则需要启动hiveserver2服务,开放10000端口。

    当hive客户端和MySQL数据库不是处于同一台服务器并且3306端口网络不通时,就需要在mysql服务器端开启metastore服务,并且开放出9083端口。3306端口网络不通的服务器可以通过配置hive-site.xml的metastore的url,间接连接mysql。

    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node10:9083</value>
    </property>
    
  3. 遇到报错:org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /tmp/hive. Name node is in safe mode.

    解决:启动hadoop集群时,集群会默认开启安全模式,检查结束后会自动关闭,请耐心等待。如需强制关闭,则执行hdfs dfsadmin -safemode leave ,关闭安全模式

    ps:如果还是不行,则执行hdfs dfsadmin -safemode forceExit

  4. Operation category READ is not supported in state standby. Visit https://s.apache.org/sbnn-error

    原因:所在节点namenode为standby

    解决:把当前节点切成active即可

  5. The minimum number of live datanodes is not required. Safe mode will be turned off automatically once the thresholds have been reached. NamenodeHostName:node10

    原因:节点处于安全模式,手动解除即可

    解决:hdfs dfsadmin -safemode leave

  6. org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block

    原因:存在损坏文件

    解决:如下

    查看受损block:hadoop fsck /hbase -list-corruptfileblocks  
        ---The filesystem under path '/hbase' has 54 CORRUPT files    CORRUPT说明文件受损
    删除损坏的block: hadoop fsck /hbase -delete
    
  7. Datanode denied communication with namenode because hostname cannot be resol

    原因:由于配置hadoop没有使用host+hostName的配置方式,导致了hadoop无法解析DataNode,对DataNode的注册失败。

    解决方案:

    <property>
    	<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
    	<value>false</value>
    </property>
    
  8. 服务器断电,导致数据同步异常,挂掉的服务器resourceManage无法切换到active

    删除tmp底下的hadoop-yarn-hadoop文件夹,重启集群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/134670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用html2canvas,将页面转换成图片的采坑记录(Web/Taro h5)

使用html2canvas将页面转换成图片的采坑记录 "html2canvas": "^1.4.1","tarojs/taro": "3.4.0-beta.0"问题: 1. 生成的图片很模糊 2. 生成的图片是空白 3. 生成的图片不完整 截图前是这样 截图后这样 截图后的图片图片缺省了一部分…

【消息中间件】1小时快速上手RabbitMQ

前 言 &#x1f349; 作者简介&#xff1a;半旧518&#xff0c;长跑型选手&#xff0c;立志坚持写10年博客&#xff0c;专注于java后端 ☕专栏简介&#xff1a;深入、全面、系统的介绍消息中间件 &#x1f330; 文章简介&#xff1a;本文将介绍RabbitMQ&#xff0c;一小时快速上…

Good Bye 2022: 2023 is NEAR D. Koxia and Game

原题链接&#xff1a;Problem - D - Codeforces 题面&#xff1a; 大概意思就是给你一个数组a和数组b&#xff0c;你自己设计一个数组c&#xff0c;Koxia可以从a[i]、b[i]和c[i]中选一个&#xff0c;而Mahiru只能从另外两个里选一个&#xff0c;问你有多少个数组c一定能使Mah…

给GitHub装扮个性化首页

我的主页 如何配置 需要创建一个仓库&#xff0c;仓库名要跟GitHub的用户名一样,我的已经创建过了 喜欢我的主页可以直接fork然后在自己的仓库修改&#xff0c;如果想自己装扮直接看下一步 地址&#xff1a;https://github.com/linweiqian 开始装扮 下面展示仓库状态统计的设…

工业控制系统安全控制应用缩略语汇总

声明 本文是学习GB-T 32919-2016 信息安全技术 工业控制系统安全控制应用指南. 下载地址 http://github5.com/view/585而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 工业控制系统安全控制应用缩略语 ICS 工业控制系统&#xff08;Industrial Contro…

线程的高效利用——线程池

文章目录线程的开销线程池的工作方式ThreadPoolExecutor基础线程池结果的处理线程的开销 线程作为一种昂贵的资源&#xff0c;开销包括如下几点&#xff1a; 1、线程的创建与启动的开销。 2、线程的销毁的开销。 3、线程调度的开销。线程的调度会产生上下文切换&#xff0c;从…

skywalking解析-入门

前几天从github上看最近比较火的项目&#xff0c;发现了skywalking&#xff0c;就进行了些了解&#xff0c;发现这个领域自己目前知之甚少&#xff0c;打算通过对源码的分析深入了解一下分布式追踪。首先从对skywalking介绍开始。 目录一、简介二、整体架构三、源码下载四、系统…

spark-RDD学习笔记

本文是19年学生时学习林子雨老师课程中的一些学习笔记&#xff0c;主要内容包括RDD的概念和运行原理,rdd相关编程api接口以及对应的实例。关于RDD的内容&#xff0c;这个笔记描述的2019年年底之前的pyspark版本&#xff0c;2023年年初时在pyspark的实际工作中rdd已经很少用或者…

【Kafka】Kafka概述

一、闲话 这是2023年的第一篇博客&#xff0c;祝大家在新的一年里一帆风顺&#xff0c;身体健康 二、基本要点 1、Kafka概述 Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue)&#xff0c;主要用于大数据实时处理领域 2、消息队列的好处 解耦&#xff1a;…

CAS原理、实践、缺陷分析及优化

文章目录CAS介绍CAS在Java中的底层实现Java源码中使用举例自己实际运用乐观锁举例简单的CAS操作ABA问题及优化实践缺陷及优化只能保证单个变量操作原子性当比较失败后,通常需要不断重试,浪费CPUCAS介绍 CAS(Compare And swap),比较并交换,是一种乐观锁.它是解决多线程并行情况…

【力扣Java】第一个出现两次的字母(HashSet与<<左移)

目录 题目描述 思路与算法 方法一&#xff1a;哈希表 HashSet说明 解题代码 方法二&#xff1a;位运算 左移运算符&#xff08;<<&#xff09; 右移运算符&#xff08;>>&#xff09; 解题代码 题目描述 给你一个由小写英文字母组成的字符串 s &#xff…

事务四大特性

没有开启事务的话直接提交、修改数据&#xff0c;有事务则进行两阶段提交&#xff1a; ①原子性 undolog 来实现一旦失败就马上触发回滚 当前事务是不可再分的&#xff0c;要么一起执行&#xff0c;要么都不执行。 start transaction redolog日志池存储undolog日志&#xff…

【Android OpenCV】Visual Studio 创建支持 OpenCV 库的 CMake 工程 ④ ( OpenCV 官方代码示例 )

文章目录一、OpenCV 官方代码示例1、Windows 平台代码示例2、Android 平台代码示例参考 【Android OpenCV】Visual Studio 创建支持 OpenCV 库的 CMake 工程 ① ( 下载 OpenCV 库 | Windows 中安装 OpenCV 库 ) 博客 , 可下载 OpenCV 库 ; CSDN 下载地址 : https://download.c…

educoder数据结构 字符串匹配 第2关:实现KMP字符串匹配

本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; 任务描述 本关的编程任务是补全 step2/kmp.cpp 文件中的KmpGenNext函数&#xff0c;以实现 KMP 字符串匹配。该函数生成给定字符串的next数组。 相关知识 第 1 关中实现…

LEETCODE 19. 删除链表的倒数第 N 个结点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&#xff1a;…

shell流程控制之条件判断练习案列

练习案例1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。2、判断web服务是否运行&#xff08;1、查看进程的方式判断该程序是否运行&#xff0c;2、通过查看端口的方式判断该程序是否运行…

memcpy与memmove函数的区别和实现

1.函数定义 memcpy与memmove都是C语言的库函数&#xff0c;在头文件string.h中&#xff0c;作用是内存拷贝。唯一的区别是&#xff0c;当内存发生局部重叠时&#xff0c;memmove保证了拷贝的结果是正确的&#xff0c;但是memcopy不一定是正确的。但是memcpy比memmove速度快。 …

zookeeper学习笔记3(小滴课堂)

zk集群核心知识之三种角色及其作用&#xff1a; 注册中心的三种模式&#xff1a; 选举核心概念及选举状态&#xff1a; 选举发生的时机及选举算法&#xff1a; zookeeper集群的搭建&#xff1a; 我们先来启动三台虚拟机&#xff1a; 然后我们来修改一下我们的zookeeper配置&a…

Introducing Tome, AI讲演助手

随着ChatGPT进入人们的视野&#xff0c;AI开始在越来越多的领域大展拳脚&#xff0c;近期&#xff0c;一款名为Tome的讲演编辑工具&#xff08;类似幻灯片&#xff09;推出了AI辅助创作的功能&#xff0c; Tome的AI讲演功能可以更轻松地将文本、图像、音频等多种媒体元素融合到…

CPU缓存一致性协议MESI

目录 CPU高速缓存&#xff08;Cache Memory&#xff09; CPU为何要有高速缓存 带有高速缓存的CPU执行计算的流程 目前流行的多级缓存结构 多核CPU多级缓存一致性协议MESI MESI协议缓存状态 MESI状态转换 多核缓存协同操作 单核读取 双核读取 修改数据 同步数据…