Hadoop+Hive+Mysql环境搭建

Posted 皮斯特劳沃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop+Hive+Mysql环境搭建相关的知识,希望对你有一定的参考价值。

1、了解

学习链接:
http://hadoop.apache.org/
http://spark.apache.org/
http://hive.apache.org/
https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples


1、hive是一个数据仓库
2、hive基于hadoop。
总结为:hive是基于hadoop的数据仓库。


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解决办法http://blog.csdn.net/u283056051/article/details/45501983

hiveserver2启动:javax.jdo.JDODataStoreException: Error executing SQL query “select “DB_ID” from “DBS” http://m.blog.csdn.net/quiet_girl/article/details/75209070

hive 部署需要注意的几点以及Version information not found 错误解决办法http://blog.csdn.net/youngqj/article/details/19987727

Hadoop namenode无法启动http://blog.csdn.net/bychjzh/article/details/7830508

启动hadoop 2.6遇到的datanode启动不了http://blog.csdn.net/zhangt85/article/details/42078347

以上是关于Hadoop+Hive+Mysql环境搭建的主要内容,如果未能解决你的问题,请参考以下文章

Hive环境的安装

搭建docker-spark-hadoop-hive-zeppelin分布式集群环境

《hadoop权威指南》关于hive的第一个小例子的演示

CentOS下Hive搭建

搭建hadoop+spark+hive环境(配置安装hive)

Hive安装与部署集成mysql