ubuntu安装Hadoop Hive
Hive是基于Hadoop的一个数据仓库工具。Hive可直接用类似SQL的语言描述数据处理逻辑,避免开发人员在开发大数据查询分析处理程序时,编写复杂的基于JAVA的MapReduce程序。换句话说,Hive是将MapReduce抽象为类似SQL语句,在执行SQL语句时,Hive将其转换为MapReduce任务并运行。
很明显Hive需要依赖Hadoop,而且,不同于HBase,Hive必须依赖于HDFS,不能使用本地文件系统;Hive基于Hadoop的分布式存储系统HDFS和HBase以及MapReduce并行计算框架工作。
下载和初始化Hive
下载Hive并解压:
使用如下命令:
wget http://mirror.bit.edu.cn/apache/hive/stable-2/apache-hive-2.1.1-bin.tar.gz
tar xzf apache-hive-2.1.1-bin.tar.gz
sudo cp -r apache-hive-2.1.1-bin /usr/local/hive
sudo chown -R hadoop /usr/local/hive
sudo chmod -R 755 /usr/local/hive
添加环境变量:
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/usr/local/hive/lib
将上述两行加入~/.bashrc
中,并使用source
命令使其生效.
安装mysql:
sudo apt-get install mysql-server
sudo apt-get install libmysql-java #java驱动
配置Hive:
所有Hive的配置是在/usr/local/hive/conf目录下,进入这个目录,我们需要先基于模板新建hive-env.sh文件:
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
指定Hadoop的路径,增加以下行:
export HADOOP_HOME=/usr/local/hadoop
配置hive-site.xml
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
首先增加mysql数据库的连接配置: 注意,这里需要根据name在配置文件中找到节点,然后替换value。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
<description>metadata is stored in a MySQL server</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>MySQL JDBC driver class</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hduser</value>
<description>user name for connecting to mysql server</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hduser</value>
<description>password for connecting to mysql server</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://localhost:9000/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
然后需要修改临时文件夹的路径,找到以下2个配置,并改为正确的路径:
<property>
<name>hive.exec.local.scratchdir</name>
<value>/home/hadoop/iotmp</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/home/hadoop/iotmp</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
这里因为我当前用户是hadoop,所以我在hadoop的目录下创建一个iotmp文件夹,并授权:
mkdir -p /home/hadoop/iotmp
chmod -R 775 /home/hadoop/iotmp
修改hive-config.sh: 进入目录/usr/local/hive/bin
vi hive-config.sh
在该文件的最前面加入以下配置:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
启动Hadoop,在Hadoop中创建Hive需要用到的目录并设置好权限:
hadoop fs -mkdir /tmp
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
复制mysql驱动:
cp /usr/share/java/mysql-connector-java-5.1.38.jar $HIVE_HOME/lib/
进入/usr/local/hive/bin目录,初始化Hive元数据对应的MySQL数据库:
schematool -initSchema -dbType mysql
如下图:
接下来就可以使用hive命令来进入hive:
show databases; #查看数据库
show tables; # 查看表
create table Users (ID int,Name String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; # 创建表
insert into Users values(1,'Devin'); #插入
select * from Users ; #查询
select * from Users where Name like 'D%';
alter table Users add columns (BirthDate date); #增加字段
desc Users; #查看表定义
alter table Users rename to Student; #重命名表
truncate table Student; # 清空表
导入数据: 我们在Ubuntu下创建一个names.txt文件,然后编辑其中的内容,添加如下内容:
2 Edward
3 Mindy
4 Dave
5 Joseph
6 Leo
列直接我是用Tab隔开的。
如果想把这个txt文件导入hive的Users 表,那么只需要在hive中执行:
LOAD DATA LOCAL INPATH '/home/hadoop/names.txt' into table Users ;