- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章docker 搭建hadoop以及hbase集群详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
要用docker搭建集群,首先需要构造集群所需的docker镜像。构建镜像的一种方式是,利用一个已有的镜像比如简单的linux系统,运行一个容器,在容器中手动的安装集群所需要的软件并进行配置,然后commit容器到新的镜像。另一种方式是,使用Dockerfile来自动化的构造镜像.
下面采用第二种. 。
1. 创建带ssh服务的ubuntu14.04系统镜像 。
使用ubuntu14系统来安装hadoop和hbase,由于hadoop集群机器之间通过ssh通信,所以需要在ubuntu14系统中安装ssh服务.
编写Dockerfile如下
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
############################################
# version : debugman007/ssh:v1
# desc : ubuntu14.04 上安装的ssh
############################################
# 设置继承自ubuntu14.04官方镜像
FROM ubuntu:14.04
# 下面是一些创建者的基本信息
MAINTAINER debugman007 (skc361@163.com)
RUN
rm
-vf
/var/lib/apt/lists/
*
RUN apt-get update
RUN apt-get
install
-y openssh-server openssh-client vim wget curl
sudo
#添加用户 test,设置密码为 test, 赋予sudo权限
RUN
useradd
-m
test
RUN
echo
"test:test"
| chpasswd
RUN
cd
/etc/sudoers
.d &&
touch
nopasswdsudo &&
echo
"test ALL=(ALL) ALL"
>> nopasswdsudo
#把test用户的shell改成bash,否则ssh登录ubuntu服务器,命令行不显示用户名和目录
RUN
usermod
-s
/bin/bash
test
RUN
echo
"root:root"
| chpasswd
#配置ssh
RUN
mkdir
/var/run/sshd
RUN
sed
-i
's/PermitRootLogin prohibit-password/PermitRootLogin yes/'
/etc/ssh/sshd_config
RUN
sed
's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g'
-i
/etc/pam
.d
/sshd
ENV NOTVISIBLE
"in users profile"
RUN
echo
"export VISIBLE=now"
>>
/etc/profile
EXPOSE 22
USER
test
RUN
ssh
-keygen -t rsa -P
''
-f ~/.
ssh
/id_rsa
RUN
cat
~/.
ssh
/id_rsa
.pub >> ~/.
ssh
/authorized_keys
USER root
RUN
ssh
-keygen -t rsa -P
''
-f ~/.
ssh
/id_rsa
RUN
cat
~/.
ssh
/id_rsa
.pub >> ~/.
ssh
/authorized_keys
|
创建好的系统镜像位于:https://hub.docker.com/r/debugman007/ubt14-ssh/ 。
Dockerfile 位于:https://github.com/gtarcoder/dockerfiles/blob/master/ubt14-ssh/Dockerfile 。
2. 创建hadoop和hbase基本镜像 。
编写Dockerfile如下:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
############################################
# version : debugman007/ubt14-hadoop-hbase:v1
# desc : ubuntu上安装的ssh,java, hadoop
############################################
FROM debugman007
/ubt14-ssh
:v1
# 下面是一些创建者的基本信息
MAINTAINER debugman007 (skc361@163.com)
#为hadoop集群提供dns服务
RUN
sudo
apt-get -y
install
dnsmasq
#安装和配置java环境
#RUN yum -y install java-1.7.0-openjdk*
ADD http:
//mirrors
.linuxeye.com
/jdk/jdk-7u80-linux-x64
.
tar
.gz
/usr/local/
RUN
cd
/usr/local
&&
tar
-zxvf jdk-7u80-linux-x64.
tar
.gz &&
rm
-f jdk-7u80-linux-x64.
tar
.gz
ENV JAVA_HOME
/usr/local/jdk1
.7.0_80
ENV CLASSPATH ${JAVA_HOME}
/lib/dt
.jar:$JAVA_HOME
/lib/tools
.jar
ENV PATH $PATH:${JAVA_HOME}
/bin
#安装和配置 hadoop
RUN groupadd hadoop
RUN
useradd
-m hadoop -g hadoop
RUN
echo
"hadoop:hadoop"
| chpasswd
ADD http:
//www-eu
.apache.org
/dist/hadoop/common/hadoop-2
.7.3
/hadoop-2
.7.3.
tar
.gz
/usr/local/
RUN
cd
/usr/local
&&
tar
-zxvf hadoop-2.7.3.
tar
.gz &&
rm
-f hadoop-2.7.3.
tar
.gz
RUN
chown
-R hadoop:hadoop
/usr/local/hadoop-2
.7.3
RUN
cd
/usr/local
&&
ln
-s .
/hadoop-2
.7.3 hadoop
ENV HADOOP_PREFIX
/usr/local/hadoop
ENV HADOOP_HOME
/usr/local/hadoop
ENV HADOOP_COMMON_HOME
/usr/local/hadoop
ENV HADOOP_HDFS_HOME
/usr/local/hadoop
ENV HADOOP_MAPRED_HOME
/usr/local/hadoop
ENV HADOOP_YARN_HOME
/usr/local/hadoop
ENV HADOOP_CONF_DIR
/usr/local/hadoop/etc/hadoop
ENV PATH ${HADOOP_HOME}
/bin
:$PATH
ADD http:
//www-eu
.apache.org
/dist/hbase/1
.2.4
/hbase-1
.2.4-bin.
tar
.gz
/usr/local/
RUN
cd
/usr/local
&&
tar
-zxvf hbase-1.2.4-bin.
tar
.gz &&
rm
-f hbase-1.2.4-bin.
tar
.gz
RUN
chown
-R hadoop:hadoop
/usr/local/hbase-1
.2.4
RUN
cd
/usr/local
&&
ln
-s .
/hbase-1
.2.4 hbase
ENV HBASE_HOME
/usr/local/hbase
ENV PATH ${HBASE_HOME}
/bin
:$PATH
RUN
echo
"hadoop ALL= NOPASSWD: ALL"
>>
/etc/sudoers
USER hadoop
RUN
ssh
-keygen -t rsa -P
''
-f ~/.
ssh
/id_rsa
RUN
cat
~/.
ssh
/id_rsa
.pub >> ~/.
ssh
/authorized_keys
|
创建好的镜像位于:https://hub.docker.com/r/debugman007/ubt14-hadoop-hbase/ 。
Dockerfile 位于:https://github.com/gtarcoder/dockerfiles/blob/master/ubt14-hadoop-hbase/Dockerfile 。
3. 给hadoop,hbase镜像进行配置 。
Dockerfile 如下:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
############################################
# version : debugman007/ubt14-hadoop-hbase:master
# desc : ubuntu上安装的ssh,java, hadoop, hbase
############################################
FROM debugman007
/ubt14-hadoop-hbase
:base
# 下面是一些创建者的基本信息
MAINTAINER debugman007 (skc361@163.com)
ADD hadoop-
env
.sh $HADOOP_HOME
/etc/hadoop/
ADD mapred-
env
.sh $HADOOP_HOME
/etc/hadoop/
ADD yarn-
env
.sh $HADOOP_HOME
/etc/hadoop/
ADD core-site.xml $HADOOP_HOME
/etc/hadoop/
ADD hdfs-site.xml $HADOOP_HOME
/etc/hadoop/
ADD mapred-site.xml $HADOOP_HOME
/etc/hadoop/
ADD yarn-site.xml $HADOOP_HOME
/etc/hadoop/
ADD slaves $HADOOP_HOME
/etc/hadoop/
ADD hbase-
env
.sh $HBASE_HOME
/conf/
ADD hbase-site.xml $HBASE_HOME
/conf/
ADD regionservers $HBASE_HOME
/conf/
USER hadoop
RUN
sudo
mkdir
-p
/opt/hadoop/data/zookeeper
RUN
sudo
chown
-R hadoop:hadoop $HADOOP_HOME
/etc/hadoop
RUN
sudo
chown
-R hadoop:hadoop $HBASE_HOME
/conf
RUN
sudo
chown
-R hadoop:hadoop
/opt/hadoop
RUN
sudo
chown
-R hadoop:hadoop
/home/hadoop
COPY bootstrap.sh
/home/hadoop/
RUN
chmod
766
/home/hadoop/bootstrap
.sh
ENTRYPOINT [
"/home/hadoop/bootstrap.sh"
]
CMD [
"/bin/bash"
]
|
除了Dockerfile文件,还需要hadoop和hbase的一些配置文件,包括 core-site.xml, hadoop-env.sh, hbase-env.sh, hbase-site.xml, hdfs-site.xml, mapred-env.sh, regionservers, slaves, yarn-env.sh, yarn-site.xml等.
创建好的镜像位于:https://hub.docker.com/r/debugman007/ubt14-hadoop-hbase/ 。
Dockerfile以及配置文件位于:https://github.com/gtarcoder/dockerfiles/tree/master/ubt14-hadoop-hbase-v1 。
4. 启动 。
(1)启动一个容器作为hadoop master节点:
docker run -it --name hadoop-master -h hadoop-master -d -P -p 50070:50070 -p 8088:8088 debugman007/ubt14-hadoop-hbase:v1 。
(2)启动三个容器作为hadop slave节点 。
docker run -it --name hadoop-slave1 -h hadoop-slave1 debugman007/ubt14-hadoop-hbase:v1 。
三个容器名和容器内的主机名分别设为 hadoop-slave1, hadoop-slave2, hadoop-slave3. 。
(3)设置各个节点的/etc/hosts文件 。
编辑一个run_hosts.sh 脚本文件,用来设置各个节点的名称解析。假设hadoop-master容器内的IP地址为10.0.1.2, hadoop-slave1/2/3 的IP地址分别为10.0.1.3/4/5. 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/bash
echo
10.0.1.2 hadoop-master >>
/etc/hosts
echo
10.0.1.3 hadoop-slave1 >>
/etc/hosts
echo
10.0.1.4 hadoop-slave2 >>
/etc/hosts
echo
10.0.1.5 hadoop-slave3 >>
/etc/hosts
echo
10.0.1.3 regionserver1 >>
/etc/hosts
#hbase的regionserver服务器
echo
10.0.1.4 regionserver2 >>
/etc/hosts
|
在hadoop-master和hadoop-salve1/2/3容器中都执行该脚本.
(4)进入hadoop-master容器 。
docker exec -it hadoop-master bash 。
然后在容器内 /usr/local/hadoop/sbin 目录下执行
1
2
3
|
hdfs namenode -format
./start-dfs.sh
./start-yarn.sh
|
启动hadoop服务.
在容器内执行 start-hbase.sh 启动hbase服务.
(5)在 hadoop-master 节点和hadoop-slave节点内查看服务是否正常启动 。
在各个节点容器内都执行 jps 查看,发现在mster节点中出现 。
Jps, ResourceManager, NameNode, SecondaryNamenode, HMaster等服务; 。
在slave节点中出现 Jps, DataNode, NodeManager, HRegionServer等服务.
出现以上服务,说明集群正常启动.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.cnblogs.com/gtarcoder/p/6417446.html 。
最后此篇关于docker 搭建hadoop以及hbase集群详解的文章就讲到这里了,如果你想了解更多关于docker 搭建hadoop以及hbase集群详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
发出时Delete对于 hbase,我知道它不会立即删除数据。但是什么时候删除数据,我的意思是,物理上? 最佳答案 当您向 HBase 写入内容时,它会存储在内存存储 (RAM) 中,然后再写入磁盘。
同一行的列族属于同一个 RegionServer。 那么,这里的问题是一个 RegionServer 会在不同的机器上存储不同的列族吗? 最佳答案 不一定,但在某些时候它会。这是基本 HBase 架构
如果我想插入表格: row | fam:qualifier | timestamp | value 1 | foo:bar | 12345 | 2 1 | foo:bar | 12346 | 3 1
有时我想退出我在 HBase shell 中运行的命令,例如扫描操作通常需要太多时间。 所以我想停止运行这个命令,但我不想退出 HBase shell。 我常用的停止运行命令的方式,我使用了Ctrl+
有没有办法设置 Hbase 以便我们可以在同一个集群中创建多个数据库? 最佳答案 只是为了刷新主题:http://hbase.apache.org/book.html#namespace 5.3.1.
怎么看version的 hbase我在用? 你能下命令吗? 最佳答案 hbase version命令行界面中的命令给出了 version的 hbase正在使用中。 以下是来自 Cloudera 的两个
高级问题: HBase 是否对所有分布(因此不是实现的工件)通用的每行施加了最大大小,无论是在 方面吗?字节存储 或在 方面细胞数 ? 如果是这样: 限制是什么? 极限存在的原因是什么? 限制在哪里记
假设,假设我在数据仓库设置中有一个星型模式。 有一个非常非常长的事实表(想想几十亿到几万亿行)和几个低基数维度表(想想 100 个维度表)。每个事实表外键 指向一个维度表的主键是位图索引的。每个维度表
版本:Hadoop: 2.0.0-cdh4.3.1 HBase: 0.94.6-cdh4.3.1 我正在运行 cloudera quick start vm,这是我的小型远程 HBase Java 客
我正在尝试以完全分布式模式配置 HBase。 (使用 Ubuntu 12.04,Apache Hadoop 2.2(以伪模式运行,HBase 版本 0.98) 以下是我的 bashrc 设置: exp
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我正在尝试对位于 Hbase 中的两个表进行映射连接。我的目的是在hashmap中保留小表的记录并与大表进行比较,一旦匹配,再次将记录写入hbase中的表中。我使用 Mapper 和 Reducer
我正在尝试编写一个程序来连接到 HBase。但是当我执行以下命令时HBaseConfiguration.create();我收到以下错误:. "hbase-default.xml 文件似乎是旧版本的
基于HBase documentation ,再次遵循 Google BigTable 论文的引用,据说这些行是按行键的字典顺序存储的。 很明显,当我们在 rowkey 中有一个字符串或者如果我们将一
我有一个 hbase 表,其中的行键如 row1、row2、row3 .... 和 rowN,我想要的是获取行键从 row100 到 row200 的行,如何编写查询子句或将 hbase 表设计为让查
我正在尝试创建命名空间,但出现类似下面给出的错误 hbase(main):031:0> create namespace 'Aniruddha'
我发现为以下要求建模 HBase 表有困难。 我有一个表“商店”,它存储了商店的详细信息(必胜客)。 我有一个表格“订单”,其中包含交易摘要(总交易金额等...)。 我有另一个表“Order_Item
谁能告诉我如果在不首先禁用表的情况下使用“alter”命令可能影响表结构的可能影响? 据我所知,禁用表意味着关闭与表的所有连接。如果我在不禁用表的情况下使用 alter,可能会发生什么异常情况? 我正
我无法将表从 HBase 导出到 HDFS。下面是错误跟踪。它是相当大的尺寸。还有其他方法可以导出吗? 我使用以下命令导出。我增加了 rpc 超时,但工作仍然失败。 sudo -u hdfs hbas
我是一名优秀的程序员,十分优秀!