注:本文档配套一键式Hadoop集群部署(demo)已经开源一键式部署
一键部署目前的bug
需要提前手动安装java
部分xml文件存在两个configuration,需要手动删除空的那个
namenode的/etc/hosts需要手动创建localhost,否则在docker创建时指定的名字可能会导致不可预料的错误
正常配置流程
买好三个服务器
Xshell上配置公网IP,设定namenode以及两个datanode
已经配置完毕
1.正式开始服务器配置
1.1 配置主机名
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=namenode
NETWORKING=yes
HOSTNAME=datanode1
NETWORKING=yes
HOSTNAME=datanode2
安装java
基于centos系统
yum install java -y
配置hosts
vim /etc/hosts
修改为对应的外网
xxx namenode
xxx datanode1
xxx datanode2
SSH免密登录
每个节点都需要操作!!!
首先生成密钥
ssh-keygen
其次传输密钥到所有的连接节点
ssh-copy-id namenode1
ssh-copy-id namenode2
ssh-copy-id datanode
Hadoop安装与配置
配置集群
安装Hadoop,建议从清华园
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
针对于"内网"的兄弟们,可以使用清华源
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/hadoop-3.3.6.tar.gz
解压压缩包(名字可以用ls命令获得)
tar- zxvf hadoop.tar.gz
cd hadoop.xxx
进入到Hadoop配置文件
配置hadoop_env.sh
cd ~/hadoop-3.3.6/etc/hadoop/
vim hadoop-env.sh
# add
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64
配置core-site.xml
每个节点都需要做,每个节点的值都指向namenode
mkdir -p /var/hadoop
vim core-site.xml
# add
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
</property>
</configuration>
配置hdfs-site.xml
vim hdfs-site.xml
# add
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>namenode:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>namenode:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
<description>only cofig in clients</description>
</property>
</configuration>
配置YARN集群
配置mapred.xml.template文件
cp mapred-site.xml.template mapred-site.xml #有时不用
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/root/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/root/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/root/hadoop</value>
</property>
</configuration>
配置yarn-site.xml
vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>namenode</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
<discription>内存,单位MB</discription>
</property>
</configuration>
JAVA环境变量
如果按照yum安装的java,则可以直接在/usr/lib/jvm/jre-xxx下找到对应的jdk
在/etc/profile中加入如下配置(注意版本)
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME="/root/hadoop-3.3.6"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
然后保存修改
source /etc/profile
集群启动与测试
格式化namenode 只需要在namenode上进行
./bin/hdfs namenode -format
这个部分经常会遇到问题
- 当出现ERROR: Cannot execute /usr/local/Hadoop/libexec/hdfs-config.sh
vim /etc/profile
# 修改其中的hadoop_home环境变量为需要的例如
/root/hadoop-xxx
- 当出现xxx is not excuete
检查xml文件(etc目录下)是否有#的注释
启动
首先需要解锁shell中的部分锁定操作‘
vim ./etc/hadoop/hadoop-env.sh
# add
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
需要为每个节点配置其角色,否则其无法运作(网络,自己配置自己)
ssh-copy-id localhost
正式启动
./sbin/start-dfs.sh
./sbin/stop-dfs.sh
验证
./bin/hdfs dfsadmin -report
当显示存活的节点为3,说明配置完成
可视化
打开可视化端口50070/50090
通过
curl http://公网IP:50070
注意,需要现在阿里云的安全组打开对应的端口
启动YARN
./sbin/start-yarn.sh
看YARN状态
.bin/yarn node -list
Spark配置
版本需要十分注意,注意所有的环境都必须完全匹配,否则将导致无法解决且无法预料的错误!
hadoop 3.3.6
python 3.7.2
spark 3.3.4
python安装
可以使用直接make好的python3.7包
也可以手动安装,借鉴:
https://www.cnblogs.com/LemonSqueezz/p/14308729.html
ln -sf /usr/bin/Python-3.7.2/python /usr/bin/python3
当master安装完之后,可以直接传输过去
Spark配置
可以借鉴
https://blog.csdn.net/GotFull/article/details/123436594
但是原文是基于Spark 3.0的配置,虽然目前未发现bug,但不排除未来会遇到新的问题
Mysql配置
从官网下载Mysql,版本需要自行选择
将它分发到多个服务器~/source/Package
并创建mysql专属的文件夹/root/platform/mysql
tar -xvf /root/source/Package/mysql-8.3.0-1.el8.x86_64.rpm-bundle.tar -C /root/platform/mysql
安装sql需要的依赖
yum -y install libaio
yum -y install libncurses*
yum -y install perl perl-devel
在目标文件夹获得许多文件.rpm,分别安装它们:
rpm -ivh ${sql_root}/mysql-community-common-8.3.0-1.el8.x86_64.rpm
rpm -ivh ${sql_root}/mysql-community-client-plugins-8.3.0-1.el8.x86_64.rpm
rpm -ivh ${sql_root}/mysql-community-libs-8.3.0-1.el8.x86_64.rpm
rpm -ivh ${sql_root}/mysql-community-client-8.3.0-1.el8.x86_64.rpm
rpm -ivh ${sql_root}/mysql-community-icu-data-files-8.3.0-1.el8.x86_64.rpm
rpm -ivh ${sql_root}/mysql-community-server-8.3.0-1.el8.x86_64.rpm
注意,在这里很容易出现缺少某个rpm依赖,根据报错额外添加这些rpm即可
启动mysql
systemctl start mysqld.service
查看密码并隐式的将它赋值给变量
password_init=$(cat /var/log/mysqld.log | grep password | awk -F': ' '{print $2}')
重新定义密码
mysql -u root -p
ALTER USER 'root'@'%' IDENTIFIED BY 'password';
基础命令
systemctl stop mysqld
systemctl status mysqld
systemctl start mysqld
% 设置开机自启
systemctl enable mysqld
% Check
systemctl list-unit-files | grep mysqld
下载Hive以及驱动
wget https://mirrors.bfsu.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.37
解压到目的地
tar -zxvf ~/source/Package/apache-hive-3.1.2-bin.tar.gz -C /root/platform/hive
添加JDBC到hive目录
# 上传mysql-connector-java-5.1.38.jar
cd /opt/server/apache-hive-3.1.2-bin/lib