前言
准备开始搞时空数据了,先简单搭一下环境。
准备搭的环境为:jdk-1.8.0,hadoop-3.2.1,hbase-2.2.6,geomesa-hbase_2.11-3.1.0,spark-3.0.1-bin-hadoop3.2,geoserver-2.16.5-bin,geomesa-hbase_2.11-3.2.0-SNAPSHOT,所用的包都已下好并解压到 /home 目录下。
※注: hbase-2.2.6 暂不支持最新的 hadoop-3.3.0,Hadoop 也最好使用 jdk-1.8.0,java-11 会有问题。
Hadoop 环境
首先修改 /etc/hosts 文件中本机 ip 对应的名称为 master,若在容器中安装则需要在 run 开启容器就指定 --hostname master
,否则改了也没用,下次启动容器时 hostname 又会回到初始状态,下面开启正式的配置。
修改 /home/hadoop-3.2.1/etc/hadoop/hadoop-env.sh 文件,添加
1 | export JAVA_HOME=$JAVA_HOME |
修改 /home/hadoop-3.2.1/etc/hadoop/core-site.xml 文件,添加
1 | <configuration> |
修改 /home/hadoop-3.2.1/etc/hadoop/hdfs-site.xml 文件,添加
1 | <configuration> |
修改 /home/hadoop-3.2.1/etc/hadoop/yarn-site.xml 文件,添加
1 | <configuration> |
修改 /home/hadoop-3.2.1/etc/hadoop/mapred-site.xml 文件,添加
1 | <configuration> |
在 /home/hadoop-3.2.1/sbin/start-dfs.sh 和 /home/hadoop-3.2.1/sbin/stop-dfs.sh 文件头添加
1 |
|
在 /home/hadoop-3.2.1/sbin/start-yarn.sh 和 /home/hadoop-3.2.1/sbin/stop-yarn.sh 文件头添加
1 |
|
设置环境变量,在 /etc/profile 中添加
1 | Hadoop Environment Setting |
由于容器中默认为 root 用户,所以在 /root/.bashrc 文件末尾添加 source /etc/profile
,以开机启用设置的环境变量。
在启动 Hadoop 之前需要执行 hdfs namenode -format
进行格式化,启动命令为 /home/hadoop-3.2.1/sbin/start-all.sh
。后续若需要清空并重新设置 Hadoop 时,必须先删除 /home/hadoop/ 目录,再重新进行格式化。
HBase 环境
修改 /home/hbase-2.2.6/conf/hbase-env.sh 文件,添加
1 | export JAVA_HOME=$JAVA_HOME |
修改 /home/hbase-2.2.6/conf/hbase-site.xml 文件,添加
1 | <configuration> |
修改 /home/hbase-2.2.6/conf/regionservers 文件,修改为(原来为 localhost)
1 | master |
设置环境变量,在 /etc/profile 中添加
1 | HBase Environment Setting |
配置好之后,执行 start-hbase.sh
启动 HBase。
Spark 环境
修改 /home/spark-3.0.1-bin-hadoop3.2/conf/spark-env.sh 文件,在文件末尾添加
1 | # 配置JAVA_HOME,一般来说,不配置也可以,但是可能会出现问题,还是配上吧 |
复制 /home/spark-3.0.1-bin-hadoop3.2/conf/slaves.template 文件,并重命名为 slaves,将该文件尾修改为
1 | # 里面的内容原来为localhost,改为master |
设置环境变量,在 /etc/profile 中添加
1 | export SPARK_HOME=/home/spark-3.0.1-bin-hadoop3.2 |
将 /home/spark-3.0.1-bin-hadoop3.2/sbin/start-all.sh 重命名为 start-spark-all.sh,将 /home/spark-3.0.1-bin-hadoop3.2/sbin/stop-all.sh 重命名为 stop-spark-all.sh,执行 start-spark-all.sh
启动 Spark。
geomesa-hbase 环境
编译 geomesa
克隆 LocationTech GeoMesa ,修改 pom.xml,即修改对应依赖的 hadoop 和 hbase 以及 spark 版本(spark 最新的3.0.1版本由 Scala-2.12 编译,而 Geomesa 编译目前采用 Scala-2.11, 所以 Spark 不能使用最新的版本,只能用 2.4.7)。进入 geomesa 根目录,使用命令
1 | mvn clean install -DskipTests |
编译 geomesa,中间可能会失败很多次,包下不来,可能需要挂代理或换源,重复使用命令多次即可。
配置 geomesa-hbase
将 /home/geomesa/geomesa-hbase/geomesa-hbase-dist/target/geomesa-hbase_2.11-3.2.0-SNAPSHOT-bin.tar.gz 解压为 /home/geomesa-hbase_2.11-3.2.0-SNAPSHOT,将 /home/geomesa-hbase_2.11-3.2.0-SNAPSHOT/dist/hbase/geomesa-hbase-distributed-runtime-hbase2_2.11-3.2.0-SNAPSHOT.jar 复制到 /home/hbase-2.2.6/lib/ 文件夹中,修改 /home/geomesa-hbase_2.11-3.2.0-SNAPSHOT/conf/dependencies.sh 文件,设置正确的Hadoop 和 hbase 版本,依次执行 /home/geomesa-hbase_2.11-3.2.0-SNAPSHOT/bin/install-dependencies.sh 和 /home/geomesa-hbase_2.11-3.2.0-SNAPSHOT/bin/install-shapefile-support.sh。设置环境变量,在 /etc/profile 中添加
1 | export GEOMESA_HBASE_HOME=/home/geomesa-hbase_2.11-3.2.0-SNAPSHOT |
测试 geomesa-hbase
启动 Hadoop 和 HBase 之后,可直接使用命令
1 | geomesa-hbase ingest --catalog TestGeomesa --feature-name road --input-format shp "/home/shpdata/road.shp" |
导入 shp 数据,shp 不能有 id 字段,因为 Geomesa 在创建表时会默认生成一个 id 字段。
也可克隆 geomesa-tutorials ,同样修改其中的 pom.xml 文件,进入 geomesa-tutorials 根目录,使用命令
1 | mvn clean install -pl geomesa-tutorials-hbase/geomesa-tutorials-hbase-quickstart -am |
编译 geomesa-tutorials,编译完成后,使用命令
1 | java -cp geomesa-tutorials-hbase/geomesa-tutorials-hbase-quickstart/target/geomesa-tutorials-hbase-quickstart-3.2.0-SNAPSHOT.jar org.geomesa.example.hbase.HBaseQuickStart --hbase.zookeepers localhost --hbase.catalog geomesaTest |
导入数据进 Hbase,导入成功后可通过 hbase shell
进入 hbase,在 hbase shell 中通过 list
查看 hbase 现有的表。
整合 geoserver
导入依赖插件
1 | manage-geoserver-plugins.sh -l ${GEOSERVER_HOME}/webapps/geoserver/WEB-INF/lib/ -i |
修改 /home/geomesa-hbase_2.11-3.2.0-SNAPSHOT/bin/install-dependencies.sh 中第33行:
1 | # install_dir="${GEOMESA_HBASE_HOME}/lib" |
执行 install-dependencies.sh 安装插件,安装完后将 classes 中的 lib 都移到 ${GEOSERVER_HOME}/webapps/geoserver/WEB-INF/lib中。
后记
环境搞起来真麻烦,在编译和运行 Geomesa 时总能遇到一些莫名奇妙的问题,Java 系的这一套确实很麻烦,尤其是各种依赖关系,不过最后总算是搞好了,能直接在 geoserver 中看到 geomesa 存在 hbase 里的地图。
参考资料
Centos7系统 Hadoop+HBase+Spark环境搭建
centos7安装geomesa2.0.2_hbase_geoserver2.13.2的方法
Spark完全分布式集群搭建【Spark2.4.4+Hadoop3.2.1】
附录
最后附上一些常用的端口及说明:
Hbase
配置 | 端口 | 说明 | |
---|---|---|---|
hbase.master.port | 16000 | HMaster绑定端口 | |
hbase.master.info.port | 16010 | HBase Master的Web UI端口 | |
hbase.regionserver.port | 16020 | HBase RegionServer绑定的端口 | |
hbase.regionserver.info.port | 16030 | HBase RegionServer的Web UI端口 | |
hbase.zookeeper.property.clientPort | 2181 | Zookeeper客户端连接端口 | |
hbase.zookeeper.peerport | 2888 | Zookeeper节点内部之间通信的端口 | |
hbase.zookeeper.leaderport | 3888 | Zookeeper用来选举主节点的端口 | |
hbase.rest.port | 8080 | HBase REST server的端口 | |
hbase.master.port | 60000 | HMaster的RPC端口 | |
hbase.master.info.port | 60010 | HMaster的http端口 | |
hbase.regionserver.port | 60020 | HRegionServer的RPC端口 | |
hbase.regionserver.info.port | 60030 | HRegionServer的http端口 | |
Hadoop
配置 | 端口 | 说明 | |
---|---|---|---|
fs.defaultFS | 9000 | hdfs访问端口 | |
dfs.namenode.rpc-address | 9001 | DataNode会连接这个端口 | |
dfs.datanode.address | 9866 | DataNode的数据传输端口 | |
dfs.namenode.http-address | 9870 | namenode的web UI 端口 | |
yarn.resourcemanager.webapp.address | 8088 | YARN的http端口 |
Spark
端口 | 说明 | ||
---|---|---|---|
8080 | master的webUI,Tomcat的端口号(已修改为8090) | ||
8081 | worker的webUI的端口号(已修改为8089) | ||
18080 | historyServer的webUI的端口号 |
需开放端口 22,2181,5432,8080,8088,8089,8090,9870,16010,16030。
docker run -dit --privileged=true --name STC2 --hostname master -v E:/Docker/ShareFile:/mnt/sharefile -p 22:22 -p 80:80 -p 2181:2181 -p 5432:5432 -p 8080-8090:8080-8090 -p 9870:9870 -p 16010:16010 -p 16030:16030 stc:2.0 init