zoukankan      html  css  js  c++  java
  • [DB] 大数据集群安装

    学习要点

    • 体系架构、原理
    • 多做练习、试验

    装虚拟机

    • 网络模式:仅主机模式
    • software selection:development tools, GUI
    • network & host name:host name,打开网卡开关,开机启动网卡,手动分配ip
    • installation destination:磁盘大小
    • kdump, security policy:关掉
    • root:设置密码
    • reboot
    • 许可协议:接受(1->2->q->yes)
    • 下一步,关掉没用的
    • 随便起个用户名,不设置密码

    远程登录

    • putty / xshell

    linux配置

    • 关闭防火墙(永久)
      • systemctl stop firewalld.service
      • systemctl disable firewalld.service
      • systemctl status firewalld.service:查看防火墙状态
    • 设置主机名和ip对应关系
      • vi /etc/hosts ip+主机名
    • /tmp 目录
      • 重启后删除数据
      • HDFS默认的数据保存目录,需更改

     文件目录

    • 隐藏文件  /root/.bash_profile  存放环境变量
    • 隐藏目录  /root/.ssh  配置免密码登录(Hadoop和Spark)

    常用操作

    • 查看后台进程
      • ps -ef | grep redis-server:查看redis-server进程
    • 杀死进程
      • kill -9 进程号:强制杀死
      • kill -3 进程号:Java进程,打印Java进程的Thread Dump

    安装JDK

    • 解压安装  
      • tar -zxvf jdk-8u144-linux-x64.tar.gz -C /root/training
      • /root/training/jdk1.8.0_144
    • 设置环境变量

                     

    安装Hadoop

    • 解压安装
      • tar -zxvf hadoop-2.7.3.tar.gz -C ~/training/
    • 安装tree命令
      • rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
      • tree hadoop-2.7.3/ -d -L 3:查看hadoop的3层目录
    • 设置环境变量   

                     

      

    本地模式

    • 没有HDFS,只能测试MapReduce程序(不是运行在Yarn中,作为独立Java程序运行)
    • 修改配置文件
      • vi hadoop-env.sh
      • export JAVA_HOME=/root/training/jdk1.8.0_144
    • MapReduce例子
      • cd ~/training/hadoop-2.7.3/share/hadoop/mapreduce/
      • hadoop jar hadoop-mapreduce-examples-2.7.3.jar wowordcount /root/temp/input/data.txt /root/temp/output/wc

    伪分布模式

    • 单机模拟分布式环境,具备Hadoop所有功能
      • HDFS:NameNode + DataNode + SecondaryNameNode
      • Yarn:ResourceManager + NodeManager 
    • 修改配置文件
      • hadoop-env.sh(同上)
      • hdfs-site.xml
    1 <property>
    2 <name>dfs.replication</name>
    3 <value>1</value>
    4 </property>
    5 <property>
    6 <name>dfs.permission</name>
    7 <value>false</value>
    8 </property>
    View Code
      • core-site.xml
    1 <property>
    2 <name>fs.defaultFS</name>
    3 <value>hdfs://bigdata111:9000</value>
    4 </property>
    5 <property>
    6 <name>hadoop.tmp.dir</name>
    7 <value>/root/training/hadoop-2.7.3/tmp</value>
    8 </property>
    View Code
    • mapred-site.xml(mv mapred-site.xml.template mapred-site.xml)
    1 <property>
    2 <name>mapreduce.framework.name</name>
    3 <value>yarn</value>
    4 </property>  
    View Code
    • yarn-site.xml
    1 <property>
    2 <name>yarn.resourcemanager.hostname</name>
    3 <value>bigdata111</value>
    4 </property>
    5 <property>
    6 <name>yarn.nodemanager.aux-services</name>
    7 <value>mapreduce_shuffle</value>
    8 </property>
    View Code
    • 对HDFS的NameNode进行格式化
      • 创建 /root/training/hadoop-2.7.3/tmp
      • hdfs namenode -format
      • Storage directory /root/training/hadoop-2.7.3/tmp/dfs/name has been successfully formatted

      

    • 启动
      • HDFS:start-dfs.sh
      • Yarn:start-yarn.sh
      • start-all.sh
      • jps:查看进程
      • 通过Web Console访问
        • Yarn:8088
        • hdfs:50070
    • SSH免密码登录
      • 对称加密:加密解密同ls .一个文件
      • 不对称加密:加密解密两个文件(公钥私钥;谁登录谁生成)
      • 配置
        • ssh-keygen -t rsa:生成密钥对(RSA算法,一路回车)

        • ssh-copy-id -i .ssh/id_rsa.pub root@bigdata111

      • 认证:
        • B随机产生一个字符串,用A的公钥加密后发回给A
        • A收到B发来的字符串,用私钥解密后发回给B
        • B对比两个字符串是否一样
        • ssh bigdata111

    全分布模式

    • 至少3台机器
    • 主节点bigdata112,从节点bigdata113、bigdata114
    • 安装Linux、JDK、关闭防火墙
    • 配置免密码登录(两两之间)
    • 保证集群时间同步
    • 在主节点上安装hadoop,将安装好的目录复制到从节点上
    • 在主节点上启动集群,执行程序

     HA模式

    • 集群功能:Fail Over(失败迁移)、Load Balance(负载均衡)
    • 实现失败迁移
    • 两个NameNode,一个Active,一个StandBy
    • 客户端连接ZK获取主节点信息
    • NameNode通过FailOverController向ZK发送状态信息
    • JournalNode(至少两个)管理NameNode的日志,通过日志恢复元信息
    • 一个NameNode挂掉后,通过ZK进行切换
    • 理论上需要9台机器:ZK(3)+JournalNode(2)+NameNode(2)+DataNode(2)
    • 简化后需要4台

    • 在bigdata112上安装ZK,配置好后复制到bigdata113、bigdata114
    • 在bigdata112上安装hadoop,配置好后复制到bigdata113、bigdata114、bigdata115
      • 在 hdfs-site.xml 中配置隔离机制,否则会导致脑裂
        • 脑裂:HA环境中,同一时刻,HDFS中存在多个Active的NameNode,DataNode不知道听谁指挥
        • 为何脑裂:网络问题,心跳信息没有成功发送到ZK,ZK切换NameNode
        • 如何隔离:切换NameNode前,先Kill掉其他NameNode
    • 启动ZK集群
    • 启动bigdata112、bigdata113 的 journalNode
    • 在bigdata112上格式化HDFS
      • hdfs namenode -format
      • 将/root/training/hadoop-2.7.3/tmp拷贝到bigdata113的/root/training/hadoop-2.7.3/tmp下(保证两个NameNode维护信息一致)
      • hdfs zkfc -formatZK
    • 在bigdata112上启动Hadoop集群(bigdata113上的ResourceManager需要单独启动)

     

    HDFS联盟

    • 实现负载均衡
      • 分摊客户端压力
      • 缓存更多元信息
    • 两个NameNode都是Active
      • 两个NameNode维护的是不一样的元信息
      • 每个DataNode向不同的NameNode注册
      • 通过集群前端的代理服务器根据路由规则转发客户端请求
      • 代理服务器和NameNode在一起
    • 搭建
      • 集群规划
        • NameNode:bigdata112  bigdata113
        • DataNode:bigdata114  bigdata115
      • 在bigdata112上安装hadoop
      • 配置路由规则(viewFS),修改core-site.xml文件
      • 复制到bigdata113、bigdata114、bigdata115
      • 在NameNode(bigdata112、bigdata113)上格式化   
      • 根据路由规则,在每个NameNode上创建目录
      • 操作HDFS
        • 看到的是viewFS定义的路由规则

    集群脚本

    • 配置文件

    deploy.conf

    1 #集群角色规划
    2 node01,master,all,hadoop,hive
    3 node02,slave,all,hadoop,hive
    4 node03,slave,all,hadoop,hive
    View Code
    • 集群分发脚本
      • 授权脚本:chmod u+x runRemoteCmd.sh

    deploy.sh

     1 #!/bin/bash
     2 if [ $# -lt 3 ]
     3 then
     4     echo "Usage:./deploy.sh srcFile(or Dir) descFile(or Dir) MachineTag"
     5     echo "Usage:./deploy.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"
     6     exit
     7 fi
     8 
     9 src=$1
    10 dest=$2
    11 tag=$3
    12 
    13 if [ 'b'$4'b' == 'bb' ]
    14 then
    15     confFile=/root/tools/deploy.conf
    16 else
    17     confFile=$4
    18 fi
    19 if [ -f $confFile ]
    20 then 
    21     if [ -f $src ]
    22     then
    23         for server in `cat $confFile | grep -v '^#' | grep ','$tag',' | awk -F',' '{print $1}'`
    24         do
    25             scp $src $server":"$dest
    26         done
    27     elif [ -d $src ]
    28     then    
    29         for server in `cat $confFile | grep -v '^#' | grep ','$tag',' | awk -F',' '{print $1}'`
    30         do
    31             scp -r $src $server":"$dest
    32         done
    33     else
    34         echo "Error:No source file exist"
    35     fi
    36 else
    37     echo "Error:Please assign config file"
    38 fi
    View Code
    • 命令同步脚本

    runRemoteCmd.sh

     1 #!/bin/bash
     2 if [ $# -lt 2 ]
     3 then
     4     echo "Usage:./runRemoteCmd.sh Command MachineTag"
     5     echo "Usage:./runRemoteCmd.sh Command MachineTag confFile"
     6     exit
     7 fi
     8 
     9 cmd=$1
    10 tag=$2
    11 
    12 if [ 'b'$3'b' == 'bb' ]
    13 then 
    14     confFile=/root/tools/deploy.conf
    15 else 
    16     confFile=$3
    17 fi
    18 if [ -f $confFile ]
    19 then
    20     for server in `cat $confFile | grep -v '^#' | grep ','$tag',' | awk -F',' '{print $1}'`
    21         do
    22             echo "*************$server***************"
    23             ssh $server "source /etc/profile; $cmd"
    24         done
    25 else
    26     echo "Error:Please assign config file"
    27 fi
    View Code

    • 安装jdk
      • 创建软连接(快捷方式):ln -s jdk1.8.0_51 jdk
      • 环境变量
        • .bashrc:用户级
        • /etc/profile:全局

    时间同步

    • CentOS7用ntpdate
    • CentOS8用chrony
    • 查看版本:cat /etc/*release

    参考

    厦大公开课

    https://dblab.xmu.edu.cn/post/8197/

    集群脚本课程

    https://edu.csdn.net/course/play/11032/239269

    linux shell 参数传递

    https://www.runoob.com/linux/linux-shell-passing-arguments.html

    chrony服务安装与配置

    https://baijiahao.baidu.com/s?id=1655260653687604326&wfr=spider&for=pc

    修改阿里云id

    https://blog.csdn.net/dianyeyu0359/article/details/102335754

    linux空格问题

    https://blog.csdn.net/dreamerway/article/details/20449381

    kafka自动化脚本部署

    https://blog.csdn.net/sinat_32176947/article/details/79690653

  • 相关阅读:
    Android中的数据结构
    Android之makefile
    AndroidMainfest详解
    源码分析之AsyncTask
    源码分析之AsyncTask
    优化apk的odex处理
    arguments简单函数 求整数递加和
    js提取DOM属性和设置DOM属性值
    var定义变量的使用细节
    关于ID命名 一个页面唯一
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12342677.html
Copyright © 2011-2022 走看看