irpas技术客

Ubuntu下搭建伪分布式从0开始安装Hive详细教程(从JDK安装、Hadoop搭建开始)_跳舞的皮埃尔_hive伪分布式搭建

大大的周 5196

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(提取码: 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 检查安装

修改配置文件:

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&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/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>


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #hive伪分布式搭建