一个计算机技术爱好者与学习者

0%

好好学Linux:在CentOS7上安装Hadoop和Hive

1. 前言

本文中,我们会在CentOS7系统中安装 Hadoop1.2.1 和 Hive1.2.2 。

参考文档:

2. 安装Hadoop

参考文档:《在Ubuntu16.04上安装Hadoop》

3. 配置Mysql

1、假设已经安装好了mysql,版本为5.6.29。

2、新建hive数据库,用来保存hive的元数据

1
2
create database hive;
alter database hive character set latin1;

3、将hive数据库下的所有表的所有权限赋给hadoop用户,并配置mysql为hive-site.xml中的连接密码,然后刷新系统权限关系表。

1
2
3
4
5
create user 'hadoop'@'%' identified by 'mysql';

grant all privileges on *.* to 'hadoop'@'%' with grant option;

flush privileges;

4. 安装Hive

1、下载解压hive

1
2
3
cd /opt
wget http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
tar -zxvf apache-hive-1.2.2-bin.tar.gz

2、配置HIVE_HOME,vim /etc/profile,在最后添加

1
2
export HIVE_HOME=/opt/apache-hive-1.2.2-bin
export PATH=$HIVE_HOME/bin:$PATH

立即生效,source /etc/profile

3、修改hive-site.xml文件

1
2
3
cd /opt/apache-hive-1.2.2-bin/conf/
cp hive-default.xml.template hive-site.xml
vim hive-site.xml

找到ConnectionURL,修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hadoop</value>
</property>

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mysql</value>
</property>

<property>
<name>hive.support.sql11.reserved.keywords</name>
<value>false</value>
<description>
This flag should be set to true to enable support for SQL2011 reserved keywords.
The default value is true.
</description>
</property>

4、下载配置mysql-connector-java

1
2
3
wget http://www.java2s.com/Code/JarDownload/mysql/mysql-connector-java-5.1.22-bin.jar.zip
unzip mysql-connector-java-5.1.22-bin.jar.zip
mv mysql-connector-java-5.1.22-bin.jar /opt/apache-hive-1.2.2-bin/lib

5、修改hive-env.sh文件

1
2
cp hive-env.sh.template  hive-env.sh
vi hive-env.sh

修改为:

1
2
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/opt/hadoop-1.2.1

6、启动hadoop,cd /opt/hadoop-1.2.1/binstart-all.sh

7、启动metastore,nohup hive --service metastore > metastore.log 2>&1 &

8、启动hive,hive
报错:The root scratch dir: /tmp/hive on HDFS should be writable.

1
2
3
mkdir /tmp/hive
chmod -R 777 /tmp/hive
hadoop fs -chmod -R 777 /tmp/hive

再次启动,报错:Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
新建tmpdir文件夹

1
2
3
4
mkdir /tmp/tmpdir
chmod -R 777 /tmp/tmpdir
hadoop fs -mkdir /tmp/tmpdir
hadoop fs -chmod -R 777 /tmp/tmpdir

在hive-site.xml中,查找所有的${system:java.io.tmpdir}${system:java.io.tmpdir}/${system:user.name},替换为/tmp/tmpdir

再次启动,成功!

5. hive问题记录

问题描述:hive表中的列名,无法使用点.和冒号:
解决办法:重新创建表。因为创建表时可以使用点和冒号,修改表时不能使用。
详情参考Cannot use a “.” in a Hive table column name