1、了解
Hive是建立在Hadoop文件系统上的数据仓库架构,并对存储在HDFS中的数据进行分析和管理。(即对存储在HDFS中的数据进行分析和管理,我们不想使用手工方式而是建立一个工具,而这个工具就是hive)
Hive定义了一种类似SQL的查询语言HQL,用户可以直接利用Hive来查询数据。其允许熟悉 MapReduce 开发者开发自定义的mappers和reducers来处理内建的mappers和reducers无法完成的复杂分析工作。Hive允许用户编写自定义的函数UDF在查询中使用。Hive中有3种UDF:User Defined Functions(UDF)、User Defined Aggregation Functions(UDAF)、User Defined Table Generating Functions(UDTF)。
Hive是一个成功的Apache项目,很多组织把它用作一个通用的、可伸缩的数据处理平台。Hive和传统的关系型数据库有很大的区别,Hive将外部的任务解析成一个MapReduce可执行计划,而启动MapReduce是一个高延迟的一件事,每次提交任务和执行任务都需要消耗很多时间,这也就决定Hive只能处理一些高延迟的应用(如果你想处理低延迟的应用可以考虑Hbase)。由于设计的目标不一样,Hive目前还不支持事务;不能对表数据进行修改(不能更新、删除、插入;只能通过文件追加数据、重新导入数据);不能对列建立索引(但是Hive支持索引的建立,但是不能提高Hive的查询速度。如果想提高Hive的查询速度,可以学习Hive的分区、桶的应用)。
hbase和hive的对比:
共同点:
1、hbase与hive都是架构在hadoop之上的,都是用hadoop作为底层存储。区别:
2、Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
3、在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop 。
4、Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。
5、Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。
6、hive借用hadoop的MapReduce来完成一些hive中的命令的执行。
7、hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。
8、hbase是列存储。
9、hdfs作为底层存储,hdfs是存放文件的系统,而Hbase负责组织文件。
10、hive需要用到hdfs存储文件,需要用到MapReduce计算框架。
2、Jdk安装
下载地址:http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
3、Hadoop搭建
准备
1、增加新的用户
adduser hadoop//添加一个名为hadoop的用户,该用户随意取
passwd hadoop //修改密码
2、给用户hadoop增加root权限,切换到root下使用命令visudo
在
root ALL=(ALL) ALL
下面增加
hadoop ALL=(ALL) ALL
3、修改主机名
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop
sudo hostname hadoop 让修改生效,无需重启
4、修改主机名和IP的映射关系
vim /etc/hosts
192.168.205.132(本机linuxIP地址) hadoop
5、关闭防火墙
查看防火墙状态
service iptables status
关闭防火墙
service iptables stop
下载hadoop
1、使用wget直接下载:
wget http://mirrors.hust.edu.cn/apache/hadoop/core/stable/hadoop-2.7.1.tar.gz
2、解压:
tar -zxvf hadoop-2.7.1.tar.gz
3、修改配置文件:
进入 hadoop2.7.1/etc/hadoop/目录下,hadoop-env.sh、core-site.xml、mapred-site.xml.template、hdfs-site.xml这几个文件需要配置:
a、修改core-site.xml 配置:其中的hadoop.tmp.dir的路径可以根据自己的习惯进行设置。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/liqqc/app/hadoop_conf/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
b、 mapred-site.xml.template配置
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
c、hdfs-site.xml配置:其中dfs.namenode.name.dir和dfs.datanode.data.dir的路径可以自由设置,最好在hadoop.tmp.dir的目录下面。(注意:如果运行Hadoop的时候发现找不到jdk,可以直接将jdk的路径放置在hadoop-env.sh里面,具体如下export JAVA_HOME=”/usr/java/jdk1.8.0_141/”。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/liqqc/app/hadoop_conf/tmp/dfs</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/liqqc/app/hadoop_conf/tmp/data</value>
</property>
</configuration>
运行hadoop
1、进入hadoop-2.7.1/bin目录下,执行命令
bin/hdfs namenode -format
出现如下结果说明初始化执行成功:
17/07/28 19:37:31 INFO namenode.FSImage: Allocated new BlockPoolId: BP-865909897-127.0.0.1-1501295851093
17/07/28 19:37:31 INFO common.Storage: Storage directory /home/liqqc/app/hadoop_conf/tmp/dfs has been successfully formatted.
17/07/28 19:37:31 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
17/07/28 19:37:31 INFO util.ExitUtil: Exiting with status 0
17/07/28 19:37:31 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1
************************************************************/
2、开启 NameNode 和 DataNode 进程
sbin/start-all.sh
执行jps命令查看进程状态:
[root@localhost sbin]# jps
3939 ResourceManager
3786 SecondaryNameNode
4044 NodeManager
4252 Jps
3501 NameNode
3、查看web界面
在浏览器中输入 http://localhost:50070 ,即可查看相关信息。
4、Hive安装
1、到下载地址http://apache.fayea.com/hive/,下载apache-Hive-2.1.1-bin.tar.gz,解压
tar -xzvf apache-hive-2.1.1-bin.tar.gz
2、配置环境变量,
vi /etc/profile
export HIVE_HOME=/home/liqqc/app/apache-hive-2.1.1-bin
export PATH=$PATH:$HIVE_HOME/bin
3、配置hive参数
拷贝模板配置
cp hive-default.xml.template hive-default.xml
cp hive-env.sh.template hive-env.sh
创建hive-site.xml
touch hive-site.xml
配置hive-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_141
export HIVE_HOME=/home/liqqc/app/apache-hive-2.1.1-bin
export HADOOP_HOME=/home/liqqc/app/hadoop-2.7.1
配置hive-site.xml
创建临时文件:在apache-hive-2.1.1-bin文件夹下创建tmp文件夹
<?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</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>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/home/liqqc/app/apache-hive-2.1.1-bin/tmp</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/home/liqqc/app/apache-hive-2.1.1-bin/tmp</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/home/liqqc/app/apache-hive-2.1.1-bin/tmp</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
</configuration>
4、上传mysql驱动jar
下载mysql驱动文件mysql-connector-java-5.1.7-bin.jar,并上传到到/apache-hive-2.1.1-bin/lib目录下。
5、初始化hive
命令:schematool -initSchema -dbType mysql
最后显示schemaTool completed,没有报错就成功了。
6、启动hive
输入命令:hive
5、mysql安装
安装命令:
yum install mysql-server
安装完成后启动:
service m:ysqld start
进入mysql:
mysql>mysql
如果报错:
mysqladmin: connect to server at ‘localhost’ failed
error: ‘Access denied for user ‘root’@’localhost’ (using password: YES)’
进行如下修改:
use mysql;
update user set password=PASSWORD("root")where user="root";
flush privileges;
quit
service mysqld restart
执行 mysql -uroot –proot 查看是否成功
创建hive数据库:
创建Hive数据库:
mysql>create database hive;
6、问题
Ubuntu14.0 下Hadoop启动报Error: JAVA_HOME is not set and could not be found解决办法
hiveserver2启动:javax.jdo.JDODataStoreException: Error executing SQL query “select “DB_ID” from “DBS”
hive 部署需要注意的几点以及Version information not found 错误解决办法
Hadoop namenode无法启动
启动hadoop 2.6遇到的datanode启动不了