最近学习hive, 使用的hive版本为1.2.1
使用hive进行运行hsql时总是出现如下状况
hive Job running in-process (local Hadoop)
找了下原因是因为有个配置没有改, 他在hive-site.xml中
而在hive目录conf文件夹下没有hive-site.xml, 原来是hive-default.xml.template文件
它要修改为hive-site.xml(记得备份)
在修改名字后的hive-site.xml文件中有如下配置
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop128:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
配置自己这台机器的地址和ip, 我的是hadoop128, 然后接着启动.
然后又报错了
Could not connect to meta store using any of the URIs provided
原来是现在的启动方式要进行改变了, 需要使用
./hive --service metastore & ./hive
这样启动, 可是还是报错了, 报错如下:
Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
原来这是因为tmp地址没有进行配置, 还是在hive-site.xml中配置如下:
<property>
<name>system:java.io.tmpdir</name>
<value>/opt/module/hive-1.2.1/tmp</value>
</property>
<property>
<name>system:user.name</name>
<value>iotmp</value>
</property>
具体tmp地址是根据你创建的tmp文件夹在哪里配置的, 就是提供hive运行存放一些数据的临时目录
接着再次启动hive, 我擦! 怎么有报错了
org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083.
这个很容易看出来是Socket相关错误, 不能在9083这个端口创建连接, 那么就有可能是端口被占用了
jps看一下
还真的是, 好几个Runjar, 都是之前错误运行产生的, 全部干掉
再启动, 成功启动
最后在设置一个值
hive> SET hive.exec.mode.local.auto=false;
原因是因为, 从hive 0.7版本之后, hive就支持配置自动在本地运行了, 所以要使用命令关掉这个配置
另外目前这个虽然是remote运行(MR确实在远程了, 没有使用本地的MR)但其实hive.metastore.warehouse.dir 还设置的是本地, 如果需要指定保存到hdfs, 即将元数据保存到远程目录上
在 hive-site.xml中配置
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://hadoop128:9000/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
重启hive
如果你以上的情况配置了还是没有用, 比如报错
Job Submission failed with exception 'java.net.ConnectException(Call From
那么, 这种情况有两种
1,你的hadoop集群没有启动
2,env配置文件不对
一般不会是集群没有启动, 所以好好看配置文件 hive-env.sh
最好按他的格式配置一下, 很容易就掉 HADOOP_HOME= XXXXX 这一项
以上所有可能造成没有在远程或者yarn上运行的情况都解决了!!!