mysql本地安装
安装流程(内存占用200M,升至2.1G)
# 将资料里mysql文件夹及里面所有内容上传到/opt/software/mysql目录下 mkdir /opt/software/mysql cd /opt/software/mysql/ # 待上传文件 install_mysql.sh mysql-community-client-8.0.31-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm mysql-community-common-8.0.31-1.el7.x86_64.rpm mysql-community-icu-data-files-8.0.31-1.el7.x86_64.rpm mysql-community-libs-8.0.31-1.el7.x86_64.rpm mysql-community-libs-compat-8.0.31-1.el7.x86_64.rpm mysql-community-server-8.0.31-1.el7.x86_64.rpm mysql-connector-j-8.0.31.jar # 阿里云服务器按照如下步骤执行 # 由于阿里云服务器安装的是Linux最小系统版,没有如下工具,所以需要安装 # 卸载MySQL依赖,虽然机器上没有装MySQL,但是这一步不可少 sudo yum remove mysql-libs # 下载依赖并安装 sudo yum install libaio sudo yum -y install autoconf # 如果想检查下上述文件有无安装,执行 sudo yum list installed | grep libaio sudo yum list installed | grep autoconf # 切换到hadoop102的root用户 su root # 执行/opt/software/mysql/目录下install_mysql.sh vim install_mysql.sh # 执行脚本 sh install_mysql.sh
mysql本地安装脚本
install_mysql.sh # 卸载MySQL systemctl stop mysql mysqld 2>/dev/null rpm -qa | grep -i 'mysql\|mariadb' | xargs -n1 rpm -e --nodeps 2>/dev/null rm -rf /var/lib/mysql /var/log/mysqld.log /usr/lib64/mysql /etc/my.cnf /usr/my.cnf set -e # 安装并启动MySQL yum install -y *.rpm >/dev/null 2>&1 systemctl start mysqld #更改密码级别并重启MySQL sed -i '/\[mysqld\]/avalidate_password.length=4\nvalidate_password.policy=0' /etc/my.cnf systemctl restart mysqld # 更改MySQL配置 tpass=$(cat /var/log/mysqld.log | grep "temporary password" | awk '{print $NF}') cat << EOF | mysql -uroot -p"${tpass}" --connect-expired-password >/dev/null 2>&1 set password='000000'; update mysql.user set host='%' where user='root'; alter user 'root'@'%' identified with mysql_native_password by '000000'; flush privileges; EOF
连接mysql
# 通过MySQL可视化客户端连接数据库 # 创建数据库 # 设置数据库名称为gmall,编码为utf8mb4,排序规则为utf8mb4_general_ci # 导入数据库结构脚本(gmall.sql) 经过上述安装后,可以通过临时密码6个0进入mysql mysql -uroot -p000000 修改root密码,本地访问 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 其他主机也可访问,执行完后刷新,不刷新也能生效 ALTER USER 'root'@'%' IDENTIFIED BY 'new_password'; FLUSH PRIVILEGES; 查看都有哪些root用户,可能会存在localhost和%并存的情况,默认只有% SELECT User, Host, authentication_string FROM mysql.user WHERE User = 'root'; 修改为native连接方式 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'new_password'; 退出 exit
hive安装
安装流程(内存占用400M,升至2.5G)
把hive-3.1.3.tar.gz上传到linux的/opt/software目录下 解压hive-3.1.3.tar.gz到/opt/module/目录下面 tar -zxvf /opt/software/hive-3.1.3.tar.gz -C /opt/module/ 修改hive-3.1.3-bin.tar.gz的名称为hive mv /opt/module/apache-hive-3.1.3-bin/ /opt/module/hive 修改/etc/profile.d/my_env.sh,添加环境变量 sudo vim /etc/profile.d/my_env.sh 添加内容 #HIVE_HOME export HIVE_HOME=/opt/module/hive export PATH=$PATH:$HIVE_HOME/bin source一下 /etc/profile.d/my_env.sh文件,使环境变量生效 source /etc/profile.d/my_env.sh 解决日志Jar包冲突,进入/opt/module/hive/lib目录 mv log4j-slf4j-impl-2.17.1.jar log4j-slf4j-impl-2.17.1.jar.bak Hive元数据配置到MySQL(下个代码块)
Hive元数据配置到MySQL
将MySQL的JDBC驱动拷贝到Hive的lib目录下 cp /opt/software/mysql/mysql-connector-j-8.0.31.jar /opt/module/hive/lib/ 配置Metastore到MySQL 在$HIVE_HOME/conf目录下新建hive-site.xml文件 vim hive-site.xml # 配置Hive保存元数据信息所需的 MySQL URL地址 # 配置Hive连接MySQL的驱动全类名 # 配置Hive连接MySQL的用户名 # 配置Hive连接MySQL的密码 启动Hive(下个代码块)
hive-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--配置Hive保存元数据信息所需的 MySQL URL地址--> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop1:3306/metastore?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true</value> </property> <!--配置Hive连接MySQL的驱动全类名--> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <!--配置Hive连接MySQL的用户名 --> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <!--配置Hive连接MySQL的密码 --> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>hadoop1</value> </property> <property> <name>hive.metastore.event.db.notification.api.auth</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>
启动Hive
# 初始化元数据库 # 登陆MySQL mysql -uroot -p<pwd> # 新建Hive元数据库 create database metastore; # 初始化Hive元数据库(mysql外) schematool -initSchema -dbType mysql -verbose # 修改元数据库字符集 # Hive元数据库的字符集默认为Latin1,由于其不支持中文字符,所以建表语句中如果包含中文注释,会出现乱码现象 # 修改Hive元数据库中存储注释的字段的字符集为utf-8 use metastore; alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8; # 表注释 alter table TABLE_PARAMS modify column PARAM_VALUE mediumtext character set utf8; # 退出mysql quit; # 启动Hive客户端 hive # 查看一下数据库 show databases; # 退出或exit; quit;
Hive环境的搭建(安装spark)
# 上传并解压解压spark-3.3.1-bin-without-hadoop.tgz tar -zxvf spark-3.3.1-bin-without-hadoop.tgz -C /opt/module/ mv /opt/module/spark-3.3.1-bin-without-hadoop /opt/module/spark # 修改spark-env.sh配置文件 # 修改文件名 mv /opt/module/spark/conf/spark-env.sh.template /opt/module/spark/conf/spark-env.sh # 编辑文件 vim /opt/module/spark/conf/spark-env.sh # 增加如下内容 export SPARK_DIST_CLASSPATH=$(hadoop classpath) # 配置SPARK_HOME环境变量 vim /etc/profile.d/my_env.sh # 添加如下内容 # SPARK_HOME export SPARK_HOME=/opt/module/spark export PATH=$PATH:$SPARK_HOME/bin # source 使其生效 source /etc/profile.d/my_env.sh # 在hive中创建spark配置文件 vim /opt/module/hive/conf/spark-defaults.conf # 添加如下内容(在执行任务时,会根据如下参数执行),少于512会报错 spark.master yarn spark.eventLog.enabled true spark.eventLog.dir hdfs://hadoop1:8020/spark-history spark.executor.memory 512m spark.driver.memory 512m # 在HDFS创建如下路径,用于存储历史日志 hadoop fs -mkdir /spark-history # 向HDFS上传Spark纯净版jar包 hadoop fs -mkdir /spark-jars hadoop fs -put /opt/module/spark/jars/* /spark-jars # 修改hive-site.xml文件 vim /opt/module/hive/conf/hive-site.xml # 添加如下内容 <!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)--> <property> <name>spark.yarn.jars</name> <value>hdfs://hadoop1:8020/spark-jars/*</value> </property> <!--Hive执行引擎--> <property> <name>hive.execution.engine</name> <value>spark</value> </property>
向HDFS上传Spark纯净版jar包说明
说明1:采用Spark纯净版jar包,不包含hadoop和hive相关依赖,能避免依赖冲突。
说明2:Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到。
运行
Hive on Spark测试 启动hive客户端 hive 创建一张测试表 create table student(id int, name string); 通过insert测试效果 insert into table student values(1,'abc'); insert into table student values(2,'efg'); insert into table student values(3,'hjk'); insert into table student values(4,'lmn'); insert into table student values(5,'opq'); 若结果如下,则说明配置成功
测试成功结果
result
遇到的问题
spark执行器和驱动器内存最少默认要512M,少于这个值会报错,修改/opt/module/hive/conf/spark-defaults.conf
其他节点访问主节点的datanode时,用主节点的内网地址访问的,修改配置通过主机名访问datanode,hdfs-site.xml
三个节点不知道为什么都登不上了,修改密码后,改成只允许ip间通信
# 其他节点访问主节点的datanode时,用主节点的内网地址访问的,修改配置通过主机名访问datanode,hdfs-site.xml <!-- 客户端通过主机名连接 DataNode --> <property> <name>dfs.client.use.datanode.hostname</name> <value>true</value> </property>
参考资料
海波老师-电商数仓