Ubuntu18.04+Docker+Hadoop+Spark分布式集群搭建

2023-11-08

题前记:因为课程需求,下面将搭建过程用学术论文的格式写。其实我并不想写的,没办法,学习作业嘛QAQ。。。)
我的联系方式:630056108

Docker上的Hadoop大数据平台搭建与测试

摘要:Docker是一个开源的应用容器,它可以让开发者将应用及其所需的依赖包打包到一个可移植的镜像中,可实现虚拟化。Hadoop是一开源的分布式系统基础架构,用于分布式计算,它可以给用户提供集群的高速运算和存储。本文简要介绍了Docker和Hadoop的发展史,Docker的架构,Hadoop的模块组件。并最终一步步搭建了Docker和Hadoop集群,并进行了测试。
 大数据有四大特点(4V),分为别为:Volume(大量)、Variety(多样)、Velocity(高速)、Veracity(准确性)。新的特点需要使用新的技术,传统的HPC计算已经难以应付4V的挑战,相应而生的分布式计算架构很好地应对了问题。Hadoop便是其中之一的分布式架构平台,它有高可靠、高扩展、高效、高容错、低成本等优点,越来越受到关注与应用。
 本文首先简述了容器和Docker与Hadoop的发展史,其次概述了Docker与Hadoop的架构模块,然后详细描述如何在真机上搭建环境并测试,最后进行总结和展望。

1. 简介与原理

1.1 Docker介绍

Docker 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。是在 GitHub 上开发的 Moby 开源项目的一部分。

1.1.1 容器

容器(Coninter)是一种在单个系统上提供多个隔离的系统环境的技术。

1.1.1.1 容器历史

容器最早提出于1979年的Unix chroot。它是一个 UNIX 操作系统上的系统调用,用于将一个进程及其子进程的根目录改变到文件系统中的一个新位置,让这些进程只能访问到该目录。这个功能的想法是为每个进程提供独立的磁盘空间。
随后有2000 — FreeBSD Jails、2001 — Linux VServer、2004 — Solaris Containers、2005 — OpenVZ、2006 — Process Containers、2007 — Control Groups、2008 — LXC、2011 — Warden、2013 — LMCTFY、2013 — Docker、2014 — Rocket、2016 — Windows Containers。

1.1.1.2 容器原理

Virtual Machines Vs Containers(图片来自: Docker Inc.)Linux上的容器是一个可以在单个Linux主机上提供多个相互隔离的操作系统级虚拟技术。与虚拟机技术(Virtual Machine)相比,容器(Container)不需要运行专门的访客(Guest)操作系统,也不需要模拟指令集。容器共享宿主机(Host)的操作系统内核,并使用访客操作系统的系统库来提供所需的功能。因此容器常常要比虚拟机快很多,且更加灵活和低消耗。

容器借助 Linux 内核的 Namespaces、Apparmor、SELinux 情景模式(profile)、chroot 和
CGroup 等功能来提供类似于虚拟机的隔离环境。Linux
的安全模块可以确保正确地控制容器对宿主机和内核的访问,从而避免各种入侵活动。此外,在宿主机上可以运行不同的 Linux
发行版,只要它们运行在同样的 CPU 架构下。

简单来说,容器提供的是一种基于各种 Linux 发行版创建容器镜像的方法、一套管理容器生命周期的 API、与该 API
交互的客户端工具、保存快照的功能、在宿主机之间迁移容器实例的能力,等等。

1.1.2 Docker

1.1.2.1 Docker历史

2013年,dotCloud为寻求新的突破,更名为Docker,并发布了开源的容器Docker。Docker 引入了一整套容器管理的生态系统,包括分层的镜像模型,容器注册库,友好的 Rest API等。
2016 年微软也在 Windows 上提供了容器的支持,Docker 可以以原生方式运行在 Windows 上,而不是需要使用 Linux 虚拟机。

1.1.2.2 Docker原理

核心技术有:

  1. namespace:隔离其运行环境,使得容器中的进程看起来就像一个独立环境中运行一样。
  2. cgroup:为系统中所运行任务(进程)的用户定义组群分配资源。可以监控管理员配置的 cgroup,拒绝 cgroup 访问某些资源,甚至在运行的系统中动态配置 cgroup。主要功能包括了:限制资源使用、优先级控制、审计计费、 挂起和恢复进程
  3. 守护进程:直接与主操作系统进行通信、为各个Docker容器分配资源、将容器与主操作系统隔离,并将各个容器互相隔离。

Docker结构
Docker的基础结构有(从底层到上层)

  1. 基础设施:即各种硬件设施和配套的底层软件
  2. 主操作系统:有Linux、Windows、MacOS等。用于支持Docker运行
  3. 各种依赖:打包在Docker镜像(Image)之中,容器(Container)依赖于镜像创建
  4. 应用:应用的源代码与依赖项打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同镜像之间相互隔离。

1.2 Hadoop简介

Hadoop更注重代码向数据迁移,有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上,且它提供高吞吐量(high throughput)。

1.2.1 Hadoop历史

2003-2004年,Google公布了部分GFS和MapReduce思想的细节,受此启发的Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制。
2005年,Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。
2006年2月被分离出来,成为一套完整独立的软件,起名为Hadoop。
2008年4月— 赢得世界最快1TB数据排序在900个节点上用时209秒。
2011年12月27日–1.0.0版本释出。标志着Hadoop已经初具生产规模。

1.2.2 Hadoop架构

Hadoop分为两个模块,一个是文件系统核心模块(HDFS),另一个是数据计算核心模块(MapReduce)。

1.2.2.1 Hadoop的文件系统核心模块

HDFS采用主从架构(master/slaves)。一个HDFS集群由一个主节点(Namenode)和一定数量的从节点(Datanodes)组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。Datanode是一个节点一个,负责节点上的存储。
从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作。Datanode负责处理文件系统客户端的读写请求,在Namenode的统一调度下进行数据块的创建、删除和复制。
secondaryNameNode用于hadoop当中元数据信息的辅助管理。
HDFS架构(来源Hadoop手册)

1.2.2.2 Hadoop的数据计算核心模块

Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。
一个作业将数据集分割为独立的数据块,由Map任务以并行的方式处理数据。
MapReduce框架由一个单独的主作业控制(master JobTracker )和每个集群节点一个从任务控制(slave TaskTracke)共同组成。master负责调度构成一个作业的所有任务,这些任务分布在不同的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由master指派的任务。
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分
NodeManager:负责执行主节点ResourceManager分配的任务

1.2.3 Hadoop运行流程

Hadoop的MapReduce流程MapReduce分3个阶段执行,分别是映射(Map)阶段、洗牌(Shuffle)阶段、归约(Reduce)阶段。
MapReduce使用操纵键值对来处理数据
Map: ( K 1 , V 1 ) → l i s t ( K 2 , V 2 ) ) (K_{1}, V_{1})→list(K_{2}, V_{2})) (K1,V1)list(K2,V2))
Reduce: ( K 1 , l i s t ( V 2 ) ) → l i s t ( K 3 , V 3 ) ) (K_{1}, list(V_{2}))→list(K_{3}, V_{3})) (K1,list(V2))list(K3,V3))
Shuffle表示数据进行整理(核心机制:对数据进行分区,排序,缓存)即拉取partition,merge,sort,combine
一个MapReduce的工作过程是:

  1. 向集群服务器发送Map与Reduce任务。
  2. 管理数据传递。
  3. 本地计算,减少网络通数据通信。
  4. 完成任务后,收集数据,将合适的结果返回给Master服务器

2. 环境搭建

Hadoop有三种模式(单机模式,伪分布模式,全分布模式)。本文选用全分布模式搭建集群。

2.1 本机环境

本文基于的环境是Ubuntu18.04 (amd64)
配置如下:

配件 名称
CPU Intel Core-I7 8750H @2.2GHz
内存 16 GB
硬盘 160G SSD
显卡 Nvidia Geforce GTX1060(6G) (有无无影响)

2.2 物料说明

宿主机:Ubuntu18.04
Docker
JDK
Hadoop
Spark
操作路径为/home/

2.3 安装基本环境

  1. 安装Docker容器
# 删除可能有的旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新apt
sudo apt-get update
# 让apt支持https
sudo apt-get install apt-transport-https  ca-certificates  curl  gnupg-agent  software-properties-common
# 安装官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
// 阿里云
// curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
// sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 安装docker-ce
sudo apt-get update
sudo apt-get install docker-ce
sudo apt-get install docker-ce-cli
sudo apt-get install containerd.io
  1. 在Docker中拉取Ubuntu18.04镜像并创建容器
# 拉取ubuntu 18.04镜像
sudo docker pull ubuntu:18.04
# 查找拉取的镜像id
sudo docker images
# 启动一个master容器
sudo docker run -dit -h master <image-id>
# 查找创建的容器id
sudo docker ps
# 进入容器
sudo docker exec -it <container-id> /bin/bash

注:<container-id>和<container-id>需要换成对应的id,及生成的hash,如不清楚,可以查看附录1中查看Docker中image、container的命令。
绑定端口

sudo docker run -dit -h master -p 9870:9870 -p 8080:8080 -p 4040:4040 -p 8088:8088 -p 8099:8099 <image-id>
  1. 配置master容器
    首先要确认自己已经进入到master容器中
    已经入master节点正确的应该是上面第二行呈现的样子。如果不正确,请检测前面运行是否正确,找不到问题,就"sudo docker ps -a"查看已创建的Container,然后"sudo docker start <container id>",最后"sudo docker exec -it <container-id> /bin/bash"
    确认完后,开始配置master容器
# 更新apt
apt-get update
apt-get pagrade
# 安装net-tools
apt-get install net-tools
# 安装vim
apt-get install vim
# 安装ssh,配置无密码登录
apt-get install openssh-server
ssh-keygen -t rsa -P ''
回车
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 查询是否开启ssh
/etc/init.d/ssh status
# 开启ssh
/etc/init.d/ssh start
# 配置开机启动
vim /etc/rc.local
# 在exit 0语句前加入
/etc/init.d/ssh start
  1. 安装java
    这里使用wget下载java,如果本文给出的url无法正确获取到java文件,请自行查找最新的url予以替换,或直接使用“apt install default-jre”安装开源版本。
#安装wget库
apt install wget
#进入usr/local/src目录下
cd /usr/local/src
#获取JDK1.8包
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
#解压jdk-8u161-linux-x64.tar.gz
tar -zxvf jdk-8u131-linux-x64.tar.gz
#重命名为JDK8
mv jdk1.8.0_131 jdk8
#配置环境变量
vim  ~/.bashrc #打开环境变量配置文件
#增加下面内容到该文件最后
export JAVA_HOME=/usr/local/src/jdk8
export PATH=$JAVA_HOME/bin:$PATH  
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
#使环境生效
source ~/.bashrc
  1. 安装Hadoop
# 安装hadoop
wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
# 解压
tar -zxvf hadoop-3.2.0.tar.gz
# 重命名
mv  hadoop-3.2.0 hadoop
# 添加环境变量
sudo vim ~/.bashrc
# 添加以下代码
# hadoop
export HADOOP_HOME=/home/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 生效
sudo source ~/.bashrc
  1. 配置分布式hadoop
# 当前路径为/home/hadoop/
# 创建三个文件夹备用
mkdir -p hdfs/{data,name,tmp}

修改配置

cd /home/hadoop/etc/hadoop

以下修改XXX,均使用“vim XXX”方式进行编写,不再赘述
修改hadoop-env.sh

# 在文中只改这一行
export JAVA_HOME=/home/bigdata/jdk1.8

修改core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/bigdata/hdfs/tmp</value>
        </property>
</configuration>

修改hdfs-site.xml

<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/home/bigdata/hadoop/hdfs/name</value>
        </property>
        <property>
                <name>dfs.http.address</name>
                <value>0.0.0.0:50070</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/home/bigdata/hdfs/data</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
</configuration>

修改mapred-site.xml,注意这里的目录一定要和上面定义的目录相统一,否则DataNode会崩溃,无法集群

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
         <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>
</configuration>

修改yarn-site.xml

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

创建workers文件(Hadoop3将slaves文件改名为workers了)

touch workers
vim workers
# 添加:
master
slave01
slave02
  1. 格式化HDFS,这里只需要运行一次,如果运行多了需要删除工作目录下HDFS文件,然后重新格式化,详情自行搜索
cd /home/hadoop/bin
# 该命令只需运行一次
hdfs namenode -format

修改运行文件

cd /home/hadoop/sbin
# 在start-dfs.sh,stop-dfs.sh文件顶部加入以下配置
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

# 在start-yarn.sh,stop-yarn.sh文件顶部加入以下配置
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
  1. 安装Scala
wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
tar -zxvf scala-2.11.8.tgz
mv scala-2.11.8 scala
# 添加环境变量
vim ~/.bashrc
# 添加以下代码
# scala
export SCALA_HOME=/home/scala
export PATH=$PATH:$SCALA_HOME/bin
# 生效
source ~/.bashrc
  1. 安装Spark
wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.3/spark-2.4.3-bin-hadoop2.7.tgz
tar -zxvf spark-2.4.3-bin-hadoop2.7.tgz
mv spark-2.4.3-bin-hadoop2.7 spark

# 添加环境变量
vim ~/.bashrc
# 添加以下代码
# spark
export SPARK_HOME=/home/spark
export PATH=$PATH:$SPARK_HOME/bin
export PATH=$PATH:$SPARK_HOME/sbin
# 生效
source ~/.bashrc
  1. 配置文件
cd /home/spark/conf
cp spark-env.sh.template spark-env.sh
# spark-env.sh添加以下代码
export JAVA_HOME=/home/jdk1.8
export HADOOP_HOME=/home/hadoop
export HADOOP_CONF_DIR=/home/hadoop/etc/hadoop
export SCALA_HOME=/home/scala
export SPARK_HOME=/home/spark
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8099
export SPARK_WORKER_CORES=3
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=5G
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_EXECUTOR_CORES=1
export SPARK_EXECUTOR_MEMORY=1G
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HADOOP_HOME/lib/native

cp slaves.template slaves
#  slaves添加以下代码
master
slave01
slave02
  1. 提交master并克隆出slaves
# 退出容器
exit
# 提交容器更改
sudo docker commit <container-id> ubuntu-hadoop-spark:1.0
# 用刚刚提交的ubuntu-hadoop-spark:1.0创建两个slave
sudo docker run -dit -h slave01 <image-id>
sudo docker run -dit -h slave02 <image-id>
# 运行两个slave
sudo docker exec -it slave01 /bin/bash
sudo docker exec -it slave02 /bin/bash

到这里之后就配置好一个master两个worker了
13. hosts配置
分别进入master、slave01和slave02,用ifconfig命令找出相应的ip,并分别修改hosts文件

vim /etc/hosts
# 添加
xxx.xxx.xxx.xx1   master 
xxx.xxx.xxx.xx2   slave01
xxx.xxx.xxx.xx3   slave02
  1. 启动

分别进入三个容器,启动命令相同

# 启动hadoop
cd /home/hadoop/sbin
./start-dfs.sh
./start-yarn.sh
# 启动spark
cd /home/spark/sbin
./start-all/sh
  1. 使用 JPS检测启动
    如果集群不成功,检测路径等问题,NameNode一会就消失是format的问题,需要重新格式化
    两个管理网页
    http://(master ip):8088/
    http://(master ip):50070/

2.4 测试环境

  1. 首先查看是否运行成功
    这里是start-all.sh的样子,也可以分别启动hdfs和yern在这里插入图片描述在这里插入图片描述
    这样是启动成功了的
  2. 创建目录
hadoop fs -mkdir /input

然后就能看见创建的目录了
在这里插入图片描述3. 放入文件
我这里就用hadoop中的LICENSE文件做count了

hadoop fs -put /home/hadoop/LICENSE.txt /input
  1. 放入wordcount程序
hadoop jar /home/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /input /output

注意与自己的路径相符和文件名,我这里是3.2.0.你那里可能版本不一样
4. 运行wordcount

wordcount /input /output

结果:
在这里插入图片描述6. 将结果下载下来
这里的ip请填master对应ip,在下载时会自动跳到slave上,请修改成正确的ip
在这里插入图片描述在这里插入图片描述在这里插入图片描述

3. 总结

Docker是一个非常好用的开源容器,它节约了开发、维护、测试时对环境的配置问题,并且很好的解决了虚拟机效率不高的问题。本文主要对它的历史和架构做了简单描述,通过在Docker上创建一个Image,并在上搭建了全分布式Hadoop。Hadoop是运用广泛的开源分布式计算平台,本文主要介绍了它的历史和架构,并通过搭建它的环境和用一个例子来简要概述了它的流程。为我们进一步研究分布式并行算法和处理分析大数据提供了平台。

附录1 Docker常用命令

# 重启docker服务 
sudo service docker restart
# 关闭docker服务 
sudo service docker stop
# 开启docker服务
sudo service docker start

# 拉取ubuntu 18.04镜像
sudo docker pull ubuntu:18.04
# docker create 命令为指定的镜像(image)添加了一个可读写层,构成了一个新的容器。注意,这个容器并没有运行。 
sudo docker create <image-id>
# docker run = docker create + docker start
sudo docker run  -p 宿主机端口:docker端口 <image-id> 
# 后台运行
sudo docker run -dit <image-id>
# 运行直接进入bash,退出后后台不运行
sudo docker run -it <image-id> /bin/bash 
# 查看本地镜像
sudo docker images
# 删除镜像
sudo docker rmi <image-id>

# docker start命令为容器文件系统创建了一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间。 
docker start <container-id>
# 查看当前运行的容器
docker ps
# 查询存在的容器
docker ps -a
# 删除容器
docker rm  <container-id>
# 强制删除容器
docker rm -f  <container-id>
# 不能够删除一个正在运行的容器,会报错。需要先停止容器。
# 进入容器内部
sudo docker exec -it (container name or id) /bin/bash
# 退出容器
exit
# 容器重命名
docker container rename <container-id> newname

# 提交
docker commit <container-id> <image-name>

注:文中所给<container-id>、<image-id>都要用对应的id进行替换,不要直接照抄。

附页2 Hadoop常见命令

1、启动hadoop所有进程
start-all.sh等价于start-dfs.sh + start-yarn.sh
但是一般不推荐使用start-all.sh(因为开源框架中内部命令启动有很多问题)。
2、单进程启动。
sbin/start-dfs.sh
---------------
    sbin/hadoop-daemons.sh --config .. --hostname .. start namenode ...
    sbin/hadoop-daemons.sh --config .. --hostname .. start datanode ...
    sbin/hadoop-daemons.sh --config .. --hostname .. start sescondarynamenode ...
    sbin/hadoop-daemons.sh --config .. --hostname .. start zkfc ...         //
sbin/start-yarn.sh
--------------  
    libexec/yarn-config.sh
    sbin/yarn-daemon.sh --config $YARN_CONF_DIR  start resourcemanager
    sbin/yarn-daemons.sh  --config $YARN_CONF_DIR  start nodemanager
3、常用命令
    1、查看指定目录下内容
   hdfs dfs –ls [文件目录]
    hdfs dfs -ls -R   /                   //显式目录结构
    eg: hdfs dfs –ls /user/wangkai.pt
   2、打开某个已存在文件
    hdfs dfs –cat [file_path]
   eg:hdfs dfs -cat /user/wangkai.pt/data.txt
  3、将本地文件存储至hadoop
     hdfs dfs –put [本地地址] [hadoop目录]
     hdfs dfs –put /home/t/file.txt  /user/t  
  4、将本地文件夹存储至hadoop
    hdfs dfs –put [本地目录] [hadoop目录]
    hdfs dfs –put /home/t/dir_name /user/t
   (dir_name是文件夹名)
  5、将hadoop上某个文件down至本地已有目录下
     hadoop dfs -get [文件目录] [本地目录]
     hadoop dfs –get /user/t/ok.txt /home/t
  6、删除hadoop上指定文件
     hdfs  dfs –rm [文件地址]
     hdfs dfs –rm /user/t/ok.txt
  7、删除hadoop上指定文件夹(包含子目录等)
     hdfs dfs –rm [目录地址]
     hdfs dfs –rmr /user/t
  8、在hadoop指定目录内创建新目录
      hdfs dfs –mkdir /user/t
      hdfs  dfs -mkdir - p /user/centos/hadoop
  9、在hadoop指定目录下新建一个空文件
    使用touchz命令:
    hdfs dfs  -touchz  /user/new.txt
  10、将hadoop上某个文件重命名
   使用mv命令:
   hdfs dfs –mv  /user/test.txt  /user/ok.txt   (将test.txt重命名为ok.txt)
  11、将hadoop指定目录下所有内容保存为一个文件,同时down至本地
   hdfs dfs –getmerge /user /home/t
  12、将正在运行的hadoop作业kill掉
   hadoop job –kill  [job-id]
  13.查看帮助
  hdfs dfs -help        

参考文献(章)

[1] The 4 Characteristics of Big Data
[2] Ubuntu18.04 + docker + hadoop + spark 搭建分布式集群
[3] Linux 容器技术史话:从 chroot 到未来
[4] Hadoop大数据平台的搭建 崔文斌等 山东农业大学学报2013, 44( 4 ): 550-555
[5] docker底层原理介绍
[6] Hadoop百度百科
[7] Hadoop官网手册
[8] Hadoop的shuffle原理和过程图解
[9] Hadoop常用命令总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04+Docker+Hadoop+Spark分布式集群搭建 的相关文章

  • 将 CSV 转换为序列文件

    我有一个 CSV 文件 我想将其转换为 SequenceFile 我最终将使用它来创建 NamedVectors 以在聚类作业中使用 我一直在使用 seqdirectory 命令尝试创建 SequenceFile 然后使用 nv 选项将该输
  • Sqoop - 绑定到 YARN 队列

    因此 使用 MapReduce v2 您可以使用绑定到某些 YARN 队列来管理资源和优先级 基本上通过使用 hadoop jar xyz jar D mapreduce job queuename QUEUE1 input output
  • HDFS 中的文件数量与块数量

    我正在运行单节点 hadoop 环境 当我跑的时候 hadoop fsck user root mydatadir block 我真的对它给出的输出感到困惑 Status HEALTHY Total size 998562090 B Tot
  • Flume将数据从MySQL迁移到Hadoop

    请分享您的想法 需求是将MySQL db中的数据迁移到Hadoop HBase进行分析 数据应该实时或接近实时地迁移 Flume可以支持这个吗 有什么更好的方法 据我了解 Flume 并不是为此而设计的 Flume 基本上用于读取日志 如数
  • 在 Windows 7 64 位中删除 Spark 临时目录时出现异常

    我正在尝试在 Windows 7 64 位中运行 Spark 作业的单元测试 我有 HADOOP HOME D winutils winutils path D winutils bin winutils exe 我运行了以下命令 winu
  • Hadoop 推测任务执行

    在Google的MapReduce论文中 他们有一个备份任务 我认为这与Hadoop中的推测任务是一样的 推测任务是如何实现的 当我启动一项推测任务时 该任务是从一开始就作为较旧且缓慢的任务开始 还是从较旧的任务到达的位置开始 如果是这样
  • 无法在 Hadoop Map-Reduce 作业中加载 OpenNLP 句子模型

    我正在尝试将 OpenNLP 集成到 Hadoop 上的 Map Reduce 作业中 从一些基本的句子分割开始 在地图函数中 运行以下代码 public AnalysisFile analyze String content InputS
  • Apache hadoop 版本 2.0 与 0.23

    Hadoop 的版本和发行版太多 让我很困惑 我有几个问题 Apache Hadoop 1 x 是从 0 20 205 开始的 Apache Hadoop 2 0 是从 0 22 还是 0 23 开始 根据这个blogpost http b
  • hive 添加分区语句忽略前导零

    我在 hdfs 上有文件夹 user test year 2016 month 04 dt 25 000000 0 需要将上面的分区路径添加到test table 命令 ALTER TABLE test ADD IF NOT EXISTS
  • 将 Spark 添加到 Oozie 共享库

    默认情况下 Oozie 共享 lib 目录提供 Hive Pig 和 Map Reduce 的库 如果我想在 Oozie 上运行 Spark 作业 最好将 Spark lib jar 添加到 Oozie 的共享库 而不是将它们复制到应用程序
  • 将 Apache Zeppelin 连接到 Hive

    我尝试将我的 apache zeppelin 与我的 hive 元存储连接起来 我使用 zeppelin 0 7 3 所以没有 hive 解释器 只有 jdbc 我已将 hive site xml 复制到 zeppelin conf 文件夹
  • 公平调度器和容量调度器有什么区别?

    我是 Hadoop 世界的新手 想了解公平调度程序和容量调度程序之间的区别 另外我们什么时候应该使用每一个 请简单地回答一下 因为我在网上读了很多东西 但从中得到的不多 公平调度是一种为作业分配资源的方法 使得所有作业随着时间的推移平均获得
  • 适用于 Python 3.x 的 Hive 客户端

    是否可以使用 Python 3 x 连接到 hadoop 并运行 hive 查询 我正在使用Python 3 4 1 我发现可以按照这里写的方式完成 https cwiki apache org confluence display Hiv
  • 覆盖hadoop中的log4j.properties

    如何覆盖hadoop中的默认log4j properties 如果我设置 hadoop root logger WARN console 它不会在控制台上打印日志 而我想要的是它不应该在日志文件中打印 INFO 我在 jar 中添加了一个
  • 与文件名中的冒号“:”作斗争

    我有以下代码 用于加载大量 csv gz 并将它们转储到其他文件夹中 并将源文件名作为一列 object DailyMerger extends App def allFiles path File List File val parts
  • 如何有效地将数据从 Kafka 移动到 Impala 表?

    以下是当前流程的步骤 Flafka http blog cloudera com blog 2014 11 flafka apache flume meets apache kafka for event processing 将日志写入
  • 全部配对图表上的所有路径

    这可能是一个没有最佳解决方案的问题 假设我有一个有向图 不知道它是否有循环 循环检测将是这个问题的方面之一 给定一组顶点 可能是数百万个顶点 我需要计算给定图的所有唯一对之间的所有不同路径 没有重复顶点的路径 我该如何应对这种情况 让我们看
  • ETL informatica 大数据版(非云版)可以连接到 Cloudera Impala 吗?

    我们正在尝试在 Informatica 大数据版本 不是云版本 上进行概念验证 我发现我们可能能够使用 HDFS Hive 作为源和目标 但我的问题是 Informatica 是否连接到 Cloudera Impala 如果是这样 我们是否
  • AWS EMR 引导操作为 sudo

    我需要更新 etc hosts适用于我的 EMR 集群 EMR AMI 4 3 中的所有实例 整个脚本无非就是 bin bash echo e ip1 uri1 gt gt etc hosts echo e ip2 uri2 gt gt e
  • Hadoop 超立方体

    嘿 我正在启动一个基于 hadoop 的超立方体 具有灵活的维度数 有人知道这方面现有的方法吗 我刚刚发现PigOLAP草图 http wiki apache org pig PigOLAPSketch 但没有代码可以使用它 另一种方法是Z

随机推荐

  • 前端例程20221012:宣纸材质背景

    演示 原理 使用 background image 加载材质图片 材质图片使用半透明的灰度图像 使用 background color 进行染色 代码
  • 在IDEA集成Github

    在IDEA集成Github 在IDEA中设置Git 在File gt Setting gt Version Control gt Git gt Path to Git executable选择你的git安装后的git exe文件 然后点击T
  • OC_YYModel字典转模型的几种详细用法

    OC YYModel字典转模型的几种详细用法 目录 JSON转字符串 普通字典转模型 模型属性有自定义的模型YYUSer 属性有数组 数组里自定义模型 还有字典和集合 字典里的key与模型里的属性名不一致 常用的几个方法 json转模型 i
  • 以太坊分片Sharding FAQ

    简介 目前 在所有的区块链协议中每个节点存储所有的状态 账户余额 合约代码和存储等等 并且处理所有的交易 这提供了大量的安全性 但极大的限制了可扩展性 区块链不能处理比一个单节点更多的交易 很大程度上因为这个原因 比特币被限制在每秒3 7笔
  • 【Linux篇】第八篇——Linux下的进程控制(进程创建+进程终止+进程等待+进程程序替换+简易shell的实现)

    这篇博客就要开始聊一聊进程控制相关的内容了 这部分的内容十分的丰富且十分的重要 学好这一块内容是非常有必要的 目录 进程创建 fork函数 写时拷贝 进程终止 进程退出的三种场景 进程常见的退出方法 进程等待 进程等待的方法 wait方法
  • Unity 实用小技巧合集

    Unity小技巧介绍 一 Unity小技巧介绍 二 Unity小技巧介绍 三 Unity小技巧介绍 四
  • 用canvas绘制微信小程序海报页面并保存相册-适用微信原生

    微信小程序绘制海报并保存相册 tip 代码中使用的是uni的api 如果使用原生微信小程序开发 可以把uni更换成wx使用 文章目录 微信小程序绘制海报并保存相册 前言 一 分析需求 二 准备数据 三 编码开始 html部分 解析 js部分
  • Python中使用xpath获取select option的每一行的text和value

    原数据内容如下
  • 设计模式--适配器模式

    适配器模式属于结构型模式 基本原理 根据不同的需求 使用一个适配器去寻找应对的方法 主要流程 1 创建解决方法的类 2 创建一个适配器 根据不同需求对应相应的解决方法 3 使用一个类去分配适配器 注意 适配器不是在详细设计时添加的 而是解决
  • C语言本身是用什么语言写的?

    先说结论 C语言由B语言编写 B语言是由A语言编写 A B C 好了 不开玩笑了 既然你能提出这个级别的问题 说明你应该学过C 既然你能提出这个级别的问题 说明你没学过编译原理 或者全还给老师了 容我不厚道一下下 你所谓的 C语言 准确来说
  • 基于 Flink CDC 高效构建入湖通道

    本文整理自阿里云 Flink 数据通道负责人 Flink CDC 开源社区负责人 Apache Flink PMC Member Committer 徐榜江 雪尽 在 Streaming Lakehouse Meetup 的分享 内容主要分
  • 免费虚拟局域网(VLAN)组建教程

    虚拟局域网 VLAN 是一组逻辑上的设备和用户 这些设备和用户并不受物理位置的限制 可以根据功能 部门及应用等因素将它们组织起来 相互之间的通信就好像它们在同一个网段中一样 由此得名虚拟局域网 虚拟局域网在日常的工作生活中 起着非常大的作用
  • superset的docker安装配置和汉化

    1 docker拉去superset镜像 docker pull amancevice superset 2 启动容器 1 启动容器 docker run d p 8188 8088 name superset v opt docker s
  • 【Latex排版】使用Latex 排版过程中的那些一二三问题汇总

    排版错误问题总结 1 在 maketitle 位置处报错 Missing inserted 2 添加参考文献 编译后显示错误 并且pdf中引用文献处为问号 持续更新问题 近期用Latex整理期刊论文时遇到了不少问题 现把遇到的问题及最终解决
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • React 深度学习:Fiber-ReactFiberLazyComponent

    ReactLazyComponent 包 packages shared ReactLazyComponent js Copyright c Facebook Inc and its affiliates This source code
  • 深入理解线程与并发

    文章目录 计算机硬件与并发 线程与Thread类 线程的特点 线程的优先级 线程控制 总结 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 Java知识介绍 适用于 Java初学者 希望作者的文章能对你有所帮助
  • go 语言学习笔记 0001 --> iota

    go语言中预置了一个预定义常量 iota 这个东西有个很奇怪的特性 会根据 const 关键字改变值 默认的 iota在const出现的时候会初始化为0 而后不断递加1 直到出现第二个const关键字 const countagn1 2 l
  • java持久层框架mybatis如何防止sql注入

    sql注入大家都不陌生 是一种常见的攻击方式 攻击者在界面的表单信息或url上输入一些奇怪的sql片段 例如 or 1 1 这样的语句 有可能入侵参数校验不足的应用程序 所以在我们的应用中需要做一些工作 来防备这样的攻击方式 在一些安全性很
  • Ubuntu18.04+Docker+Hadoop+Spark分布式集群搭建

    题前记 因为课程需求 下面将搭建过程用学术论文的格式写 其实我并不想写的 没办法 学习作业嘛QAQ 我的联系方式 630056108 文章目录 Docker上的Hadoop大数据平台搭建与测试 1 简介与原理 1 1 Docker介绍 1