从零开始搭建个人大数据集群——环境准备篇
从零开始搭建个人大数据集群(1)——zookeeper
从零开始搭建个人大数据集群(2)——HDFS
从零开始搭建个人大数据集群(3)——YARN
安装前的准备
1.参考我上面的文章安装好zookeeper和hadoop
2.准备好apache-hive-3.1.2-bin.tar.gz
3.选择一台服务器安装好MySQL,我安装的版本是MySQL5.7.34
解压安装包
cd /opt/packages
tar -zxf apache-hive-3.1.2-bin.tar.gz -C ../apps
ln -s apache-hive-3.1.2-bin hive
配置环境变量/etc/profile
JAVA_HOME=/usr/local/jdk
ZOOKEEPER_HOME=/opt/apps/zookeeper
HADOOP_HOME=/opt/apps/hadoop
HADOOP_COMMON_HOME=${HADOOP_HOME}
HADOOP_HDFS_HOME=${HADOOP_HOME}
HADOOP_MAPRED_HOME=${HADOOP_HOME}
HADOOP_YARN_HOME=${HADOOP_HOME}
HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:/usr/lib64
HIVE_HOME=/opt/apps/hive
HIVE_CONF_DIR=${HIVE_HOME}/conf
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin
hive配置
hive-site.xml可以直接下载我配置好的文件,在此基础上修改
hive-site.xml
cd /opt/apps/hive/conf
cp hive-default.xml.template hive-site.xml
mv hive-env.sh.template hive-env.sh
mv hive-log4j2.properties.template hive-log4j2.properties
hive-site.xml
主要是需要改数据库以及hdfs相关配置,可以根据name标签值在我上传的hive-site.xml文件里查找修改为你自己想要的配置,hive-site.xml原始文件中第3125行有错误,在我的文件中我直接删掉了那一行
<configuration>
<!-- 数据库 start -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hd5:3306/hive_meta</value>
<description>mysql连接</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>mysql驱动</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>数据库使用用户名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
<description>数据库密码</description>
</property>
<!-- 数据库 end -->
<!-- HDFS start -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value>
<description>hive使用的HDFS目录</description>
</property>
<!-- HDFS end -->
<!-- metastore start -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>metastore start 在客户端使用时,mysql连接和metastore同时出现在配置文件中,客户端会选择使用metastore</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hd1:9083</value>
<description>metastore服务器URL</description>
</property>
<!-- metastore end -->
<!-- hiveserver start -->
<!-- HiveServer2提供了JDBC链接操作Hive的功能,非常实用,但如果在使用HiveServer2时候,不注意安全控制,将非常危险,因为任何人都可以作为超级用户来操作Hive及HDFS数据。-->
<property>
<name>hive.server2.authentication</name>
<value>NONE</value>
<description>身份验证模式,默认为NONE。选项为NONE(使用普通SASL),NOSASL,KERBEROS,LDAP,PAM和CUSTOM。</description>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hd1</value>
<description>hive开启的thriftServer地址</description>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
<description>hive开启的thriftServer端口</description>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
<description>默认情况下(true),HiveServer2以提交查询的用户身份执行查询处理。但是,如果将以下参数设置为false,则查询将作为hiveserver2进程运行的用户运行。</description>
</property>
<!-- hiveserver end -->
<!-- 其它 start -->
<property>
<name>datanucleus.autoCreateSchema</name>
<value>false</value>
<description>creates necessary schema on a startup if one doesn't exist. set this to false, after creating it once(HIVE-1841)</description>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>true</value>
<description>Disable updates to the schema once it has been created.(HIVE-1841)</description>
</property>
<property>
<name>datanucleus.autoStartMechanism</name>
<value>SchemaTable</value>
<description>多并发读取失败的问题(HIVE-4762)</description>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>是否显示当前操作database名称,默认不显示</description>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>是否显示表头,默认不显示</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/data/hive/querylog</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/data/hive/scratchdir</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/data/hive/resources</value>
</property>
<!-- 其它 end -->
</configuration>
hive-env.sh
在该文件末尾加上下面三行
export JAVA_HOME=/usr/local/jdk
export HIVE_HOME=/opt/apps/hive
export HADOOP_HOME=/opt/apps/hadoop
core-site.xml
这个文件在$HADOOP_CONF_DIR中,需要在末尾加入以下配置
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
上传MySQL驱动
自己找一个MySQL驱动包放到hive/lib目录下,我用的是mysql-connector-java-5.1.49.jar
替换jar包
我用的hadoop版本是3.2.2,hive是3.1.2,hadoop中的guava包比hive的高,会冲突,直接初始化的话会报错,参考我这篇文章,解决办法在文章中也有写
hive初始化报错:java.lang.NoSuchMethodError
MySQL配置
在mysql中创建hive用的数据库和hive用户
--创建hive用户
CREATE USER 'hive'@'%' IDENTIFIED BY '000000';
CREATE USER 'hive'@'loaclhost' IDENTIFIED BY '000000';
--在mysql中创建hive_meta数据库
create database hive_meta default charset utf8 collate utf8_general_ci;
--给hive用户增加hive_meta数据库权限
grant all privileges on hive_meta.* to 'hive'@'%' identified by '000000';
grant all privileges on hive_meta.* to 'hive'@'localhost' identified by '000000';
--更新
flush privileges;
HDFS配置
HDFS上创建hive使用的数据目录
hdfs dfs -mkdir -p /hive/warehouse
hdfs dfs -ls /hive
删除冲突的log4j
cd $HIVE_HOME/lib
mv log4j-slf4j-impl-2.10.0.jar /tmp
开始安装
首先需要确保hdfs和MySQL都已开启
初始化
schematool -dbType mysql -initSchema
初始化成功后在MySQL库中会生成元数据
启动hive
启动metastore
nohup hive --service metastore > /dev/null 2>&1 &
metastore启动后可以直接通过hive命令打开hive客户端
启动hiveserver2
nohup hiveserver2 > /dev/null 2>&1 &
hiveserver2启动后可以通过beeline连接hive
键入beeline命令后输入!connect jdbc:hive2://hd1:10000,会提示需要用户名和密码,我在hive-site.xml里设置了免验证,所以直接敲两次回车就能连接成功
Q.E.D.