hive2.1.1 + hadoop2.8.0 + windows7(不用cygwin)搭建Hive

环境: win7+jdk7+hadoop2.8+hive2.1.1

推荐文章:《hadoop2.8.0 + jdk1.7 + windows7(不用linux环境) 搭建与异常处理》

一、Hive介绍

Hive负责把Sql语句转化成MapReduce程序的插件

二、下载

官网:http://hive.apache.org/

下载地址:http://mirror.bit.edu.cn/apache/hive/

我下载的是apache-hive-2.1.1

三、windows下安装运行Hive

1、配置环境变量HIVE_HOME=E:\apache-hive-2.1.1-bin,在path下追加HIVE_HOME/bin;

2、修改配置文件

(1)重命名配置文件

在HIVE_HOME/conf文件夹下的

hive-env.sh.template

 hive-exec-log4j2.properties.template

hive-log4j2.properties.template 

hive-default.xml.template

分别复制一份,重命名为

hive-env.sh

hive-exec-log4j2.properties

hive-log4j2.properties

hive-site.xml


(2)配置hive-env.sh

在空白处添加

export HADOOP_HOME=F:\hadoop\hadoop-2.7.2
export HIVE_CONF_DIR=F:\hadoop\apache-hive-2.1.1-bin\conf
export HIVE_AUX_JARS_PATH=F:\hadoop\apache-hive-2.1.1-bin\lib


(3)配置hive-exec-log4j2.properties 与  hive-log4j2.properties

修改以下两项即可

property.hive.log.dir = E:\apache-hive-2.1.1-bin\hivelog
property.hive.log.file = hive.log


(4)配置hive-sitexml

<!--修改配置-->  
 <property>  
    <name>hive.metastore.warehouse.dir</name>  
     <!--hive的数据存储目录,指定的位置在hdfs上的目录,需在hdfs先创建该目录-->  
    <value>/user/hive/warehouse</value>  
    <description>location of default database for the warehouse</description>  
</property>  
<property>  
    <name>hive.exec.scratchdir</name>  
    <!--hive的临时数据目录,指定的位置在hdfs上的目录,需在hdfs先创建该目录-->  
    <value>/tmp/hive</value>  
    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description>  
</property>  
<property>  
    <name>hive.exec.local.scratchdir</name>  
    <!--本地目录-->  
    <value>E:/apache-hive-2.1.1-bin/hive/iotmp</value>  
    <description>Local scratch space for Hive jobs</description>  
</property>  
<property>  
    <name>hive.downloaded.resources.dir</name>  
    <!--本地目录-->  
    <value>E:/apache-hive-2.1.1-bin/hive/iotmp</value>  
    <description>Temporary local directory for added resources in the remote file system.</description>  
</property>  
<property>  
    <name>hive.querylog.location</name>  
    <!--本地目录-->
    <value>E:/apache-hive-2.1.1-bin/hive/iotmp</value>  
    <description>Location of Hive run time structured log file</description>  
</property>  
<property>  
    <name>hive.server2.logging.operation.log.location</name>
	<!--本地目录-->
    <value>E:/apache-hive-2.1.1-bin/iotmp/operation_logs</value>  
    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>  
</property>  
  
<property>  
    <name>javax.jdo.option.ConnectionURL</name>  
	<!--连接mysql数据库的ip和端口,需创建hive库-->  
    <value>jdbc:mysql://ip:端口/hive</value>  
</property>
<property>  
    <name>javax.jdo.option.ConnectionDriverName</name>  
	<!--指定mysql驱动-->  
    <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>root</value>  
</property>  
   
<!-- 解决 Caused by: MetaException(message:Version information not found in metastore. )  -->  
<property>    
    <name>hive.metastore.schema.verification</name>    
    <value>false</value>    
    <description>    
    Enforce metastore schema version consistency.    
    True: Verify that version information stored in metastore matches with one from Hive jars.  Also disable automatic    
          schema migration attempt. Users are required to manully migrate schema after Hive upgrade which ensures    
          proper metastore schema migration. (Default)    
    False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.    
    </description>    
</property>   

<!--新增配置项-->  
<!-- 解决 Required table missing : "`VERSION`" in Catalog "" Schema "". DataNucleus requires this table to perform its persistence operations. Either your MetaData is incorrect, or you need to enable "datanucleus.autoCreateTables"  -->  
<property>  
    <name>datanucleus.autoCreateSchema</name>  
    <value>true</value>  
</property>  
  
<property>  
    <name>datanucleus.autoCreateTables</name>  
    <value>true</value>  
</property>  
  
<property>  
    <name>datanucleus.autoCreateColumns</name>  
    <value>true</value>  
</property> 

(5)创建数据库和文件夹

创建hive数据库: create database hive default character set utf8;

如果启动时报错则改用create database hive default character set lant1;

祥见下面:异常处理1

在hdfs上创建相应文件夹

hadoop fs -mkdir /tmp

hadoop fs  -mkdir /user/hive/warehouse

hadoop fs -chmod g+w /tmp

hadoop fs -chmod g+w /user/hive/warehouse


(6)把mysql连接驱动jar包拷贝到hive/lib文件夹下

如:mysql-connector-java-5.1.35.jar


3、启动

启动前确保内存足够

启动hdfs:    start-dfs

启动yarn:    start-yarn

启动metastore服务:hive --service metastore

启动Hive:hive


以上即可安装完成,可在hive客户端执行建表语句

注意:。

1、因为jdbc已经是直接连接hive数据库,所以不用  use hive;    直接执行建表语句即可。


搭建步骤参考:http://blog.youkuaiyun.com/f7anty/article/details/72629622


四、使用步骤

1、建表

create table t_user(uid int, name string, age int)

row format delimited

fields terminated by "\t";

建完表在hdfs的/user/hive/warehouse文件夹下就会创建一个和表名一致的文件夹

2、上传数据文件至表名文件夹

在E盘创建文本文件data.txt,文件内容:

1	zhangsan	18
2	lisi	19
3	wangwu	19
4	maliu	20

在E盘执行 hadoop fs -put data.txt /user/hive/warehouse/t_user

或者在hive客户端执行

load data local inpath 'E:/data.txt' into table t_user;


3、用hive查看数据文件

在hive客户端执行select * from t_user

4、用hive执行mapreduce程序

在hive客户端执行

create table t_user_simple

as

select name, age from t_user;

或者

select count(*) from t_user;


四、知识点

1、Hive默认数据库Derby

Derby是轻量级的java数据库,Hive使用Derby作为默认数据库,用于存储元数据。运行Hive客户端,即在当前文件夹创建Derby数据库文件。

如果更换文件夹执行客户端,就会在新文件夹创建数据库文件,即更换文件夹后无法查到原来的元数据

2、Hive不支持insert语句

因为其本身只支持处理文件

3、Hive默认加载表文件夹下的所有数据文件

当在Hive客户端创建table后,在hdfs上会生成对应文件夹,如果往表名文件夹上传数据文件夹,则可以使用select语句查出。

如果往表名文件夹上传多个数据文件,也可用select查出。

4、Hive添加表数据方式

(1)使用hdfs的put命令,上传至对应的表名文件夹

(2)在hive客户端使用load data local inpath 'E:/data.txt' into table t_user;

(3)从另一张表获取数据插入这张表(MR执行)

insert into table t_user_simple

select name, age from _user

where age>18;


5、外表

Hive可以用外表存储一些公共数据,外表在删除时外表文件夹下的数据不会被删除

create external table t_user_ex(uid int, name string, age int)

row format delimited

fields terminated by "\t"

location '/hive-tmp/user/';



五、异常处理

1、Specified key was too long; max key length is 767

如果数据库的字符集是utf8,可能会报此异常,可以更换成lant1解决。

也可以参考:http://tcspecial.iteye.com/blog/2105079 

### 回答1: 要在Linux上搭建Hive on Spark环境,需要以下步骤: 1. 安装Hadoop和Spark 首先需要安装Hadoop和Spark,可以选择Hadoop 2.8.0和Spark 1.6.3版本。安装过程可以参考官方文档。 2. 安装Hive 安装Hive需要下载Hive 2.1.1版本,并解压到指定目录。然后需要配置Hive的环境变量,将Hive的bin目录添加到PATH中。 3. 配置Hive on Spark 在Hive的conf目录下,需要创建hive-site.xml文件,并添加以下配置: ``` <property> <name>hive.execution.engine</name> <value>spark</value> </property> <property> <name>spark.master</name> <value>local[*]</value> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> </property> <property> <name>spark.executor.memory</name> <value>1g</value> </property> ``` 其中,hive.execution.engine配置为spark,spark.master配置为local[*],表示使用本地模式运行Spark。spark.submit.deployMode配置为client,表示以客户端模式提交Spark任务。spark.executor.memory配置为1g,表示每个executor的内存为1GB。 4. 启动Spark和Hive 启动Spark和Hive需要分别执行以下命令: ``` $SPARK_HOME/sbin/start-all.sh $HIVE_HOME/bin/hive ``` 其中,$SPARK_HOME和$HIVE_HOME分别为Spark和Hive安装目录。 5. 测试Hive on Spark 在Hive命令行中,可以执行以下命令测试Hive on Spark: ``` hive> set hive.execution.engine=spark; hive> select count(*) from table_name; ``` 其中,table_name为需要查询的表名。如果查询结果正确,则说明Hive on Spark环境搭建成功。 ### 回答2Hadoop是一个开源的分布式文件系统和计算框架,在大数据领域中应用广泛,而Hive则是基于Hadoop的数据仓库系统,通过将数据存储在Hadoop中,并使用类SQL的语言查询和分析数据。但是,Hive的执行速度很慢,而Spark是速度很快的内存计算框架,能够比Hadoop更快地处理大数据。因此,用户可以使用Hive on Spark来加速Hive查询。 要在Linux上搭建Hive on Spark环境, 需要按照以下步骤进行操作: 1. 下载并安装Hadoop:在官方网站上下载Hadoop的最新版本,然后解压和配置。 2. 下载并安装Spark:在官方网站上下载Spark的最新版本,然后解压和配置。 3. 下载并安装Hive:在官方网站上下载Hive的最新版本,然后解压和配置。 4. 配置环境变量:在.bashrc或.bash_profile中添加Hadoop和Spark的路径,并运行source命令使其生效。 5. 启动Hadoop集群:运行start-all.sh脚本启动Hadoop集群,可以通过jps命令检查集群是否正常运行。 6. 启动Spark:运行spark-shell来启动Spark,可以通过测试程序检查Spark是否正常运行。 7. 启动Hive:运行hive命令来启动Hive,可以通过测试程序测试Hive是否正常运行。 8. 配置Hive on Spark:在hive-site.xml文件中添加以下变量来配置Hive on Spark: hive.execution.engine=spark hive.spark.client.server.connect.timeout=600 hive.spark.client.connect.timeout=600 9. 验证Hive on Spark:运行一些查询来验证Hive on Spark是否正常运行,并通过Spark网页界面查看运行情况。 总之,搭建Hive on Spark环境需要仔细地完成操作,按照步骤进行操作,将会帮助你更快更有效地处理大数据。 ### 回答3: 首先,在准备搭建 Hive on Spark 环境之前,我们需要确保已经安装了 Java JDK 、Hadoop 和 Spark 环境。在此基础上,按照以下步骤完成 Hive on Spark 的搭建1. 下载Hive 在 Apache Hive 的官网上可以下载到需要的版本,我们这里选择 hive-2.1.1 版本,下载后解压。 2. 配置Hadoop环境变量 在 ~/.bashrc 中添加如下内容: export HADOOP_HOME=/your/path/to/hadoop export PATH=$PATH:$HADOOP_HOME/bin 保存文件,并使用 source ~/.bashrc 命令来使环境变量立即生效。 3. 配置Hive环境变量 在 ~/.bashrc 中添加如下内容: export HIVE_HOME=/your/path/to/hive export PATH=$PATH:$HIVE_HOME/bin 保存文件,并使用 source ~/.bashrc 命令来使环境变量立即生效。 4. 配置Spark环境变量 在 ~/.bashrc 中添加如下内容: export SPARK_HOME=/your/path/to/spark export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin 保存文件,并使用 source ~/.bashrc 命令来使环境变量立即生效。 5. 配置Hivehive-site.xml文件 将 $HIVE_HOME/conf 目录下的 hive-default.xml.template 文件复制一份并命名为 hive-site.xml,然后根据需要进行修改。在 hive-site.xml 中添加以下内容: ``` <property> <name>spark.master</name> <value>spark://<SPARK_MASTER_HOST>:<SPARK_MASTER_PORT></value> <description>URL of the Spark Master</description> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> <description>Whether to run Spark in client or cluster mode</description> </property> <property> <name>hive.execution.engine</name> <value>spark</value> <description>Execution engine</description> </property> <property> <name>hive.spark.client.connect.timeout</name> <value>300s</value> </property> ``` 注意,其中的 <SPARK_MASTER_HOST> 和 <SPARK_MASTER_PORT> 分别应该替换为实际使用的 Spark Master 的地址和端口。 6. 配置Spark的spark-defaults.conf文件 将 $SPARK_HOME/conf 目录下的 spark-defaults.conf.template 文件复制一份并命名为 spark-defaults.conf,然后根据需要进行修改。在 spark-defaults.conf 中添加以下内容: ``` spark.executor.memory 4g spark.driver.memory 2g spark.sql.shuffle.partitions 200 ``` 根据需要调整默认的内存大小(如果已经分配过多可能会导致OOM),设置适当的partition数(避免执行时的数据倾斜问题)。 7. 启动Hive服务 执行启动Hive的命令: ``` hive --service metastore & hive ``` 需要注意的是,需要先启动 metastore 服务,然后才能启动 Hive 客户端。 8. 准备测试数据 接下来,为了测试 Hive on Spark 的功能,可以使用 Hive 提供的测试数据集来进行测试。 将 https://github.com/facebookarchive/facebook-360-spatial-workstation.git 克隆到本地,进入 samples 文件夹,执行以下命令来生成哈希表: ``` beeline -n hadoop -d org.apache.hive.jdbc.HiveDriver \ -jdbc:hive2://localhost:10000 \ -e "CREATE TABLE h3 (id int, lat double, lon double, geog string) \ ROW FORMAT DELIMITED \ FIELDS TERMINATED BY ',' \ LINES TERMINATED BY '\n' \ STORED AS TEXTFILE;" cd h3/ /data/gdal/gdal-2.2.0/bin/ogr2ogr -f CSV GEOM{FID}H3v11.csv geohash-cells.geojson -lco COMPRESS=DEFLATE beeline -n hadoop -d org.apache.hive.jdbc.HiveDriver \ -jdbc:hive2://localhost:10000 \ -e "LOAD DATA LOCAL INPATH '/h3/GEOMFIDH3v11.csv' INTO TABLE h3;" ``` 在以上命令中,我们使用了 beeline 来连接到 Hive 服务器,并使用 ogr2ogr 工具读取 geojson 文件并转存为 CSV 文件后导入到 Hive 中。 9. 执行Spark SQL查询 接下来可以使用 Spark SQL 来查询 Hive 中的数据。 运行 Spark Shell: ``` $SPARK_HOME/bin/spark-shell --master spark://<SPARK_MASTER_HOST>:<SPARK_MASTER_PORT> \ --jars $HIVE_HOME/lib/hive-exec-<HIVE_VERSION>.jar,$HIVE_HOME/lib/hive-metastore-<HIVE_VERSION>.jar ``` 如果以上命令运行正常,将会进入 Spark Shell 中。 在 Shell 中运行如下代码: ``` import org.apache.spark.sql._ val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc) hiveContext.setConf("hive.metastore.uris","thrift://<IP_ADDRESS>:9083") hiveContext.sql("use default") hiveContext.sql("show databases").foreach(println) hiveContext.sql("select count(*) from h3").foreach(println) ``` 其中,<IP_ADDRESS> 应该替换为实际使用的 Thrift 服务器的 IP 地址。 10. 结束Spark SQL查询 完成测试后,可以使用以下命令退出 Spark Shell: ``` scala> :q ``` 至此,Hive on Spark 环境已经搭建完成。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值