Hive 安装&配置及常见问题解决

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

 

前提安装了hadoop

下载地址: http://apache.fayea.com/hive/hive-1.2.0/

版本: apache-hive-1.2.0-bin.tar.gz

解压: tar –zxvf apache-hive-1.2.0-bin.tar.gz

 

配置环境变量:

export HIVE_HOME=/opt/apache-hive-1.2.0-bin

export HIVE_CONF_DIR=$HIVE_HOME/conf

export HIVE_LIB=$HIVE_HOME/lib

export CLASSPATH=$CLASSPATH:$HIVE_LIB

export PATH=$HIVE_HOME/bin:$PATH

 

cd /opt/apache-hive-1.2.0-bin/conf 将hive-env.sh.template 拷贝为 hive-env.sh

cp hive-env.sh.template hive-env.sh

更改hive-env.sh的内容: 

vi hive-env.sh

 

HADOOP_HOME=/opt/soft-228238/hadoop-2.6.0

export HIVE_CONF_DIR=/opt/apache-hive-1.2.0-bin/conf

 

cp hive-default.xml.template hive-site.xml

vi hive-site.xml

修改如下配置中的信息:

 <property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:oracle:thin:@192.168.XX.XXX:1521:dpap</value>

    <description>JDBC connect string for a JDBC metastore</description>

  </property>

 <property>

    <name>javax.jdo.option.ConnectionDriverName</name>

    <value>oracle.jdbc.driver.OracleDriver</value>

    <description>Driver class name for a JDBC metastore</description>

  </property>

 <property>

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>user</value>

    <description>Username to use against metastore database</description>

  </property>

 <property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>password</value>

    <description>password to use against metastore database</description>

  </property>

 

 将 数据库驱动包(oracle-jdbc-10.1.0.2.0.jar) 放入到 /opt/apache-hive-1.2.0-bin/lib 中

启动 hive

cd  /opt/apache-hive-1.2.0-bin/bin

执行:./hive --service metastore  (使用远端数据库 hive服务端程序)

./hive

hive -hiveconf hive.root.logger=DEBUG,console

schematool -dbType oracle -initSchema

 

常见问题:

  • 启动报错:

    Logging initialized using configuration in jar:file:/opt/apache-hive-1.2.0-bin/lib/hive-common-1.2.0.jar!/hive-log4j.properties

Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: 

${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:519)

at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)

 

 at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

 at java.lang.reflect.Method.invoke(Method.java:606)

 at org.apache.hadoop.util.RunJar.run(RunJar.java:221)

at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

 at org.apache.hadoop.fs.Path.initialize(Path.java:206)

 at org.apache.hadoop.fs.Path.<init>(Path.java:172)

 at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:560)

at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:505)

        ... 8 more

Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

at java.net.URI.checkPath(URI.java:1804)

 at java.net.URI.<init>(URI.java:752)

 at org.apache.hadoop.fs.Path.initialize(Path.java:203)

        ... 11 more

 

解决方案:cd  /opt/soft-228238/hadoop-2.6.0/bin     

执行: /hadoop fs -chmod -R 777 /tmp/hive

cd /opt/apache-hive-1.2.0-bin/conf  

vi  hive-site.xml (修改如下配置信息的value)

<property>

    <name>hive.exec.local.scratchdir</name>

    <value>/tmp/hive</value>

    <description>Local scratch space for Hive jobs</description>

  </property>

<property>

    <name>hive.downloaded.resources.dir</name>

    <value>/tmp/${hive.session.id}_resources</value>

    <description>Temporary local directory for added resources in the remote file system.</description>

  </property>

<property>

    <name>hive.querylog.location</name>

    <value>/tmp/hive</value>

    <description>Location of Hive run time structured log file</description>

  </property>

<property>

    <name>hive.server2.logging.operation.log.location</name>

    <value>/tmp/hive/operation_logs</value>

    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>

  </property>

 

  • 错误2:

[ERROR] Terminal initialization failed; falling back to unsupported

java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

  at jline.TerminalFactory.create(TerminalFactory.java:101)

  at jline.TerminalFactory.get(TerminalFactory.java:158)

 at jline.console.ConsoleReader.<init>(ConsoleReader.java:229)

at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)

at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)

at org.apache.hadoop.hive.cli.CliDriver.setupConsoleReader(CliDriver.java:787)

 at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:721)

 at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)

at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

 at java.lang.reflect.Method.invoke(Method.java:606)

 at org.apache.hadoop.util.RunJar.run(RunJar.java:221)

 at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

 

解决方案:

原因是hadoop目录下存在老版本jline:

/hadoop-2.6.0/share/hadoop/yarn/lib:

-rw-r--r-- 1 root root   87325 Mar 10 18:10 jline-0.9.94.jar

解决方法是:

将hive下的新版本jline的JAR包拷贝到hadoop下:

cp  /opt/apache-hive-1.2.0-bin/lib/jline-2.12.jar ./

mv jline-0.9.94.jar jline-0.9.94.jar.bak

 

  • hive 连接 oracle 创建表失败

 使用 create table 命令创建表失败:

日志信息在 /temp/root/hive.log 目录查看日志错误信息:



 
 解决方案:

用解压缩工具打开${HIVE_HOME}/lib中的hive-metastore-1.2.0.jar,hive-jdbc-1.2.0-standalone.jar发现名为package.jdo的文件,打开该文件并找到下面的内容。

<field name="viewOriginalText" default-fetch-group="false">

        <column name="VIEW_ORIGINAL_TEXT" jdbc-type="LONGVARCHAR"/>

</field>

<field name="viewExpandedText" default-fetch-group="false">

        <column name="VIEW_EXPANDED_TEXT" jdbc-type="LONGVARCHAR"/>

</field>

可以发现列VIEW_ORIGINAL_TEXT和VIEW_EXPANDED_TEXT的类型都为LONGVARCHAR,对应于Oracle中的LONG,这样就与Oracle表只能存在一列类型为LONG的列的要求相矛盾,所以就出现错误了。

按照Hive官网的建议将该两列的jdbc-type的值改为CLOB,修改后的内容如下所示。

<field name="viewOriginalText"default-fetch-group="false">

             <column name="VIEW_ORIGINAL_TEXT" jdbc-type="CLOB"/>

</field>

<field name="viewExpandedText"default-fetch-group="false">

             <column name="VIEW_EXPANDED_TEXT" jdbc-type="CLOB"/>

</field>

修改以后,重启hive。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值