Apache Ambari源码安装

Apache Ambari是Apache Hadoop官方推荐的配置、管理和监控工具。所以我首先尝试了Apache Ambari 2.7.5源码安装的方式,这种安装方式对环境和软件的版本都有要求。我解决了一部分问题,最后卡在:Too many files with unapproved license,没有继续尝试下去。后来我找到一篇帖子,里面涵盖了我遇到的所有问题。https://www.yinxiang.com/everhub/note/cf31361a-f451-416c-bb02-fe132c540f5a

Cloudera Ambari套件安装

接着我尝试用Cloudera Ambari 2.7.5套件安装的方式,但是从2021年1月31日起,Cloudera Ambari和CDH都需要成为Cloudera用户才能下载,也就是不再提供免费下载。

在stackoverflow阅读Apache Ambari源码安装问题的解决方案时,发现用户steven-matison在GitHub提供了一个Demo Data Platform for Ambari项目,包含他自己改造过的Ambari套件的yum源。

我按照他说的步骤成功安装了Ambari,但是在启动NameNode和DataNode的失败,从日志上看是hdfs-client安装失败。到这个阶段,我已经花了接近一天的时间,这让我失去了继续尝试的耐心。

接下来我想找一个非官方提供的标准Ambari的yum源,而不是非标准的yum源,我找到了两篇可能有用的资料。一篇是阿里云对Ambari的安装介绍,包含了组件安装失败后重试的方式,可能可以解决我遇到的hdfs-client安装失败的问题。另一篇是华为云鲲鹏提供的Ambari yum源,不过只包含AArch64(AMD)的版本,没有X86_64(Inter)的版本,整个yum源比较大。下载的过程,我开始尝试直接安装Hadoop集群,过程比较顺利,所以我并没有尝试鲲鹏的yum源。

Apache Hadoop集群安装

我安装的是Apache Hadoop 3.1.1版本,翻了几篇帖子,这个版本和其他软件的兼容性比较好。

安装过程和配置含义的说明参考官方文档:https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-common/ClusterSetup.html

配置hostname

准备3台主机,将hostname分别设置为:hdp1、hdp2、hdp3。
第一台主机执行下面命令,其他主机替换实际的hostname。

  1. hostnamectl set-hostname hdp1

配置/etc/hosts

假设三台主机的ip分别是:10.2.1.151、10.2.1.152、10.2.1.153。
每一台主机的/etc/hosts都增加以下配置,通过主机名可以查找到对应主机。

  1. 10.2.1.151 hdp1
  2. 10.2.1.152 hdp2
  3. 10.2.1.153 hdp3

配置SSH免密码

第一台主机hdp1执行:

  1. # 生成ssh密钥对
  2. ssh-keygen
  3. # 将hdp1的ssh公钥追加到~/.ssh/authorized_keys中
  4. ssh-copy-id hdp1
  5. # 将hdp1的authorized_keys拷贝到hdp2中,hdp2可以通过ssh免密访问hdp1
  6. scp ~/.ssh/authorized_keys hdp2:~/.ssh/

第二台主机hdp2执行:

  1. # 生成ssh密钥对
  2. ssh-keygen
  3. # 将hdp2的ssh公钥追加到~/.ssh/authorized_keys中
  4. ssh-copy-id hdp2
  5. # 将hdp2的authorized_keys拷贝到hdp3中,hdp3可以通过ssh免密访问hdp1和hdp2
  6. scp ~/.ssh/authorized_keys hdp3:~/.ssh/

第三台主机hdp3执行:

  1. # 生成ssh密钥对
  2. ssh-keygen
  3. # 将hdp3的ssh公钥追加到~/.ssh/authorized_keys中
  4. ssh-copy-id hdp3
  5. # 将hdp3的authorized_keys拷贝到hdp1中,hdp1可以通过ssh免密访问hdp1、hdp2和hdp3
  6. scp ~/.ssh/authorized_keys hdp1:~/.ssh/
  7. # 将hdp3的authorized_keys拷贝到hdp2中,hdp2可以通过ssh免密访问hdp1、hdp2和hdp3
  8. scp ~/.ssh/authorized_keys hdp2:~/.ssh/

安装Oracle JDK 1.8

从Oracle官方下载JDK 1.8 RPM安装,我使用的版本是1.8.0_301。

安装chrony

chrony用于同步服务器集群的时间。

  1. yum install chrony
  2. yum enable chronyd
  3. yum start chronyd

安装Apache Hadoop

下载hadoop-3.1.1.tar.gz至/usr/local目录,解压,建立软连接ln -s /usr/local/hadoop-3.1.1 /usr/local/hadoop。

创建/etc/profile.d/hadoop.sh,配置环境变量HADOOP_HOME、PATH和其他变量:

  1. export HADOOP_HOME=/usr/local/hadoop
  2. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  3. export HDFS_NAMENODE_USER=root
  4. export HDFS_DATANODE_USER=root
  5. export HDFS_SECONDARYNAMENODE_USER=root
  6. export YARN_NODEMANAGER_USER=root
  7. export YARN_RESOURCEMANAGER_USER=root

生效环境变量,source /etc/profile.d/hadoop.sh。

配置$HADOOP_HOME/etc/hadoop/hadoop-env.sh

需要配置JAVA_HOME,比如我的是:

  1. export JAVA_HOME=/usr/java/jdk1.8.0_301-amd64

配置$HADOOP_HOME/etc/hadoop/workers

workers中配置集群中的所有结点,方便用脚本批量操作,比如统一启动或停止。

  1. hdp1
  2. hdp2
  3. hdp3

配置$HADOOP_HOME/etc/hadoop/*.site.xml

core-site.xml

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://hdp1:9000</value>
  5. </property>
  6. <property>
  7. <name>io.file.buffer.size</name>
  8. <value>131072</value>
  9. </property>
  10. </configuration>

yarn-site.xml

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hdp1</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/var/hdp/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/var/hdp/datanode</value>
    </property>
</configuration>

启动Apache Hadoop集群

在任意一台主机执行命令:

# 格式化namenode指向的目录,形成分布式文件系统
hdfs namenode -format <cluster_name>
# 启动集群的namenode和datanode服务
start-dfs.sh
# 启动集群的resourcemanager和nodemanager等服务
start-yarn.sh

使用ps aux|grep hadoop查看所有服务启动情况,如果遇到问题,可以通过启动日志分析,日志的默认目录在$HADOOP_HOME/logs。

Web-UI界面

hdfs管理界面:http://hdp1:9870/
yarn管理界面:http://hdp1:8088/