hive是啥?
就是一个数据仓库,提供了一套类SQL查询的方法,让开发人员来组织数据。
它把SQL转换成了MapReduce,还对其进行了优化。果然是Hadoop中数据组织的利器。
下载地址:http://mirror.bit.edu.cn/apache/hive/
我的Hadoop是3.0.X。所以下载了个hive-3.0.0的。
解压到一个目录下。
配置环境变量 vi ~/.bash_profile
export HIVE_HOME=你的hive目录
export PATH=$PATH:$HIVE_HOME/bin
保存退出 :wq
导入生效 source ~/.bash_profile
查看版本 hive --version
看看能不能出来版本号?
进入到hive的conf目录下。看有没有hive-site.xml文件,没有的话拿default复制一份。
cp hive-default.xml.template hive-site.xml
修改hive配置文件,关联mysql。为啥?metastore_db,说是需要存储这个信息。
vi hive-site.xml
<!-- 插入连接MYSQL信息 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.68:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 到此结束 -->
<property>
<name>hive.exec.script.wrapper</name>
<value/>
<description/>
</property>
复制mysql的驱动程序到hive/lib下面
mysql-connector-java-5.1.39.jar
就是这个jar包。
开始测试运行是不是能连接正确。
>hive
>>报错.3234行,96非法字符
Caused by: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
at [row,col,system-id]: [3234,96,"file:/Users/xx/hive-3.0.0/conf/hive-site.xml"]
at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621)
at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:491)
at com.ctc.wstx.sr.StreamScanner.reportIllegalChar(StreamScanner.java:2456)
at com.ctc.wstx.sr.StreamScanner.validateChar(StreamScanner.java:2403)
at com.ctc.wstx.sr.StreamScanner.resolveCharEnt(StreamScanner.java:2369)
at com.ctc.wstx.sr.StreamScanner.fullyResolveEntity(StreamScanner.java:1515)
at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2828)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1123)
at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2960)
... 17 more
>hive 启动,再报错
Exception in thread "main" 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:259)
at org.apache.hadoop.fs.Path.<init>(Path.java:217)
at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:703)
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:620)
at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:585)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:747)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
at org.apache.hadoop.util.RunJar.main(RunJar.java:158)
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:1823)
at java.net.URI.<init>(URI.java:745)
at org.apache.hadoop.fs.Path.initialize(Path.java:256)
... 12 more
打开配置文件,
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>${system:java.io.tmpdir}/${system:user.name}/operation_logs</value>
<description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>
路径似乎是有问题。应该是说存储一个日志的路径。
将配置中所有的${system:java.io.tmpdir}替换为 {hive目录}/tmp下
将配置中所有的${system:user.name}替换为 root(自己系统的用户名)
再启动
完成了。初始化一下schematool -dbType mysql -initSchema
Underlying cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown database 'hive'
没有数据库hive,建个数据库hive
出现下面这个。说明初始化脚本完成。
Initialization script completed
schemaTool completed
到此安装完成