为ArcGIS GeoAnalytics Server注册Hive数据源超清版

Posted by Keling Ma on 2018-10-25

安装前准备

准备安装包

安装包清单:

  • jdk: jdk-8u65-linux-x64.gz
  • hadoop: hadoop-3.1.1.tar.gz
  • mysql:
    • mysql80-community-release-el7-1.noarch.rpm
    • mysql-connector-java-8.0.12-1.el7.noarch.rpm
  • hive: apache-hive-3.1.0-bin.tar.gz

准备部署环境

当前测试基于三个节点组成的集群环境,iP分别为:10.10.20.38, 10.10.20.39, 10.10.20.40

其中:

  • 10.10.20.40: 为hadoop主节点,并部署hive和mysql
  • 10.10.20.38, 10.10.20.39: 为Hadoop数据节点

部署jdk

分发jdk压缩包

拷贝jdk压缩包到集群内所有服务器指定路径下(当前测试是基于/home/soft),解压缩jdk包,并部署到/home/jdk1.8.0_65目录下

1
2
3
4
5
6
[root@gis040 ~]# cd /home/soft
[root@gis040 soft]# tar -zxvf jdk-8u65-linux-x64.gz -C /home
[root@gis040 soft]# cd ..
[root@gis040 home]# cd jdk1.8.0_65/
[root@gis040 jdk1.8.0_65]# pwd
/home/jdk1.8.0_65

复制pwd生成的结果路径,配置java环境变量

1
2
3
4
5
6
7
8
[root@gis040 jdk1.8.0_65]# vim /etc/profile
Insert 以下内容:
export JAVA_HOME=/home/jdk1.8.0_65
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

esc-> :wq! 退出并保存编辑配置
[root@gis040 jdk1.8.0_65]# source /etc/profile

部署Hadoop集群

创建安装用户

在所有hadoop集群服务器上创建用户hadoop,这里以10.10.20.40服务器为例

1
2
3
4
5
[root@gis040 jdk1.8.0_65]# cd ~
[root@gis040 ~]# adduser hadoop
[root@gis040 ~]# passwd hadoop
Changing password for user hadoop.
New password:

这里密码我设置了hadoop@123

配置集群间ssh免密

这步是必须操作, 集群间ssh免密是通过自动化shell脚本auto_ssh.sh完成的,需要的同学自行下载。

使用前需要修改:

1
2
3
4
5
[root@gis040 ~]# cd /home/soft/scripts
[root@gis040 scripts]# vim auto_ssh.sh
IP_1=10.10.20.39,10.10.20.38,10.10.20.40
PWD_1=hadoop@123
USER_1=hadoop

替换IP_1, PWD_1, USER_1为你部署环境真实hadoop 集群的IP地址,Hadoop用户名密码,和Hadoop用户名

1
[root@gis040 scripts]#  ./auto_ssh.sh

部署hadoop压缩包

解压缩部署hadoop:

1
2
3
4
[root@gis040 scripts]# cd ..
[root@gis040 soft]# tar -zxvf hadoop-3.1.1.tar.gz -C /home
[root@gis040 soft]# cd ..
[root@gis040 home]# chown -R hadoop:hadoop hadoop-3.1.1/

配置环境变量:

1
2
3
4
5
[root@gis040 hadoop-3.1.1]# vim /etc/profile
export HADOOP_HOME=/home/hadoop-3.1.1
export PATH=$PATH:$HADOOP_HOME/bin

[root@gis040 jdk1.8.0_65]# source /etc/profile

hadoop参数配置

1
2
3
[root@gis040 home]# su hadoop
[hadoop@gis040 home]$ cd hadoop-3.1.1/
[hadoop@gis040 hadoop-3.1.1]$ cd etc/hadoop/

配置hadoop-env文件:

1
2
3
4
5
[hadoop@gis040 hadoop]$ vim hadoop-env.sh

修改以下内容:
export JAVA_HOME=/home/jdk1.8.0_65
export HADOOP_HOME=/home/hadoop-3.1.1

配置core-site.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[hadoop@gis040 hadoop]$ vim core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.10.20.40:9000</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
</configuration>

配置说明:

  • 10.10.20.40需要替换为你的hadoop主节点地址
  • hadoop.proxyuser.hive.groups和hadoop.proxyuser.hive.hosts是针对hive的配置项,其中”hive”,对应于你环境下实际的hive用户。

配置hdfs-site.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[hadoop@gis040 hadoop]$ vim hdfs-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>10.10.20.40:50090</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>

配置说明:

  • 10.10.20.40需要替换为你的hadoop主节点地址
  • 上述配置中涉及的dir项目需要在你的环境中真实存在,如果没有,可以通过mkdir命令创建, 例如:
1
2
[hadoop@gis040 hadoop]$ mkdir -p /home/hadoop/dfs/name
[hadoop@gis040 hadoop]$ mkdir -p /home/hadoop/dfs/data

配置mapreduce-site.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[hadoop@gis040 hadoop]$  vim mapreduce-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>10.10.20.40:1002</value>
</property>
<property>

<name>mapreduce.jobhistroy.webapp.address</name>

<value>10.10.20.40:19888</value>

</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop-3.1.1</value>
</property>
</configuration>

配置说明:

  • 10.10.20.40需要替换为你的hadoop主节点地址
  • 上述配置中yarn.app.mapreduce.am.env, mapreduce.map.env, mapreduce.reduce.env 对于通过hive 调度mapreduce执行任务是否成功至关重要。

配置yarn-site.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[hadoop@gis040 hadoop]$  vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>10.10.20.40:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>10.10.20.40:8030</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>10.10.20.40:8033</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>10.10.20.40:8031</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>10.10.20.40:8088</value>
</property>
</configuration>

配置说明:

  • 10.10.20.40需要替换为你的hadoop主节点地址

配置workers文件:

在workers 文件中添加所有参与集群的DataNode域名或IP。

1
2
3
4
[hadoop@gis040 hadoop]$ vim workers
10.10.20.38
10.10.20.39
10.10.20.40

向节点服务器分发配置好的hadoop软件

1
2
[hadoop@gis040 hadoop]$ scp –r /home/hadoop-3.1.1 root@10.10.20.38: /home
[hadoop@gis040 hadoop]$ scp –r /home/hadoop-3.1.1 root@10.10.20.39: /home

格式化namenode

在master节点上执行如下命令:

1
[hadoop@gis040 hadoop]$ ../../bin/hdfs namenode -format

启动Hadoop服务

1
2
[hadoop@gis040 hadoop]$ cd ../..
[hadoop@gis040 hadoop-3.1.1]$ sbin/start-all.sh

hdfs中创建hive所需目录

格式化成功后,在hdfs中创建hive需要的目录,并分配权限

1
2
3
4
[hadoop@gis040 hadoop-3.1.1]$ hadoop fs -mkdir /tmp
[hadoop@gis040 hadoop-3.1.1]$ hadoop fs -mkdir -p /user/hive/warehouse
[hadoop@gis040 hadoop-3.1.1]$ hadoop fs -chmod g+w /tmp
[hadoop@gis040 hadoop-3.1.1]$ hadoop fs -chmod g+w /user/hive/warehouse

部署mysql80 for CentOS7

部署mysql Server

检测是否存在之前安装的版本:

1
2
3
[root@gis040 ~]# rpm -qa |grep mysql
[root@gis040 ~]# rpm -e mysql (如果存在历史版本则执行该语句删除)
[root@gis040 ~]# rpm -e —nodeps mysql (强制删除)

安装mysql server:

由于CentOS7版本中的MySQL数据库已经从默认的程序列表中删除,所以安装前先去下载资源包。

下载地址:https://dev.mysql.com/downloads/repo/yum/

包名:mysql80-community-release-el7-1.noarch.rpm

1
2
3
4
[root@gis040 ~]# wget http://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm
[root@gis040 ~]# rpm -ivh mysql80-community-release-el7-1.noarch.rpm
[root@gis040 ~]# yum update
[root@gis040 ~]# yum install mysql-community-server

启动MySQL服务器:

1
[root@gis040 ~]# systemctl start mysqld

查看MySQL运行状态:

1
[root@gis040 ~]# systemctl status mysqld

验证MySQL是否工作正常

1
2
[root@gis040 ~]# mysqladmin —version
mysqladmin Ver 8.0.12 for Linux on x86_64 (MySQL Community Server - GPL)

如果能正确显示版本信息,则说明安装成功。

配置root用户

修改root用户密码:

安装完第一次启动时,mysql会为root用户设置一个随机密码,可以通过下面命令修改:

1
2
[root@gis040 ~]# grep “password” /var/log/mysqld.log
2018-10-16T01:45:10.838489Z 5 Note [Server] A temporary password is generated for root@localhost: 9-UdH*>ljxu<

使用查询出的密码登陆mysql:

1
[root@gis040 ~]#  mysql -u root -p

登陆后重新设定root用户密码:

1
mysql> set password="Test@123";

更改root加密方式:

从mysql8.0开始,初始化数据目录时,root账户默认使用caching_sha2_password加密 ,hive的配置要求使用mysql_native_password,可以通过以下命令更改:

1
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'Test@123';

开启root用户的远程访问权限:

1
mysql> update user set host = '%' where user = 'root';

验证修改结果:

1
2
3
4
5
6
7
8
9
10
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+
4 rows in set (0.01 sec)

创建要配置被hive使用的用户

1
2
3
mysql> create user 'hive' identified by 'Hive@123';
mysql> grant all on *.* to 'hive'@'%' with grant option;
mysql> flush privileges;

修改my.cnf,配置MySQL字符编码和端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@gis040 ~]# vim /etc/my.cnf

[mysqld]
port = 3306

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

修改后重启服务:

1
[root@gis040 ~]# systemctl restart mysqld

部署MySQL Connector

提前下载好对应于mysql server版本的connector rpm, 切记版本一定要一致。

下载地址:https://dev.mysql.com/downloads/connector/j/

这里使用的是: mysql-connector-java-8.0.12-1.el7.noarch.rpm

1
[root@gis040 ~]# yum localinstall /home/soft/mysql-connector-java-8.0.12-1.el7.noarch.rpm

安装后,定位到connector jar 包 mysql-connector-java-8.0.12.jar,在Centos7系统上位于/usr/share/java目录下。

部署hive

部署hive安装包

从官网下载hive 3.1.0版本:

下载地址:http://mirrors.hust.edu.cn/apache/hive/hive-3.1.0/

创建安装用户hive:

1
2
[root@gis040 ~]# adduser hive
[root@gis040 ~]# passwd hive

拷贝介质,修改所有权,解压缩:

1
2
3
4
5
6
[root@gis040 ~]# cp /home/soft/apache-hive-3.1.0-bin.tar.gz /home
[root@gis040 ~]# chown -R hive:hive apache-hive-3.1.0-bin.tar.gz
[root@gis040 ~]# su hive
[hive@gis040 root]$ cd /home
[hive@gis040 home]$ tar -zxvf apache-hive-3.1.0-bin.tar.gz
[hive@gis040 home]$ mv apache-hive-3.1.0-bin hive-3.1.0

配置环境变量

1
2
3
4
5
6
7
[hive@gis040 home]$ exit
[root@gis040 ~]# vim /etc/profile

export HIVE_HOME=/home/hive-3.1.0
export PATH=$PATH:$HIVE_HOME/bin

[root@gis040 ~]# source /etc/profile

配置hive 以mysql为metastore

配置hive-env文件:

1
2
3
4
5
6
7
[hive@gis040 root]$ cd /home/hive-3.1.0/conf
[hive@gis040 conf]$ cp hive-env.sh.template
[hive@gis040 conf]$ vim hive-env.sh

配置两个变量:
HADOOP_HOME=/home/hadoop-3.1.1
export HIVE_CONF_DIR=/home/hive/hive-3.1.0/conf

配置hive-site.xml:

拷贝配置文件,命名为hive-site.xml

1
[hive@gis040 conf]$ cp hive-default.xml.template hive-site.xml

配置修改以下项目:

修改xml中的特殊字符错误:
1
2
[hive@gis040 conf]$ vim +3210 hive-site.xml
删除 “&#8;”特殊字符
配置mysql连接参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[hive@gis040 conf]$ vim +583 hive-site.xml

修改以下配置中的value值

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://{mysql.ip}:{mysql.port}/hivegisdb?createDatabaseIfNotExist=trueuseSSL=falseallowPublicKeyRetrieval=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@gis040 conf]$ vim +1100 hive-site.xml
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>

[hive@gis040 conf]$ vim +1126 hive-site.xml
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>

[hive@gis040 conf]$ vim +568 hive-site.xml
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>Esri@123</value>
<description>password to use against metastore database</description>
</property>
配置临时变量参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[hive@gis040 conf]$ vim +17 hive-site.xml

<configuration>标签后面添加下面的变量

<property>
<name>system:java.io.tmpdir</name>
<value>/home/hive/tmp</value>
</property>
<property>
<name>system:user.name</name>
<value>hive</value>
</property>
<property>
<name>mysql.ip</name>
<value>10.10.20.40</value>
</property>
<property>
<name>mysql.port</name>
<value>3306</value>
</property>

配置说明:

  • mysql.ip 替换成实际你配置中的mysql Server的IP
  • mysql.port 默认是3306, 应遵从之前my.cnf中的配置
  • system:java:io:tmpdir目录需要替换成你的临时目录,如果没有通过以下命令创建
1
[hive@gis040 conf]$mkdir -p /home/hive/tmp

拷贝mysql 的connector jar包到hive lib目录下

1
2
3
4
[hive@gis040 conf]$ exit
[root@gis040 ~]# cp /home/soft/mysql-connector-java-8.0.12.jar /home/hive-3.1.0/lib/
[root@gis040 ~]# cd /home/hive-3.1.0/lib/
[root@gis040 lib]# chown -R hive:hive mysql-connector-java-8.0.12.jar

初始化metastore

1
2
[root@gis040 lib]# su hive
[root@gis040 lib]# schematool -dbType mysql -initSchema

启动服务

启动metastore service ,默认端口:9083

1
[root@gis040 lib]# hive --service metastore &

启动thrift server , 默认端口:10000

1
[root@gis040 lib]# hive -- service hiveserver2 &

检查端口是否已启动:

1
2
3
4
5
[hive@gis040 lib]$ netstat -nl|grep 9083
tcp6 0 0 :::9083 :::* LISTEN

[hive@gis040 lib]$ netstat -nl|grep 10000
tcp6 0 0 :::10000 :::* LISTEN

beeline测试thrift 接口是否能连通

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[hive@gis040 lib]$  beeline -u jdbc:hive2://10.10.20.40:10000/default

0: jdbc:hive2://10.10.20.40:10000/default>
> create table bjRain(ID string,X double,Y double,STATIONNAM string)
> row format delimited fields terminated by ','
> stored as textfile;
0: jdbc:hive2://10.10.20.40:10000/default>
> create table bjRain(ID string,X double,Y double,STATIONNAM string)
> row format delimited fields terminated by ','
> stored as textfile;

0: jdbc:hive2://10.10.20.40:10000/default>
> load data local inpath '/home/soft/bjRAINSub.csv' overwrite into table bjRain;

0: jdbc:hive2://10.10.20.40:10000/default> select count(*) from bjRain;

为ArcGIS GeoAnalytics注册hive数据源

获取注册为GA 的Server地址

在ArcGIS Enterpris的Organization - Edit settings - Server中查看注册为GA的ArcGIS Server地址。

find_GA_Server

导航至注册窗口

进入作为GA Server 的ArcGIS Server Manager,导航至站点-> 数据存储, 在注册数据库的下拉列表中选择“大数据文件共享”。

navigate_bigdata_register

配置注册参数

在弹出的配置窗口中,输入以下参数值:

hive_registering

注册参数:

1
2
3
4
name: hive_db1
type: Hive
metastore URI: thrift://10.10.20.40:9083
datastore: default

验证成果

成功注册后,可以通过编辑按钮查看注册的大数据信息。

checking_details