0
点赞
收藏
分享

微信扫一扫

Ubuntu下搭建伪分布式从0开始安装Hive详细教程(从JDK安装、Hadoop搭建开始)

木匠0819 2022-05-01 阅读 45

Ubuntu下搭建伪分布式从0开始安装Hive详细教程(从JDK安装、Hadoop搭建开始)

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(提取码: x2vu)

这里我安装的 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 检查安装

进入 hadoop 文件夹,查看安装的 Hadoop 版本信息:

cd /usr/local/hadoop
./bin/hadoop version

若出现以下输出,则说明 Hadoop 安装成功。
在这里插入图片描述

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&amp;useSSL=false&amp;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-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

在启动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

再次启动问题解决。
在这里插入图片描述

举报

相关推荐

0 条评论