标签:登录 改变 uri show enable dir 显示 功能 complete
getting start:
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
hive wiki:
https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation
hive是一个sql查询引擎,是hadoop平台上的数据仓库工具,通过元数据映射将HDFS上的文件映射成表,并使用sql做计算,计算引擎是mapreduce\spark等。
hive有5个组件:
经验证,实际上如果不使用catalog,那么metastore只能给cli提供元数据服务,其它程序通过hiveserver2能访问元数据库
)到这里下载合适的安装包:
http://mirrors.tuna.tsinghua.edu.cn/apache/hive/
解压到/opt/hadoop/下
[hive@hadoop1 hadoop]$ ls -l
total 8
drwxr-xr-x 9 hive hadoop 4096 Apr 20 18:15 apache-hive-2.1.1
编辑/home/hive/.bash_profile
HIVE_HOME=/opt/hadoop/apache-hive-2.1.1
export HIVE_CONF_DIR=/opt/hadoop/apache-hive-2.1.1/conf
export HIVE_HOME
PATH=$PATH:$HOME/bin:$HIVE_HOME/bin
export PATH
[hive@hadoop1 conf]$ mv hive-env.sh.template hive-env.sh
[hive@hadoop1 conf]$ vi hive-env.sh
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.3
export HIVE_CONF_DIR=/opt/hadoop/apache-hive-2.1.1/conf
在这里可以控制hive cli启动时的java heap等。
</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>root</value>
<description>password to use against metastore database</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>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/dockerhive?createDatabaseIfNotExist=true?</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
hive在hdfs上默认的数据目录是/user/hive/warehouse,如果想自定义数据目录,设置hive.metastore.warehouse.dir
设置客户端metastore接口。
如果远程客户端想使用hive(如jdbc 工具、beeline等),则必须开启metastore服务,否则只有hive cli能使用hive
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop1:9083,hadoop2:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
其它参数使用默认即可。
将上述服务端配置文件放在hadoop1 hadoop2上。如果只想让其它机器通过 hadoop3 hadoop4 hadoop5 hadoop6上
1.先尝试用derby
[hive@hadoop1 apache-hive-2.1.1]$ $HIVE_HOME/bin/schematool -dbType derby -initSchema
…………
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true
Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver
Metastore connection User: APP
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.derby.sql
Initialization script completed
schemaTool completed
2.如果你配置了mysql数据库,那么初始化mysql数据库:
[hive@hadoop1 apache-hive-2.1.1]$ $HIVE_HOME/bin/schematool -dbType mysql -initSchema
…..
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.mysql.sql
Initialization script completed
schemaTool completed
注意:下载mysql-connector包到$HIVE_HOME/lib下
1.改变hdfs权限
注意:如果用hdfs用户来安装启动hive,此步忽略。
hive数据默认放在/user/hive/warehousre下。
由于hdfs文件系统是由hdfs用户创建的,这时hive是无权创建文件的,因此给hive用户授权:
[hdfs@hadoop2 hadoop]$ hdfs dfs -mkdir /user/hive
[hdfs@hadoop2 hadoop]$ hdfs dfs -chown -R hive /user/hive
这样hive就可以读写/user/hive目录了。另外把hdfs /tmp设置为777
[hdfs@hadoop2 hadoop]$ hdfs dfs -chmod 777 /tmp
2.创建hive目录
[hive@hadoop1 apache-hive-2.1.1]$ /opt/hadoop/hadoop-2.7.3/bin/hdfs dfs -mkdir -p /user/hive/warehouse
1.启动hive cli:
[hive@hadoop1 apache-hive-2.1.1]$ hive
……
hive>
2.启动metastroe
nohup $HIVE_HOME/bin/hive --service metastore -p 9083 > $HIVE_HOME/metastore_log &
3.启动hiveserver
[hive@hadoop1 ~]$ $HIVE_HOME/bin/hive --service hiveserver2
4.连接beeline
Enter username for jdbc:hive2://hadoop1:10000: hive
Enter password for jdbc:hive2://hadoop1:10000: ****
17/04/20 22:37:34 [main]: WARN jdbc.HiveConnection: Failed to connect to hadoop1:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hive is not allowed to impersonate hive (state=08S01,code=0)
上网找了一番资料,原因是没设置hadoop用户代理。hadoop用户代理的作用,将hadoop中的superuser模拟成提交业务的用户,业务以superuser提交的,但是显示的作业名地是真正的提交用户。比如user1提交oozie作业到hadoop中,业务就会显示user1,如果不设置用户代理就会全显示为oozie的启动用户(如oozie).
hiveserver2为什么要用到用户代理呢?
原因在于hive.server2.enable.doAs
默认为true,该参数表示用实际执行的用户而非启动hiveserver2的用户来显示提交的作业,即user1提交的作业会显示为user1而不是hiveserver2。将该参数设置为true后,所有的业务都显示为启动hiveserver2的用户提交的。
修改hive-site.xml:
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
再启动beeline:
[hive@hadoop5 apache-hive-2.1.1]$ beeline
……..
Connecting to jdbc:hive2://hadoop1:10000
Enter username for jdbc:hive2://hadoop1:10000: hive
Enter password for jdbc:hive2://hadoop1:10000: ****
Connected to: Apache Hive (version 2.1.1)
Driver: Hive JDBC (version 2.1.1)
17/04/21 15:04:32 [main]: WARN jdbc.HiveConnection: Request to set autoCommit to false; Hive does not support autoCommit=false.
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop1:10000>
0: jdbc:hive2://hadoop1:10000> show databases;
+----------------+--+
| database_name |
+----------------+--+
| default |
+----------------+--+
1 row selected (1.991 seconds)
这次就正常了。
这里我们先把hive.server2.enable.doAs
参数设置为false.下一章节会传讲如何设置hadoop用户代理。
下节将会简述hadoop用户代理。
标签:登录 改变 uri show enable dir 显示 功能 complete
原文地址:http://www.cnblogs.com/skyrim/p/7455257.html