Hive 基本环境部署
一、Hive 运行模式 与Hadoop类似,Hive也有 3 种运行模式: 1. 内嵌模式 将元数据保存在本地内嵌的 Derby数据库中,这是使用hive最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。 2. 本地模式 这种模式是将元数据保存在本地独立的数据库中(一般是MySQL),这用就可以支持多会话和多用户连接了。 3. 远程模式 此模式应用于 Hive 客户端较多的情况。把mysql数据库独立出来,将元数据保存在远端独立的 MySQL 服务中,避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况。 二、下载安装 Hive http://hive.apache.org/downloads.html 三、配置系统环境变量 修改 /etc/profile 文件,使用sudo vim /etc/profile来修改: #Hiveenvironment exportHIVE_HOME=/usr/local/hadoop/hive exportPATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH 四、内嵌模式 (1)修改 Hive 配置文件 $HIVE_HOME/conf 对应的是 Hive 的配置文件路径,类似于之前学习的Hbase, 该路径下的 hive-site.xml 是 Hive 工程的配置文件。默认情况下,该文件并不存在,我们需要拷贝它的模版来实现: $cphive-default.xml.templatehive-site.xml hive-site.xml 的主要配置有: hive.metastore.warehouse.dir该参数指定了 Hive 的数据存储目录,默认位置在 HDFS 上面的 /user/hive/warehouse 路径下。 hive.exec.scratchdir该参数指定了 Hive 的数据临时文件目录,默认位置为 HDFS 上面的 /tmp/hive 路径下。 同时我们还要修改 Hive 目录下 /conf/hive-env.sh 文件(请根据自己的实际路径修改),该文件默认也不存在,同样是拷贝它的模版来修改: exportHADOOP_HEAPSIZE=1024 #SetHADOOP_HOMEtopointtoaspecifichadoopinstalldirectory HADOOP_HOME=/usr/local/hadoop #HiveConfigurationDirectorycanbecontrolledby: exportHIVE_CONF_DIR=/usr/local/hadoop/hive/conf #Foldercontainingextraibrariesrequiredforhivecompilation/executioncanbecontrolledby: exportHIVE_AUX_JARS_PATH=/usr/local/hadoop/hive/lib (2)创建必要目录 前面我们看到 hive-site.xml 文件中有两个重要的路径,切换到hadoop用户下查看 HDFS 是否有这些路径: $hadoopdfs-ls/ 没有发现上面提到的路径,因此我们需要自己新建这些目录,并且给它们赋予用户写(W)权限。 $hadoopdfs-mkdir/user/hive/warehouse $hadoopdfs-mkdir/tmp/hive $hadoopdfs-chmod777/user/hive/warehouse $hadoopdfs-chmod777/tmp/hive 如果你遇到no such file or directory类似的错误,就一步一步新建目录,例如: $hadoopdfs-mkdir/tmp $hadoopdfs-mkdir/tmp/hive 检查是否新建成功hadoop dfs -ls /以及hadoop dfs -ls /user/hive/: (3)修改 io.tmpdir 路径 同时,要修改 hive-site.xml 中所有包含${system:Java.io.tmpdir}字段的 value 即路径(vim下 / 表示搜索,后面跟你的关键词,比如搜索 hello,则为/hello, 再回车即可),你可以自己新建一个目录来替换它,例如/home/hive/iotmp. 同样注意修改写权限。如果不修改这个,你很可能会出现如下错误 (4) 初始化 :/schematool -initSchema -dbType derby 运行 Hive ./hive 前面我们已经提到过,内嵌模式使用默认配置和 Derby 数据库,所以无需其它特别修改,先./start-all.sh启动 Hadoop, 然后直接运行hive: 报错 解决方法: create table test_table(id INT, username string); show tables; 五、远程模式 1.配置 vimhive-site.xml <?xmlversion="1.0"?><configuration> <property> <name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://{ip:port}/{databases}</value></property><property><name>javax.jdo.option.ConnectionDriveName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>{username}</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>{password}</value></property><property><name>hive.metastore.warehouse.dir</name><value>/hive/warehouse</value></property></configuration> 初始化 ./schematool -dbType mysql -initSchema 2.启动metastore ./hive--servicemetastore& 默认端口 9083 在debug模式下开启metastore :执行hive --service metastore -hiveconf hive.root.logger=DEBUG,console 3.启动HiveServer2 默认端口:10000 ./hive--servicehiveserver2& 4.启动客户端 ./hive--servicecli 5.启动shell 或是 beeline ./beeline-ujdbc:hive2://app:10000/default 六.配置spark为默认引擎 hive使用spark有严格的版本限制, Hive根pom.xml的<spark.version>定义了使用它构建/测试的Spark的版本 版本不对会报如下错误: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.spark.SparkTask 第一种方法 1.要将Spark依赖项添加到Hive 在Hive 2.2.0之前,将spark-assembly jar链接到HIVE_HOME / lib 2.配置Hive执行引擎使用Spark: Hive-site.xml配置 <property> <name>hive.execution.engine</name> <value>Spark</value></property> 第二种方法 配置hive-site.xml <property><name>spark.home</name><value>/root/spark-without-hive</value></property> 七、Java客户端 1.默认用户名和密码为空 2.默认端口10000,如果连不上须关闭防火墙 vim /etc/sysconfig/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT service iptables restart 错误 org.apache.hive.service.cli.HiveSQLException: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymousat org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:264)at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:255)at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:593)at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:172)at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107)at java.sql.DriverManager.getConnection(Unknown Source)at java.sql.DriverManager.getConnection(Unknown Source)at com.car.test.HiveJdbcCli.getConn(HiveJdbcCli.java:156)at com.car.test.HiveJdbcCli.main(HiveJdbcCli.java:35) 解决方法: 修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项 <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> 重启hadoop 测试:./beeline -u 'jdbc:hive2://localhost:10000/userdb' -n username(替换为上述的用户名部分) 错误 java.sql.SQLException: org.apache.thrift.transport.TTransportException: SASL authentication not completeat org.apache.hive.jdbc.HiveStatement.closeClientOperation(HiveStatement.java:211)at org.apache.hive.jdbc.HiveStatement.close(HiveStatement.java:228)at com.car.test.HiveJdbcCli.main(HiveJdbcCli.java:74)Caused by: org.apache.thrift.transport.TTransportException: SASL authentication not complete 解决办法: This is because the thrift server is expecting to authenticate via SASL when you open your transport connection. Hive Server 2 defaults to using SASL - unfortunately,PHPlacks a version of TSaslClientTransport (which is used as a wrapper around another TTransport object) which handles the SASL negotiation when you open your transport connection. The easiest solution for now is to set the following property in your hive-site.xml <property><name>hive.server2.authentication</name><value>NOSASL</value></property> Hive安装方法二以下操作在hdpsrc3 节点上操作一,下载安装包1,下载hive http://mirrors.hust.edu.cn/apache/ 得到apache-hive-1.1.0.tar.gz ,放到该目录下 /home/hdpsrc/ 2,下载mysql http://dev.mysql.com/downloads/mysql/5.5.html#downloads 得到 mysql-client-5.5.39-2.linux2.6.x86_64.rpmmysql-devel-5.5.39-2.linux2.6.x86_64.rpmmysql-server-5.5.39-2.linux2.6.x86_64.rpmmysql-shared-5.5.39-2.linux2.6.x86_64.rpmmysql-shared-compat-5.5.39-2.linux2.6.x86_64.rpm拷贝到该目录下 /home/hdpsrc/Desktop/mysql/二,安装mysql1,卸载系统自带的mysql相关安装包,仅卸载 mysql 开头的包rpm -qa|grep MySQLsudo rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_642,安装cd /home/hdpsrc/Desktop/mysql/sudo rpm -ivh mysql-*sudo cp /usr/share/mysql/my-large.cnf /etc/my.cnf3,启动设置mysql启动mysql服务sudo service mysql start设置为开机自启动sudo chkconfig mysql on设置root用户登录密码sudo /usr/bin/mysqladmin -u root password 'wu123'登录mysql 以root用户身份登录mysql -uroot -pwu123创建hive用户,数据库等insert into mysql.user(Host,User,Password) values("localhost","hive",password("hive"));create database hive;grant all on hive.* to hive@'%' identified by 'hive';grant all on hive.* to hive@'localhost' identified by 'hive';flush privileges; 退出mysql exit验证hive用户mysql -uhive -phiveshow databases;看到如下反馈信息,则说明创建成功mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || hive || test |+--------------------+3 rows in set (0.00 sec)退出mysqlexit三,安装hive1,解压安装包cd ~tar -zxvf apache-hive-1.1.0-bin.tar.gz2,建立软连接ln -s apache-hive-1.1.0-bin hive3,添加环境变量vi .bash_profile导入下面的环境变量export HIVE_HOME=/home/hdpsrc/hiveexport PATH=$PATH:$HIVE_HOME/bin使其有效source .bash_profile4,修改hive-site.xml主要修改以下参数<property> <name>javax.jdo.option.ConnectionURL </name> <value>jdbc:mysql://localhost:3306/hive </value> </property> <property> <name>javax.jdo.option.ConnectionDriverName </name> <value>com.mysql.jdbc.Driver </value> </property><property> <name>javax.jdo.option.ConnectionPassword </name> <value>hive </value> </property> <property> <name>hive.hwi.listen.port </name> <value>9999 </value> <description>This is the port the Hive Web Interface will listen on </descript ion> </property> <property> <name>datanucleus.autoCreateSchema </name> <value>true</value> </property> <property> <name>datanucleus.fixedDatastore </name> <value>false</value> </property> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>Username to use against metastore database</description> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/home/hdpsrc/hive/iotmp</value> <description>Local scratch space for Hive jobs</description> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/home/hdpsrc/hive/iotmp</value> <description>Temporary local directory for added resources in the remote file system.</description> </property> <property> <name>hive.querylog.location</name> <value>/home/hdpsrc/hive/iotmp</value> <description>Location of Hive run time structured log file</description> </property>cp hive/conf/hive-default.xml.template hive/conf/hive-site.xml编辑hive-site.xml5,拷贝mysql-connector-java-5.1.6-bin.jar 到hive 的lib下面mv /home/hdpsrc/Desktop/mysql-connector-java-5.1.6-bin.jar /home/hdpsrc/hive/lib/6,把jline-2.12.jar拷贝到hadoop相应的目录下,替代jline-0.9.94.jar,否则启动会报错cp /home/hdpsrc/hive/lib/jline-2.12.jar /home/hdpsrc/hadoop-2.6.0/share/hadoop/yarn/lib/mv /home/hdpsrc/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar /home/hdpsrc/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar.bak /7,穿件hive临时文件夹mkdir /home/hdpsrc/hive/iotmp四,启动测试hive启动hadoop后,执行hive命令hive测试输入 show database;hive> show databases;OKdefaultTime taken: 0.907 seconds, Fetched: 1 row(s)遇到问题总结希望可以帮助遇到此类问题的人。建议先建元数据库,设置编码latin1。否则建好元数据相关可能会出问题,如drop table 卡死, create table too long等等hive对utf-8支持不好。设置完编码latin1,发现table 字段描述无法显示中文。修改元数据库表的字符(1)修改表字段注解和表注解alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8(2) 修改分区字段注解:alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ; alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8; (3)修改索引注解:alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;连接元数据设置dbc:mysql://192.168.209.1:3306/metastore_hive_db?createDatabaseIfNotExist=true&characterEncoding=UTF-8对于已经建好的表,不起作用。 最好安装的时候就修改编码格式。元数据mysql远程模式配置<property> <name>hive.metastore.uris</name> <value>thrift://192.168.223.129:9083</value> <description>运行hive的主机地址及端口(特别重要ip不要弄错)</description></property>启动元数据bin/hive --service metastore &到此hive已经安装完成参考文档:http://www.mamicode.com/info-detail-516526.htmlhttp://blog.csdn.net/blueheart20/article/details/38460541备注:1,遇到的问题:http://www.mamicode.com/info-detail-516526.html