设为首页 收藏本站
查看: 459|回复: 0

[经验分享] 基于hadoop集群的hive 安装及异常解决方法

[复制链接]

尚未签到

发表于 2016-12-11 06:57:01 | 显示全部楼层 |阅读模式

  • 第一部分:软件准备与环境规划

Hadoop环境介绍
·Hadoop安装路径
·/usr/local/hadoop
Hive环境规划
·Hive安装路径
·/usr/local/hive
·Hive数据存放路径
·hdfs
·/user/hive/warehouse
·Hive元数据
·第三方数据库
·derby mysql
软件准备
·OS
·ubuntu
·JDK
·java 1.6.0_27
·Hadoop
·hadoop-1.0.0.tar
·Hive
·hive-0.8.1.tar


  • 第二部分:Hive项目介绍



项目结构



DSC0000.jpg


Hive配置文件介绍

·hive-site.xml      hive的配置文件

·hive-env.sh        hive的运行环境文件

·hive-default.xml.template  默认模板

·hive-env.sh.template     hive-env.sh默认配置

·hive-exec-log4j.properties.template   exec默认配置

· hive-log4j.properties.template log默认配置

hive-site.xml

< property>
<name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createData baseIfNotExist=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>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>test</value>
<description>password to use against metastore database</description>
</property>
 
hive-env.sh










·配置Hive的配置文件路径

·export HIVE_CONF_DIR= your path

·配置Hadoop的安装路径

·HADOOP_HOME=your hadoop home


  • 第三部分:安装hive
   下载hive安装包 http://mirrors.tuna.tsinghua.edu.cn/apache/hive/
  tar -xf hive-0.10.0.tar.gz
 将解压后的hive文件放在系统的/usr/local/hive 中。

在/etc/profile中添加:
export HIVE_HOME=/usr/local/hive/hive
export PATH=$HIVE_HOME/bin:$PATH


  
将conf/hive-default.xml.template复制两份,分别命名为hive-default.xml(用于保留默认配置)和hive-site.xml(用于个性化配置,可覆盖默认配置)

启动hive:
$ $HIVE_HOME/bin/hive

hive> create database test;
OK
Time taken: 0.07 seconds
hive> show databases;
OK
default
test
Time taken: 0.196 seconds


执行成功。




  • 第三部分:使用MySQL数据库的安装方式
  但是这样安装的元数据保持在内嵌的数据库Derby中,只能允许一个会话连接,如果要支持多用户多会话,则需要一个独立的元数据库,目前比较流行的是使用MySQL,下面进行配置。
 
1)安装MySQL服务器并启动MySQL服务

2)为Hive建立相应的MySQL帐号,并赋予足够的权限
①进入root:mysql -uroot -p;
②创建hive数据库:create database hive;
③创建用户hive,它只能从localhost连接到数据库并可以连接到wordpress数据库:grant all on hive.* to hive@localhost identified by 'hive'。

3)在Hive的conf目录下修改配置文件hive-site.xml,配置文件修改如下

<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>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
  页

4)把MySQL的JDBC驱动包(我使用的是mysql-connector-java-5.0.8-bin.jar,从http://downloads.mysql.com/archives/mysql-connector-java-5.0/mysql-connector-java-5.0.8.tar.gz下载并解压后可以找到)复制到Hive的lib目录下。
  
启动Hive shell,执行
show tables;
如果不报错,表明基于独立元数据库的Hive已经安装成功了。

查看一下元数据的效果。
在Hive上建立数据表:
CREATE TABLE my(id INT,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
show tables;
select name from my;

然后我们以刚刚建立的hive帐号登录MySQL查看元数据信息。
mysql> use hive
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;
+-----------------+
| Tables_in_hive  |
+-----------------+
| BUCKETING_COLS  |
| COLUMNS         |
| DATABASE_PARAMS |
| DBS             |
| PARTITION_KEYS  |
| SDS             |
| SD_PARAMS       |
| SEQUENCE_TABLE  |
| SERDES          |
| SERDE_PARAMS    |
| SORT_COLS       |
| TABLE_PARAMS    |
| TBLS            |
+-----------------+
13 rows in set (0.00 sec)

mysql> select * from TBLS;
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER  | RETENTION | SD_ID | TBL_NAME | TBL_TYPE      | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT |
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+
|      1 |  1319445990 |     1 |                0 | hadoop |         0 |     1 | my       | MANAGED_TABLE | NULL               | NULL               |
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+
1 row in set (0.00 sec)

在TBLS中可以看到Hive表的元数据。





  • 第四部分:安装过程异常处理
  异常描述:
hive> show tables;
FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

解决方法:
    引起这种异常的可能性较多,这里只是列举了一些相关的注意事项以供参考,详细大家可以通过网络找更多相关的内容.
    1  删除  $HADOOP_HOME/build 目录(如果当时通过下载gz包进行编译安装的话,会残留部分信息,删除这个目录是必须的)
    2  ./hive -hiveconf hive.root.logger=DEBUG,console  进行调试模式,根据问题逐步解决
    3  确认 $HIVE_HOME/lib 下存在 mysql-connector-java-5.1.25-bin.jar  hadoop-core-1.2.0.jar 主包
    4  了解Hive metastore三种存储方式,确认自身配置的模式是否正确


异常描述:
java.sql.SQLException: Invalid authorization specification,  message from server: "Access denied for user 'root'@'localhost' (using password: YES)"
java.sql.SQLException: Syntax error or access violation,  message from server: "Access denied for user 'hadoop'@'localhost' to database 'metastore_db'"
解决方法:
这是因为mysql远程访问的权限问题,执行 grant all on *.*  to 'hadoop'@'%' identified by 'hadoop'; 即可。

INSERT INTO USER(HOST,USER,PASSWORD) VALUES("localhost","hadoop",PASSWORD("hadoop"));
GRANT ALL PRIVILEGES ON * TO 'hadoop'@'localhost' IDENTIFIED BY 'hadoop' WITH GRANT OPTION;

FLUSH PRIVILEGES;


  异常描述:
java.sql.SQLException: Syntax error or access violation,  message from server: "Specified key was too long; max key length is 767 bytes"
解决方法:
一般是由于mysql的最大索引长度导致,看了一个人的文章颇有感触下面给出链接:
http://blog.csdn.net/cindy9902/article/details/6215769
  
1、数据库的字符集除了system为utf8,其他最好为latin1,否则可能出现如上异常。
2、set global binlog_format='MIXED';READ-COMMITTED需要把bin-log以mixed方式来记录
改完上述两种方法后,我还是会出现以上问题,我把mysql的metastore_db里面的所有表删除,hadoop重启,然后重新启动hive之后就能够正常删除表了。

问题解决。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312433-1-1.html 上篇帖子: Hadoop,Hbase,Zookeeper在虚拟机单节点中的整合 下篇帖子: 一个基于Mahout与hadoop的聚类搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表