大数据学习整理篇(十二)spark和Hbase在Docker不同主机环境和同主机下的简单应用

由于在Docker下部署的hbase目前都是伪分布式的部署,所以后续想整理下,看如何部署多机环境下的分布式部署

在使用Docker环境的spark和Hbase的时候出现了下面几个问题,特意补充说明下:

1.spark和hbase分别部署在其他机器上

说明如下:spark部署在192.168.*.215上,spark运行的虚机是172.20.0.0/24网段,Hbase部署在192.168.*.216机器上,Hbase虚机是172.17.0.0/24网段

这样通过在215机器上,添加路由:

route add -net 172.17.0.0/24 gw 192.168.126.216

216机器上,添加路由

route add -net 172.20.0.0/24 gw 192.168.126.215

这样,两个虚拟容器就能互相访问,如果spark work上运行时报某个地址找不到,在sprak work虚机上,修改/etc/hosts文件,参考如下:

这样,两台虚拟容器就可以互相方法。

2.在hbase虚拟容器里面运行phoenix的./sqlline.py,报hadoop.hbase.ipc.CallTimeoutException: Call id=62, waitTime=60006, rpcTimeout=60000

我们要修改两个地方,一个是hbase容器里面的hbase-site.xml文件,一个是phoenix的hbase-site.xml文件设置

我们首先将hbase虚拟容器的/opt/hbase-2.0.6/conf的配置文件导出到主机,使用如下命令进行导出:

#70b7是镜像ID前四位

docker cp 70b7:/opt/hbase-2.0.6/conf/ /opt/bigdata/hbase-phoenix-docker/hbase-2.0.6

接入我们要重新开启一个新的容器,使用

docker run -itd -p 2181:2181 -p 8765:8765 -p 60000:60000 -p 60010:60010 -p 60020:60020 -p 60030:60030 -v /opt/bigdata/hbase-phoenix-docker/hbase-2.0.6/conf:/opt/hbase-2.0.6/conf hbase-phoenix-docker:v1 /bin/bash

这样,我们将主机的hbase-site-bak.xml进行修改(不是修改hbase-site.xml,具体请看容器(https://gitee.com/astra_zhao/hbase-phoenix-docker的容器里面的start-pseudo-distributed.sh)

添加下面属性:

  <property>
    <name>phoenix.query.timeoutMs</name>
    <value>1200000</value>
  </property>
  <property>
    <name>phoenix.query.keepAliveMs</name>
    <value>1200000</value>
  </property>
  <property>
    <name>hbase.rpc.timeout</name>
    <value>1200000</value>
  </property>
  <property>
    <name>hbase.regionserver.lease.period</name>
    <value>1200000</value>
  </property>
  <property>
    <name>hbase.client.operation.timeout</name>
    <value>1200000</value>
  </property>
  <property>
    <name>hbase.client.scanner.caching</name>
    <value>1000</value>
  </property>
  <property>
    <name>hbase.client.scanner.timeout.period</name>
    <value>1200000</value>
  </property>

最后,我们还要修改容器/opt/phoenix/bin下面的hbase-site.xml。修改跟上面一样。这样就能在./sqlline.py里面查询千万条以上的数据。

ps:同主机下不同容器不能访问的解决方法

针对docker的version '2'或者version '3'通过network_mode

下面这种方式是无效的。

networks:
  default:
    external:
      name: my-pre-existing-network

通过docker network ls进行查看

通过docker network inspect 网络名称,可以查看用了哪些IP地址访问

#>docker network inspect bridge

猜你喜欢

转载自blog.csdn.net/penker_zhao/article/details/109356345