基于Docker的大数据开发环境

折月煮酒 提交于 2021-02-06 20:37:25

大数据开发对运行环境和数据的依赖比较重,比如开发Spark应用,往往会依赖Hive,但本地开发环境是没有Hive的,所以需要在本地和服务器之间拷贝代码,效率不高,我认为用Docker在本地搭建一套单机的大数据集群,然后将代码拷贝到容器里进行测试,可以改善这种情况。我自己对这个思路做过探索:https://github.com/iamabug/BigDataParty,这个镜像安装了Hadoop、Hive、Spark等组件,基本可以满足需求,但是也有一些问题存在,比如有时需要对配置进行调整来保持和生产环境的一致性,虽然可以做,但工作量也不少。

其实,CDH和HDP都提供了类似的单机镜像,其中HDP中组件的版本比较新,并且和公司的技术栈一致,因此来探索一下,如果体验更好的话,以后就用它来进行相关的开发了。

CDH镜像相关:https://hub.docker.com/r/cloudera/quickstart/

HDP镜像相关:https://www.cloudera.com/tutorials/sandbox-deployment-and-install-guide/3.html

Sandbox获取

系统要求

  • 安装Docker 17.09 或更新的版本

  • 对于Windows和Mac,Docker需要配置10G以上的内存

脚本下载与执行

可以在浏览器里访问https://www.cloudera.com/downloads/hortonworks-sandbox/hdp.html点击页面下载,也可以直接在命令行用wget下载:

$ wget --no-check-certificate https://archive.cloudera.com/hwx-sandbox/hdp/hdp-3.0.1/HDP_3.0.1_docker-deploy-scripts_18120587fc7fb.zip

解压并执行脚本:

$ unzip HDP_3.0.1_docker-deploy-scripts_18120587fc7fb.zip
Archive:  HDP_3.0.1_docker-deploy-scripts_18120587fc7fb.zip
   creating: assets/
  inflating: assets/generate-proxy-deploy-script.sh
  inflating: assets/nginx.conf
  inflating: docker-deploy-hdp30.sh
$ sh docker-deploy-hdp30.sh

执行后会开始拉取docker镜像,需要下载几十G的数据,需要耐心等待。

Sandbox验证

脚本执行完毕后,使用 docker ps可以看到启动了两个容器:

CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            NAMES
daf0f397ff6c        hortonworks/sandbox-proxy:1.0   "nginx -g 'daemon of…"   About an hour ago   Up About an hour    0.0.0.0:1080->1080/tcp, ...
b925f92f368d        hortonworks/sandbox-hdp:3.0.1   "/usr/sbin/init"         About an hour ago   Up About an hour    22/tcp, 4200/tcp, 8080/tcp
sandbox-hdp

其中 sandbox-proxy 这个容器先忽略,关注 sandbox-hdp 这个就可以,这时所有HDP的组件都已经启动了。

UI验证

因为已经做了端口映射,如果要访问特定的UI,直接访问localhost对应的端口就可以,可以先访问 localhost:1080的Splash页面:

这里提供了向导,点击左边的Launch Dashboard可以打开Ambari登陆页面和HDP的Tutorial页面,点击右边的Quick Links会打开下一级向导,包含Ambari、Zeppelin、Atlas、Ranger等组件的跳转链接:

其中Ambari的登陆密码可以参考https://www.cloudera.com/tutorials/learning-the-ropes-of-the-hdp-sandbox.html这个页面获取,根据不同用途可以选择不同的用户:

用户 角色 密码
admin Ambari Admin 使用ambari-admin-password-reset命令初始化获得
maria_dev Spark and SQL Developer maria_dev
raj_ops Hadoop Warehouse Operator raj_ops
holger_gov Data Steward holger_gov
amy_ds Data Scientist amy_ds

Web UI的情况读者可以自行一一验证,下面来验证一下底层的存储和计算情况。

功能验证

命令行进入容器:

docker exec -it sandbox-hdp bash

HDFS验证

简单的ls一下:

[root@sandbox-hdp /]# hdfs dfs -ls /
Found 13 items
drwxrwxrwt   - yarn   hadoop          0 2018-11-29 17:56 /app-logs
drwxr-xr-x   - hdfs   hdfs            0 2018-11-29 19:01 /apps
drwxr-xr-x   - yarn   hadoop          0 2018-11-29 17:25 /ats
drwxr-xr-x   - hdfs   hdfs            0 2018-11-29 17:26 /atsv2
drwxr-xr-x   - hdfs   hdfs            0 2018-11-29 17:26 /hdp
drwx------   - livy   hdfs            0 2018-11-29 17:55 /livy2-recovery
drwxr-xr-x   - mapred hdfs            0 2018-11-29 17:26 /mapred
drwxrwxrwx   - mapred hadoop          0 2018-11-29 17:26 /mr-history
drwxr-xr-x   - hdfs   hdfs            0 2018-11-29 18:54 /ranger
drwxrwxrwx   - spark  hadoop          0 2021-02-06 07:19 /spark2-history
drwxrwxrwx   - hdfs   hdfs            0 2018-11-29 19:01 /tmp
drwxr-xr-x   - hdfs   hdfs            0 2018-11-29 19:21 /user
drwxr-xr-x   - hdfs   hdfs            0 2018-11-29 17:51 /warehouse

Hive验证

Sandbox里已经内置了一些测试数据,select一下即可。

首先启动hive命令行:

[root@sandbox-hdp /]# hive

查看有哪些数据库:

0: jdbc:hive2://sandbox-hdp.hortonworks.com:2> show databases;

+---------------------+
|    database_name    |
+---------------------+
| default             |
| foodmart            |
| information_schema  |
| sys                 |
+---------------------+

选择foodmart,再查看有哪些表:

0: jdbc:hive2://sandbox-hdp.hortonworks.com:2> use foodmart;
0: jdbc:hive2://sandbox-hdp.hortonworks.com:2> show tables;
+--------------------------------+
|            tab_name            |
+--------------------------------+
| account                        |
| ...                            |
+--------------------------------+

可以看到有很多表,我们就选择account这张表:

0: jdbc:hive2://sandbox-hdp.hortonworks.com:2> select * from account limit 1;
+---------------------+-------------------------+------------------------------+-----------------------+-------------------------+-------------------------+
| account.account_id  | account.account_parent  | account.account_description  | account.account_type  | account.account_rollup  | account.custom_members  |
+---------------------+-------------------------+------------------------------+-----------------------+-------------------------+-------------------------+
| 1000                | NULL                    | Assets                       | Asset                 | ~                       |                         |
+---------------------+-------------------------+------------------------------+-----------------------+-------------------------+-------------------------+

非常OK。

Spark验证

启动spark-sql后查询account表:

spark-sql> select * from foodmart.account limit 1;
Error in query: Table or view not found: `foodmart`.`account`; line 1 pos 14;
'GlobalLimit 1
+- 'LocalLimit 1
   +- 'Project [*]
      +- 'UnresolvedRelation `foodmart`.`account`

奇怪

spark-sql> show databases;
default

只有default库。

做了一些搜索,发现貌似在HDP 3.0之后,Spark访问Hive表发生了大的变化,Spark的验证还需要进一步研究。

Sandbox管理

停止Sandbox

使用docker stop命令即可:

docker stop sandbox-hdp
docker stop sandbox-proxy

重启Sandbox

使用docker start命令即可:

docker start sandbox-hdp
docker start sandbox-proxy

清理Sandbox

先stop再remove:

docker stop sandbox-hdp
docker stop sandbox-proxy
docker rm sandbox-hdp
docker rm sandbox-proxy

如果要删除镜像的话:

docker rmi hortonworks/sandbox-hdp:3.0.1

总结

HDP Sandbox的启动非常方便,和文档没有出入,体验较好,大概率可以取代BigDataParty项目,继续试用和学习。

参考链接

  1. https://www.cloudera.com/tutorials/sandbox-deployment-and-install-guide/3.html

  2. https://www.cloudera.com/tutorials/learning-the-ropes-of-the-hdp-sandbox.html

公众号:大数志

传递最新、最有价值的大数据技术干货和资讯。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!