IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 基于docker技术搭建Hadoop与MapReduce分布式环境 -> 正文阅读

[大数据]基于docker技术搭建Hadoop与MapReduce分布式环境

安装docker

宿主环境确认

lsb_release -a

本文适用环境如下

发行版版本:Ubuntu 18.04 LTS

内核版本号:5.3.*-*-generic

整备安装环境

更新系统

sudo apt update

sudo apt upgrade

下载curl

sudo apt install curl

安装docker

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

确认docker的安装

sudo docker version

(可选)安装docker-compose,当前最新版本为1.29.2

可以先行访问 https://github.com/docker/compose/releases/ 确认版本号

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

(重要)添加国内的docker镜像CDN

sudo vi /etc/docker/daemon.json

{
    "registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}

重载docker让CDN配置生效

sudo systemctl daemon-reload

sudo systemctl restart docker

测试docker是否能够正常抓取镜像和运行

sudo docker run hello-world

查看hello-world镜像的运行记录

sudo docker ps -a

基于docker技术搭建hadoop与map reduce

整备容器环境

抓取ubuntu 18.04的镜像作为基础搭建hadoop环境

sudo docker pull ubuntu:18.04

查看镜像是否抓取成功

sudo docker images

使用该ubuntu镜像启动

将<host-share-path>与<container-share-path>连通

sudo docker run -it -v <host-share-path>:<container-share-path> ubuntu

e.g.

sudo docker run -it -v ~/hadoop/build:/home/hadoop/build ubuntu

容器启动后,会自动进入容器的控制台

在容器的控制台安装所需软件

apt-get update

apt-get upgrade

需要安装net-tools(网络管理工具)、vim(命令行文本编辑器)和ssh(远程登录协议)

apt-get install net-tools vim openssh-server

配置ssh服务器

让ssh服务器自动启动

vi ~/.bashrc

在文件的最末尾按O进入编辑模式,加上:

/etc/init.d/ssh start

按ESC返回命令模式,输入:wq保存并退出。

让修改即刻生效

source ~/.bashrc

配置ssh的无密码访问

ssh-keygen -t rsa

cd ~/.ssh

cat id_rsa.pub >> authorized_keys

安装JDK 8

(注意)hadoop 3.x目前仅支持jdk 7, 8

apt-get install openjdk-8-jdk

在环境变量中引用jdk,编辑bash命令行配置文件

vi ~/.bashrc

在文件的最末尾加上

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export PATH=$PATH:$JAVA_HOME/bin

让jdk配置即刻生效

source ~/.bashrc

测试jdk正常运作

java -version

保存镜像

(可选)登录docker,需要事先在docker网站上注册账号

好处是可以将自己做好的镜像提交到网上

sudo docker login

查询CONTAINER ID

sudo docker ps

将当前容器保存为镜像

sudo docker commit <CONTAINER ID> <IMAGE NAME>

安装hadoop

在宿主控制台上下载hadoop二进制压缩包

本文使用的hadoop版本为3.2.3。目前最新为3.3.0

其他版本请在下列网站下载。

https://hadoop.apache.org/releases.html

cd /<host-share-path>

wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.3/hadoop-3.2.3.tar.gz

在容器控制台上解压hadoop

cd /<container-share-path>

tar -zxvf hadoop-3.2.3.tar.gz -C /usr/local

安装完成了,查看hadoop版本

cd /usr/local/hadoop-3.2.3

./bin/hadoop version

为hadoop指定jdk位置

vi etc/hadoop/hadoop-env.sh

查找到被注释掉的JAVA_HOME配置位置,更改为刚才设定的jdk位置

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

hadoop联机配置

配置core-site.xml文件

vi etc/hadoop/core-site.xml

加入

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop-3.2.3/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <!--- 配置文件系统的URI,代码中可以通过该地址访问文件系统,使用 HDFSOperator.HDFS_URI 调用 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
        </property>
</configuration>

配置hdfs-site.xml文件

vi etc/hadoop/hdfs-site.xml

加入

<configuration>
    <!--- 配置保存Fsimage位置 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop-3.2.3/namenode_dir</value>
    </property>
    <!--- 配置保存数据文件的位置 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop-3.2.3/datanode_dir</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

MapReduce配置

该配置文件的定义:

https://hadoop.apache.org/docs/r<Hadoop版本号>/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

vi etc/hadoop/mapred-site.xml

配置mapred-site.xml文件

加入

<configuration>
    <!--- mapreduce框架的名字 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <! -- 设定HADOOP的位置给yarn和mapreduce程序 -->
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

配置yarn-site.xml文件

vi etc/hadoop/yarn-site.xml

加入

<configuration>
<!-- Site specific YARN configuration properties -->
        <!-- 辅助服务,数据混洗 -->
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <! -- 设定资源管理服务器的host名称,这个名称(master)将在下个小节中设定
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
        </property>
</configuration>

服务启动权限配置

配置start-dfs.sh与stop-dfs.sh文件

vi sbin/start-dfs.sh

vi sbin/stop-dfs.sh

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

配置start-yarn.sh与stop-yarn.sh文件

vi sbin/start-yarn.sh

vi sbin/stop-yarn.sh

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

配置完成,保存镜像。

docker ps

docker commit <CONTAINER ID> <IMAGE NAME>

启动hadoop,并进行网络配置

打开三个宿主控制台,启动一主两从三个容器

master
打开端口映射:8088 => 8088

sudo docker run -p 8088:8088 -it -h master --name master <IMAGE NAME>

worker01

sudo docker run -it -h worker01 --name worker01 0dfe14f0dea7

worker02

sudo docker run -it -h worker02 --name worker02 0dfe14f0dea7

分别打开三个容器的/etc/hosts,将彼此的ip地址与主机名的映射信息补全(三个容器均需要如此配置)

vi /etc/hosts

也可以使用以下命令查询ip

ifconfig

添加信息(每次容器启动该文件都需要调整)

<master  实际ip>      master
<worker01实际ip>      worker01
<worker02实际ip>      worker02

检查配置是否有效

ssh master
ssh worker01
ssh worker02

在master容器上配置worker容器的主机名

cd /usr/local/hadoop-3.2.1

vi etc/hadoop/workers

删除localhost,加入

worker01
worker02

网络配置完成

启动hadoop

在master主机上

cd /usr/local/hadoop-3.2.3

./bin/hdfs namenode -format

./sbin/start-all.sh

在hdfs上建立一个目录存放文件
假设该目录为:/home/hadoop/input

./bin/hdfs dfs -mkdir -p /home/hadoop/input

./bin/hdfs dfs -put ./etc/hadoop/*.xml /home/hadoop/input

查看分发复制是否正常

./bin/hdfs dfs -ls /home/hadoop/input

运行MapReduce自带的示例程序

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /home/hadoop/input output 'dfs[a-z.]+'

运行结束后,查看输出结果

./bin/hdfs dfs -cat output/*

注意

让Name Node退出安全模式

关闭容器前,没有执行stop-all.sh命令会导致Name Node进入安全模式。退出安全模式命令如下

./bin/hadoop dfsadmin -safemode leave

如何批量删除已经退出的容器。

sudo docker container prune

启动hadoop服务时出现connect to host port 22: Connection refused的错误。

ssh服务器没有启动,使用下面的命令启动ssh服务器

/etc/init.d/ssh start

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:23:07  更:2022-04-27 11:25:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:38:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码