简介
本文将介绍分布式部署hadoop方式,各角色部署使用独立的用户
- HDFS 部署
- httpfs 部署
- yarn 部署
- hive 部署
- HBase 部署
环境准备
- CentOS-7(Ubuntu亦可,或使用docker容器部署)
- hadoop-2.6.5.tar.gz
- zookeeper-3.4.12.tar.gz
计划
| hostname | 作用 | 
|---|---|
| node1 | namenode, datanode, JournalNode, zookeeper | 
| node2 | namenode, datanode, JournalNode, zookeeper | 
| node3 | datanode, JournalNode, zookeeper, httpfs | 
安装步骤
配置zookeeper
| 1 | # 添加zookeeper用户 | 
在node1上执行:echo 1 > /var/lib/zookeeper/myid
在node2上执行:echo 2 > /var/lib/zookeeper/myid
在node3上执行:echo 3 > /var/lib/zookeeper/myid
执行vim /opt/zookeeper/conf/zoo.cfg 底部添加如下内容1
2
3
4dataDir=/var/lib/zookeeper
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
执行vim /opt/zookeeper/bin/zkEnv.sh 修改如下内容1
2
3
4if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="/var/log/zookeeper"
fi
在node1, node2, node3上启动zookeeper1
2
3
4# 启动
su zookeeper -c "/opt/zookeeper/bin/zkServer.sh start"
# 停止
su zookeeper -c "/opt/zookeeper/bin/zkServer.sh stop"
SSH 配置
| 1 | # 创建用户组hadoop | 
配置HDFS
切换至root用户
- 安装和配置  1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14# 解压hadoop安装包 
 tar -xvf hadoop-2.6.5.tar.gz
 mv hadoop-2.6.5 /opt/
 chown root:root /opt/hadoop-2.6.5 -R
 ln -vs /opt/hadoop-2.6.5/ /opt/hadoop
 mkdir /var/log/hadoop-hdfs
 chown hdfs:hadoop /var/log/hadoop-hdfs
 mkdir /var/lib/hadoop-hdfs
 chown hdfs:hadoop /var/lib/hadoop-hdfs
以下修改hdfs相关配置,配置文件位于目录/opt/hadoop/ect/hadoop  
执行vim hadoop-env.sh 修改如下对应配置
| 1 | export HADOOP_LOG_DIR=/var/log/hadoop-hdfs | 
执行vim core-site.xml,其中<configuration>节点修改为如下内容
| 1 | <configuration> | 
执行vim hdfs-site.xml,其中<configuration>节点修改为如下内容
| 1 | <configuration> | 
执行vim slaves 替换为如下内容
| 1 | node1 | 
执行cp mapred-site.xml.template mapred-site.xml 复制mapred-site.xml.template为mapred-site.xml
执行vim mapred-site.xml,其中<configuration>节点修改为如下内容1
2
3
4
5
6
7
8<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
- 启动journalnode1 
 2
 3su hdfs -c "/opt/hadoop/sbin/hadoop-daemon.sh start journalnode" 
 # 对应停止命令如下
 # su hdfs -c "/opt/hadoop/sbin/hadoop-daemon.sh stop journalnode"
使用jps可以查到JournalNode进程
如果无法使用jps则需要先导入java环境变量,例如使用source /etc/profile
- 初始化namenode - 1 
 2
 3
 4
 5- # node1上执行 
 su hdfs -c "/opt/hadoop/bin/hdfs namenode -format"
 su hdfs -c "scp -r /var/lib/hadoop-hdfs/nn hdfs@node2:/var/lib/hadoop-hdfs"
 su hdfs -c "/opt/hadoop/bin/hdfs zkfc -formatZK"
 su hdfs -c "/opt/hadoop/sbin/start-dfs.sh"- 打开http://node1:50070或http://node2:50070查看hdfs信息 - 配置HttpFs- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- # 创建用户 
 useradd httpfs
 # 创建目录
 mkdir /var/log/hadoop-httpfs
 chown httpfs:httpfs /var/log/hadoop-httpfs/
 mkdir /var/tmp/hadoop-httpfs
 chown httpfs:httpfs /var/tmp/hadoop-httpfs/
 # 设置权限
 chmod +r /opt/hadoop/share/hadoop/httpfs/tomcat/conf -R- vim httpfs-site.xml - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13- <configuration> 
 <property>
 <name>httpfs.proxyuser.hue.hosts</name>
 <value>*</value>
 </property>
 <property>
 <name>httpfs.proxyuser.hue.groups</name>
 <value>*</value>
 </property>
 </configuration>- vim core-site.xml 添加 - 1 
 2
 3
 4
 5
 6
 7
 8
 9- <property> 
 <name>hadoop.proxyuser.httpfs.hosts</name>
 <value>*</value>
 </property>
 <property>
 <name>hadoop.proxyuser.httpfs.groups</name>
 <value>*</value>
 </property>- vim httpfs-env.sh - 1 
 2- export HTTPFS_LOG=/var/log/hadoop-httpfs 
 export HTTPFS_TEMP=/var/tmp/hadoop-httpfs- 启动或停止 - 1 
 2- su httpfs -c "/opt/hadoop/sbin/httpfs.sh start" 
 su httpfs -c "/opt/hadoop/sbin/httpfs.sh stop"
附
以下为本文档中所使用的docker容器构建和编排相关的文档,如果需要使用容器部署hadoop,可以参考使用
Dockerfile
构建centos7-base镜像所使用的相关文件如下
目录结构1
2
3├── Dockerfile
└── files
    └── jdk-8u171-linux-x64.tar.gz
jdk下载地址:
jdk-8u171-linux-x64.tar.gz
Dockerfile内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19FROM centos:7.2.1511
MAINTAINER yancai
ENV TZ Asia/Shanghai
# 设置yum源 安装常用工具
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
    && yum makecache \
    && yum install -y vim mlocate telnet zlib-devel openssh-server openssh-clients net-tools \
    && mkdir /usr/java
WORKDIR /root
# 安装jdk
ADD files/jdk-8u171-linux-x64.tar.gz /usr/java
RUN echo "export JAVA_HOME=/usr/java/jdk1.8.0_171" >> /etc/profile \
    && echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile \
    && echo "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile \
    && ln -vs /usr/java/jdk1.8.0_171/bin/java /usr/bin/java
在Dockerfile所在目录使用sudo docker build --tag="centos7-base" .构建镜像
docker-compose.yml
以下为docker-compose.yml内容: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
31version: '2.2'
services:
    node1:
        image: centos7-base
        container_name: node1
        hostname: node1
        environment:
            - TZ=Asia/Shanghai
        command: tail -f /dev/null
        volumes:
            - ~/share:/root/share
    node2:
        image: centos7-base
        container_name: node2
        hostname: node2
        environment:
            - TZ=Asia/Shanghai
        command: tail -f /dev/null
        volumes:
            - ~/share:/root/share
    node3:
        image: centos7-base
        container_name: node3
        hostname: node3
        environment:
            - TZ=Asia/Shanghai
        command: tail -f /dev/null
        volumes:
            - ~/share:/root/share
在docker-compose.yml所在目录使用命令sudo docker-compose up -d启动容器  
使用docker容器部署时,需要开启SSH服务,手动开启方式如下:1
2
3 在容器内执行
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
/usr/sbin/sshd