大数据环境搭建过程记录

步骤一、配置免密登录

  配置服务器间ssh免密登录https://atbulbs.github.io/2018/02/03/Hexo%E5%8D%9A%E5%AE%A2%E7%9A%84%E4%BD%BF%E7%94%A8/

前提条件

  1. 系统已经安装有ssh
  2. 操作用户最好拥有/etc/hosts文件的读写权限或者用户拥有sudo权限
  3. 操作用户拥有ssh-keygen命令权限

过程

  1. 修改hostss文件(/etc/hosts)

    1
    sudo vim /etc/hosts

    添加以下内容

    1
    2
    3
    192.168.126.150 hadoop1
    192.168.126.151 hadoop2
    192.168.126.152 hadoop3
  2. 在每一台服务器上生成ssh登录密钥

    1
    ssh-keygen -t rsa

      在~文件夹(当前用户个人目录)下生成.ssh隐藏文件夹以及id_rsa id_rsa.pub文件,id_rsa是私钥文件,id_rsa.pub是公钥文件

  3. 分别将所有的(这里指三台服务器)id_rsa.pub内的内容拼接到一个文件中(authorized_keys),内容如下

    1
    2
    3
    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA9/09V+rJxmK1Qpoh3q1egXc1XLaBhO/gZCvQYzdC3CqN3Bv+IYduernvSXCLGZGweDP3Caw223/QiDDe2g2FB3+XmUSlkldpaRS5fGMIO4OAM5MjNtmkiruLuH0d8OQubxkzT8TTCfJLosfnT0jbls6cYPHmidcy1jAU82TpExCgz73zrJNLRXnS7tPPMW4IK9A0mChg11Ohn+ldZOqK7P80kR5951rHBd97fCLl8xl5UZ1Ep5XslT+Q+DLUhYPXk0NWNnDCPNsnNEAdF/jfBOOscrZkU0ahz1rYP6Zz9xDcC2kxhEDwf9aXD/wLOXJv4B/hv6/RUtrbYVrl3Fk30w== test@hadoop01
    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4Sd0LKEhnuHhYdI/nM8diQZSKjeJ4LYIjyVqqdp1igKXFBxU2EcVADkq4S/Uupx5GBlTxmVWWREp5W3pcK0Z+I8FCpr4AAVpKqOOua5RUJg7NzmTiWf9tUnVKerwa7IYi/n0wuwBNyps123ajOtNkC4oFez3NQgXywpMX7wIQVLCldtRQCm2UHZQHMU55qHnEj3BzZqNg4vdPRygxDZubB65pQJVIBWp03LsKUahm3bL3hUL7A2mlUwCz/mXZrZUc1q/DSmGIGpxc2jc/ukSV/gG5APgyxTiEkvSIECPWhP9fJCGlTbng+NXVFtbPQ6vI0Mblb02s4G8tMWvRB9Jrw== test@hadoop02
    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3GLFdnz5aOG3XLT+8GR/YzqJXG2K+b7M+CRiVRPcqJJvqe9UFu8/IydM/jQTIi5OhHBXqnGMcAjK76fEkMiWaPdmILbiMYr11Lx56ZhqRqsVvE8ndO2f5j45vvADZbGAJWGEVIr6tnf6QBocBg/j4h9BWryFvgfhdzM+C3CZmyRyOUJwz8NNmkXySIH/1EUHOSrwmOnO12HwLW3/nXaowR9KfyYbz2tjNJdGApeQwVQgkKeFZ8Pqq8UZBcFZeg3Zbzdwxo86y1lUxL896Wgh++jhys5eyKgruOgnSgbqy0kOu32R/uRaSt9IrnkPMPGaEi340x9+mcm9c8/PoU36Cw== test@hadoop03
  4. 将authorized_keys文件上传到每一台服务器下的~/.ssh/下

  5. 修改.ssh文件夹以及authorized_keys文件的权限
    1
    2
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

验证

  使用ssh命令登录其他两台服务器,成功即可,如果服务器间的用户名相同,则可以忽略用户名

步骤二、jdk安装与配置

  下载安装jdk并配置环境变量

前提条件

  1. 已经下载jdk的安装包(这里选用tar.gz压缩包文件)
  2. 操作用户最好拥有/etc/profile文件的读写权限或者用户拥有sudo权限

安装配置过程

  1. 解压
    1
    2
    mkdir -p /opt/java
    tar -zxvf jdk-8u201-linux-x64.tar.gz -C /opt/java
  2. 修改环境变量

    1
    sudo vim /etc/profile

    在profile文件末尾添加

    1
    2
    3
    export JAVA_HOME=/opt/java/jdk1.8.0_201
    export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
    export CLASSPATH=.$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    使修改的profile立刻生效

    1
    source /etc/profile

步骤三、zookeeper安装与配置

  配置zookeeper集群

前提条件

  1. 已经下载zookeeper的安装包

安装配置过程

  1. 解压安装包
    1
    2
    mkdir -p /opt/zookeeper
    tar -zxvf zookeeper.tar.gz -C /opt/zookeeper
  2. 配置zoo.cfg
    在zookeeper/conf目录下,将zoo_sample.cfg复制为zoo.cfg,在其中配置
    1
    2
    3
    4
    5
    6
    7
    tickTime=4000
    initLimit=20
    dataDir=/opt/zookeeper/data
    clientPort=2181
    server.1=192.168.126.150:2888:3888
    server.2=192.168.126.151:2888:3888
    server.3=192.168.126.152:2888:3888
    注意,zookeeper集群中所有节点的zoo.cfg文件一致。
  3. 在zoo.cfg配置的dataDir下创建myid文件,其中只有一个数字,表明当前节点的server.id,与zoo.cfg中配置一致。
  4. 修改日志文件输出位置(红色为需要修改的地方),按天输出到指定文件夹
    1
    2
    mkdir -p /opt/log/zookeeper
    vim /opt/zookeeper/bin/zkEnv.sh
    1
    2
    3
    4
    5
    6
    7
    8
    if [ "x${ZOO_LOG_DIR}" = "x" ]
    then
    ZOO_LOG_DIR="/opt/log/zookeeper/"
    fi
    if [ "x${ZOO_LOG4J_PROP}" = "x" ]
    then
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
    fi
    1
    vim /opt/zookeeper/conf/log4j.properties
    1
    2
    zookeeper.root.logger=INFO, ROLLINGFILE
    log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
  5. 启动zk服务:zkServer.sh start(启动应尽量所有节点同时启动)
    停止zk服务:zkServer.sh stop
    查看zk状态:zkServer.sh status
    重启zk服务:zkServer.sh restart

步骤四、hadoop安装与配置

  1. 安装和配置hadoop1节点的hadoop
    1. 配置hadoop-env.sh
    2. 配置jdk安装目录
    3. 配置hadoop配置文件目录
    4. 配置环境变量
      1
      2
      export JAVA_HOME=/opt/java/jdk1.8.0_201
      export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
  2. 配置core-site.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://ns</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/log/hadoop</value>
    </property>
    <property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
    </property>
    </configuration>
  3. 配置hdfs-site.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <configuration>

    <property>
    <name>dfs.nameservices</name>
    <value>ns</value>
    </property>
    <property>
    <name>dfs.ha.namenodes.ns</name>
    <value>nn1,nn2</value>
    </property>
    <property>
    <name>dfs.namenode.rpc-address.ns.nn1</name>
    <value>hadoop1:9000</value>
    </property>
    <property>
    <name>dfs.namenode.http-address.ns.nn1</name>
    <value>hadoop1:50070</value>
    </property>
    <property>
    <name>dfs.namenode.rpc-address.ns.nn2</name>
    <value>hadoop3:9000</value>
    </property>
    <property>
    <name>dfs.namenode.http-address.ns.nn2</name>
    <value>hadoop3:50070</value>
    </property>
    <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/ns</value>
    </property>
    <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/hadoop/journal</value>
    </property>
    <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
    </property>
    <property>
    <name>dfs.client.failover.proxy.provider.ns</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
    </property>
    <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/sysmon/.ssh/id_rsa</value>
    </property>
    <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    <property>
    <name>dfs.permissions</name>
    <value>false</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>/opt/log/hadoop/namenode</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>/opt/log/hadoop/datanode</value>
    </property>
    </configuration>
  4. 配置mapred-site.xml
    1
    2
    3
    4
    5
    6
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>
  5. 配置yarn-site.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <configuration>
    <!-- Site specific YARN configuration properties -->
    <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    </property>
    <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop1</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop2</value>
    </property>
    <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
    </property>
    <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
    </property>
    <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarn-ha</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop1</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>4</value>
    </property>
    <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>4096</value>
    </property>
    </configuration>
  6. 配置环境变量
    1
    2
    3
    4
    5
    export JAVA_HOME=/opt/java/jdk1.8.0_201
    export ZOO_HOME=/opt/zookeeper
    export HADOOP_HOME=/opt/hadoop
    export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ZOO_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export CLASSPATH=.$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  7. 根据配置文件,创建相关文件夹,用来存放对应数据
    在hadoop目录下创建 journal目录
    在/opt/log/hadoop/目录下 创建namenode,datanode目录
  8. 通过scp命令,将hadoop安装目录远程cp到其他节点
  9. 启动zookeeper集群
    1
    zkServer.sh start
  10. 格式化zookeeper
    在有namenode的节点上 执行
    1
    hdfs zkfc -formatZK #这个指令的作用是在zookeeper集群上生成ha节点
  11. 启动journalnode集群
    在三个节点上分别执行
    1
    hadoop-daemon.sh start journalnode
  12. 在hadoop1节点上格式化namenode
    1
    hadoop namenode -format
  13. 启动hadoop1节点的namenode
    1
    hadoop-daemon.sh start namenode
  14. 把hadoop3节点变为 standby namenode节点
    在hadoop3节点上执行
    1
    2
    hdfs namenode -bootstrapStandby
    hadoop-daemod.sh start namenode
  15. 在三个节点上启动datanode节点,分别执行
    1
    hadoop-daemon.sh start datanode
  16. 启动zkfc(启动FalioverControllerActive)
    在hadoop1,hadoop3节点上执行
    1
    hadoop-daemon.sh start zkfc
  17. 在hadoop1节点上启动resourcemanager
    1
    start-yarn.sh
  18. 在hadoop2节点上启动副resourcemanager
    1
    yarn-daemon.sh start resourcemanager
  19. 启动之后
    hadoop1节点的进程状态:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    15376 ResourceManager
    20610 Jps
    20468 Kafka
    18838 QuorumPeerMain
    14999 DataNode
    14809 NameNode
    15484 NodeManager
    14590 JournalNode
    15182 DFSZKFailoverController
    hadoop2节点的进程状态:
    1
    2
    3
    4
    5
    6
    23554 DataNode
    23842 ResourceManager
    24068 NodeManager
    24965 Jps
    25690 QuorumPeerMain
    23324 JournalNode
    hadoop3节点进程状态:
    1
    2
    3
    4
    5
    6
    7
    8
    22340 Jps
    16391 JournalNode
    16872 DataNode
    17081 DFSZKFailoverController
    22092 Kafka
    25932 QuorumPeerMain
    17437 NodeManager
    16719 NameNode

步骤五、kafka安装

  1. 解压软件
    1
    2
    mkdir -p /opt/kafka
    tar -zxvf kafka_2.11-1.0.2\ .tgz -C /opt/kafka
  2. 修改配置文件 config/server.properties —-红色为修改内容,黑色为原先内容,蓝色为添加内容

    broker.id=0 #集群内kafka的id,每一台都不能一样 host.name=192.168.126.150 log.retention.hours=168 message.max.byte=5242880 default.replication.factor=2 replica.fetch.max.bytes=5242880
  3. 启动(每一台集群内的服务器)

    1
    2
    cd /opt/kafka/kafka_2.11-1.0.2/bin
    ./kafka-server-start.sh -daemon ../config/server.properties
  4. 测试
    1
    2
    3
    4
    5
    #一台服务器中创建消息队列test1,指定2个副本,1个分区
    ./kafka-topics.sh --create --zookeeper hadoop1:2181,hadoop2:2181,hadoop3:2181 --replication-factor 2 --partitions 1 --topic test1
    ./kafka-console-consumer.sh --zookeeper mater:2181,hadoop2:2181,hadoop3:2181 --topiv test1
    #以下命令在另一台服务器中操作
    ./kafka-console-producer.sh --broker-list hadoop1:9092,hadoop2:9092,hadoop3:9092 --topic test1
    在生产者中输入文字,在消费者中查看,验证

步骤六、hive安装与配置

  1. hive不需要任何配置就可以运行,但需配置更改mysql元数据存储
  2. 删除hdfs中的/user/hive(之前运行过hive后,才会出现此目录)
    1
    hadoop fs -rmr /user/hive
  3. 复制hive/conf/hive-default.xml.template为hive-site.xml,然后在配置中修改:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.126.154:3306/hive?useSSL=false</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>account</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>password</value>
    </property>
    将mysql的链接jar包拷贝到hive到lib目录下。
    还有,将hive-site.xml配置文件里的 value值带:的,都改成绝对路径,否则报错,hadoop不认带:的路径。(所有的 ${system:java.io.tmpdir} 改成 /tmp/)
  4. mysql中要手动创建hive数据库
    1
    create database hive character set latin1;
    如果出现没有权限的问题,在mysql中授权(在安装mysql的机器上执行)
    1
    mysql -r root -p
    1
    2
    3
    grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
    grant all privileges on *.* to 'root'@'hadoop1' identified by 'root' with grant option;
    flush privileges;
  5. 初始化元数据
    1
    schematool -initSchema -dbType mysql

步骤七、hbase安装与配置

  1. 修改conf/hbase-env.sh
    1
    2
    export JAVA_HOME=/opt/java/jdk1.8.0_201
    export HBASE_MANAGES_ZK=false
  2. 修改hbase-site.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <configuration>
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://hadoop1:9000/hbase</value>
    </property>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
    </property>
    </configuration>
  3. 修改conf/regionservers文件,其中配置所有hbase主机,每个主机独占一行,hbase启动或关闭时会按照此配置顺序执行。
  4. 启动
    主节点:
    1
    start-hbae.sh
    在一从节点启动备用hhadoop1实现高可用:
    1
    hbase-daemon.sh start hadoop1
    关闭集群:stop-hbase.sh