大数据环境搭建-hadoop hive spark
之前在阿里云上有三台服务器组的集群用于学习,但是因为自己懒得设置,开放了所有端口,所有ip,导致被攻击。集群出现了一些问题,懒得去修复,所有干脆重新装一下,顺便记录一下集群的环境搭建。
Linux 系统基础环境设置
-
修改主机名
vim /etc/hostname
我这里有三台节点,分别命名为 node01,node02,node03
-
配置host
vim /etc/hosts
在阿里云上的实例的话,我配置的IP地址是私有的也就是内网IP
172.31.xx.xx node01 172.31.xx.xx node02 172.31.xx.xx node03
-
在自己电脑上添加host映射,这里就需要配置公网ip了,步骤和上面一样。Windows系统配置步骤需要自己查询一下
-
关闭防火墙
首先检查一先防火墙是否关闭,一般来说没有开启的
systemctl status firewalld
如果开启的话需要用下面的命令关闭
systemctl stop firewalld systemctl disable firewalld
-
创建一个普通用户
useradd [USER_NAME] passwd [USER_NAME]
-
配置普通用户的root权限
visudo
或者
vim /etc/sudoers
,在root下添加普通用户权限## Allow root to run any commands anywhere root ALL=(ALL) ALL USER_NAME ALL=(ALL) ALL
如果想在普通用户使用
sudo
命令时不输入密码,可以将最后一个ALL改成NOPASSWD:ALL
-
创建文件夹
进入
/opt
目录,创建两个文件夹module
和software
,第一个将用来存放所有的软件,第二个用来存放所有的软件的压缩包cd /opt/ mkdir module software
修改两个文件的所有者为刚创建的普通用户
chown USER_NAME:USER_NAME /opt/module /opt/software
-
配置三台机器的免密
在三台节点上执行
ssh-keygen -t rsa
ssh-copy-id node01 ssh-copy-id node02 ssh-copy-id node03
JDK 安装
安装在node01上
-
查看节点是否已安装JDK
rpm -qa | grep -i java
卸载现有JDK
rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
-
解压JDK
所有软件包都在
/opt/software
文件夹下,解压JDKcd /opt/software tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
配置环境变量
新建/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
添加如下内容
#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin
检查是否安装成功
source /etc/profile java -version
HADOOP 安装
安装
解压HADOOP安装包
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
在/etc/profile.d/my_env.sh
中添加环境变量
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
分发软件和配置
xsync /etc/profile.d/my_env.sh
xsync /opt/module
集群配置
配置文件路径:$HADOOP_HOME/etc/hadoop
-
核心配置文件
vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://node01:8020</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置HDFS网页登录使用的静态用户为hadoop --> <property> <name>hadoop.http.staticuser.user</name> <value>hadoop</value> </property> <!-- 配置该hyy(superUser)允许通过代理访问的主机节点 --> <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <!-- 配置该hyy(superUser)允许通过代理用户所属组 --> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> <!-- 配置该hyy(superUser)允许通过代理的用户--> <property> <name>hadoop.proxyuser.hadoop.users</name> <value>*</value> </property> </configuration>
-
HDFS配置文件
vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>node01:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>node03:9868</value> </property> <!-- 默认副本数为3,因为是测试环境,所以改成了1--> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
-
YARN配置文件
vim yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>node02</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <!-- yarn容器允许分配的最大最小内存 --> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>8192</value> </property> <!-- yarn容器允许管理的物理内存大小 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> </property> <!-- 关闭yarn对物理内存和虚拟内存的限制检查 --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
-
MapReduce配置文件
vim workers
node01 node02 node03
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
-
历史服务器配置
vim mapred-site.xml
<!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>node01:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node01:19888</value> </property>
-
配置日志聚集功能
vim yarn-site.xml
<!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://node01:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
启动
-
分发配置文件
xsync /opt/module/hadoop-3.1.3/
-
启动与测试
第一次启动需要格式化NameNode
cd /opt/module/hadoop-3.1.3/ bin/hdfs namenode -format
在
node01
上启动HDFS
sbin/start-dfs.sh
在
node02
上启动yarn
sbin/start-yarn.sh
在
Web
端查看是否启动成功
http://node01:9870/
http://node02:8088/ -
群起脚本
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start") echo " =================== 启动 hadoop集群 ===================" echo " --------------- 启动 hdfs ---------------" ssh node01 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh node02 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh" echo " --------------- 启动 historyserver ---------------" ssh node01 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver" ;; "stop") echo " =================== 关闭 hadoop集群 ===================" echo " --------------- 关闭 historyserver ---------------" ssh node01 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver" echo " --------------- 关闭 yarn ---------------" ssh node02 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh node01 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh" ;; *) echo "Input Args Error..." ;; esac
ZOOKEEPER 安装
-
解压
tar -zxvf zookeeper-3.5.7.tar.gz -C /opt/module/ cd /opt/module mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7
-
创建数据存放的文件夹
cd zookeeper-3.5.7 mkdir zkData
-
配置服务器编码
cd zkData vim myid
修改文件内容为 1
-
配置 zoo.cfg文件
cd /opt/module/zookeeper-3.5.7/conf mv zoo_sample.cfg zoo.cfg vim zoo.cfg
修改数据存储路径
dataDir=/opt/module/zookeeper-3.5.7/zkData
增加集群配置
#######################cluster########################## server.1=node01:2888:3888 server.2=node02:2888:3888 server.3=node03:2888:3888
-
分发
xsync /opt/module/zookeeper-3.5.7/
-
修改
node02
,node03
上的 myid 为2和3 -
启动
三台节点分别执行
bin/zkServer.sh start
查看状态
bin/zkServer.sh status
-
脚本
#!/bin/bash var="" case $1 in "start") var=start ;; "stop") var=stop ;; "restart") var=restart ;; "status") var=status ;; *) echo "args info error!!!" exit ;; esac for host in node01 node02 node03 do echo "====================$host============================" ssh $host /opt/module/zookeeper-3.5.7/bin/zkServer.sh $var done
KAFKA 安装
-
解压
tar -zxvf kafka_2.11-2.4.1.tgz -C /opt/module/
-
修改配置文件
cd /opt/module/kafka_2.11-2.4.1/config/ vim server.properties
修改增加下列配置
#broker的全局唯一编号,不能重复 broker.id=0 #删除topic功能使能 delete.topic.enable=true #kafka运行日志存放的路径 log.dirs=/opt/module/kafka_2.11-2.4.1/data #配置连接Zookeeper集群地址 zookeeper.connect=node01:2181,node02:2181,node03:2181/kafka
-
环境变量
sudo vim /etc/profile.d/my_env.sh
#KAFKA_HOME export KAFKA_HOME=/opt/module/kafka_2.11-2.4.1 export PATH=$PATH:$KAFKA_HOME/bin
-
分发
xsync /opt/module/kafka_2.11-2.4.1/
-
修改node02和node03上
server.properties
文件中的broker.id
为1和2 -
启动,三台节点分别运行
bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties
停止
bin/kafka-server-stop.sh
-
脚本
#!/bin/bash case $1 in "start"){ for i in node01 node02 node03 do echo " --------启动 $i Kafka-------" ssh $i "/opt/module/kafka_2.11-2.4.1/bin/kafka-server-start.sh -daemon /opt/module/kafka_2.11-2.4.1/config/server.properties " done };; "stop"){ for i in node01 node02 node03 do echo " --------停止 $i Kafka-------" ssh $i "/opt/module/kafka_2.11-2.4.1/bin/kafka-server-stop.sh stop" done };; esac
Kafka Eagle
TODO
MySQL 安装
官网说的是直接使用yum进行yum 库的添加
sudo yum install mysql80-community-release-el7-4.noarch.rpm
但是我运行后发现找不到这个库,所以先下载再离线安装
首先下载mysql的yum仓库:
su
wget https://repo.mysql.com//mysql80-community-release-el7-4.noarch.rpm
rpm -ivh mysql80-community-release-el7-4.noarch.rpm
查看是否添加成功
ls -l /etc/yum.repos.d/mysql-community*
-rw-r--r-- 1 root root 1630 10月 31 18:45 /etc/yum.repos.d/mysql-community.repo
-rw-r--r-- 1 root root 1700 10月 31 18:45 /etc/yum.repos.d/mysql-community-source.repo
安装MySQL
yum install mysql-server
Reference: https://www.cnblogs.com/yowamushi/p/8043054.html
2022-04-07更新:
今天在按照上述步骤安装Mysql的时候,出现了错误:
Downloading packages:
warning: /var/cache/yum/x86_64/7/mysql80-community/packages/mysql-community-client-8.0.28-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.
Failing package is: mysql-community-client-8.0.28-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
查询后发现是密钥过期,找到的解决办法为:
报错原因:这是由于MySQL GPG 密钥已过期导致的问题,解决出处需要运行命令, 以2022年为例
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
Reference: https://blog.csdn.net/weixin_40482449/article/details/123717029
启动Mysql
systemctl start mysqld
查看是否正常启动
systemctl status mysqld
查看生成的临时密码
grep 'temporary password' /var/log/mysqld.log
修改密码
mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
如果想将密码设置的简单点可以先更改密码策略
mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0;
# 设置密码
mysql> set password=password("123456");
允许其他IP连接数据库
use mysql
select user, host from user; # 查看当前user表信息
update user set host="%" where user="root";
flush privileges;
Hive 安装
-
解压
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/ cd /opt/module/ mv apache-hive-3.1.2-bin/hive-3.1.2
-
环境变量
sudo vim /etc/profile.d/my_env.sh
#HIVE_HOME export HIVE_HOME=/opt/module/hive-3.1.2 export PATH=$PATH:$HIVE_HOME/bin
-
解决
log4j
jar包冲突cd /opt/module/hive-3.1.2/lib/ mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.back
-
下载JDBC驱动并拷贝到lib
# 下载 wget https://cdn.mysql.com/archives/mysql-connector-java-8.0/mysql-connector-java-8.0.27.tar.gz # 解压 tar -zxvf mysql-connector-java-8.0.27.tar.gz # 拷贝 cp mysql-connector-java-8.0.27.jar /opt/module/hive-3.1.2/lib/
根据数据库的版本选择驱动下载
https://dev.mysql.com/downloads/connector/j/
-
创建数据库
CREATE DATABASE `metastore` CHARACTER SET utf8 COLLATE utf8_general_ci;
-
修改配置
vim conf/hive-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- jdbc连接的URL --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node01:3306/metastore?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8</value> </property> <!-- jdbc连接的Driver--> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <!-- jdbc连接的username--> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <!-- jdbc连接的password --> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>XXXXX</value> </property> <!-- Hive元数据存储版本的验证 --> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <property> <name>hive.cli.print.current.db</name> <value>true</value> </property> </configuration>
-
初始化元数据库
schematool -initSchema -dbType mysql -verbose
-
让hive支持中文
在Hive元数据存储的Mysql数据库中,执行以下SQL:
#修改字段注释字符集 alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8; #修改表注释字符集 alter table TABLE_PARAMS modify column PARAM_VALUE varchar(20000) character set utf8; #修改分区参数,支持分区建用中文表示 alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(20000) character set utf8; alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(20000) character set utf8; #修改索引名注释,支持中文表示 alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; #修改视图,支持视图中文 ALTER TABLE TBLS modify COLUMN VIEW_EXPANDED_TEXT mediumtext CHARACTER SET utf8; ALTER TABLE TBLS modify COLUMN VIEW_ORIGINAL_TEXT mediumtext CHARACTER SET utf8;
修改
hive-site.xml
中 数据库的连接,添加上&useUnicode=true&characterEncoding=UTF-8