Ubuntu下搭建伪分布式从0开始安装Hive详细教程(从JDK安装、Hadoop搭建开始)
环境:VMware® Workstation 16 Pro、Ubuntu18.04
1、安装SSH和配置SSH无密码登录
sudo apt-get install openssh-server
安装后,可使用以下命令登录本机:
ssh localhost
输入 yes 与用户密码,就可以登录到本机
接着我们退出 SSH 登录
exit
配置无密码登录:
cd ~/.ssh/
ssh-keygen -t rsa
注意这里第二步要你输入文件名时不用输入,直接一路 Enter 选择默认值就好了!
cat ./id_rsa.pub >> ./authorized_keys
此时再用 ssh localhost 命令无需密码即可登录了。
2、安装Java环境
2.1 安装JDK
对于 Hadoop3.1.3 及以上版本而言,需要使用 JDK1.8 或者更新的版本,这里我们使用的 JDK 版本为1.8.0_301,安装包可以从 Oracle 官网下载:Java Downloads | Oracle,Java官网安装太麻烦了
也可从我的百度网盘下载:jdk-8u301-linux-x64.tar.gz(提取码:6del)
接着在 /usr/lib 目录下创建 jvm 文件夹来保存 JDK 文件:
cd /usr/lib
sudo mkdir jvm
可以用 Xshell 连接虚拟机,把 JDK 文件上传到虚拟机,解压缩之前的 JDK 文件到上述目录中:
cd ~/Downloads
sudo tar -zxvf ./jdk-8u301-linux-x64.tar.gz -C /usr/lib/jvm
2.2 配置JDK环境
vim ~/.bashrc
在文件末尾处添加以下几行内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_301
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
保存并退出,接着使我们刚加入的环境变量生效:
source ~/.bashrc
3.3 检验安装
输入以下命令:
java -version
若出现如下则说明安装成功:
3、安装单机Hadoop
3.1 下载安装Hadoop
下载地址:Apache Hadoop,这里官网下载较快,不要下载 src 源码包!
也可从我的百度网盘下载:hadoop-3.1.3.tar.gz(提取码: ij6b)
这里我安装的 Hadoop 版本为3.1.3,下载好后,和上面的 JDK 一样上传到虚拟机,执行以下命令安装:
sudo tar -zxf ~/Downloads/hadoop-3.1.3.tar.gz -C /usr/local
修改目录名称:
cd /usr/local
sudo mv ./hadoop-3.2.2/ ./hadoop
赋予可执行权限:(如用 root 登录可以忽略,以下的 wyc 是我当前普通用户名)
sudo chown -R wyc ./hadoop
3.2 检查安装
修改配置文件:
vim ~/.bashrc
写入:
##HADOOP_HOME
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:${HADOOP_HOME}/bin
export PATH=$PATH:${HADOOP_HOME}/sbin
按 esc :wq 退出
让环境生效:
source ~/.bashrc
输入下面代码就可以看到Hadoop版本号了
hadoop version
4、配置Hadoop伪分布
4.1 配置 .bashrc 文件
修改 .bashrc 文件:
sudo vim ~/.bashrc
往文件末加入以下两行:
# 注意此处的路径和你的hadoop文件最后解压存放的位置是一致的
export HADOOP_HOME=/usr/local/hadoop
使配置文件立即生效:
source ~/.bashrc
4.2. 配置伪分布式
对于伪分布式配置,我们需要修改 core-site.xml 和 hdfs-site.xml 两个文件,这两个文件在我们单机安装好的 Hadoop 目录下的 /etc/hadoop 文件夹内。
进入文件所在文件夹:
cd /usr/local/hadoop/etc/hadoop
修改我们的 core-site.xml 文件:
sudo vim core-site.xml
修改文件内容如下:(实则就是往 configuration 里添加参数,注意缩进)
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
如下:
接着修改 hdfs-site.xml 文件:
sudo vim hdfs-site.xml
也是添加一些配置参数,修改后如下:(注意缩进)
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
到这,伪分布式安装所需要的配置就配置好啦!
5、初始化文件系统
先回到我们的 Hadoop 安装目录下:
cd /usr/local/hadoop
使用以下命令初始化文件系统:
./bin/hdfs namenode -format
有如下输出,就是初始化成功了:
6、验证安装
6.1 启动HDFS
文件初始化成功后,赋予 logs 文件夹相关权限:
sudo chmod -R wyc ./logs
可使用如下命令启动 HDFS:
./sbin/start-dfs.sh
6.2 部分报错
可是报了如下错误:
root@wyc:/usr/local/hadoop# ./sbin/start-dfs.sh
Starting namenodes on [localhost]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [wyc]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
解决办法:将start-dfs.sh,stop-dfs.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
将start-yarn.sh,stop-yarn.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
再次启动 HDFS命令,又接着报错:
root@wyc:/usr/local/hadoop# ./sbin/start-dfs.sh
Starting namenodes on [localhost]
ERROR: JAVA_HOME is not set and could not be found.
Starting datanodes
ERROR: JAVA_HOME is not set and could not be found.
Starting secondary namenodes [wyc]
ERROR: JAVA_HOME is not set and could not be found.
使用如下命令修改环境文件:
sudo vim ./etc/hadoop/hadoop-env.sh
添加如下内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_301
export HADOOP=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin
6.3 启动成功
再次启动 HDFS命令,出现如下输出就没问题啦:
启动后,使用 jps 指令查看所有 Java 进程,若 HDFS 启动成功输出如下:
此时可访问 Web 页面(在浏览器输入:http://192.168.153.142:9870(这里198.168.153.142是我 Ubuntu 的 IP ,你们换成自己的就可以了)):
7、安装Hive
7.1 下载压缩包并解压
官网下载目录如下:Index of /hive
建议清华镜像网站下载:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
下载文件如下:apache-hive-3.1.2-bin.tar.gz,进入下载目录,解压压缩包:
cd ~/Downloads
sudo tar -zxvf ./apache-hive-3.1.2-bin.tar.gz -C /usr/local
7.2 安装Hive
进入到 /usr/local 目录下,更改文件夹名,赋予用户权限:
cd /usr/local
sudo mv apache-hive-3.1.2-bin hive
sudo chown -R wyc ./hive
7.3 配置环境变量
修改 ~/.bashrc 文件:
vim ~/.bashrc
增添下面几行:
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/usr/local/hadoop
运行如下命令使配置立即生效:
source ~/.bashrc
7.4 修改配置文件
修改配置 hive-default.xml 文件:
cd /usr/local/hive/conf
sudo mv hive-default.xml.template hive-default.xml
新建 hive-site.xml 文件:
sudo vim hive-site.xml
将以下内容写入文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false&allowPublicKeyRetrieval=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>datanucleus.autoCreateTables</name>
<value>True</value>
</property>
</configuration>
按下 ESC 键,:wq,保存并退出。
8、MySQL安装与配置
8.1 安装MySQL
我们使用默认的 apt 包管理器安装即可:
sudo apt-get update
sudo apt-get install mysql-server
启动 MySQL:
service mysql start
检查是否启动成功:
systemctl status mysql.service
如下输出有绿色 Active 就是正常启动:
8.2 配置MySQL
初始化 MySQL:
sudo mysql_secure_installation
接下来会需要配置好几个内容,下面是我的部分配置:
root@wyc:~# sudo mysql_secure_installation
...
# 这里是询问是否安装密码插件,我选择 No
Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: n
# 这里为 root 用户设置密码
Please set the password for root here.
New password:
Re-enter new password:
# 删除匿名用户,我选 Yes
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
# 禁止root管理员从远程登录,这里我选 No
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n
# 删除test数据库并取消对它的访问权限, 我选 Yes
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
# # 刷新授权表,让初始化后的设定立即生效, 选 Yes
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
...
编辑 MySQL 配置文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在 mysqld 下添加以下一行数据:
character_set_server=utf8
重启你的 MySQL 服务:
service mysql restart
sudo mysql -u root -p #登陆MySQL shell界面
使用如下命令查看你的 MySQL 版本:
mysql>SELECT @@VERSION;
我的 MySQL 是 5.7.37 的版本
9、 安装MySQL jdbc包
上述博客安装的 MySQL 版本为 5.7.37,所以我们需要下载对应版本的 MySQL jdbc 包
- MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7, and 5.6. Please upgrade to MySQL Connector/J 8.0.
- 官方更推荐MySQL5.6以上使用connector/j 8.0
mysql-connector-java各种版本下载 地址在这,点击 jar 包下载,如下:
cd ~/Downloads
cp mysql-connector-java-5.1.37.jar /usr/local/hive/lib
10、为Hive创建MySQL账号
启动 MySQL 服务,登录 shell:
service mysql start #启动mysql服务
sudo mysql -u root -p #登陆shell界面
新建 hive 数据库:
mysql>CREATE DATABASE hive;
创建用户 hive,设置密码(这里根据配置文件设置为 hive),使其能连接上 hive 数据库:
mysql>create user 'hive'@'%' identified by 'hive';
mysql>grant all privileges on hive.* to 'hive'@'%' with grant option;
mysql>flush privileges;
这里若提示密码不符合,则先执行以下命令,再执行上述命令:
mysql>set global validate_password.policy=LOW;
mysql>set global validate_password.length=4;
退出 MySQL:
mysql>quit;
11、验证Hive安装及错误处理
11.1 启动Hadoop
cd /usr/local/hadoop
sbin/start-dfs.sh
11.2 启动Hive
cd /usr/local/hive
./bin/schematool -dbType mysql -initSchema
11.3 错误处理
在初始化hive时,报告错误:
Cannot find hadoop installation: $HADOOP_HOME or $HADOOP_PREFIX must be set or hadoop must be in the path
解决办法:在命令行中执行
cd /usr/local/hive/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
在hive-env.sh文件里加下面的内容:
export HADOOP_HOME=/usr/local/hadoop
source hive-env.sh
再次初始化,报下面错误
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
at org.apache.hadoop.mapred.JobConf.setJar(JobConf.java:518)
at org.apache.hadoop.mapred.JobConf.setJarByClass(JobConf.java:536)
at org.apache.hadoop.mapred.JobConf.<init>(JobConf.java:430)
at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5141)
at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:5104)
at org.apache.hive.beeline.HiveSchemaTool.<init>(HiveSchemaTool.java:96)
at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:1473)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:318)
at org.apache.hadoop.util.RunJar.main(RunJar.java:232)
这是因为 hive 内依赖的 guava.jar 和 hadoop 内的版本不一致造成的。
查看 hadoop 安装目录下的 guava.jar 版本:
ls /usr/local/hadoop/share/hadoop/common/lib/guava*
输出如下:
接着查看 Hive 下的 guava.jar 版本:
ls /usr/local/hive/lib/guava*
输出如下:
可以看到 Hadoop 内的 guava.jar 版本是要高于 Hive 内带的的,所以使用 Hadoop 的替代 Hive 的:
sudo rm /usr/local/hive/lib/guava-19.0.jar
sudo cp /usr/local/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /usr/local/hive/lib
再次初始化,问题解决。
11.4 再次启动Hive
cd /usr/local/hive
bin/hive
正常启动会出现一个交互界面如下,就证明启动成功啦:
hive>