使用docker构建hadoop集群

  docker的使用越来越普遍了,人人不知道docker的还需要进一步学习一下。这次咱们使用docker去举行hadoop集群的构建。

  使用docker构建的利益真的许多,一台电脑上可以学习安装许多想做的器械,可以说是一个docker可以虚拟你想使用的任何环境。人人知道安装hadoop需要许多机械和资源,然则现在一台电脑就可以搞定,是不是感受手艺很壮大。

  下面咱们这边构建hadoop文章的梗概如下:

   1. 先容下docker的安装设置及常用的下令。

   2. 安装历程所需要的工具。

   3. 最先安装步骤。

   

  Docker在使用前需要提前安装,差别的电脑安装的方式不一样,人人可以到官网上根据步骤举行安装,我的电脑是MAC的,下载一个dmg文件安装即可。许多同砚安装好了之后拉取举行很慢,这个和我之前遇到的问题异常类似,由于docker的镜像库是外洋的,要从外洋接见而且拉取需要履历异常长的网络环境,这个时刻就需要一些内陆化的器械了。也就是找一些海内的镜像站。

  我内陆的电脑设置了两个,一个是阿里云的镜像加速站和海内镜像加速站。人人不知道方式的可以搜索一下。

  mac电脑可以点击docker图标,选择 Preferences -> Daemon -> Registory mirrors(这个是旧版本的设置方式)。新版本选择 Preferences -> Docker Engine, 里边有一个Json内容个,把自己的海内镜像加速设置成如下json。注重人人要用自己的镜像加速id, 下面{your Id}要填写你自己的申请的id。除了设置这个以外还设置了一个海内站

{
  "debug": true,
  "registry-mirrors": [
    "http://{your Id}.mirror.aliyuncs.com",
    "http://registry.docker-cn.com"
  ],
  "experimental": false
}

   设置的时刻有个需要注重的地方,就是给到的地址是 https,我们需要改为“http”,否则会泛起不能获取cert文件。这个错误对照不容易发现,在使用的时刻若是设置不正确的话,那么下载镜像的时刻照样很慢。

  安装好和设置好镜像加速后,我们接下来看一些常用的Docker下令:

  docker search ubuntu, 这个是从镜像堆栈举行搜索一些镜像,这个例子是搜索ubuntu的镜像的。

  docker pull ubuntu, 这个是从镜像堆栈下载最新版本的ubuntu。固然也可以执行版本号,像ubuntu:16.04。

  docker start/stop {image id}, 运行和住手一个指定的镜像。

  docker ps, 这个是查看当前正在运行的镜像历程。在后边加一个 -a,可以显示所有镜像历程,包罗正在运行的以及已经竣事的历程的。

  docker attach {image id},进入正在运行的镜像堆栈,输入exit即可退出镜像而且竣事镜像运行。若是想镜像继续运行的话,需要按快捷键 Ctrl + p + q 退出。

  docker run ubuntu:16.04,即运行内陆堆栈的ubuntu,版本号为16.04。若是内陆堆栈没有的话,那么就需要从远程堆栈先pull到内陆,然后再举行启动。

  docker commit -m “comment” {image id} ubuntu:hadoop, 将运行后的某个镜像id保留成一个版本。也就是在即在镜像里边所做的修改都市保留起来。每次run的时刻都是将原来的镜像重新启动,修改或操作的内容都不会保留。

  docker images, 查看拉取下来的镜像以及自己提交的镜像都在里边。

  docker network create –driver=bridge haoop, 建立docker网络,用于在同一个网络中的机械可以接见,模式为桥接模式,名称为hadoop。

      docker network ls,查看所建立的网路名称。

 

  基本的常用下令也许就是这些,咱们一起看一下现在搭建hadoop所使用的工具有哪些。

  vim,文本编辑工具。

  open-jdk1.8, hadoop使用, 固然同砚们也可以使用oracle的jdk1.8。

  net-tools, 网络工具,用于机械之间的接见时用。

  openssh-server, openssh-cient ssh的服务器和客户端,用于远程免密接见。

  scala, 这个hadoop需要的。

  

  基本工具就这些,接下来我们最先安装Hadoop集群。集群的结构为一台master, 两台slaver-slave1, slave2。

  使用下令“docker pull ubuntu:16.04”,将下载16.04版本的操作系统。下载完成之后可以通过 docker images 查看下载的镜像。

  接下载我们需要进入到ubuntu里边去,将ubuntu原有的源举行备份为sources_init.list,然后把apt的源改为阿里的源,这样下载和安装一些工具的话会对照快。  

弱网测试如何进行

docker run ubuntu:16.04 /bin/bash
cp /etc/apt/sources.list /etc/apt/sources_init.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main
     deb-src http://mirrors.aliyun.com/ubuntu/ xenial main

     deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
     deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main

     deb http://mirrors.aliyun.com/ubuntu/ xenial universe
     deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
     deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
     deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe

     deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
     deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
     deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
     deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe" > /etc/apt/sources.list

  执行apt update,将系统更新一下。接下来安装open-jdk1.8和scala。安装完成后查看一下java和scala, 使用 java -version有输出说明乐成。执行scala进入scala环境,输入“:q”或者按Ctrl+D即可退出scala环境。

apt update
apt install openjdk-8-jdk
apt install scala

  接下来安装编辑工具vim和网络工具 net-tools。

 apt install vim
 apt install net-tools

  安装ssh服务端和客户端,用于远程免密接见。Hadoop接纳使用指定机械名后,然后由剧本举行免密接见后,直接执行响应的下令,好比启动服务等,是不是很利便?

apt install openssh-server
apt install openssh-client

  进入当前用户目录,然后天生免密登录的key。天生key的时刻直接按回车即可。

cd ~
ssh-keygen -t rsa -P ""

  这个时刻会直接天生一个.ssh文件夹,通过ls -al举行查看。将天生的公钥key追加到授权的key列表。启动ssh服务,然后举行本机测试,若是能乐成上岸,说明已经乐成了

cat .ssh/id_rsa.put >> .ssh/authorized_keys
service ssh start
ssh 127.0.0.1

   为了保证系统启动的时刻也启动ssh服务,我们将启动下令 “service ssh start” 放到bashrc文件末尾中。

vim ~/.bashrc

  接下来我们最先下载hadoop,将文件举行解压放到/usr/local/, 改名为hadoop。

wget https://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
tar -zxvf hadoop-3.2.1.tar.gz -C /usr/local
cd /usr/local
mv hadoop-3.2.1 hadoop

  通过下令“update-alternatives –config java” 查看一下java的安装路径。设置一下内陆的JAVA和Hadoop环境。通过使用下令“vim /etc/profile”,然后放好内容保留后,执行“source /etc/profile”,让设置的变量内容立即成生效。

  #java
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    export JRE_HOME=${JAVA_HOME}/jre    
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
    export PATH=${JAVA_HOME}/bin:$PATH
    #hadoop
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HADOOP_COMMON_HOME=$HADOOP_HOME 
    export HADOOP_HDFS_HOME=$HADOOP_HOME 
    export HADOOP_MAPRED_HOME=$HADOOP_HOME
    export HADOOP_YARN_HOME=$HADOOP_HOME 
    export HADOOP_INSTALL=$HADOOP_HOME 
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
    export HADOOP_CONF_DIR=$HADOOP_HOME 
    export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec 
    export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
    export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
    export HDFS_DATANODE_USER=root
    export HDFS_DATANODE_SECURE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export HDFS_NAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root

   修改hadoop的环境变量,“vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh”,加入如下变量后保留。设置JAVA环境变量,各节点的用户。

    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root    

  修改hadoop下的环境/usr/local/hadoop/conf下的core-site.xml。加入如下内容。fs.default.name 为默认的master节点。hadoop.tmp.dir为hadoop默认的文件路径。若是本机没有的话需要自己通过 mkdir 下令举行建立。

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/root/hadoop/tmp</value>
    </property>
</configuration>

  修改同目录conf下的hdfs-site.xml。dfs.replication即从节点的数目,2个从节点。dfs.namenode.name.dir为namenode的元数据存放的路径,dfs.namenode.data.dir是数据锁存放的路径。

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/root/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.namenode.data.dir</name>
        <value>/root/hadoop/hdfs/data</value>
    </property>
</configuration>

  修改同目录conf下的mapred-site.xml。指定mapreduce执行框架设置为yarn。mapreduce.application.classpath 设置mapreduce的应用执行类路径。

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>
            /usr/local/hadoop/etc/hadoop,
            /usr/local/hadoop/share/hadoop/common/*,
            /usr/local/hadoop/share/hadoop/common/lib/*,
            /usr/local/hadoop/share/hadoop/hdfs/*,
            /usr/local/hadoop/share/hadoop/hdfs/lib/*,
            /usr/local/hadoop/share/hadoop/mapreduce/*,
            /usr/local/hadoop/share/hadoop/mapreduce/lib/*,
            /usr/local/hadoop/share/hadoop/yarn/*,
            /usr/local/hadoop/share/hadoop/yarn/lib/*
        </value>
    </property>
</configuration>

  修改yarn.xml。yarn.resourcemanager.hostname为yarn资源管理的主机名为master机械。 yarn.nodemanager.aux-services说明当前yarn接纳mapreduce洗牌的方式举行处置。

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

  修改conf/workers, 即告诉Hadoop worker的机械为哪些。删除localhost,加入如下内容。

slave1
slave2

  进入Hadoop的bin路径下将namenode举行格式化。这样hadoop才可以使用,否则无法使用。

./bin/hadoop namenode format

  Hadoop的基本设置文件和内容已经设置好,下一步我们退出镜像,Ctrl+c 或者输入exit即可退出。我们通过docker ps -a 查看这个举行的container id。接下来保留为 ubuntu:hadoop镜像。

docker commit -m "hadoop install" {CONTAINER ID} ubuntu:hadoop

  我们建立一个hadoop机械环境内所需要的网络环境。同一个网络环境下可以直接举行接见。建立好了了之后通过第二个下令举行查看建立了哪些网络环境。

docker network create --driver=bridge hadoop
docker network ls

  接下来我们开三个Terminal窗口,每个窗口划分执行一条下令。-h 指定主机名,有了主机名可以直接通过主机名接见机械。 –name指定容器名。若是我们一会儿退出了之后,我们可以通过“docker restart master”举行master的启动。-p为将容器里边的端口露出为外边使用的端口。由于master可以通过如下两个界面举行接见,以是露出出来两个端口。

docker run -it --network hadoop -h "master" --name "master" -p 9870:9870 -p 8088:8088 ubuntu:hadoop /bin/bash
docker run -it --network hadoop -h "slave1" --name "slave1" ubuntu:hadoop /bin/bash
docker run -it --network hadoop -h "slave2" --name "slave2" ubuntu:hadoop /bin/bash

  若是我们接纳docker start master -d,这种守护举行启动的,那么我们需要通过docker attach {image id}进入机械。我们在master的机械上启动所有节点。我们不需要用再去slave1和slave2执行此下令,由于我们适才的免密ssh已经在剧本里边操作好了。

cd /usr/local/hadoop/sbin/
./start-all.sh

  若是一切启动都正常的话,我们接见内陆 localhost:9870 和  localhost:8088 。

使用docker构建hadoop集群

 

 

 使用docker构建hadoop集群

 

 

  这说明就乐成了。接下来咱们使用内置的wordcount程序执行以下,然后查看一下效果。

  我们进入hadoop的bin目录下,将上级的README.txt写入到file.txt文件里边。在HDFS建立一个input目录,将文件上传到input目录里边,然后看一下input目录里边是否有文件。然后就可以使用内容的wordcount举行挪用。将效果集放到/output里边。

cat ../README.txt > ../file.txt
./hadoop fs -mkdir /input
./hadoop fs -put ../file.txt /input
./hadoop fs -ls /input
./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /input /output

  等执行完了也就泛起了 map 100% reduce 100%。这个时刻说明执行乐成了,也就是讲文件的单词举行统计了。查看一下output文件目录“./hadoop fs -ls /output”,里边有两个文件,_SUCCESS说明乐成了,里边的part-r-0000是效果集,通过下令“./hadoo fs -cat /output/part-r-0000”就可以查看效果集了。

Found 2 items
-rw-r--r--   2 root supergroup          0 2020-03-18 09:25 /output/_SUCCESS
-rw-r--r--   2 root supergroup       1301 2020-03-18 09:25 /output/part-r-00000

  好了,完整的搭建历程就完成了。

 

  

 

原创文章,作者:870t新闻网,如若转载,请注明出处:https://www.870t.com/archives/1964.html