滦南县建设局网站,2017网站设计趋势,湖南长沙发掘了3座西汉时期墓葬,wordpress中文问答模块紧接着上一篇博客#xff1a;Hadoop安装笔记1#xff1a;
Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2#xff1a;离线数据处理-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135… 紧接着上一篇博客Hadoop安装笔记1
Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2离线数据处理-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135236893?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135236893%22%2C%22source%22%3A%22Zhiyilang%22%7D
敲命令麻烦为了方便复制就打开了虚拟机跟主机直接的“复制粘贴”功能。选择VirtualBox的“设备”》“共享粘贴板”》“双向”。选择后需要重启系统才生效哈
为了完成从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gzapache-zookeeper-3.5.7-bin.tar.gz复制到容器Master中的/opt/software路径中若路径不存在则需新建的任务。
在进行接下来的配置之前我们还需要安装一个Docker
一、安装Docker
1、使用APT 安装doker 先安装依赖
sudo apt-get install docker接下来就准备开始安装docker了。先打开命令行工具ctrlaltF4。
类似windows的bat
输入命令
sudo apt-get install -y docker.io
系统就会开始安装docker安装过程结果如下图: 启动docker输入命令
systemctl start docker查看docker版本输入命令
docker version
停止docker输入命令
systemctl stop docker
查看docker状态输入命令
systemctl status docker 查看docker状态后就会进入到less编辑器的状态可以按Q键退出。退出后如下图又恢复到了命令行的样子。 2、创建Docker容器
如何搭建一个docker容器 搭建docker容器 概述 Docker 是一个开源的应用容器引擎基于 Go 语言 并遵从 Apache2.0 协议开源让我们开发者可以打包他们的应用以及依赖包到一个可移植的镜像中然后发布到任何流行的 Linux或Windows操作系统的机器上也可以实现虚拟化。容器是完全使用沙箱机制相互之间不会有任何接口。 Docker 架构是在使用客户端-服务器 (C/S) 架构模式使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。 Docker 的优点Docker 是一个用于开发交付和运行应用程序的开放平台。能够将应用程序与基础架构分开从而可以快速交付软件。借助 Docker可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付测试和部署代码可以大大减少编写代码和在生产环境中运行代码之间的延迟。 Docker的应用场景 1. Web 应用的自动化打包和发布。 2. 自动化测试和持续集成、发布。 3. 在服务型环境中部署和调整数据库或其他的后台应用。 4. 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。搭建docker
前 言
本案例适用开发环境
Windows开发环境Windows 11 64bit
Linux开发环境Ubuntu 18.04. 64bit
虚拟机Oracle VM VirtualBox下载 1、使用APT 安装doker 先安装依赖 apt-get updateapt-get -y install apt-transport-https ca-certificates curl software-properties-common sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release 2、 安装 GPG 证书 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 法一添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg法二添加Docker镜像GPG密钥 没有安装yum,先安装一下啊~ 根据所需继续安装 apt install yum-utils 设置软件源命令以下任选一种即可 清华大学 (推荐)
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
阿里 (推荐)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
官方 (不推荐)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo查看docker源中的docker版本命令可以直接跳过到3、写入软件源信息 yum list docker-ce --showduplicates | sort -r 3、写入软件源信息 sudo add-apt-repository deb [archamd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable 4、更新并安装 Docker CE apt-get -y update apt-get -y install docker-ce 5、设置Docker镜像加速源 (默认的很慢) vi /etc/docker/daemon.json# 在文件里输入 :set paste 后输入 i 将下面二点内容粘贴进去{ # 这个可以切换成 Ali的更快这么切换你登陆阿里云控制台就可以看到 # 或者百度.... registry-mirrors: [http://hub-mirror.c.163.com]}# 然后 刷新配置和重启dockersystemctl daemon-reloadsystemctl restart docker.service 国内加速地址有 Docker中国区官方镜像 https://registry.docker-cn.com 网易 http://hub-mirror.c.163.com ustc https://docker.mirrors.ustc.edu.cn 中国科技大学 https://docker.mirrors.ustc.edu.cn 阿里云容器 服务 https://cr.console.aliyun.com/ 首页点击“创建我的容器镜像” 得到一个专属的镜像加速地址类似于“https://xxxx.mirror.aliyuncs.com” 二、安装Docker Compose
1、使用加速源下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-uname -s-uname -m /usr/local/bin/docker-compose
修改目录权限可执行 chmod x /usr/local/bin/docker-compose
2、设置Docker Stable存储库
echo deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null验证Docker
执行如下命令通过运行Docker自带的hello-world镜像来验证是否已安装成功。程序运行后输出如下内容则表示Docker安装成功。 sudo docker run hello-world 2.2 搭建本地镜像仓库
Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营的公共Registry叫做Docker Hub用户可在Docker Hub注册账号分享并保存自己的镜像。Docker公司的公共镜像仓库提供了庞大的镜像集合供用户使用。一个Docker Registry中可包含多个仓库每个仓库可包含多个标签(Tag)每个标签对应一个镜像。通常一个仓库会包含同一个软件不同版本的镜像而标签对应该软件的各个版本。用户可通过“[仓库名:标签]”的格式来指定具体是某个软件某个版本的镜像。如未给出标签将以[latest]作为默认标签。
本次使用的镜像是registry:2请执行如下命令自动下载并启动:
mkdir -p /home/tronlong/docker/myregistry
sudo docker run -d -p 5000:5000 -v /home/tronlong/docker/myregistry:/var/lib/registry registry:2 参数说明
-d后台启动容器。
-p将容器的5000端口映射至Ubuntu的5000端口5000是registry服务端口。
-v将容器/var/lib/registry目录映射至Ubuntu的/home/tronlong/docker/myregistry用于存放镜像数据。 请执行如下命令查看容器是否已启动出现如下内容说明容器已正常启动。 sudo docker ps 由于刚建立运行故里面无任何镜像内容。至此Docker环境安装完成。
3、构建镜像
请在Ubuntu上新建工作目录/home/tronlong/docker/dockerfile/并将产品资料“4-软件资料\Linux\Filesystem\docker\”目录下的文件系统压缩包和产品资料“4-软件资料\Demo\base-demos\led_flash\bin\”目录下的可执行文件拷贝至Ubuntu共享目录下再执行如下命令拷贝至Docker工作目录。 mkdir /home/tronlong/docker/dockerfile
cp /mnt/hgfs/SharedFolders/led_flash /home/tronlong/docker/dockerfile/
cp /mnt/hgfs/SharedFolders/rootfs-v1.2-gcbfe5f3.tar.gz /home/tronlong/docker/dockerfile/
一安装Docker
1、卸载之前的docker版本
若之前安装过docker需要先执行下面的命令卸载docker的旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin在Linux命令行界面中执行如下Shell命令注意当前登录用户名是hadoop
cd /opt/software
sudo mkdir jvm #创建/opt/software/jvm目录用来存放JDK文件
cd ~ #进入hadoop用户的主目录
cd Downloads #注意区分大小写字母刚才已经通过FTP软件把JDK安装包jdk-8u162-linux-x64.tar.gz上传到该目录下
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解压到/usr/lib/jvm目录下Shell 命令
上面使用了解压缩命令tar如果对Linux命令不熟悉可以参考常用的Linux命令用法。
JDK文件解压缩以后可以执行如下命令到/usr/lib/jvm目录查看一下 cd /usr/lib/jvm
ls Shell 命令
可以看到在/usr/lib/jvm目录下有个jdk1.8.0_162目录。 下面继续执行如下命令设置环境变量 cd ~
vim ~/.bashrc Shell 命令
上面命令使用vim编辑器查看vim编辑器使用方法打开了hadoop这个用户的环境变量配置文件请在这个文件的开头位置添加如下几行内容 export JAVA_HOME/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME${JAVA_HOME}/jre
export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH${JAVA_HOME}/bin:$PATH保存.bashrc文件并退出vim编辑器。然后继续执行如下命令让.bashrc文件的配置立即生效 source ~/.bashrc Shell 命令
这时可以使用如下命令查看是否安装成功 java -version Shell 命令
如果能够在屏幕上返回如下信息则说明安装成功 hadoopubuntu:~$ java -version
java version 1.8.0_162
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)至此就成功安装了Java环境。下面就可以进入Hadoop的安装。
安装 Hadoop3.1.3
Hadoop安装文件可以到Hadoop官网下载hadoop-3.1.3.tar.gz。 也可以直接点击这里从百度云盘下载软件提取码lnwl进入百度网盘后进入“软件”目录找到hadoop-3.1.3.tar.gz文件下载到本地。 我们选择将 Hadoop 安装至 /usr/local/ 中 sudo tar -zxf ~/下载/hadoop-3.1.3.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-3.1.3/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限 Shell 命令
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用成功则会显示 Hadoop 版本信息 cd /usr/local/hadoop
./bin/hadoop version Shell 命令 相对路径与绝对路径: 请务必注意命令中的相对路径与绝对路径本文后续出现的 ./bin/..../etc/... 等包含 ./ 的路径均为相对路径以 /usr/local/hadoop 为当前目录。例如在 /usr/local/hadoop 目录中执行 ./bin/hadoop version 等同于执行 /usr/local/hadoop/bin/hadoop version。可以将相对路径改成绝对路径来执行但如果你是在主文件夹 ~ 中执行 ./bin/hadoop version执行的会是 /home/hadoop/bin/hadoop version就不是我们所想要的了。
Hadoop单机配置(非分布式)
Hadoop 默认模式为非分布式模式本地模式无需进行其他配置即可运行。非分布式即单 Java 进程方便进行调试。
现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar 可以看到所有例子包括 wordcount、terasort、join、grep 等。
在此我们选择运行 grep 例子我们将 input 文件夹中的所有文件作为输入筛选当中符合正则表达式 dfs[a-z.] 的单词并统计出现的次数最后输出结果到 output 文件夹中。 cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input ./output dfs[a-z.]
cat ./output/* # 查看运行结果 Shell 命令
执行成功后如下所示输出了作业的相关信息输出的结果是符合正则的单词 dfsadmin 出现了1次
注意Hadoop 默认不会覆盖结果文件因此再次运行上面实例会提示出错需要先将 ./output 删除。 rm -r ./output Shell 命令
Hadoop伪分布式配置
Hadoop 可以在单节点上以伪分布式的方式运行Hadoop 进程以分离的 Java 进程来运行节点既作为 NameNode 也作为 DataNode同时读取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式每个配置以声明 property 的 name 和 value 的方式来实现。
修改配置文件 core-site.xml (通过 gedit 编辑会比较方便: gedit ./etc/hadoop/core-site.xml)将当中的 configuration
/configuration XML
修改为下面配置 configuration
property
namehadoop.tmp.dir/name
valuefile:/usr/local/hadoop/tmp/value
descriptionAbase for other temporary directories./description
/property
property
namefs.defaultFS/name
valuehdfs://localhost:9000/value
/property
/configuration XML
同样的修改配置文件 hdfs-site.xml configuration
property
namedfs.replication/name
value1/value
/property
property
namedfs.namenode.name.dir/name
valuefile:/usr/local/hadoop/tmp/dfs/name/value
/property
property
namedfs.datanode.data.dir/name
valuefile:/usr/local/hadoop/tmp/dfs/data/value
/property
/configuration XML
Hadoop配置文件说明:
Hadoop 的运行方式是由配置文件决定的运行 Hadoop 时会读取配置文件因此如果需要从伪分布式模式切换回非分布式模式需要删除 core-site.xml 中的配置项。
此外伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行官方教程如此不过若没有配置 hadoop.tmp.dir 参数则默认使用的临时目录为 /tmp/hadoo-hadoop而这个目录在重启时有可能被系统清理掉导致必须重新执行 format 才行。所以我们进行了设置同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir否则在接下来的步骤中可能会出错。 配置完成后执行 NameNode 的格式化: cd /usr/local/hadoop
./bin/hdfs namenode -format Shell 命令
成功的话会看到 successfully formatted 的提示具体返回信息类似如下 2020-01-08 15:31:31,560 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************STARTUP_MSG: Starting NameNode
STARTUP_MSG: host hadoop/127.0.1.1
STARTUP_MSG: args [-format]
STARTUP_MSG: version 3.1.3
*************************************************************/......
2020-01-08 15:31:35,677 INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name **has been successfully formatted**.
2020-01-08 15:31:35,700 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
2020-01-08 15:31:35,770 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 393 bytes saved in 0 seconds .
2020-01-08 15:31:35,810 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid 0
2020-01-08 15:31:35,816 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid 0 when meet shutdown.
2020-01-08 15:31:35,816 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop/127.0.1.1
*************************************************************/ 如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误则说明之前设置 JAVA_HOME 环境变量那边就没设置好请按教程先设置好 JAVA_HOME 变量否则后面的过程都是进行不下去的。如果已经按照前面教程在.bashrc文件中设置了JAVA_HOME还是出现 Error: JAVA_HOME is not set and could not be found. 的错误那么请到hadoop的安装目录修改配置文件“/usr/local/hadoop/etc/hadoop/hadoop-env.sh”在里面找到“export JAVA_HOME${JAVA_HOME}”这行然后把它修改成JAVA安装路径的具体地址比如“export JAVA_HOME/usr/lib/jvm/default-java”然后再次启动Hadoop。
接着开启 NameNode 和 DataNode 守护进程。 cd /usr/local/hadoop
./sbin/start-dfs.sh #start-dfs.sh是个完整的可执行文件中间没有空格 Shell 命令
若出现如下SSH提示输入yes即可。
启动时可能会出现如下 WARN 提示WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable WARN 提示可以忽略并不会影响正常使用。 启动 Hadoop 时提示 Could not resolve hostname:
如果启动 Hadoop 时遇到输出非常多“ssh: Could not resolve hostname xxx”的异常情况如下图所示
这个并不是 ssh 的问题可通过设置 Hadoop 环境变量来解决。首先按键盘的 ctrl c 中断启动然后在 ~/.bashrc 中增加如下两行内容设置过程与 JAVA_HOME 变量一样其中 HADOOP_HOME 为 Hadoop 的安装目录 export HADOOP_HOME/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR$HADOOP_HOME/lib/native Shell
保存后务必执行 source ~/.bashrc 使变量设置生效然后再次执行 ./sbin/start-dfs.sh 启动 Hadoop。 启动完成后可以通过命令 jps 来判断是否成功启动若成功启动则会列出如下进程: NameNode、DataNode 和 SecondaryNameNode如果 SecondaryNameNode 没有启动请运行 sbin/stop-dfs.sh 关闭进程然后再次尝试启动尝试。如果没有 NameNode 或 DataNode 那就是配置不成功请仔细检查之前步骤或通过查看启动日志排查原因。 Hadoop无法正常启动的解决方法: 一般可以查看启动日志来排查原因注意几点
启动时会提示形如 DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out其中 DBLab-XMU 对应你的机器名但其实启动日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中所以应该查看这个后缀为 .log 的文件每一次的启动日志都是追加在日志文件之后所以得拉到最后面看对比下记录的时间就知道了。一般出错的提示在最后面通常是写着 Fatal、Error、Warning 或者 Java Exception 的地方。可以在网上搜索一下出错信息看能否找到一些相关的解决方法。
此外若是 DataNode 没有启动可尝试如下的方法注意这会删除 HDFS 中原有的所有数据如果原有的数据很重要请不要这样做 # 针对 DataNode 没法启动的解决方法
cd /usr/local/hadoop
./sbin/stop-dfs.sh # 关闭
rm -r ./tmp # 删除 tmp 文件注意这会删除 HDFS 中原有的所有数据
./bin/hdfs namenode -format # 重新格式化 NameNode
./sbin/start-dfs.sh # 重启 Shell 命令 成功启动后可以访问 Web 界面 http://localhost:9870 查看 NameNode 和 Datanode 信息还可以在线查看 HDFS 中的文件。
运行Hadoop伪分布式实例
上面的单机模式grep 例子读取的是本地数据伪分布式读取的则是 HDFS 上的数据。要使用 HDFS首先需要在 HDFS 中创建用户目录 ./bin/hdfs dfs -mkdir -p /user/hadoop Shell 命令 注意: 教材《大数据技术原理与应用》的命令是以./bin/hadoop dfs开头的Shell命令方式实际上有三种shell命令方式。 1. hadoop fs 2. hadoop dfs 3. hdfs dfs
hadoop fs适用于任何不同的文件系统比如本地文件系统和HDFS文件系统 hadoop dfs只能适用于HDFS文件系统 hdfs dfs跟hadoop dfs的命令作用一样也只能适用于HDFS文件系统 接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户并且已创建相应的用户目录 /user/hadoop 因此在命令中就可以使用相对路径如 input其对应的绝对路径就是 /user/hadoop/input: ./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input Shell 命令
复制完成后可以通过如下命令查看文件列表 ./bin/hdfs dfs -ls input Shell 命令
伪分布式运行 MapReduce 作业的方式跟单机模式相同区别在于伪分布式读取的是HDFS中的文件可以将单机步骤中创建的本地 input 文件夹输出结果 output 文件夹都删掉来验证这一点。 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output dfs[a-z.] Shell 命令
查看运行结果的命令查看的是位于 HDFS 中的输出结果 ./bin/hdfs dfs -cat output/* Shell 命令
结果如下注意到刚才我们已经更改了配置文件所以运行结果不同。
我们也可以将运行结果取回到本地 rm -r ./output # 先删除本地的 output 文件夹如果存在
./bin/hdfs dfs -get output ./output # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/* Shell 命令
Hadoop 运行程序时输出目录不能存在否则会提示错误 org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists 因此若要再次执行需要执行如下命令删除 output 文件夹: ./bin/hdfs dfs -rm -r output # 删除 output 文件夹 Shell 命令 运行程序时输出目录不能存在: 运行 Hadoop 程序时为了防止覆盖结果程序指定的输出目录如 output不能存在否则会提示错误因此运行前需要先删除输出目录。在实际开发应用程序时可考虑在程序中加上如下代码能在每次运行时自动删除输出目录避免繁琐的命令行操作 Configuration conf new Configuration();
Job job new Job(conf);/* 删除输出目录 */
Path outputPath new Path(args[1]);
outputPath.getFileSystem(conf).delete(outputPath, true); Java
若要关闭 Hadoop则运行 ./sbin/stop-dfs.sh Shell 命令 注意: 下次启动 hadoop 时无需进行 NameNode 的初始化只需要运行 ./sbin/start-dfs.sh 就可以
安装Hadoop集群
在平时的学习中我们使用伪分布式就足够了。如果需要安装 Hadoop 集群请查看Hadoop集群安装配置教程Hadoop3.1.3。