hadoop伪分布式环境配置

容器使用

win10 docker下命令

docker run -tdi  -p 8088:8088  -p 9000:9000 -p 9864:9864 -p 9866:9866 -p 9867:9867 -p 9870:9870 -p 19888:19888 -p 50100:50100 -p 50105:50105 --hostname localhost  --privileged -e "container=docker"   --name  hadoopweifb   registry.cn-hangzhou.aliyuncs.com/mkmk/hadoop:weifb3 init  | docker exec  hadoopweifb /bin/bash -c ' /starthadoop.sh  '

linux 下启动hadoop命令

(docker run -tdi   -p 9000:9000 -p 9864:9864  -p 9870:9870  --hostname localhost  --privileged -e "container=docker"   --name  hadoopweifb   registry.cn-hangzhou.aliyuncs.com/mkmk/hadoop:weifb3 init ) && (docker exec -d hadoopweifb /bin/bash -c '  /starthadoop.sh ')

想要观察启动过程可以 删除掉 docker exec -d 的 -d 参数

然后就可以访问 ip:12345 端口 使用hadoop了

java 链接容器并操作

常见报错1

报错There are 1 datanode(s) running and 1 node(s) are excluded in t
端口没有打开完,

dfs.namenode.secondary.http-address	0.0.0.0:9868	The secondary namenode http server address and port.
dfs.namenode.secondary.https-address	0.0.0.0:9869	The secondary namenode HTTPS server address and port.
dfs.datanode.address	0.0.0.0:9866	The datanode server address and port for data transfer.
dfs.datanode.http.address	0.0.0.0:9864	The datanode http server address and port.
dfs.datanode.ipc.address	0.0.0.0:9867	The datanode ipc server address and port.

把这些端口全部打开

写入中文有乱码

如果使用
FSDataOutputStream  对象的 writebetys() 会出现中文乱码
请更换为 write(str对象.getBytes());
org.apache.hadoop.fs.FSDataOutputStream a = fileSystem.create(filepath1);
fileSystem.setReplication(filepath1, (short) 1);
a.write(inner.getBytes());

备份数不足

fileSystem.setReplication(filepath1, (short) 1);
设置文件备份数为 1

python 链接容器并操作

这里注意 python 链接 hdfs 使用的是 9870 hadoop3 namenode http 端口

import pyhdfs
fs_conn=pyhdfs.HdfsClient(hosts="localhost:9870",user_name="hadoop")
fs_conn.listdir('/')
#fs_conn 是一个 <pyhdfs.HdfsClient at 0x203d1d787b8>
#输出:【】

以下是构建过程

不想自己构建的,直接拖拽使用就好了

遇到的一个环境变量bug解决

从外部直接启动docker 容器遇到以下问题, 容器内 ssh 服务未启动

Last login:34 17:34:31 CST 2020 on pts/6
Starting datanodes
localhost: ssh: connect to host localhost port 22: Connection refused

尝试启动ssh服务,又得到了另一个错误

Failed to get D-Bus connection: No such file or directory

解决方法
为docker 添加参数 --privileged -e “container=docker”

(docker run -tdi  -p 22345:12345  --privileged -e "container=docker"   --name  hadoopweifb10   registry.cn-hangzhou.aliyuncs.com/mkmk/hadoop:weifb3 init ) && (docker exec  hadoopweifb10 /bin/bash -c '  systemctl start sshd.service && source /etc/profile && nohup start-all.sh & ')

D-BUS为了两个特定情况而设计:
同一个桌面会话中两个桌面应用程序的通信,可使得桌面会话作为整体集成在一起以解决进程生命周期的相关问题。 桌面会话和操作系统的通信,这里操作系统一般而言包括内核和系统守护进程。
退出docker后
$ docker run --privileged -ti -e “container=docker” centos7-base /usr/sbin/init

构建容器

拖取 centos:ssh镜像

docker run -tdi  -P  --privileged=true    --name  hadoopweifb   registry.cn-hangzhou.aliyuncs.com/mkmk/centos:ssh init

进入容器检查配置

 docker exec -it hadoopweifb /bin/bash

检查字体

locale
字体正常
LC_ALL=zh_CN.UTF-8

查看ssh服务有没有运行,

ps -ef | grep ssh
如果有,可以看到类似以下内容:
root       142     1  0 16:06 ?        00:00:00 /usr/sbin/sshd -D
root       199   142  0 16:09 ?        00:00:00 sshd: root@pts/1,pts/2
root       215   199  0 16:09 ?        00:00:00 /usr/libexec/openssh/sftp-server
root      1122   765  0 16:12 pts/3    00:00:00 grep --color=auto ssh

检查时间

[root@abd518ea708e /]# date
20200304日 星期三 16:12:56 CST

一切正常

更新一下镜像源

CentOS7更换镜像源

#先安装wget
yum install -y wget

#下载CentOS 7的repo文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#进行更新镜像源

#清除缓存
yum clean all
#生成缓存
yum makecache
#最后执行命令
yum -y update
yum -y upgrade

配置java 环境

yum -y install java-devel
安装完成输出
java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin 

生成ssh密钥

 ssh-keygen -t rsa
 成功生成密匙
 Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

直接重新配置本地免密登录

如果找不到 chattr 命令

yum install e2fsprogs
touch /root/.ssh/authorized_keys

bash ssh not found

yum -y install openssh-clients
(chattr -i /root/.ssh/authorized_keys) && (rm -rf /root/.ssh) && (mkdir /root/.ssh) && (ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa) && (cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys) && (chmod 700 ~/.ssh) && (chmod 644 ~/.ssh/authorized_keys) && (ssh localhost -o StrictHostKeyChecking=no)

检测本地免密登陆是否成功

ssh localhost
Last login: Wed Mar  4 16:44:05 2020 from localhost

搭建伪分布式环境

修改容器主机名称为localhost,这是一个大坑!!

hadoop 所有搭建工作完成以后,但是无法创建文件

在这里插入图片描述
在这里插入图片描述
解决办法一

在每次启动容器的时候指定IP、hostname、往/etc/hosts里添加hosts,命令如下:

docker run -itd --name hadoop0 --hostname hadoop0 --net network_my --ip 192.168.10.30 --add-host hadoop1:192.168.10.31 --add-host hadoop2:192.168.10.32  -d -P -p 50070:50070 -p 8088:8088 hadoop:master

解决办法而

hostnamectl set-hostname localhost

vi sbin/vi start-dfs.sh vi stop-dfs.sh
vi start-yarn.sh vi stop-yarn.sh

HDFS_DATANODE_SECURE_USER=hdfs

HDFS_DATANODE_SECURE_USER=yarn

搭建命令

docker run -tdi  -P  --privileged=true    --name  hadoopweifb   registry.cn-hangzhou.aliyuncs.com/mkmk/centos:bendimianmi init

修改主要配置文件

cd /cloudcomput/hadoop-3.2.1/etc/hadoop
/cloudcomput/hadoop-3.2.1/etc/hadoop/core-site.xml
/cloudcomput/hadoop-3.2.1/etc/hadoop/mapred-site.xml
/cloudcomput/hadoop-3.2.1/etc/hadoop/hdfs-site.xml
/cloudcomput/hadoop-3.2.1/etc/hadoop/yarn-site.xml

将本地hadoop cp到容器

docker cp C:/Users/73444/Desktop/linuxInstallationPackage/hadoop-3.2.1.tar.gz   hadoopweifb:/cloudcomput/hadoop-3.2.1.tar.gz 
cd /cloudcomput
tar -zxvf  hadoop-3.2.1.tar.gz 

修改

vim hadoop-env.sh
38行左右
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64

配置hadoop环境变量

vi   /etc/profile
export HADOOP_HOME=/cloudcomput/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存后生效配置

source /etc/profile

修改执行权限

在Hadoop安装目录下找到sbin文件夹

cd /cloudcomput/hadoop-3.2.1/sbin

1、对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:

vi /cloudcomput/hadoop-3.2.1/sbin/start-dfs.sh
vi /cloudcomput/hadoop-3.2.1/sbin/stop-dfs.sh
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

2、对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:

vi /cloudcomput/hadoop-3.2.1/sbin/start-yarn.sh
vi /cloudcomput/hadoop-3.2.1/sbin/stop-yarn.sh
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

重新开始start…就可以。

格式化namenode:

hadoop namenode -format 
第一次配置需要初始化
启动hadoop:
hadoop start-all.sh
发布了101 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43373608/article/details/104655797