当前位置: 首页 > 工具软件 > Apache JDO > 使用案例 >

Apache Hadoop大数据集群及相关生态组件安装

楚知
2023-12-01

写在前头

本文就是一些个人安装 Apache Hadoop集群(包括其一些生态组件)时的一些过程。

集群安装部署

Hadoop

  1. 确定集群数,最好为奇数台

  2. 修改hosts文件映射(最好保证机器的ip为静态ip)

  3. 上传Hadoop,jdk压缩包,并解压

  4. 配置环境变量

  5. 关闭防火墙

    # 查看防火墙状态
    chkconfig iptables --list
    # 永久关闭防火墙
    chkconfig iptables off
    
  6. 安装ssh,并设置无秘登录

  7. 修改Hadoop的配置文件($HADOOP_HOME/etc/hadoop/)

    1. 修改Hadoop-env.sh文件

      export JAVA_HOME=${JAVA_HOME} # 将文件中的此行换成下一行
      export JAVA_HOME=/home/phoenix/apps/jdk
      
    2. 修改hdfs-site.xml文件

      <property>
      	<!--配置系统的数据自动备份的数量,默认三份-->    
      	<name>dfs.replication</name>
          <value>2</value>
      </property>
      <property>
          <!--设置namenode的ip及端口号,hadoop2.0之前默认9000.之后默认8020端口-->
      	<name>dfs.namenode.rpc-address</name>
          <value></value>
      </property>
      <property>
          <!--设置namenode的文件目录,默认为${hadoop.tmp.dir}/dfs/name-->
      	<name>dfs.namenode.name.dir</name>
          <value></value>
      </property>
      <property>
          <!--HDFS的datanode的文件存储目录,默认为${hadoop.tmp.dir}/dfs/data-->
      	<name>dfs.datanode.data.dir</name>
          <value></value>
      </property>
      <property>
          <!--HDFS的权限,默认为true,即用户连接时需要检查其权限-->
      	<name>dfs.permissions.enabled</name>
          <value>false</value>
      </property>
      
    3. 修改core-site.xml文件

      <property>
          <!--设置hdfs所存放的文件目录。默认在/tmp/hadoop-${user.name}文件中-->
      	<name>hadoop.tmp.dir</name>
          <value></value>
      </property>
      
    4. mapred-site.xml.template文件更名为mapred-site.xml,并修改配置

      <property>
          <!--设置mr的执行框架,默认为local本地执行-->
      	<name>mapreduce.framework.name</name>
      	<value>yarn</value>
      </property>
      
    5. 修改yarn-site.xml文件

      <property>
      	<name>yarn.nodemanager.aux-services</name>
      	<value></value>
          <!--<value>mapreduce_shuffle</value>-->
      </property>
      <property>
      	<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
          <value>org.apache.hadoop.mapred.ShuffleHandler</value>
      </property>
      
    6. 修改slaves文件

      添加要作为从节点的主机名(要保证该主机名能够映射成ip地址)或者ip
      slave1
      slave2
      ...
      
  8. 为slave设置配置信息(此处为了简略,将主机的配置信息发送到从节点)

  9. 格式化集群

    hdfs namenode -format
    
  10. 启动/停止集群

    #开启集群
    start-dfs.sh
    #开启yarn
    start-yarn.sh
    #关闭集群
    stop-dfs.sh
    

HA与ZOOKEEPER

作为一个集群,当其namenode节点无效时是最为致命的,因而我们需要使其高可用。

  1. 上传zookeeper安装包,解压并配置环境变量

  2. 修改zookeeper配置${zookeeper_home}​/conf下的文件

    1. 将zoo_example.cfg文件改为zoo.cfg
    2. 修改datadir属性,即zookeeper的数据文件所在的位置(如果你觉得有必要的话),默认为/tmp/zookeeper文件夹
    3. 添加集群信息 server.N=YYY:A:B,其中N代表服务器编号,即myid的值;YYY代表主机ip;A代表LF通信端口,一般使用2888;B代表选举端口,一般为3888。
    4. 在上面datadir属性指定的目录下创建名为 myid 的文件,其内容为所对应的myid的值。保证集群中每个节点的myid是不一致的。
  3. 修改配置文件

    1. 修改core-site.xml

      <property>
          <name>ha.zookeeper.quorum</name>
          <description>
              A list of ZooKeeper server addresses, separated by commas, that are
              to be used by the ZKFailoverController in automatic failover.
          </description>
          <value>master:2181,slave1:2181,slave2:2181</value>
      </property>
      
    2. 修改hdfs-site.xml

      <!--配置namenode节点,主备-->
      <property>
        <name>dfs.nameservices</name>
        <value></value>
      </property>
      <property>
          <!--EXAMPLENAMESERVICE为${dfs.nameservices}属性值,此项配置为指定主节点与主备节点-->
        	<name>dfs.ha.namenodes.EXAMPLENAMESERVICE</name>
      	<value></value>
      	<description>
      		The prefix for a given nameservice, contains a comma-separated list of namenodes for a given nameservice (eg EXAMPLENAMESERVICE).
      	</description>
      </property>
      <property>
          <!--当集群为HA或者联邦集群时,我们必须指定多个主节点-->
      	<name>dfs.namenode.rpc-address</name>
      	<value></value>
      	<description>
      		RPC address that handles all clients requests. In the case of HA/Federation where multiple namenodes exist, the name service id is added to the name e.g. dfs.namenode.rpc-address.ns1 dfs.namenode.rpc-address.EXAMPLENAMESERVICE The value of this property will take the form of nn-host1:rpc-port.
      	</description>
      </property>
      <!--设置共享日志-->
      <property>
      	<!-- namenode间用于共享编辑 日志的journal节点列表 -->
          <name>dfs.namenode.shared.edits.dir</name>
          <value>qjournal://master:8485;slave1:8485;slave2:8485/ns1</value>
      </property>
      <property>
          <!-- journalnode 上用于存放edits日志 的目录 -->
          <name>dfs.journalnode.edits.dir</name>
          <value>/home/hadoop/phoenix/hadoop/tmp/data/dfs/jn</value>
      </property>
      <!--开启故障转移-->
      <property>
          <!-- 是否开启自动故障转移。建议开启,true -->
          <name>dfs.ha.automatic-failover.enabled</name>
          <value>true</value>
      </property>
      <!--防止脑裂-->
      <property>
          <!-- HDFS的HA 功能的防脑裂方法。可以是内建的方法(例如shell和sshfence)或者用户定义的方法。 建议使用sshfence(hadoop:9922),括号内的是用户名和 端口,注意,这需要NN的2台机器之间能够免密码登陆 fences是防止脑裂的方法,保证NN中仅一个是Active的,如果2者都是Active的,新的会 把旧的强制Kill。 -->
          <name>dfs.ha.fencing.methods</name>
          <value>sshfence</value>
      </property>
      <property>
          <!-- 密钥认证文件-->
          <name>dfs.ha.fencing.ssh.private-key-files</name>
          <value>/home/phoenix/.ssh/id_rsa</value>
      </property>
      
  4. 开启zkServer

    zkServer.sh start
    
  5. 开启journalNode

    hadoop-daemon.sh start journalNode
    
  6. 格式化集群(只有当第一次格式化时采用):

    hdfs namenode -format
    
  7. 将第一个结点的与第二个节点同步,有两种实现方法(建议使用第二种):

    1. 在第二个节点使用 hdfs namenode -bootstrapStandby
    2. 将第一个节点的namenode的文件远程拷贝到第二个节点的多对应位置
  8. 在namenode节点上格式化zkfc

    hdfs zkfc -foormatZK
    
  9. 启动集群

    # 启动hdfs
    start-dfs.sh
    # 启动yarn
    start-yarn.sh
    # hdfs和yarn 一起启动(不建议使用)
    start-all.sh
    

HBASE

  1. 解压缩hbase的压缩包,并配置相关环境变量

  2. 修改hbase-env.sh,增加java_home

  3. 修改 regionservers文件,添加regionserver的节点

  4. 配置备份主机:在conf文件中创建一个名为backup-master的文件,

  5. 修改 hbase-site.xml 文件

    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    <property>
      <name>hbase.rootdir</name>
      <value>hdfs://ns1/hbase</value>
    </property>
    <property>
      <name>hbase.zookeeper.quorum</name>
      <value>master,slave1,slave2,slave3,slave4</value>
    </property>
    <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/home/phoenix/apps/zookeeper/tmp</value>
    </property>
    
  6. 将Hadoop的配置信息与hbase连接

    1. 将Hadoop_conf_dir添加到hbase的classpath环境变量中 hbase-env.sh
    2. 在conf下创建软连接,指向那些配置文件
    3. 如只要用到小部分的Hadoop的配置信息时,可直接将那些信息写入到hbase-site.xml文件中
  7. 开启hbase

    1. 首先开启zkServer
    2. 开启dfs
    3. 开启yarn
    4. 开启hbase

HIVE

  1. 解压hive的压缩包,并配置相关的环境变量

  2. 上传mysql的连接jar包至hive的lib目录中

  3. 安装mysql

  4. 修改配置文件

    1. 修改hive-env.sh

      export HADOOP_HOME = /home/phoenix/apps/hadoop
      export HIVE_CONF_DIR = /home/phoenix/apps/hive/conf
      export HIVE_AUX_JARS_PATH = /home/phoenix/apps/hive/lib
      
    2. 修改hive-site.xml

      <!--主要将其默认数据库改为mysql-->
      <property>
          <name>javax.jdo.option.Multithreaded</name>
          <value>true</value>
          <description>Set this to true if multiple threads access metastore through JDO concurrently.</description>
      </property>
      <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <!--<value>jdbc:derby:;databaseName=metastore_db;create=true</value>-->
          <value>JDBC:mysql://localhost:3306/hivedb?createDatabaseIfNotExist=true</value>
          <description>
              JDBC connect string for a JDBC metastore.
              To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
              For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
          </description>
      </property>
      <property>
          <name>javax.jdo.option.ConnectionDriverName</name>
          <!--<value>org.apache.derby.jdbc.EmbeddedDriver</value>-->
          <value>com.mysql.jdbc.Driver</value>
          <description>Driver class name for a JDBC metastore</description>
      </property>
      <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <!--<value>APP</value>-->
          <value>hive</value>
          <description>Username to use against metastore database</description>
      </property>
      <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <!--<value>mine</value>-->
          <value>hivepwd</value>
          <description>password to use against metastore database</description>
      </property>
      
    3. 修改core-site.xml

      <property>
          <!--任意节点使用 hadoop 集群的代理用户 hadoop 都能访问 hdfs 集群-->
      	<name>hadoop.proxyuser.hadoop.hosts</name>
          <value>*</value>
      </property>
      <property>
      	<name>hadoop.proxyuser.hadoop.groups</name>
          <value>*</value>
      </property>
      
    4. 修改hdfs-site.xml

      <property>
      	<name>dfs.webhdfs.enabled</name>
          <value>true</value>
      </property>
      

FLUME

暂放

KAFKA

暂放

SPARK

  1. 上传并解压Spark的二进制压缩包。
  2. 配置Spark的环境变量
  3. 修改$SPARK_HOME/conf/slaves文件,添加spark集群模式中的从节点的IP或者是主机名(需修改映射信息)
  4. 拷贝或者创建core-site.xml、hdfs-site.xml文件或者软链接至$SPARK_HOME/conf/下
  5. 修改$SPARK_HOME/conf/spark_env.sh,添加java、hadoop、scala等环境

Kylin

  1. 下载上传Kylin压缩包

  2. 解压

  3. 检查环境变量(Hadoop、Hive、HBase)

  4. 配置环境变量

  5. 修改时区conf/kelin.properties

    kylin.web.timezone=GTM+8
    

Kafka-eagel

Kafka的可视化工具

  1. 下载上传Kafka-eagle压缩包

  2. 解压压缩包(该压缩包中含有一个压缩包,也得压缩,建议将里面的那个压缩包拿出)

  3. 配置环境变量

    KE_HOME=....
    PATH=$PATH:$KE_HOME/bin
    
  4. 修改配置文件system-config.properties

    kafka.eagle.zk.cluster.alias=cluster1,cluster2
    cluster1.zk.list=tdn1:2181,tdn2:2181,tdn3:2181
    # 修改offset存储位置kafka1.5之前默认在zk中,之后在kafka的offset主题中
    cluster1.kafka.eagle.offset.storage=kafka
    cluster2.kafka.eagle.offset.storage=zk
    # 修改db
    kafka.eagle.driver=org.sqlite.JDBC
    kafka.eagle.url=jdbc:sqlite:/hadoop/kafka-eagle/db/ke.db
    kafka.eagle.username=root
    kafka.eagle.password=smartloli
    

问题排查

  1. ERROR namenode.NameNode: Failed to start namenode.
    java.lang.IllegalArgumentException: Does not contain a valid host:port authority: master

    1. dfs.namenode.rpc-address属性配置问题
  2. 格式化没有问题,开启集群的时候连接不上其他节点(连接超时)

    1. 防火墙未关闭,或关闭后未重启配置
    2. 配置错误
  3. 当启动zkServer时,显示连接8485端口错误

    1. journalnode的数据文件位置权限不足
 类似资料: