在hadoop集群上安装hive+mysql

一、安装hive前提条件

hive运行在hadoop集群上,所以先要确保你的hadoop集群已经安装完毕并且可正常启动运行。如果没安装好hadoop集群的可以参考我的这篇文章:Hadoop学习(一)入门与集群搭建。接着还需要安装mysql,因为hive的元数据是存储在mysql的,不过mysql我们可以只在集群的主节点机器安装一个就好,需要安装mysql服务端和客户端。

二、CentOS7安装Mariadb数据库(其实就是mysql的分支版本)

在linux中可以借助yum库来进行下载mysql,执行命令yum install -y mysql,之后就会自动下载了。

image.png
当下载好后,输入service mysqld start命令启动mysql,但会发觉报如下错,未能启动mysqld.service:未找到单元。
报错信息.png
我很纳闷,经过一顿百度之后,发觉是这个原因:CentOS7安装mysql后无法启动服务,提示Unit not found,于是按着文章中提到的再去安装了mariadb数据库(就是mysql的分支版本,提供的功能与mysql完全兼容)。
解决完上面的问题后,我们再来输入systemctl start mariadb.service命令开启服务,期间还报错过另一个问题,如下图:
image.png
根据提示的命令,我输入journalctl -xe命令去查找报错原因,如下图:
image.png
发觉是因为我改动过/etc/my.cnf文件,设置了默认编码为utf8,也不知道为什么就会影响到启动服务,所以就再改回去恢复默认配置了,去掉默认编码设置。之后再重新输入systemctl start mariadb.service命令,服务就启动了。我们可以输入systemctl status mariadb.service命令查看当前mariadb服务状态,如图所示,显示active(running)开启。
image.png
接着,我们设置下将mariadb服务添加至开机自启动,输入systemctl enable mariadb.service命令即可。
接着输入mysqladmin -u root password 你想设置的mysql密码(例:123456)命令,创建一个输入root用户的密码,之后就用这个密码连接mariadb数据库,输入mysql -u root -p 123456命令测试是否能连通,如图所示就安装mariadb成功了。
image.png

三、在mariadb中创建hive用户和hive元数据库

#1、用root用户登录mysql
mysql -u root -p 回车后输入root用户密码登录
#2、创建hive用户
insert into mysql.user("Host","User","Password") values("localhost","hive",passwprd("hive"));
#3、创建hive数据库
create database hive;
#4、授权,使用户可以远程连接
grant all on hive.* to hive@'%' identified by 'hive';
#5、授权,使用户可以本地连接
grant all on hive.* to hive@'localhost' identified by 'hive';
#6、刷新授权表
flush privileges;

经过以上步骤就创建好了hive用户和hive元数据库,我们尝试登录一下,先exit退出root用户登录,之后重新输入mysql -u hive -p回车后输入hive用户密码登录,如下图所示就成功。

image.png
接着exit退出mariadb去/etc目录下修改my.cnf文件,在[mysqld]标签下添加如下配置

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

再去/etc/my.cnf.d目录下修改client.cnf文件,在[client]标签下添加如下配置

default-character-set=utf8

然后再去/etc/my.cnf.d目录下修改mysql-clients.cnf文件,在[mysql]标签下添加如下配置

default-character-set=utf8

全部配置完成后,输入systemctl restart mariadb命令重启mariadb,之后进入mariadb数据库查看字符集,至此,mariadb就安装配置完了。

image.png

PS:在分布式集群上安装hive+mysql,mysql可以不用每台机器都安装,只在主机器节点上安装即可,hive可以每台机器安装,mysql作为hive的元数据库,hadoop集群能访问到就好,配置都访问主机器的mysql作为元数据信息存储的地方即可。

四、安装并配置hive

  • 1、把下载好的hive安装包上传到linux集群上,之后解压到指定路径下,再复制下conf下的两个template配置文件,命令为hive-env.shhive-site.xml
  • 2、配置hive-env.sh文件,加上java和hadoop安装路径
JAVA_HOME=/usr/java/jdk1.8.0_60
HADOOP_HOME=/usr/hadoop-2.6.4
export HIVE_CONF_DIR=/usr/hive-2.3.7/conf
image.png
  • 3、配置hive-site.xml文件,修改主机器节点的mysql数据库用户名和密码,这个文件的参数实在是太多,只能在vim编辑器中使用/**来查找匹配关键字,找到后把对应value改成适应自己的就好。
<!--所连接的mysql实例,分布式集群的话我这里是设置集群内的机器都用master上的mysql-->
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
      For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
   </description>
</property>
<!--mysql数据库驱动-->
<property>
 <name>javax.jdo.option.ConnectionDriverName</name>
 <value>com.mysql.jdbc.Driver</value>
 <description>Driver class name for a JDBCmetastore</description>
</property>
<!--mysql数据库用户名-->
<property>
 <name>javax.jdo.option.ConnectionUserName</name>
 <value>hive</value>
 <description>username to use against metastoredatabase</description>
</property>
<!--mysql数据库密码-->
<property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>hive用户的密码</value>
 <description>password to use against metastoredatabase</description>
</property>
<!--元数据mysql远程模式配置-->
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://master:9083</value>
    <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
  </property>
image.png
  • 4、把hive安装路径也加入环境变量,这样带来的好处是每次启动hive客户端不用总是到hive的bin目录下启动,只需要在/etc/profile文件配置上hive的目录,并给Path解析即可,如下图,保存后执行source /etc/profile命令刷新环境配置生效。
    image.png
  • 5、上传JDBC驱动包到hive的lib目录下即可
    image.png
  • 6、在HDFS创建目录,要先启动hadoop,然后创建目录并赋予权限
hadoop fs -mkdir -p /tmp/hive
hadoop fs -mkdir -p /hive/warehouse
hadoop fs -chmod -R g+w,o+w /tmp
hadoop fs -chmod -R g+w,o+w /hive 
  • 7、初始化数据库,输入schematool -dbType mysql -initSchema命令,然而报如下错,hive初始化SQL Error code:1045错误
    image.png
    于是在百度找到解决方案,登录进mysql数据库中把所有用户密码都设置为跟root用户的密码一样,具体命令是update user set Password = password('root用户密码')
  • 8、解决完以上所有问题,完成了以上所有步骤,就输入hive命令进入hive客户端,再输入show tables语句显示所有数据表,但是如果报错FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient的话,就是hivemetastore服务没启动。
    先去hive-site.xml文件中修改datanucleus.schema.autoCreateAll参数值为true,默认是false。
    然后再输入hive --service metastore &命令启动hivemetastore服务就好。
  • 9、再次输入hive进入hive客户端,然后输入show tables 或者 show functions 测试hive是否正常安装配置使用,如下图所示:
    image.png

五、hive在多台机器下安装

hive可以在集群内的多台机器安装,当经过上面步骤安装完一台机器的hive后,我们可以使用scp命令远程拷贝到集群内的不同机器,master机器cd切换到/usr目录下,之后具体命令及操作步骤如下:

scp -r /usr/hive-2.3.7 slave1:/usr   //基于ssh方式远程拷贝到slave1机器
scp -r /usr/hive-2.3.7 slave2:/usr   //基于ssh方式远程拷贝到slave2机器
scp -r /usr/hive-2.3.7 slave3:/usr   //基于ssh方式远程拷贝到slave3机器

#之后跟master机器一样配置环境变量vi /etc/profile,再source /etc/profile 使环境变量配置生效

参考文章链接
1、hadoop分布式集群安装配置hive+mysql
2、hive初始化SQL Error code :1045错误解决方法
3、centOS7环境下在hadoop集群安装hive
4、hive启动报错 java.net.URISyntaxException: Relative path in absolute URI: system:java.io.tmpdir7D/$%7B 解决方案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335